/
gcloud.go
44 lines (36 loc) · 989 Bytes
/
gcloud.go
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
41
42
43
44
package main
import (
"context"
)
type gcloudTokenSource struct {
cfg *gcloudConfig
}
type gcloudConfig struct {
Credential struct {
AccessToken string `json:"access_token"`
IdToken string `json:"id_token"`
} `json:"credential"`
Configuration struct {
Properties struct {
Core struct {
Account string `json:"account"`
} `json:"core"`
} `json:"properties"`
} `json:"configuration"`
}
func GcloudTokenSource(account string) (TokenSource, error) {
cfg, err := fetchGcloudConfig(account)
if err != nil {
return nil, err
}
return &gcloudTokenSource{cfg}, nil
}
func (gts *gcloudTokenSource) Email() (string, error) {
return gts.cfg.Configuration.Properties.Core.Account, nil
}
func (gts *gcloudTokenSource) AccessTokenWithoutScopes(ctx context.Context) (string, error) {
return gts.cfg.Credential.AccessToken, nil
}
func (gts *gcloudTokenSource) IDTokenWithoutAudience(ctx context.Context) (string, error) {
return gts.cfg.Credential.IdToken, nil
}