From a3b4ac47b846937fb17c76413681cf259f71300b Mon Sep 17 00:00:00 2001 From: mountain Date: Sun, 4 Feb 2024 15:23:33 +0900 Subject: [PATCH] =?UTF-8?q?maintenance=20=EB=B0=94=EB=A1=9C=20=EB=B0=98?= =?UTF-8?q?=EC=98=81=20=EC=95=88=EB=90=98=EB=8A=94=20=EB=AC=B8=EC=A0=9C=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/maingate.go | 10 ++++++++-- core/service.go | 30 +++++++++++++++++++++++++----- 2 files changed, 33 insertions(+), 7 deletions(-) diff --git a/core/maingate.go b/core/maingate.go index a7179b4..73b01f5 100644 --- a/core/maingate.go +++ b/core/maingate.go @@ -457,9 +457,15 @@ func (mg *Maingate) RegisterHandlers(ctx context.Context, serveMux *http.ServeMu logger.Println("Service is registered :", mg.service().ServiceCode) if *devflag { - serveMux.HandleFunc(gocommon.MakeHttpHandlerPattern(prefix, mg.service().ServiceCode, "/"), mg.service().serveHTTP_dev) + serveMux.HandleFunc(gocommon.MakeHttpHandlerPattern(prefix, mg.service().ServiceCode, "/"), func(w http.ResponseWriter, r *http.Request) { + // mg.service()를 요청마다 불러야 함 + mg.service().serveHTTP_dev(w, r) + }) } else { - serveMux.HandleFunc(gocommon.MakeHttpHandlerPattern(prefix, mg.service().ServiceCode, "/"), mg.service().serveHTTP) + serveMux.HandleFunc(gocommon.MakeHttpHandlerPattern(prefix, mg.service().ServiceCode, "/"), func(w http.ResponseWriter, r *http.Request) { + // mg.service()를 요청마다 불러야 함 + mg.service().serveHTTP(w, r) + }) } serveMux.HandleFunc(gocommon.MakeHttpHandlerPattern(prefix, "api/"), mg.api) diff --git a/core/service.go b/core/service.go index 46ac974..6314cd0 100644 --- a/core/service.go +++ b/core/service.go @@ -258,7 +258,17 @@ func (sh *serviceDescription) prepare(mg *Maingate) error { if globalApiToken, err := primitive.ObjectIDFromHex(config.GlobalMaingateToken); err == nil { if !globalApiToken.IsZero() { - sh.ServerApiTokens = append(sh.ServerApiTokens, globalApiToken) + f := func() bool { + for _, t := range sh.ServerApiTokens { + if t == globalApiToken { + return true + } + } + return false + }() + if !f { + sh.ServerApiTokens = append(sh.ServerApiTokens, globalApiToken) + } } } @@ -857,10 +867,14 @@ func (sh *serviceDescription) serveHTTP(w http.ResponseWriter, r *http.Request) divname := queryvals.Get("div") divname = strings.Trim(divname, `"`) div := sh.Divisions[divname] + var addrresp string if div != nil { + logger.Println("/addr :", divname, div.State) + switch div.State { case DivisionState_FullOpen: - w.Write([]byte(fmt.Sprintf(`{"service":"%s"}`, div.Url))) + addrresp = fmt.Sprintf(`{"service":"%s"}`, div.Url) + //w.Write([]byte(fmt.Sprintf(`{"service":"%s"}`, div.Url))) case DivisionState_RestrictedOpen: // 점검중이면 whitelist만 입장 가능 @@ -874,10 +888,12 @@ func (sh *serviceDescription) serveHTTP(w http.ResponseWriter, r *http.Request) wm := &whitelistmember{Email: authInfo.Email, Platform: authInfo.Platform} if _, ok := sh.wl.get(wm.Key()); ok { // qa 권한이면 입장 가능 - w.Write([]byte(fmt.Sprintf(`{"service":"%s"}`, div.Url))) + addrresp = fmt.Sprintf(`{"service":"%s"}`, div.Url) + //w.Write([]byte(fmt.Sprintf(`{"service":"%s"}`, div.Url))) } else if div.Maintenance != nil { // 권한이 없으므로 공지 - w.Write([]byte(fmt.Sprintf(`{"notice":"%s"}`, div.Maintenance.link))) + addrresp = fmt.Sprintf(`{"notice":"%s"}`, div.Maintenance.link) + //w.Write([]byte(fmt.Sprintf(`{"notice":"%s"}`, div.Maintenance.link))) } else { logger.Println("div.Maintenance is nil :", divname) } @@ -885,11 +901,15 @@ func (sh *serviceDescription) serveHTTP(w http.ResponseWriter, r *http.Request) case DivisionState_Maintenance: // 점검중. 아무도 못들어감 if div.Maintenance != nil { - w.Write([]byte(fmt.Sprintf(`{"notice":"%s"}`, div.Maintenance.link))) + logger.Println("/addr :", divname, div.State, *div.Maintenance) + addrresp = fmt.Sprintf(`{"notice":"%s"}`, div.Maintenance.link) + //w.Write([]byte(fmt.Sprintf(`{"notice":"%s"}`, div.Maintenance.link))) } else { logger.Println("div.Maintenance is nil :", divname) } } + logger.Println("/addr resp :", addrresp) + w.Write([]byte(addrresp)) } else { logger.Println("div is not found :", divname, sh.Divisions) logger.Println("check maingate database 'service.divisions' :", config.Mongo)