MCPcopy Index your code
hub / github.com/aiprodcoder/MIXAPI / getOidcUserInfoByCode

Function getOidcUserInfoByCode

controller/oidc.go:38–102  ·  view source on GitHub ↗
(code string)

Source from the content-addressed store, hash-verified

36}
37
38func getOidcUserInfoByCode(code string) (*OidcUser, error) {
39 if code == "" {
40 return nil, errors.New("无效的参数")
41 }
42
43 values := url.Values{}
44 values.Set("client_id", system_setting.GetOIDCSettings().ClientId)
45 values.Set("client_secret", system_setting.GetOIDCSettings().ClientSecret)
46 values.Set("code", code)
47 values.Set("grant_type", "authorization_code")
48 values.Set("redirect_uri", fmt.Sprintf("%s/oauth/oidc", setting.ServerAddress))
49 formData := values.Encode()
50 req, err := http.NewRequest("POST", system_setting.GetOIDCSettings().TokenEndpoint, strings.NewReader(formData))
51 if err != nil {
52 return nil, err
53 }
54 req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
55 req.Header.Set("Accept", "application/json")
56 client := http.Client{
57 Timeout: 5 * time.Second,
58 }
59 res, err := client.Do(req)
60 if err != nil {
61 common.SysLog(err.Error())
62 return nil, errors.New("无法连接至 OIDC 服务器,请稍后重试!")
63 }
64 defer res.Body.Close()
65 var oidcResponse OidcResponse
66 err = json.NewDecoder(res.Body).Decode(&oidcResponse)
67 if err != nil {
68 return nil, err
69 }
70
71 if oidcResponse.AccessToken == "" {
72 common.SysError("OIDC 获取 Token 失败,请检查设置!")
73 return nil, errors.New("OIDC 获取 Token 失败,请检查设置!")
74 }
75
76 req, err = http.NewRequest("GET", system_setting.GetOIDCSettings().UserInfoEndpoint, nil)
77 if err != nil {
78 return nil, err
79 }
80 req.Header.Set("Authorization", "Bearer "+oidcResponse.AccessToken)
81 res2, err := client.Do(req)
82 if err != nil {
83 common.SysLog(err.Error())
84 return nil, errors.New("无法连接至 OIDC 服务器,请稍后重试!")
85 }
86 defer res2.Body.Close()
87 if res2.StatusCode != http.StatusOK {
88 common.SysError("OIDC 获取用户信息失败!请检查设置!")
89 return nil, errors.New("OIDC 获取用户信息失败!请检查设置!")
90 }
91
92 var oidcUser OidcUser
93 err = json.NewDecoder(res2.Body).Decode(&oidcUser)
94 if err != nil {
95 return nil, err

Callers 2

OidcAuthFunction · 0.85
OidcBindFunction · 0.85

Calls 4

GetOIDCSettingsFunction · 0.92
SysLogFunction · 0.92
SysErrorFunction · 0.92
ErrorMethod · 0.80

Tested by

no test coverage detected