1package provider
2
3import (
4 "database/sql/driver"
5 "encoding/json"
6 "fmt"
7 "time"
8
9 "gorm.io/gorm"
10)
11
12type ClientAuth struct {
13 Method string
14 Alg string
15 Kid string
16 Jkt string
17 Jti string
18 Exp *float64
19}
20
21func (ca *ClientAuth) Scan(value any) error {
22 b, ok := value.([]byte)
23 if !ok {
24 return fmt.Errorf("failed to unmarshal OauthParRequest value")
25 }
26 return json.Unmarshal(b, ca)
27}
28
29func (ca ClientAuth) Value() (driver.Value, error) {
30 return json.Marshal(ca)
31}
32
33type ParRequest struct {
34 AuthenticateClientRequestBase
35 ResponseType string `form:"response_type" json:"response_type" query:"response_type" validate:"required"`
36 CodeChallenge *string `form:"code_challenge" json:"code_challenge" query:"code_challenge" validate:"required"`
37 CodeChallengeMethod string `form:"code_challenge_method" json:"code_challenge_method" query:"code_challenge_method" validate:"required"`
38 State string `form:"state" json:"state" query:"state" validate:"required"`
39 RedirectURI string `form:"redirect_uri" json:"redirect_uri" query:"redirect_uri" validate:"required"`
40 Scope string `form:"scope" json:"scope" query:"scope" validate:"required"`
41 LoginHint *string `form:"login_hint" query:"login_hint" json:"login_hint,omitempty"`
42 DpopJkt *string `form:"dpop_jkt" query:"dpop_jkt" json:"dpop_jkt,omitempty"`
43 ResponseMode *string `form:"response_mode" json:"response_mode,omitempty" query:"response_mode"`
44}
45
46func (opr *ParRequest) Scan(value any) error {
47 b, ok := value.([]byte)
48 if !ok {
49 return fmt.Errorf("failed to unmarshal OauthParRequest value")
50 }
51 return json.Unmarshal(b, opr)
52}
53
54func (opr ParRequest) Value() (driver.Value, error) {
55 return json.Marshal(opr)
56}
57
58type OauthToken struct {
59 gorm.Model
60 ClientId string `gorm:"index"`
61 ClientAuth ClientAuth `gorm:"type:json"`
62 Parameters ParRequest `gorm:"type:json"`
63 ExpiresAt time.Time `gorm:"index"`
64 DeviceId string
65 Sub string `gorm:"index"`
66 Code string `gorm:"index"`
67 Token string `gorm:"uniqueIndex"`
68 RefreshToken string `gorm:"uniqueIndex"`
69 Ip string
70}
71
72type OauthAuthorizationRequest struct {
73 gorm.Model
74 RequestId string `gorm:"primaryKey"`
75 ClientId string `gorm:"index"`
76 ClientAuth ClientAuth `gorm:"type:json"`
77 Parameters ParRequest `gorm:"type:json"`
78 ExpiresAt time.Time `gorm:"index"`
79 DeviceId *string
80 Sub *string
81 Code *string
82 Accepted *bool
83 Ip string
84}