summaryrefslogtreecommitdiff
path: root/pkg/authz/id_token.go
blob: ccc96de7cd2bec330fe996c59f9b54b4fe603f5e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package authz

import (
	"encoding/base64"
	"encoding/json"
	"errors"
	"strings"
	"time"
)

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")
	}
	bytes, err := base64.RawURLEncoding.DecodeString(sections[1])
	if err != nil {
		return nil, err
	}

	token := &IDToken{}
	if err := json.Unmarshal(bytes, token); err != nil {
		return nil, err
	}
	return token, nil
}