diff options
| author | mo khan <mo@mokhan.ca> | 2025-04-14 15:53:32 -0600 |
|---|---|---|
| committer | mo khan <mo@mokhan.ca> | 2025-04-14 15:53:32 -0600 |
| commit | b12eb55fdb603290e3bc62880f6e9dff538571de (patch) | |
| tree | a9cfde922e251391f0618f9837d7b63a94156664 /pkg/oidc/id_token.go | |
| parent | bb577738ac0359f8c8da0902b5c18af789ddf29d (diff) | |
feat: connect the sessions controller to oidc provider
Diffstat (limited to 'pkg/oidc/id_token.go')
| -rw-r--r-- | pkg/oidc/id_token.go | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/pkg/oidc/id_token.go b/pkg/oidc/id_token.go new file mode 100644 index 0000000..5fc1e63 --- /dev/null +++ b/pkg/oidc/id_token.go @@ -0,0 +1,39 @@ +package oidc + +import ( + "bytes" + "encoding/base64" + "errors" + "strings" + "time" + + "github.com/xlgmokha/x/pkg/serde" +) + +type IDToken struct { + Audience string `json:"aud"` + Email string `json:"email"` + EmailVerified bool `json:"email_verified"` + ExpiredAt int64 `json:"exp"` + IssuedAt int64 `json:"iat"` + Issuer string `json:"iss"` + Name string `json:"name"` + Nickname string `json:"nickname"` + Picture string `json:"picture"` + Subject string `json:"sub"` + UpdatedAt time.Time `json:"updated_at"` +} + +func NewIDToken(raw string) (*IDToken, error) { + sections := strings.SplitN(raw, ".", 3) + if len(sections) != 3 { + return nil, errors.New("Invalid token") + } + b, err := base64.RawURLEncoding.DecodeString(sections[1]) + if err != nil { + return nil, err + } + + token, err := serde.FromJSON[*IDToken](bytes.NewReader(b)) + return token, err +} |
