MCPcopy Create free account
hub / github.com/OpenListTeam/OpenList / Token

Method Token

drivers/febbox/oauth2.go:22–80  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

20}
21
22func (c *customTokenSource) Token() (*oauth2.Token, error) {
23 v := url.Values{}
24 if c.refreshToken != "" {
25 v.Set("grant_type", "refresh_token")
26 v.Set("refresh_token", c.refreshToken)
27 } else {
28 v.Set("grant_type", "client_credentials")
29 }
30
31 v.Set("client_id", c.config.ClientID)
32 v.Set("client_secret", c.config.ClientSecret)
33
34 req, err := http.NewRequestWithContext(c.ctx, http.MethodPost, c.config.TokenURL, strings.NewReader(v.Encode()))
35 if err != nil {
36 return nil, err
37 }
38 req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
39
40 resp, err := http.DefaultClient.Do(req)
41 if err != nil {
42 return nil, err
43 }
44 defer resp.Body.Close()
45
46 if resp.StatusCode != http.StatusOK {
47 return nil, errors.New("oauth2: cannot fetch token")
48 }
49
50 var tokenResp struct {
51 Code int `json:"code"`
52 Msg string `json:"msg"`
53 Data struct {
54 AccessToken string `json:"access_token"`
55 ExpiresIn int64 `json:"expires_in"`
56 TokenType string `json:"token_type"`
57 Scope string `json:"scope"`
58 RefreshToken string `json:"refresh_token"`
59 } `json:"data"`
60 }
61
62 if err := json.NewDecoder(resp.Body).Decode(&tokenResp); err != nil {
63 return nil, err
64 }
65
66 if tokenResp.Code != 1 {
67 return nil, errors.New("oauth2: server response error")
68 }
69
70 c.refreshToken = tokenResp.Data.RefreshToken
71
72 token := &oauth2.Token{
73 AccessToken: tokenResp.Data.AccessToken,
74 TokenType: tokenResp.Data.TokenType,
75 RefreshToken: tokenResp.Data.RefreshToken,
76 Expiry: time.Now().Add(time.Duration(tokenResp.Data.ExpiresIn) * time.Second),
77 }
78
79 return token, nil

Callers 3

InitMethod · 0.45
refreshTokenByOAuth2Method · 0.45
requestMethod · 0.45

Calls 7

DecodeMethod · 0.80
DoMethod · 0.65
CloseMethod · 0.65
AddMethod · 0.65
NowMethod · 0.65
SetMethod · 0.45
EncodeMethod · 0.45

Tested by

no test coverage detected