MCPcopy
hub / github.com/songquanpeng/one-api / getGitHubUserInfoByCode

Function getGitHubUserInfoByCode

controller/auth/github.go:32–81  ·  view source on GitHub ↗
(code string)

Source from the content-addressed store, hash-verified

30}
31
32func getGitHubUserInfoByCode(code string) (*GitHubUser, error) {
33 if code == "" {
34 return nil, errors.New("无效的参数")
35 }
36 values := map[string]string{"client_id": config.GitHubClientId, "client_secret": config.GitHubClientSecret, "code": code}
37 jsonData, err := json.Marshal(values)
38 if err != nil {
39 return nil, err
40 }
41 req, err := http.NewRequest("POST", "https://github.com/login/oauth/access_token", bytes.NewBuffer(jsonData))
42 if err != nil {
43 return nil, err
44 }
45 req.Header.Set("Content-Type", "application/json")
46 req.Header.Set("Accept", "application/json")
47 client := http.Client{
48 Timeout: 5 * time.Second,
49 }
50 res, err := client.Do(req)
51 if err != nil {
52 logger.SysLog(err.Error())
53 return nil, errors.New("无法连接至 GitHub 服务器,请稍后重试!")
54 }
55 defer res.Body.Close()
56 var oAuthResponse GitHubOAuthResponse
57 err = json.NewDecoder(res.Body).Decode(&oAuthResponse)
58 if err != nil {
59 return nil, err
60 }
61 req, err = http.NewRequest("GET", "https://api.github.com/user", nil)
62 if err != nil {
63 return nil, err
64 }
65 req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", oAuthResponse.AccessToken))
66 res2, err := client.Do(req)
67 if err != nil {
68 logger.SysLog(err.Error())
69 return nil, errors.New("无法连接至 GitHub 服务器,请稍后重试!")
70 }
71 defer res2.Body.Close()
72 var githubUser GitHubUser
73 err = json.NewDecoder(res2.Body).Decode(&githubUser)
74 if err != nil {
75 return nil, err
76 }
77 if githubUser.Login == "" {
78 return nil, errors.New("返回值非法,用户字段为空,请稍后重试!")
79 }
80 return &githubUser, nil
81}
82
83func GitHubOAuth(c *gin.Context) {
84 session := sessions.Default(c)

Callers 2

GitHubOAuthFunction · 0.85
GitHubBindFunction · 0.85

Calls 1

SysLogFunction · 0.92

Tested by

no test coverage detected