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)