package service import ( "context" "encoding/base64" "encoding/json" "errors" "fmt" "io" "net/http" "net/url" "shop-api/global" "shop-api/model" "shop-api/model/request" "shop-api/model/response" "shop-api/utils" "strconv" "strings" "time" "shop-api/initialize/api" uuid "github.com/satori/go.uuid" "golang.org/x/oauth2" "golang.org/x/oauth2/google" "golang.org/x/oauth2/instagram" ) func UserLogin(u *request.UserLogin) (err error, userInter *model.User) { var user model.User switch u.Type { case "1": resp, err := global.SMS_CLIENT.VerifyCode(context.Background(), &api.SmsCodeVerifyRequest{ Phone: u.Phone, Code: u.Code, }) if err != nil { return errors.New("验证码验证失败"), nil } if global.MG_CONFIG.System.Env != "prod" && u.Code == "888888" { } else if resp.Code != 0 { return errors.New("验证码验证失败"), nil } err = global.MG_DB.Where("phone = ? and appid=? and type=?", u.Phone, u.Appid, "customer").Find(&user).Error if err != nil { return errors.New("获取用户失败"), nil } case "2": code := RedisGet("email_code:" + u.Email) if global.MG_CONFIG.System.Env != "prod" && u.Code == "888888" { } else if code != u.Code { return errors.New("验证码验证失败"), nil } err = global.MG_DB.Where("email = ? and appid=? and type=?", u.Email, u.Appid, "customer").Find(&user).Error if err != nil { return errors.New("获取用户失败"), nil } } if user.UUID == uuid.Nil { //用户注册 user.UUID = uuid.NewV4() user.NickName = "独立站用户" user.Email = u.Email user.Phone = u.Phone user.Avatar = "https://minio.sumweal.com/nft/221109/C82M980ZLumQCzt857yxur92iAsGdCc7271sDn8MPf666sk44V.png" user.Appid = u.Appid user.Type = "customer" user.CountryCode = u.CountryCode user.Source = u.Source err = global.MG_DB.Model(&model.User{}).Create(&user).Error if err != nil { return errors.New("注册失败,请稍后再试"), nil } var wallet model.Wallet wallet.UserID = user.UUID.String() wallet.Platform = "influencer" global.MG_DB.Model(&model.Wallet{}).Create(&wallet) } return err, &user } func UserRegister(u *request.UserRegister) (err error, userInter *model.User) { var user model.User global.MG_DB.Where("email = ? and appid=? and type=?", u.Email, u.Appid, "customer").Find(&user) code := RedisGet("msg_code:" + u.Email) if global.MG_CONFIG.System.Env != "prod" && u.Code == "888888" { } else if code != u.Code { return errors.New("验证码验证失败"), nil } if user.UUID == uuid.Nil { //用户注册 user.UUID = uuid.NewV4() user.NickName = u.Nickname user.Email = u.Email user.Avatar = "https://minio.sumweal.com/nft/221109/C82M980ZLumQCzt857yxur92iAsGdCc7271sDn8MPf666sk44V.png" user.Appid = u.Appid user.Type = "customer" err = global.MG_DB.Model(&model.User{}).Create(&user).Error if err != nil { return errors.New("注册失败,请稍后再试"), nil } var wallet model.Wallet wallet.UserID = user.UUID.String() wallet.Platform = "customer" global.MG_DB.Model(&model.Wallet{}).Create(&wallet) } else { return errors.New("用户已存在"), nil } return err, &user } func UserBandPhone(u *request.UserBandPhone, userID string) (err error) { code := RedisGet("msg_code:" + u.Phone) if global.MG_CONFIG.System.Env != "prod" && u.Code == "888888" { } else if code != u.Code { return errors.New("验证码验证失败") } err = global.MG_DB.Model(&model.User{}).Where("uuid=?", userID).Update("phone", u.Phone).Error if err != nil { return errors.New("绑定失败") } return err } func UserPlatformAuth(u *request.UserPlatformAuth, userID string) (err error) { var ( platformJson string uMap = make(map[string]interface{}) ) for _, v := range u.Platform { if v.Url != "" { t := time.Now() v.CreatedAt = &t } } platformByte, err := json.Marshal(u.Platform) if err != nil { return errors.New("平台认证格式不正确") } platformJson = string(platformByte) uMap["platform"] = platformJson uMap["tags"] = u.Tags err = global.MG_DB.Model(&model.User{}).Where("uuid=?", userID).Updates(uMap).Error if err != nil { return errors.New("提交失败") } return nil } func GetProviderList(info *request.AppProvider) (providers []model.ProviderSimple, err error) { var ( application model.Application provider []model.Provider ) err = global.MG_DB.Where("appid=?", info.Appid).Find(&application).Error if err != nil { return providers, errors.New("获取应用失败") } if application.ID == 0 { return providers, errors.New("应用不存在") } err = json.Unmarshal([]byte(application.Provider), &provider) if err != nil { return providers, errors.New("获取应用失败") } for _, v := range provider { providers = append(providers, model.ProviderSimple{ Name: v.Code, Code: v.Code, }) } return } func UserAuthorized(u *request.UserAuthorized) (Iuser model.User, err error) { var ( aceessToken string userID string provider model.Provider user model.ProviderUser providerList model.ClentProvider application model.Application ) err = global.MG_DB.Where("appid=?", u.Appid).Find(&application).Error if err != nil { return Iuser, errors.New("获取应用失败") } if application.ID == 0 { return Iuser, errors.New("应用不存在") } err = json.Unmarshal([]byte(application.Provider), &providerList) if err != nil { return Iuser, errors.New("获取应用失败") } switch u.Client { case "android": for _, v := range providerList.Android { if v.Code == u.Platform { provider = v } } case "ios": for _, v := range providerList.Ios { if v.Code == u.Platform { provider = v } } default: for _, v := range providerList.Web { if v.Code == u.Platform { provider = v } } } if provider.Code == "" { return Iuser, errors.New("平台不存在") } if u.Uuid == "" { if u.Code != "" { //换取token err, aceessToken, userID = GetAccessToken(provider, u.Code) if err != nil { fmt.Println(err.Error()) return Iuser, errors.New("获取token失败") } } if u.Token != "" { aceessToken = u.Token } //换取用户信息 if provider.UserInfoURI != "" { err, user = GetUserInfo(provider, aceessToken, userID) if err != nil { return Iuser, errors.New("获取用户信息失败") } if user.Avatar == "" { user.Avatar = "https://minio.sumweal.com/nft/221109/C82M980ZLumQCzt857yxur92iAsGdCc7271sDn8MPf666sk44V.png" } } } if user.UserID == "" { return Iuser, errors.New("授权登录失败") } //查询用户是否存在 query := fmt.Sprintf("%s = ? AND appid = ? AND type = ?", provider.Code) global.MG_DB.Where(query, user.UserID, u.Appid, "influencer").Find(&Iuser) if Iuser.UUID == uuid.Nil { //注册 Iuser.UUID = uuid.NewV4() Iuser.NickName = user.NickName Iuser.Avatar = user.Avatar Iuser.Appid = u.Appid Iuser.Type = "influencer" switch provider.Code { case "tiktok": Iuser.Tiktok = user.UserID case "facebook": Iuser.Facebook = user.UserID case "twitter": Iuser.Twitter = user.UserID case "google": Iuser.Google = user.UserID case "youtube": Iuser.Youtube = user.UserID case "instagram": Iuser.Instagram = user.UserID case "ios": Iuser.Ios = user.UserID Iuser.NickName = "ios用户" Iuser.Avatar = "https://minio.sumweal.com/nft/221109/C82M980ZLumQCzt857yxur92iAsGdCc7271sDn8MPf666sk44V.png" } err = global.MG_DB.Model(&model.User{}).Create(&Iuser).Error if err != nil { return Iuser, errors.New("注册失败,请稍后再试") } //添加三方登录标识 var wallet model.Wallet wallet.UserID = Iuser.UUID.String() wallet.Platform = "influencer" global.MG_DB.Model(&model.Wallet{}).Create(&wallet) return Iuser, nil } return Iuser, nil } func GetAccessToken(provider model.Provider, Code string) (err error, aceessToken string, userID string) { //发送post请求 switch provider.Code { case "tiktok": aceessToken, err = GetTiktokAccessToken(provider.ClientID, provider.ClientSecret, Code, provider.RedirectURI) case "facebook": //facebook可以直接获取token 暂不提供 case "twitter": aceessToken, err = GetTwitterAccessToken(provider.ClientID, provider.ClientSecret, Code, provider.RedirectURI) case "google": var ( googleOauthConfig = &oauth2.Config{ RedirectURL: provider.RedirectURI, ClientID: provider.ClientID, ClientSecret: provider.ClientSecret, Scopes: []string{"https://www.googleapis.com/auth/userinfo.profile", "https://www.googleapis.com/auth/userinfo.email"}, Endpoint: google.Endpoint, } token *oauth2.Token ) token, err = googleOauthConfig.Exchange(context.Background(), Code) if err != nil { return err, aceessToken, "" } aceessToken = token.AccessToken case "youtube": var ( googleOauthConfig = &oauth2.Config{ RedirectURL: provider.RedirectURI, ClientID: provider.ClientID, ClientSecret: provider.ClientSecret, Scopes: []string{"https://www.googleapis.com/auth/userinfo.profile", "https://www.googleapis.com/auth/userinfo.email"}, Endpoint: google.Endpoint, } token *oauth2.Token ) fmt.Println(provider, Code) token, err = googleOauthConfig.Exchange(context.Background(), Code) if err != nil { return err, aceessToken, "" } aceessToken = token.AccessToken case "instagram": var ( instagramOauthConfig = &oauth2.Config{ RedirectURL: provider.RedirectURI, ClientID: provider.ClientID, ClientSecret: provider.ClientSecret, Scopes: []string{"user_profile"}, Endpoint: instagram.Endpoint, } ) token, err := instagramOauthConfig.Exchange(context.Background(), Code) fmt.Println(token) if err != nil { return err, aceessToken, "" } aceessToken = token.AccessToken userID = strconv.Itoa(int(token.Extra("user_id").(float64))) default: } return } func GetUserInfo(provider model.Provider, aceessToken, userID string) (err error, user model.ProviderUser) { switch provider.Code { case "tiktok": tuser, err := getUserInfo(aceessToken) if err != nil { fmt.Println("Error:", err) return err, user } user.UserID = tuser.OpenID user.NickName = tuser.DisplayName user.Avatar = tuser.AvatarURL return nil, user case "facebook": var userID string //校验token tokenCheckURI := provider.TokenCheckURI + "?input_token=" + aceessToken + "&access_token=" + getAccessToken(provider.ClientID, provider.ClientSecret) err, userID := DebugFacebookToken(aceessToken, tokenCheckURI) if err != nil { return errors.New("token校验失败"), user } //获取用户信息 userInfoURI := strings.Replace(provider.UserInfoURI, "USER-ID", userID, 1) userInfoURI = userInfoURI + "&access_token=" + getAccessToken(provider.ClientID, provider.ClientSecret) faceUser, err := getThirdPartyLoginUserBO(userInfoURI) if err != nil { return errors.New("获取用户信息失败"), user } user.UserID = userID user.NickName = faceUser.UserName user.Email = faceUser.Email user.Avatar = faceUser.Picture.Data.URL return nil, user case "instagram": resp, err1 := http.Get(provider.UserInfoURI + userID + fmt.Sprintf("?fields=%v&access_token=%v", "id,username", aceessToken)) if err1 != nil { fmt.Println("Failed to get user info: ", err.Error()) return } defer resp.Body.Close() content, err1 := io.ReadAll(resp.Body) if err1 != nil { fmt.Println("Failed to read response body: ", err1.Error()) return } fmt.Println("Response body: ", string(content)) var googleUser response.TripartiteInstagram err1 = json.Unmarshal(content, &googleUser) if err1 != nil { fmt.Println("Failed to read response body: ", err1.Error()) return } user.UserID = googleUser.ID user.NickName = googleUser.Username case "twitter": user, err = getTwitterUserInfo(provider, aceessToken) return err, user case "google": resp, err1 := http.Get("https://oauth2.googleapis.com/tokeninfo?id_token=" + aceessToken) if err1 != nil { fmt.Println("Failed to get user info: ", err.Error()) return } defer resp.Body.Close() content, err1 := io.ReadAll(resp.Body) if err1 != nil { fmt.Println("Failed to read response body: ", err1.Error()) return } var googleUser response.TripartiteGoogle err1 = json.Unmarshal(content, &googleUser) if err1 != nil { fmt.Println("Failed to read response body: ", err1.Error()) return } user.UserID = googleUser.Sub user.NickName = googleUser.Name // user.Email = googleUser.Email user.Avatar = googleUser.Picture fmt.Println("Response body: ", string(content)) case "youtube": resp, err1 := http.Get("https://www.googleapis.com/oauth2/v2/userinfo?access_token=" + aceessToken) fmt.Println("https://www.googleapis.com/oauth2/v2/userinfo?access_token=" + aceessToken) if err1 != nil { fmt.Println("Failed to get user info: ", err1.Error()) return } defer resp.Body.Close() content, err1 := io.ReadAll(resp.Body) if err1 != nil { fmt.Println("Failed to read response body: ", err1.Error()) return } var googleUser response.TripartiteGoogle err1 = json.Unmarshal(content, &googleUser) if err1 != nil { fmt.Println("Failed to read response body: ", err1.Error()) return } user.UserID = googleUser.ID user.NickName = googleUser.Name // user.Email = googleUser.Email user.Avatar = googleUser.Picture fmt.Println("Response body: ", string(content)) default: } return } func DebugFacebookToken(accessToken, url string) (err error, userID string) { // 构建请求 req, err := http.NewRequest("GET", url, nil) if err != nil { return err, "" } // 发送请求 client := http.Client{} resp, err := client.Do(req) if err != nil { return err, "" } defer resp.Body.Close() // 读取响应数据 body, err := io.ReadAll(resp.Body) if err != nil { return err, "" } // 解析响应数据 var result map[string]interface{} if err := json.Unmarshal(body, &result); err != nil { return err, "" } // 提取 access_token userID, ok := result["data"].(map[string]interface{})["user_id"].(string) if !ok { return errors.New("未能获取有效的user_id"), "" } return nil, userID } func GetTiktokAccessToken(clientKey, clientSecret, code, redirectURI string) (string, error) { // 构建请求体 data := url.Values{} data.Set("client_key", clientKey) data.Set("client_secret", clientSecret) data.Set("code", code) data.Set("grant_type", "authorization_code") data.Set("redirect_uri", redirectURI) // 构建请求 req, err := http.NewRequest("POST", "https://open.tiktokapis.com/v2/oauth/token", strings.NewReader(data.Encode())) if err != nil { return "", err } // 设置请求头 req.Header.Set("Content-Type", "application/x-www-form-urlencoded") // 发送请求 client := http.Client{} resp, err := client.Do(req) if err != nil { return "", err } defer resp.Body.Close() // 读取响应数据 body, err := io.ReadAll(resp.Body) if err != nil { return "", err } // 解析响应数据 var result map[string]interface{} if err := json.Unmarshal(body, &result); err != nil { return "", err } // 检查是否返回错误 if errorMsg, ok := result["error_description"].(string); ok { return "", fmt.Errorf("获取 access token 失败:%s", errorMsg) } // 提取 access_token accessToken, ok := result["access_token"].(string) if !ok { return "", fmt.Errorf("未能获取有效的 access token") } return accessToken, nil } func GetTwitterAccessToken(clientKey, clientSecret, code, redirectURI string) (string, error) { // 构建请求体 data := url.Values{} data.Set("code", code) data.Set("grant_type", "authorization_code") data.Set("client_id", clientKey) data.Set("redirect_uri", redirectURI) data.Set("code_verifier", "challenge") req, err := http.NewRequest("POST", "https://api.twitter.com/2/oauth2/token", strings.NewReader(data.Encode())) if err != nil { // handle error } fmt.Println(data.Encode()) // 设置请求头 req.Header.Set("Content-Type", "application/x-www-form-urlencoded") req.Header.Set("Authorization", "Basic "+base64.StdEncoding.EncodeToString([]byte(clientKey+":"+clientSecret))) // 发送请求 client := http.Client{} resp, err := client.Do(req) if err != nil { return "", err } defer resp.Body.Close() // 读取响应数据 body, err := io.ReadAll(resp.Body) if err != nil { return "", err } fmt.Println(string(body)) // 解析响应数据 var result map[string]interface{} if err := json.Unmarshal(body, &result); err != nil { return "", err } // 检查是否返回错误 if errorMsg, ok := result["error_description"].(string); ok { return "", fmt.Errorf("获取 access token 失败:%s", errorMsg) } // 提取 access_token accessToken, ok := result["access_token"].(string) if !ok { return "", fmt.Errorf("未能获取有效的 access token") } return accessToken, nil } func getThirdPartyLoginUserBO(url string) (model.FacebookUserInfo, error) { resp, err := http.Get(url) if err != nil { return model.FacebookUserInfo{}, err } defer resp.Body.Close() if resp.StatusCode < 200 || resp.StatusCode >= 300 { return model.FacebookUserInfo{}, fmt.Errorf("Facebook请求查询用户接口失败,响应为%d", resp.StatusCode) } body, err := io.ReadAll(resp.Body) if err != nil { return model.FacebookUserInfo{}, err } var userInfo model.FacebookUserInfo err = json.Unmarshal(body, &userInfo) if err != nil { return model.FacebookUserInfo{}, err } return userInfo, nil } func getAccessToken(clientId string, clientSecret string) string { return url.QueryEscape(clientId + "|" + clientSecret) } func UserAppeal(u *request.UserAppeal, userID string) (err error) { var appeal model.UserAppeal appeal.UserID = userID appeal.Respon = u.Respon appeal.Contact = u.Contact appeal.Images = u.Images appeal.Status = 0 err = global.MG_DB.Model(&model.UserAppeal{}).Create(&appeal).Error if err != nil { return errors.New("申诉失败") } return nil } func UserEmail(u *request.UserEmail, userID, appid string) (err error) { var ( user model.User ) code := RedisGet("email_code:" + u.Email) if global.MG_CONFIG.System.Env != "prod" && u.Code == "888888" { } else if code != u.Code { return errors.New("验证码验证失败") } err = global.MG_DB.Where("uuid=? and appid=?", userID, appid).Find(&user).Error if err != nil { return errors.New("获取用户失败") } if user.UUID == uuid.Nil { return errors.New("用户不存在") } if user.Email != "" { return errors.New("邮箱已绑定") } err = global.MG_DB.Model(&model.User{}).Where("uuid=? and appid=?", userID, appid).Update("email", u.Email).Error if err != nil { return errors.New("绑定失败") } return nil } func GetProviderAuthUrl(u *request.ProviderAuth) (err error, url string) { var ( provider model.Provider application model.Application providerList model.ClentProvider ) err = global.MG_DB.Where("appid=?", u.Appid).Find(&application).Error if err != nil { return errors.New("获取应用失败"), "" } if application.ID == 0 { return errors.New("应用不存在"), "" } err = json.Unmarshal([]byte(application.Provider), &providerList) if err != nil { return errors.New("获取应用失败"), "" } switch u.Client { case "android": for _, v := range providerList.Android { if v.Code == u.Platform { provider = v } } case "ios": for _, v := range providerList.Ios { if v.Code == u.Platform { provider = v } } default: for _, v := range providerList.Web { if v.Code == u.Platform { provider = v } } } if provider.Code == "" { return errors.New("平台不存在"), "" } switch provider.Code { case "tiktok": url = strings.Replace(provider.AuthURI, "", provider.ClientID, 1) url = strings.Replace(url, "", provider.Scope, 1) url = strings.Replace(url, "", provider.RedirectURI, 1) url = strings.Replace(url, "", "tiktok", 1) case "facebook": url = strings.Replace(provider.AuthURI, "{app-id}", provider.ClientID, 1) url = strings.Replace(url, "{redirect-uri}", provider.RedirectURI, 1) url = strings.Replace(url, "{state-param}", "facebook", 1) case "instagram": var ( instagramOauthConfig = &oauth2.Config{ RedirectURL: provider.RedirectURI, ClientID: provider.ClientID, ClientSecret: provider.ClientSecret, Scopes: []string{"user_profile"}, Endpoint: instagram.Endpoint, } ) url = instagramOauthConfig.AuthCodeURL("instagram") case "twitter": url = strings.Replace(provider.AuthURI, "", provider.ClientID, 1) url = strings.Replace(url, "", provider.Scope, 1) url = strings.Replace(url, "", provider.RedirectURI, 1) url = strings.Replace(url, "", "twitter", 1) url = strings.Replace(url, "", "challenge", 1) url = strings.Replace(url, "", "plain", 1) case "youtube": var ( googleOauthConfig = &oauth2.Config{ RedirectURL: provider.RedirectURI, ClientID: provider.ClientID, ClientSecret: provider.ClientSecret, Scopes: []string{"https://www.googleapis.com/auth/userinfo.profile", "https://www.googleapis.com/auth/userinfo.email"}, Endpoint: google.Endpoint, } ) url = googleOauthConfig.AuthCodeURL("youtube") case "google": var ( googleOauthConfig = &oauth2.Config{ RedirectURL: provider.RedirectURI, ClientID: provider.ClientID, ClientSecret: provider.ClientSecret, Scopes: []string{"https://www.googleapis.com/auth/userinfo.profile", "https://www.googleapis.com/auth/userinfo.email"}, Endpoint: google.Endpoint, } ) url = googleOauthConfig.AuthCodeURL("google") default: } fmt.Println(url) return nil, url } func getUserInfo(token string) (*model.TiktokUser, error) { url := "https://open.tiktokapis.com/v2/user/info/?fields=open_id,union_id,avatar_url,display_name" req, err := http.NewRequest("GET", url, nil) if err != nil { return nil, err } req.Header.Add("Authorization", "Bearer "+token) res, err := http.DefaultClient.Do(req) if err != nil { return nil, err } defer res.Body.Close() body, err := io.ReadAll(res.Body) if err != nil { return nil, err } var response response.TiktokResponse err = json.Unmarshal(body, &response) if err != nil { return nil, err } if response.Error.Code != "ok" { return nil, fmt.Errorf("API error: %s", response.Error.Message) } return &response.Data.User, nil } func getTwitterUserInfo(provider model.Provider, aceessToken string) (model.ProviderUser, error) { var result response.TripartiteTwitter var user model.ProviderUser req, err := http.NewRequest("GET", provider.UserInfoURI, nil) if err != nil { // handle error return user, err } req.Header.Add("Authorization", "Bearer "+aceessToken) client := &http.Client{} resp, err := client.Do(req) if err != nil { // handle error return user, err } defer resp.Body.Close() body, err := io.ReadAll(resp.Body) if err != nil { // handle error return user, err } fmt.Println("------twitter", string(body)) err = json.Unmarshal(body, &result) if err != nil { // handle error fmt.Println("------twitter", err) return user, err } user.UserID = result.Data.ID user.NickName = result.Data.Name return user, err } func getUser(uuid string) (model.User, error) { var ( err error result model.User ) err = global.MG_DB.Model(&model.User{}).Where("uuid = ?", uuid).First(&result).Error return result, err } func AppProviderInit() { var ( clients model.ClentProvider providers []model.Provider ) providers = append(providers, model.Provider{ Code: "google", ClientID: "411647813390-7h52imq0t8mk1k48kr72tvces043a1i8.apps.googleusercontent.com", ClientSecret: "411647813390-7h52imq0t8mk1k48kr72tvces043a1i8.apps.googleusercontent.com", Scope: "https://www.googleapis.com/auth/userinfo.profile,https://www.googleapis.com/auth/userinfo.email", RedirectURI: "http://localhost:8080/auth/google/callback", AuthURI: "", TokenURI: "", UserInfoURI: "https://www.googleapis.com/oauth2/v2/userinfo", }) providers = append(providers, model.Provider{ Code: "facebook", ClientID: "2022993034711459", ClientSecret: "eaab719570279138cf977ac807936f51", Scope: "user_profile", RedirectURI: "http://localhost:8000", AuthURI: "https://www.facebook.com/v18.0/dialog/oauth?client_id={app-id}&redirect_uri={redirect-uri}&state={state-param}&response_type=token", TokenURI: "https://graph.facebook.com/v18.0/oauth/access_token?client_id={app-id}&redirect_uri={redirect-uri}&client_secret={app-secret}&code={code-parameter}", TokenCheckURI: "https://graph.facebook.com/debug_token", UserInfoURI: "https://graph.facebook.com/USER-ID?fields=id,name,email,picture", }) providers = append(providers, model.Provider{ Code: "twitter", ClientID: "kkx47j7W1QBJowXqK10F2dBxw", ClientSecret: "kXaP0TFIQ6A2wuH4xbGa8yDonqGAuWAmXa3vSqL5yPVaqU5e7y", Scope: "tweet.read%20users.read", RedirectURI: "https://www.baidu.com", AuthURI: "https://twitter.com/i/oauth2/authorize?client_id=&response_type=code&scope=&redirect_uri=&state=&code_challenge=&code_challenge_method=", TokenURI: "https://api.twitter.com/2/oauth2/token", TokenType: "Bearer", UserInfoURI: "https://api.twitter.com/2/user", }) providers = append(providers, model.Provider{ Code: "tiktok", ClientID: "awfcivkstde78lmu", ClientSecret: "", Scope: "user.info.basic", RedirectURI: "", AuthURI: "https://www.tiktok.com/v2/auth/authorize?client_key=&response_type=code&scope=&redirect_uri=&state=", TokenURI: "https://open.tiktokapis.com/v2/oauth/token?", UserInfoURI: "https://open.tiktokapis.com/v2/user/info/?fields=open_id,union_id,avatar_url,display_name", }) clients.Android = providers providers = []model.Provider{} providers = append(providers, model.Provider{ Code: "youtube", ClientID: "560948330734-u9lhqedsn90cb3jguopr6afrf64nmejs.apps.googleusercontent.com", ClientSecret: "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", Scope: "https://www.googleapis.com/auth/userinfo.profile,https://www.googleapis.com/auth/userinfo.email", RedirectURI: "https://h5-dev.bkbackground.com/loading", AuthURI: "", TokenURI: "", UserInfoURI: "https://www.googleapis.com/oauth2/v2/userinfo", }) providers = append(providers, model.Provider{ Code: "facebook", ClientID: "1404974307098155", ClientSecret: "277467943e199b1cdf57ea4835f603a2", Scope: "user_profile", RedirectURI: "https://h5-dev.bkbackground.com/loading", AuthURI: "https://www.facebook.com/v18.0/dialog/oauth?client_id={app-id}&redirect_uri={redirect-uri}&state={state-param}&response_type=token", TokenURI: "https://graph.facebook.com/v18.0/oauth/access_token?client_id={app-id}&redirect_uri={redirect-uri}&client_secret={app-secret}&code={code-parameter}", TokenCheckURI: "https://graph.facebook.com/debug_token", UserInfoURI: "https://graph.facebook.com/USER-ID?fields=id,name,email,picture", }) providers = append(providers, model.Provider{ Code: "twitter", ClientID: "ZEp6VUUwVG9ybl9JampHbHNkYmo6MTpjaQ", ClientSecret: "PT_gMm2PQ44QCl3M08AnRr8cm3_98AupHTTRMPTATZFMXQL2aI", Scope: "tweet.read%20users.read", RedirectURI: "https://h5-dev.bkbackground.com/loading", AuthURI: "https://twitter.com/i/oauth2/authorize?client_id=&response_type=code&scope=&redirect_uri=&state=&code_challenge=&code_challenge_method=", TokenURI: "https://api.twitter.com/2/oauth2/token", TokenType: "Bearer", UserInfoURI: "https://api.twitter.com/2/users/me", }) providers = append(providers, model.Provider{ Code: "tiktok", ClientID: "awct4oqq4618322e", ClientSecret: "Qjv1Q89yexn3FFCbGeqY85UnKFrL2JTW", Scope: "user.info.basic", RedirectURI: "https://h5-dev.bkbackground.com/loading", AuthURI: "https://www.tiktok.com/v2/auth/authorize?client_key=&response_type=code&scope=&redirect_uri=&state=", TokenURI: "https://open.tiktokapis.com/v2/oauth/token?", UserInfoURI: "https://open.tiktokapis.com/v2/user/info/?fields=open_id,union_id,avatar_url,display_name", }) providers = append(providers, model.Provider{ Code: "instagram", ClientID: "358175333242276", ClientSecret: "96fc00c184619bdc13803fa976bc81fb", Scope: "user_profile", RedirectURI: "https://h5-dev.bkbackground.com/loading", AuthURI: "https://api.instagram.com/oauth/authorize?client_key=&response_type=code&scope=&redirect_uri=&state=", TokenURI: "https://api.instagram.com/oauth/access_token", TokenType: "Bearer", UserInfoURI: "https://graph.instagram.com/v18.0/", }) clients.Web = providers providers = []model.Provider{} providers = append(providers, model.Provider{ Code: "google", ClientID: "10001", ClientSecret: "560948330734-6d6vpdv3m4003f1tmodbs5v4lm7nft4q.apps.googleusercontent.com", Scope: "https://www.googleapis.com/auth/userinfo.profile,https://www.googleapis.com/auth/userinfo.email", RedirectURI: "", AuthURI: "", TokenURI: "", UserInfoURI: "https://www.googleapis.com/oauth2/v2/userinfo", }) providers = append(providers, model.Provider{ Code: "facebook", ClientID: "2022993034711459", ClientSecret: "eaab719570279138cf977ac807936f51", Scope: "user_profile", RedirectURI: "", AuthURI: "https://www.facebook.com/v18.0/dialog/oauth?client_id={app-id}&redirect_uri={redirect-uri}&state={state-param}&response_type=token", TokenURI: "https://graph.facebook.com/v18.0/oauth/access_token?client_id={app-id}&redirect_uri={redirect-uri}&client_secret={app-secret}&code={code-parameter}", TokenCheckURI: "https://graph.facebook.com/debug_token", UserInfoURI: "https://graph.facebook.com/USER-ID?fields=id,name,email,picture", }) providers = append(providers, model.Provider{ Code: "ios", }) // providers = append(providers, model.Provider{ // Code: "twitter", // ClientID: "kkx47j7W1QBJowXqK10F2dBxw", // ClientSecret: "kXaP0TFIQ6A2wuH4xbGa8yDonqGAuWAmXa3vSqL5yPVaqU5e7y", // Scope: "tweet.read%20users.read", // RedirectURI: "https://www.baidu.com", // AuthURI: "https://twitter.com/i/oauth2/authorize?client_id=&response_type=code&scope=&redirect_uri=&state=&code_challenge=&code_challenge_method=", // TokenURI: "https://api.twitter.com/2/oauth2/token", // TokenType: "Bearer", // UserInfoURI: "https://api.twitter.com/2/user", // }) // providers = append(providers, model.Provider{ // Code: "tiktok", // ClientID: "awfcivkstde78lmu", // ClientSecret: "", // Scope: "user.info.basic", // RedirectURI: "", // AuthURI: "https://www.tiktok.com/v2/auth/authorize?client_key=&response_type=code&scope=&redirect_uri=&state=", // TokenURI: "https://open.tiktokapis.com/v2/oauth/token?", // UserInfoURI: "https://open.tiktokapis.com/v2/user/info/?fields=open_id,union_id,avatar_url,display_name", // }) clients.Ios = providers providerStr, _ := json.Marshal(clients) uMap := make(map[string]interface{}) uMap["client_id"] = utils.GetInvitationLen(18) uMap["client_secret"] = utils.GetInvitationLen(50) uMap["provider"] = string(providerStr) global.MG_DB.Model(&model.Application{}).Where("appid=?", "appid").Updates(uMap) }