in connector-basic/basic.go [123:186]
func (g *Connector) ConnectorReceiver(ctx *plugin.GinContext, receiverURL string) (userInfo plugin.ExternalLoginUserInfo, err error) {
code := ctx.Query("code")
// Exchange code for token
oauth2Config := &oauth2.Config{
ClientID: g.Config.ClientID,
ClientSecret: g.Config.ClientSecret,
Endpoint: oauth2.Endpoint{
AuthURL: g.Config.AuthorizeUrl,
TokenURL: g.Config.TokenUrl,
AuthStyle: oauth2.AuthStyleAutoDetect,
},
RedirectURL: receiverURL,
}
token, err := oauth2Config.Exchange(context.Background(), code)
if err != nil {
return userInfo, fmt.Errorf("code exchange failed: %s", err.Error())
}
// Exchange token for user info
client := oauth2.NewClient(context.Background(), oauth2.StaticTokenSource(
&oauth2.Token{AccessToken: token.AccessToken},
))
client.Timeout = 15 * time.Second
response, err := client.Get(g.Config.UserJsonUrl)
if err != nil {
return userInfo, fmt.Errorf("failed getting user info: %s", err.Error())
}
defer response.Body.Close()
data, _ := io.ReadAll(response.Body)
userInfo = plugin.ExternalLoginUserInfo{
MetaInfo: string(data),
}
if len(g.Config.UserIDJsonPath) > 0 {
userInfo.ExternalID = gjson.GetBytes(data, g.Config.UserIDJsonPath).String()
}
if len(userInfo.ExternalID) == 0 {
log.Errorf("fail to get user id from json path: %s", g.Config.UserIDJsonPath)
return userInfo, nil
}
if len(g.Config.UserDisplayNameJsonPath) > 0 {
userInfo.DisplayName = gjson.GetBytes(data, g.Config.UserDisplayNameJsonPath).String()
}
if len(g.Config.UserUsernameJsonPath) > 0 {
userInfo.Username = gjson.GetBytes(data, g.Config.UserUsernameJsonPath).String()
}
if len(g.Config.UserEmailJsonPath) > 0 {
userInfo.Email = gjson.GetBytes(data, g.Config.UserEmailJsonPath).String()
}
if g.Config.CheckEmailVerified && len(g.Config.EmailVerifiedJsonPath) > 0 {
emailVerified := gjson.GetBytes(data, g.Config.EmailVerifiedJsonPath).Bool()
if !emailVerified {
userInfo.Email = ""
}
}
if len(g.Config.UserAvatarJsonPath) > 0 {
userInfo.Avatar = gjson.GetBytes(data, g.Config.UserAvatarJsonPath).String()
}
userInfo = g.formatUserInfo(userInfo)
return userInfo, nil
}