From b06eb865784431a63691691f0dc63747ae13cb67 Mon Sep 17 00:00:00 2001 From: mountain Date: Fri, 23 Jun 2023 17:21:36 +0900 Subject: [PATCH] =?UTF-8?q?=EB=90=98=EB=8F=8C=EB=A6=BC=EC=9D=84=20?= =?UTF-8?q?=EB=90=98=EB=8F=8C=EB=A6=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/service.go | 98 ++++++++++++++++++++++++++++++------------------- 1 file changed, 60 insertions(+), 38 deletions(-) diff --git a/core/service.go b/core/service.go index 31273b6..e5143a7 100644 --- a/core/service.go +++ b/core/service.go @@ -606,12 +606,13 @@ func (sh *serviceDescription) ServeHTTP(w http.ResponseWriter, r *http.Request) r.Body.Close() }() + logger.Println("serviceDesc :", sh.ServiceCode, r.URL.Path) + if strings.HasSuffix(r.URL.Path, "/auth") { sh.authorize(w, r) } else if strings.HasSuffix(r.URL.Path, "/link") { sh.link(w, r) - } else { - // TODO : 세션키와 authtoken을 헤더로 받아서 accid 조회 + } else if strings.HasSuffix(r.URL.Path, "/divs") { queryvals := r.URL.Query() sk := queryvals.Get("sk") @@ -630,47 +631,68 @@ func (sh *serviceDescription) ServeHTTP(w http.ResponseWriter, r *http.Request) return } - if divname := queryvals.Get("div"); len(divname) > 0 { - divname = strings.Trim(divname, `"`) - // 점검중인지 아닌지 확인 - // 점검중이어도 입장이 가능한 인원이 있다. - div := sh.Divisions[divname] - if div != nil { - switch div.State { - case DivisionState_FullOpen: + divstrptr := atomic.LoadPointer(&sh.divisionsForUsersSerialized) + divstr := *(*string)(divstrptr) + w.Write([]byte(divstr)) + } else if strings.HasSuffix(r.URL.Path, "/addr") { + queryvals := r.URL.Query() + sk := queryvals.Get("sk") + + //if len(token) == 0 || len(sk) == 0 { + if len(sk) == 0 { + w.WriteHeader(http.StatusBadRequest) + return + } + + // TODO : 각 서버에 있는 자산? 캐릭터 정보를 보여줘야 하나. 뭘 보여줄지는 프로젝트에 문의 + // 일단 서버 종류만 내려보내자 + // 세션키가 있는지 확인 + if _, ok := sh.auths.IsValid(sk, ""); !ok { + logger.Println("sessionkey is not valid :", sk) + w.WriteHeader(http.StatusUnauthorized) + return + } + + divname := queryvals.Get("div") + divname = strings.Trim(divname, `"`) + div := sh.Divisions[divname] + if div != nil { + switch div.State { + case DivisionState_FullOpen: + w.Write([]byte(fmt.Sprintf(`{"service":"%s"}`, div.Url))) + + case DivisionState_RestrictedOpen: + // 점검중이면 whitelist만 입장 가능 + cell := sh.auths.QuerySession(sk, "") + if cell == nil { + logger.Println("sessionkey is not valid :", sk) + w.WriteHeader(http.StatusBadRequest) + return + } + if sh.wl.isMember(cell.ToAuthinfo().Email, cell.ToAuthinfo().Platform) { + // qa 권한이면 입장 가능 w.Write([]byte(fmt.Sprintf(`{"service":"%s"}`, div.Url))) + } else if div.Maintenance != nil { + // 권한이 없으므로 공지 + w.Write([]byte(fmt.Sprintf(`{"notice":"%s"}`, div.Maintenance.link))) + } else { + logger.Println("div.Maintenance is nil :", divname) + } - case DivisionState_RestrictedOpen: - // 점검중이면 whitelist만 입장 가능 - cell := sh.auths.QuerySession(sk, "") - if cell == nil { - logger.Println("sessionkey is not valid :", sk) - w.WriteHeader(http.StatusBadRequest) - return - } - if sh.wl.isMember(cell.ToAuthinfo().Email, cell.ToAuthinfo().Platform) { - // qa 권한이면 입장 가능 - w.Write([]byte(fmt.Sprintf(`{"service":"%s"}`, div.Url))) - } else if div.Maintenance != nil { - // 권한이 없으므로 공지 - w.Write([]byte(fmt.Sprintf(`{"notice":"%s"}`, div.Maintenance.link))) - } else { - logger.Println("div.Maintenance is nil :", divname) - } - - case DivisionState_Maintenance: - // 점검중. 아무도 못들어감 - if div.Maintenance != nil { - w.Write([]byte(fmt.Sprintf(`{"notice":"%s"}`, div.Maintenance.link))) - } else { - logger.Println("div.Maintenance is nil :", divname) - } + case DivisionState_Maintenance: + // 점검중. 아무도 못들어감 + if div.Maintenance != nil { + w.Write([]byte(fmt.Sprintf(`{"notice":"%s"}`, div.Maintenance.link))) + } else { + logger.Println("div.Maintenance is nil :", divname) } } } else { - divstrptr := atomic.LoadPointer(&sh.divisionsForUsersSerialized) - divstr := *(*string)(divstrptr) - w.Write([]byte(divstr)) + logger.Println("div is not found :", divname) + w.WriteHeader(http.StatusBadRequest) } + } else { + logger.Println("??? :", r.URL.Path) + w.WriteHeader(http.StatusBadRequest) } }