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

Function getGitHubUserInfoByCode

controller/github.go:30–79  ·  view source on GitHub ↗
(code string)

Source from the content-addressed store, hash-verified

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

Callers 2

GitHubOAuthFunction · 0.85
GitHubBindFunction · 0.85

Calls 2

SysLogFunction · 0.92
ErrorMethod · 0.80

Tested by

no test coverage detected