From 2e60fac84061506834f906c0589ae7c5e84d5799 Mon Sep 17 00:00:00 2001 From: mountain Date: Wed, 6 Dec 2023 16:35:55 +0900 Subject: [PATCH] =?UTF-8?q?mg.config=EB=A5=BC=20config=EB=A1=9C=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/maingate.go | 34 ++++++++++++++++------------------ core/platformapple.go | 16 ++++++++-------- core/platformgoogle.go | 18 +++++++++--------- core/platformmicrosoft.go | 18 +++++++++--------- core/platformsteam.go | 2 +- core/platformtwitter.go | 10 +++++----- core/service.go | 5 +++-- 7 files changed, 51 insertions(+), 52 deletions(-) diff --git a/core/maingate.go b/core/maingate.go index d6fb12d..6d6b43c 100644 --- a/core/maingate.go +++ b/core/maingate.go @@ -127,8 +127,6 @@ func (ga *globalAdmins) parse() { // Maingate : type Maingate struct { - maingateConfig - mongoClient gocommon.MongoClient sessionProvider session.Provider @@ -146,9 +144,10 @@ type Maingate struct { firebaseAppContext context.Context } +var config maingateConfig + // New : func New(ctx context.Context) (*Maingate, error) { - var config maingateConfig if err := gocommon.LoadConfig(&config); err != nil { return nil, err } @@ -167,7 +166,6 @@ func New(ctx context.Context) (*Maingate, error) { } mg := Maingate{ - maingateConfig: config, admins: unsafe.Pointer(&admins), tokenEndpoints: make(map[string]string), authorizationEndpoints: make(map[string]string), @@ -181,7 +179,7 @@ func New(ctx context.Context) (*Maingate, error) { } if !*noauth { - opt := option.WithCredentialsFile(mg.FirebaseAdminSDKCredentialFile) + opt := option.WithCredentialsFile(config.FirebaseAdminSDKCredentialFile) firebaseApp, err := firebase.NewApp(context.Background(), nil, opt) if err != nil { logger.Error("firebase admin error initializing app failed :", err) @@ -265,7 +263,7 @@ func (mg *Maingate) prepare(context context.Context) (err error) { } // redis에서 env를 가져온 후에 - mg.mongoClient, err = gocommon.NewMongoClient(context, mg.Mongo) + mg.mongoClient, err = gocommon.NewMongoClient(context, config.Mongo) if err != nil { return logger.ErrorWithCallStack(err) } @@ -320,7 +318,7 @@ func (mg *Maingate) prepare(context context.Context) (err error) { return logger.ErrorWithCallStack(err) } - if err = mg.mongoClient.MakeExpireIndex(CollectionPlatformLoginToken, int32(mg.SessionTTL+300)); err != nil { + if err = mg.mongoClient.MakeExpireIndex(CollectionPlatformLoginToken, int32(config.SessionTTL+300)); err != nil { return logger.ErrorWithCallStack(err) } @@ -342,7 +340,7 @@ func (mg *Maingate) prepare(context context.Context) (err error) { return logger.ErrorWithCallStack(err) } - mg.sessionProvider, err = session.NewProviderWithConfig(context, mg.SessionConfig) + mg.sessionProvider, err = session.NewProviderWithConfig(context, config.SessionConfig) if err != nil { return logger.ErrorWithCallStack(err) } @@ -461,7 +459,7 @@ func (mg *Maingate) RegisterHandlers(ctx context.Context, serveMux *http.ServeMu }) serveMux.HandleFunc(gocommon.MakeHttpHandlerPattern(prefix, "api/"), mg.api) - configraw, _ := json.Marshal(mg.maingateConfig) + configraw, _ := json.Marshal(config) var convertedConfig map[string]any if err := json.Unmarshal(configraw, &convertedConfig); err != nil { return logger.ErrorWithCallStack(err) @@ -613,7 +611,7 @@ func (mg *Maingate) getUserTokenWithCheck(platform string, userid string, brinfo updatetime, ok := found["lastupdate"].(int64) - if !ok || time.Now().Unix()-updatetime < mg.maingateConfig.Autologin_ttl { + if !ok || time.Now().Unix()-updatetime < config.Autologin_ttl { info.platform = platform info.userid = userid info.brinfo = brinfo @@ -874,14 +872,14 @@ func JWTparseCode(keyurl string, code string) (string, string, string) { func (mg *Maingate) google_analytics_js(w http.ResponseWriter, r *http.Request) { fgaconfig := Firebase_Google_Analytics_JS_SDK_Config{ - FGA_apiKey: mg.FGA_apiKey, - FGA_authDomain: mg.FGA_authDomain, - FGA_databaseURL: mg.FGA_databaseURL, - FGA_projectId: mg.FGA_projectId, - FGA_storageBucket: mg.FGA_storageBucket, - FGA_messagingSenderId: mg.FGA_messagingSenderId, - FGA_appId: mg.FGA_appId, - FGA_measurementId: mg.FGA_measurementId, + FGA_apiKey: config.FGA_apiKey, + FGA_authDomain: config.FGA_authDomain, + FGA_databaseURL: config.FGA_databaseURL, + FGA_projectId: config.FGA_projectId, + FGA_storageBucket: config.FGA_storageBucket, + FGA_messagingSenderId: config.FGA_messagingSenderId, + FGA_appId: config.FGA_appId, + FGA_measurementId: config.FGA_measurementId, } parsedTemplate, _ := template.ParseFiles("template/fb-ga.min.js") err := parsedTemplate.Execute(w, fgaconfig) diff --git a/core/platformapple.go b/core/platformapple.go index 0aac983..dc9daa9 100644 --- a/core/platformapple.go +++ b/core/platformapple.go @@ -95,8 +95,8 @@ func (mg *Maingate) platform_apple_get_login_url(w http.ResponseWriter, r *http. } params := url.Values{} - params.Add("client_id", mg.AppleCientId) - params.Add("redirect_uri", mg.RedirectBaseUrl+"/authorize/"+AuthPlatformApple) + params.Add("client_id", config.AppleCientId) + params.Add("redirect_uri", config.RedirectBaseUrl+"/authorize/"+AuthPlatformApple) params.Add("response_type", "code id_token") params.Add("scope", "name email") @@ -146,7 +146,7 @@ func (mg *Maingate) platform_apple_authorize(w http.ResponseWriter, r *http.Requ } http.SetCookie(w, &cookie) - http.Redirect(w, r, mg.RedirectBaseUrl+"/authorize_result/"+AuthPlatformApple, http.StatusSeeOther) //-- 바로 받으니까 쿠키 안와서 한번 더 Redirect 시킨다. + http.Redirect(w, r, config.RedirectBaseUrl+"/authorize_result/"+AuthPlatformApple, http.StatusSeeOther) //-- 바로 받으니까 쿠키 안와서 한번 더 Redirect 시킨다. } func (mg *Maingate) platform_apple_authorize_result(w http.ResponseWriter, r *http.Request) { @@ -208,17 +208,17 @@ func (mg *Maingate) platform_apple_authorize_result(w http.ResponseWriter, r *ht } // Generate the client secret used to authenticate with Apple's validation servers - secret, err := generateClientSecret(mg.ApplePrivateKey, mg.AppleTeamId, mg.AppleServiceId, mg.AppleKeyId) + secret, err := generateClientSecret(config.ApplePrivateKey, config.AppleTeamId, config.AppleServiceId, config.AppleKeyId) if err != nil { logger.Error("error generating secret: ", err) return } vReq := Apple_WebValidationTokenRequest{ - ClientID: mg.AppleServiceId, + ClientID: config.AppleServiceId, ClientSecret: secret, Code: code, - RedirectURI: mg.RedirectBaseUrl + "/authorize/" + AuthPlatformApple, // This URL must be validated with apple in your service + RedirectURI: config.RedirectBaseUrl + "/authorize/" + AuthPlatformApple, // This URL must be validated with apple in your service } var resp Apple_ValidationResponse @@ -268,14 +268,14 @@ func (mg *Maingate) platform_apple_authorize_result(w http.ResponseWriter, r *ht func (mg *Maingate) platform_apple_getuserinfo(refreshToken string) (bool, string, string) { //=================================RefreshToken을 사용해서 정보 가져 온다. 이미 인증된 사용자의 업데이트 목적 - secret, err := generateClientSecret(mg.ApplePrivateKey, mg.AppleTeamId, mg.AppleServiceId, mg.AppleKeyId) + secret, err := generateClientSecret(config.ApplePrivateKey, config.AppleTeamId, config.AppleServiceId, config.AppleKeyId) if err != nil { logger.Error("error generating secret: ", err) return false, "", "" } vReqRefreshToken := Apple_WebRefreshTokenRequest{ - ClientID: mg.AppleServiceId, + ClientID: config.AppleServiceId, ClientSecret: secret, RefreshToken: refreshToken, } diff --git a/core/platformgoogle.go b/core/platformgoogle.go index 5c50b34..10d6013 100644 --- a/core/platformgoogle.go +++ b/core/platformgoogle.go @@ -84,9 +84,9 @@ func (mg *Maingate) platform_google_get_login_url(w http.ResponseWriter, r *http } params := url.Values{} - params.Add("client_id", mg.GoogleClientId) + params.Add("client_id", config.GoogleClientId) params.Add("response_type", "code") - params.Add("redirect_uri", mg.RedirectBaseUrl+"/authorize/"+AuthPlatformGoogle) + params.Add("redirect_uri", config.RedirectBaseUrl+"/authorize/"+AuthPlatformGoogle) params.Add("scope", "https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email") params.Add("access_type", "offline") params.Add("prompt", "consent") @@ -140,7 +140,7 @@ func (mg *Maingate) platform_google_authorize(w http.ResponseWriter, r *http.Req } http.SetCookie(w, &cookie2) - http.Redirect(w, r, mg.RedirectBaseUrl+"/authorize_result/"+AuthPlatformGoogle, http.StatusSeeOther) //-- 바로 받으니까 쿠키 안와서 한번 더 Redirect 시킨다. + http.Redirect(w, r, config.RedirectBaseUrl+"/authorize_result/"+AuthPlatformGoogle, http.StatusSeeOther) //-- 바로 받으니까 쿠키 안와서 한번 더 Redirect 시킨다. } func (mg *Maingate) platform_google_authorize_result(w http.ResponseWriter, r *http.Request) { @@ -211,9 +211,9 @@ func (mg *Maingate) platform_google_authorize_result(w http.ResponseWriter, r *h //================= params := url.Values{} - params.Add("client_id", mg.GoogleClientId) - params.Add("redirect_uri", mg.RedirectBaseUrl+"/authorize/"+AuthPlatformGoogle) - params.Add("client_secret", mg.GoogleClientSecret) + params.Add("client_id", config.GoogleClientId) + params.Add("redirect_uri", config.RedirectBaseUrl+"/authorize/"+AuthPlatformGoogle) + params.Add("client_secret", config.GoogleClientSecret) params.Add("code", code) params.Add("grant_type", "authorization_code") @@ -285,9 +285,9 @@ func (mg *Maingate) platform_google_getuserinfo(info usertokeninfo) (bool, strin if time.Now().Unix() > info.accesstoken_expire_time { params := url.Values{} - params.Add("client_id", mg.GoogleClientId) - params.Add("redirect_uri", mg.RedirectBaseUrl+"/authorize/"+AuthPlatformGoogle) - params.Add("client_secret", mg.GoogleClientSecret) + params.Add("client_id", config.GoogleClientId) + params.Add("redirect_uri", config.RedirectBaseUrl+"/authorize/"+AuthPlatformGoogle) + params.Add("client_secret", config.GoogleClientSecret) params.Add("scope", "https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email") params.Add("refresh_token", info.token) params.Add("grant_type", "refresh_token") diff --git a/core/platformmicrosoft.go b/core/platformmicrosoft.go index 6d5254b..3375905 100644 --- a/core/platformmicrosoft.go +++ b/core/platformmicrosoft.go @@ -83,9 +83,9 @@ func (mg *Maingate) platform_microsoft_get_login_url(w http.ResponseWriter, r *h } params := url.Values{} - params.Add("client_id", mg.MicrosoftClientId) + params.Add("client_id", config.MicrosoftClientId) params.Add("response_type", "code") - params.Add("redirect_uri", mg.RedirectBaseUrl+"/authorize/"+AuthPlatformMicrosoft) + params.Add("redirect_uri", config.RedirectBaseUrl+"/authorize/"+AuthPlatformMicrosoft) params.Add("response_mode", "query") params.Add("scope", "openid offline_access https://graph.microsoft.com/mail.read") @@ -127,7 +127,7 @@ func (mg *Maingate) platform_microsoft_authorize(w http.ResponseWriter, r *http. } http.SetCookie(w, &cookie) - http.Redirect(w, r, mg.RedirectBaseUrl+"/authorize_result/"+AuthPlatformMicrosoft, http.StatusSeeOther) //-- 바로 받으니까 쿠키 안와서 한번 더 Redirect 시킨다. + http.Redirect(w, r, config.RedirectBaseUrl+"/authorize_result/"+AuthPlatformMicrosoft, http.StatusSeeOther) //-- 바로 받으니까 쿠키 안와서 한번 더 Redirect 시킨다. } func (mg *Maingate) platform_microsoft_authorize_result(w http.ResponseWriter, r *http.Request) { @@ -191,13 +191,13 @@ func (mg *Maingate) platform_microsoft_authorize_result(w http.ResponseWriter, r //================= params := url.Values{} - params.Add("client_id", mg.MicrosoftClientId) - params.Add("redirect_uri", mg.RedirectBaseUrl+"/authorize/"+AuthPlatformMicrosoft) + params.Add("client_id", config.MicrosoftClientId) + params.Add("redirect_uri", config.RedirectBaseUrl+"/authorize/"+AuthPlatformMicrosoft) params.Add("code", code) params.Add("scope", "openid offline_access https://graph.microsoft.com/mail.read") params.Add("grant_type", "authorization_code") - params.Add("client_secret", mg.MicrosoftClientSecret) + params.Add("client_secret", config.MicrosoftClientSecret) var respReferesh Microsoft_ValidationResponse acceestoken_expire_time := time.Now().Unix() @@ -263,13 +263,13 @@ func (mg *Maingate) platform_microsoft_getuserinfo(info usertokeninfo) (bool, st if time.Now().Unix() > info.accesstoken_expire_time { params := url.Values{} - params.Add("client_id", mg.MicrosoftClientId) - params.Add("redirect_uri", mg.RedirectBaseUrl+"/authorize/"+AuthPlatformMicrosoft) + params.Add("client_id", config.MicrosoftClientId) + params.Add("redirect_uri", config.RedirectBaseUrl+"/authorize/"+AuthPlatformMicrosoft) params.Add("refresh_token", info.token) params.Add("scope", "openid offline_access https://graph.microsoft.com/mail.read") params.Add("grant_type", "refresh_token") - params.Add("client_secret", mg.MicrosoftClientSecret) + params.Add("client_secret", config.MicrosoftClientSecret) var respReferesh Microsoft_ValidationResponse acceestoken_expire_time := time.Now().Unix() diff --git a/core/platformsteam.go b/core/platformsteam.go index 8766bdf..bcdd229 100644 --- a/core/platformsteam.go +++ b/core/platformsteam.go @@ -40,7 +40,7 @@ func (mg *Maingate) platform_steamsdk_authorize(w http.ResponseWriter, r *http.R } if !*noauth { - err = authenticateSteamUser(mg.SteamPublisherAuthKey, mg.SteamAppId, authinfo.UserSteamId, authinfo.UserAuthToken) + err = authenticateSteamUser(config.SteamPublisherAuthKey, config.SteamAppId, authinfo.UserSteamId, authinfo.UserAuthToken) } if err == nil { diff --git a/core/platformtwitter.go b/core/platformtwitter.go index 11397e4..58396c5 100644 --- a/core/platformtwitter.go +++ b/core/platformtwitter.go @@ -123,7 +123,7 @@ func (mg *Maingate) platform_twitter_authorize(w http.ResponseWriter, r *http.Re } http.SetCookie(w, &cookie) - http.Redirect(w, r, mg.RedirectBaseUrl+"/authorize_result/"+AuthPlatformTwitter, http.StatusSeeOther) //-- 바로 받으니까 쿠키 안와서 한번 더 Redirect 시킨다. + http.Redirect(w, r, config.RedirectBaseUrl+"/authorize_result/"+AuthPlatformTwitter, http.StatusSeeOther) //-- 바로 받으니까 쿠키 안와서 한번 더 Redirect 시킨다. } func (mg *Maingate) platform_twitter_authorize_result(w http.ResponseWriter, r *http.Request) { @@ -249,7 +249,7 @@ func (mg *Maingate) platform_twitter_getuserinfo(token, secret string) (bool, st } func (mg *Maingate) CallTwitterAPI_WithAPPKey(requesturl, method, nonce string) string { - return mg.CallTwitterAPI(requesturl, method, mg.TwitterOAuthKey, mg.TwitterOAuthSecret, nonce) + return mg.CallTwitterAPI(requesturl, method, config.TwitterOAuthKey, config.TwitterOAuthSecret, nonce) } func (mg *Maingate) CallTwitterAPI(requesturl, method, oauth_token, oauth_secret, nonce string) string { @@ -272,8 +272,8 @@ func (mg *Maingate) CallTwitterAPI(requesturl, method, oauth_token, oauth_secret //vals.Add("oauth_callback", "actionclient://callback") //vals.Add("oauth_callback", "http://127.0.0.1:7770/auth") - vals.Add("oauth_callback", mg.RedirectBaseUrl+"/authorize/"+AuthPlatformTwitter) - vals.Add("oauth_consumer_key", mg.TwitterCustomerKey) + vals.Add("oauth_callback", config.RedirectBaseUrl+"/authorize/"+AuthPlatformTwitter) + vals.Add("oauth_consumer_key", config.TwitterCustomerKey) vals.Add("oauth_token", oauth_token) vals.Add("oauth_signature_method", "HMAC-SHA1") vals.Add("oauth_timestamp", strconv.Itoa(int(time.Now().Unix()))) @@ -282,7 +282,7 @@ func (mg *Maingate) CallTwitterAPI(requesturl, method, oauth_token, oauth_secret parameterString := strings.Replace(vals.Encode(), "+", "%20", -1) signatureBase := strings.ToUpper(method) + "&" + url.QueryEscape(strings.Split(requesturl, "?")[0]) + "&" + url.QueryEscape(parameterString) - signingKey := url.QueryEscape(mg.TwitterCustomerSecret) + "&" + url.QueryEscape(oauth_secret) + signingKey := url.QueryEscape(config.TwitterCustomerSecret) + "&" + url.QueryEscape(oauth_secret) signature := calculateTwitterSignature(signatureBase, signingKey) headerString := "OAuth oauth_callback=\"" + url.QueryEscape(vals.Get("oauth_callback")) + "\", oauth_consumer_key=\"" + url.QueryEscape(vals.Get("oauth_consumer_key")) + "\", oauth_nonce=\"" + url.QueryEscape(vals.Get("oauth_nonce")) + diff --git a/core/service.go b/core/service.go index b685a58..abc80f3 100644 --- a/core/service.go +++ b/core/service.go @@ -246,10 +246,10 @@ func (sh *serviceDescription) prepare(mg *Maingate) error { defaultMarshaled, _ := json.Marshal(defaultsDivs) sh.divisionsSplits["default"] = defaultMarshaled - sh.MaximumNumLinkAccount = mg.maingateConfig.MaximumNumLinkAccount + sh.MaximumNumLinkAccount = config.MaximumNumLinkAccount sh.mongoClient = mg.mongoClient sh.sessionProvider = mg.sessionProvider - sh.sessionTTL = time.Duration(mg.SessionTTL * int64(time.Second)) + sh.sessionTTL = time.Duration(config.SessionTTL * int64(time.Second)) sh.serviceCodeBytes, _ = hex.DecodeString(sh.ServiceCode) sh.getUserBrowserInfo = mg.GetUserBrowserInfo sh.getUserTokenWithCheck = mg.getUserTokenWithCheck @@ -812,6 +812,7 @@ func (sh *serviceDescription) serveHTTP(w http.ResponseWriter, r *http.Request) } } else { logger.Println("div is not found :", divname, sh.Divisions) + logger.Println("check maingate database 'service.divisions' :", config.Mongo) w.WriteHeader(http.StatusBadRequest) } } else {