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

Function getLarkUserInfoByCode

controller/auth/lark.go:28–79  ·  view source on GitHub ↗
(code string)

Source from the content-addressed store, hash-verified

26}
27
28func getLarkUserInfoByCode(code string) (*LarkUser, error) {
29 if code == "" {
30 return nil, errors.New("无效的参数")
31 }
32 values := map[string]string{
33 "client_id": config.LarkClientId,
34 "client_secret": config.LarkClientSecret,
35 "code": code,
36 "grant_type": "authorization_code",
37 "redirect_uri": fmt.Sprintf("%s/oauth/lark", config.ServerAddress),
38 }
39 jsonData, err := json.Marshal(values)
40 if err != nil {
41 return nil, err
42 }
43 req, err := http.NewRequest("POST", "https://open.feishu.cn/open-apis/authen/v2/oauth/token", bytes.NewBuffer(jsonData))
44 if err != nil {
45 return nil, err
46 }
47 req.Header.Set("Content-Type", "application/json")
48 req.Header.Set("Accept", "application/json")
49 client := http.Client{
50 Timeout: 5 * time.Second,
51 }
52 res, err := client.Do(req)
53 if err != nil {
54 logger.SysLog(err.Error())
55 return nil, errors.New("无法连接至飞书服务器,请稍后重试!")
56 }
57 defer res.Body.Close()
58 var oAuthResponse LarkOAuthResponse
59 err = json.NewDecoder(res.Body).Decode(&oAuthResponse)
60 if err != nil {
61 return nil, err
62 }
63 req, err = http.NewRequest("GET", "https://passport.feishu.cn/suite/passport/oauth/userinfo", nil)
64 if err != nil {
65 return nil, err
66 }
67 req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", oAuthResponse.AccessToken))
68 res2, err := client.Do(req)
69 if err != nil {
70 logger.SysLog(err.Error())
71 return nil, errors.New("无法连接至飞书服务器,请稍后重试!")
72 }
73 var larkUser LarkUser
74 err = json.NewDecoder(res2.Body).Decode(&larkUser)
75 if err != nil {
76 return nil, err
77 }
78 return &larkUser, nil
79}
80
81func LarkOAuth(c *gin.Context) {
82 session := sessions.Default(c)

Callers 2

LarkOAuthFunction · 0.85
LarkBindFunction · 0.85

Calls 1

SysLogFunction · 0.92

Tested by

no test coverage detected