summaryrefslogtreecommitdiff
path: root/pkg/oidc/id_token.go
diff options
context:
space:
mode:
authormo khan <mo@mokhan.ca>2025-04-14 15:53:32 -0600
committermo khan <mo@mokhan.ca>2025-04-14 15:53:32 -0600
commitb12eb55fdb603290e3bc62880f6e9dff538571de (patch)
treea9cfde922e251391f0618f9837d7b63a94156664 /pkg/oidc/id_token.go
parentbb577738ac0359f8c8da0902b5c18af789ddf29d (diff)
feat: connect the sessions controller to oidc provider
Diffstat (limited to 'pkg/oidc/id_token.go')
-rw-r--r--pkg/oidc/id_token.go39
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
+}