From e64aa764568ef842bde7d36077ad40eb9a97c4b0 Mon Sep 17 00:00:00 2001 From: junleea <354425203@qq.com> Date: Tue, 29 Apr 2025 13:00:29 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0github=E7=AC=AC=E4=B8=89?= =?UTF-8?q?=E6=96=B9=E8=AF=B7=E6=B1=82=E6=95=B0=E6=8D=AE=E9=80=9A=E8=BF=87?= =?UTF-8?q?=E5=9B=BD=E5=A4=96=E4=B8=AD=E7=BB=A7=E8=AF=B7=E6=B1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- proto/tool.go | 6 +++ worker/thirdParty.go | 87 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 93 insertions(+) diff --git a/proto/tool.go b/proto/tool.go index fe17d45..dcd8ca1 100644 --- a/proto/tool.go +++ b/proto/tool.go @@ -162,3 +162,9 @@ type OutlineServerResp struct { Request OnlineServerReq `json:"request" form:"request"` // 请求 Response OnlineServerRespData `json:"response" form:"response"` // 响应 } + +type OutlineServerReqResp struct { + Code int `json:"code"` // 响应码 + Message string `json:"message"` // 响应信息 + Data OutlineServerResp `json:"data"` // 响应数据 +} diff --git a/worker/thirdParty.go b/worker/thirdParty.go index ae8d78d..78f2f2e 100644 --- a/worker/thirdParty.go +++ b/worker/thirdParty.go @@ -101,6 +101,57 @@ func ExchangeCodeForAccessToken(clientID, clientSecret, code, redirectURI string return response, nil } +func ExchangeCodeForAccessTokenGithub(clientID, clientSecret, code, redirectURI string) (proto.GitHubOAuthResponse, error) { + request := proto.GitHubOAuthRequest{ + ClientID: clientID, + ClientSecret: clientSecret, + Code: code, + RedirectURI: redirectURI, + } + var githubOAuthResponse proto.GitHubOAuthResponse + + var onlineReq proto.OnlineServerReq + onlineReq.Type = "post" + onlineReq.Url = "https://github.com/login/oauth/access_token" + onlineReq.Data = request + + header := make([]proto.OutlineServerReqData, 0) + header = append(header, proto.OutlineServerReqData{ + Key: "Content-Type", + Value: "application/json", + }) + header = append(header, proto.OutlineServerReqData{ + Key: "Accept", + Value: "application/json", + }) + superTokens := GetRedisSetMembers("super_permission_tokens") + header = append(header, proto.OutlineServerReqData{ + Key: "token", + Value: superTokens[0], + }) + onlineReq.Header = header + onlineReqBytes, _ := json.Marshal(onlineReq) + headers := map[string]string{ + "token": superTokens[0], + "super_id": "1", + } + + err, respBytes := DoPostRequestJSON("https://vis.ljsea.top/tool/online_server_request?super_id=1", onlineReqBytes, headers) + if err != nil { + return githubOAuthResponse, err + } + var onlineResp proto.OutlineServerReqResp + err = json.Unmarshal(respBytes, &onlineResp) + if err != nil { + return githubOAuthResponse, err + } + err = json.Unmarshal([]byte(onlineResp.Data.Response.Response), &githubOAuthResponse) + if err != nil { + return githubOAuthResponse, err + } + return githubOAuthResponse, nil +} + // 获取用户信息 func GetGitHubUserInfo(accessToken string) (proto.GitHubUserInfo, error) { @@ -122,6 +173,42 @@ func GetGitHubUserInfo(accessToken string) (proto.GitHubUserInfo, error) { } return resp, err } +func GetGitHubUserInfoV2(accessToken string) (proto.GitHubUserInfo, error) { + url := "https://api.github.com/user" + var onlineReq proto.OnlineServerReq + onlineReq.Type = "get" + onlineReq.Url = url + + header := make([]proto.OutlineServerReqData, 0) + header = append(header, proto.OutlineServerReqData{ + Key: "Authorization", + Value: "Bearer " + accessToken, + }) + onlineReq.Header = header + superTokens := GetRedisSetMembers("super_permission_tokens") + onlineReqBytes, _ := json.Marshal(onlineReq) + headers := map[string]string{ + "token": superTokens[0], + "super_id": "1", + } + + err, respBytes := DoPostRequestJSON("https://vis.ljsea.top/tool/online_server_request?super_id=1", onlineReqBytes, headers) + var onlineResp proto.OutlineServerReqResp + var resp proto.GitHubUserInfo + err = json.Unmarshal(respBytes, &onlineResp) + if err != nil { + return resp, err + } + err = json.Unmarshal([]byte(onlineResp.Data.Response.Response), &resp) + //err, data := DoGetRequest(url, headers) + if err != nil { + return resp, err + } + if resp.UserID == 0 { + return resp, errors.New("获取用户信息失败,请检查access_token是否正确") + } + return resp, err +} // 谷歌登录授权 const (