添加github第三方请求数据通过国外中继请求

This commit is contained in:
junleea 2025-04-29 13:00:29 +08:00
parent fef039ef8d
commit e64aa76456
2 changed files with 93 additions and 0 deletions

View File

@ -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"` // 响应数据
}

View File

@ -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 (