Merge branch 'master' into kd-live
This commit is contained in:
110
core/service.go
110
core/service.go
@ -612,8 +612,7 @@ func (sh *serviceDescription) ServeHTTP(w http.ResponseWriter, r *http.Request)
|
|||||||
sh.authorize(w, r)
|
sh.authorize(w, r)
|
||||||
} else if strings.HasSuffix(r.URL.Path, "/link") {
|
} else if strings.HasSuffix(r.URL.Path, "/link") {
|
||||||
sh.link(w, r)
|
sh.link(w, r)
|
||||||
} else {
|
} else if strings.HasSuffix(r.URL.Path, "/divs") {
|
||||||
// TODO : 세션키와 authtoken을 헤더로 받아서 accid 조회
|
|
||||||
queryvals := r.URL.Query()
|
queryvals := r.URL.Query()
|
||||||
sk := queryvals.Get("sk")
|
sk := queryvals.Get("sk")
|
||||||
|
|
||||||
@ -632,47 +631,82 @@ func (sh *serviceDescription) ServeHTTP(w http.ResponseWriter, r *http.Request)
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if divname := queryvals.Get("div"); len(divname) > 0 {
|
servicecode := queryvals.Get("servicecode")
|
||||||
divname = strings.Trim(divname, `"`)
|
if sh.ServiceCode != servicecode {
|
||||||
// 점검중인지 아닌지 확인
|
logger.Println("service code is not valid :", servicecode, sh.ServiceCode)
|
||||||
// 점검중이어도 입장이 가능한 인원이 있다.
|
w.WriteHeader(http.StatusUnauthorized)
|
||||||
div := sh.Divisions[divname]
|
return
|
||||||
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
|
||||||
|
}
|
||||||
|
|
||||||
|
servicecode := queryvals.Get("servicecode")
|
||||||
|
if sh.ServiceCode != servicecode {
|
||||||
|
logger.Println("service code is not valid :", servicecode, sh.ServiceCode)
|
||||||
|
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)))
|
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:
|
case DivisionState_Maintenance:
|
||||||
// 점검중이면 whitelist만 입장 가능
|
// 점검중. 아무도 못들어감
|
||||||
cell := sh.auths.QuerySession(sk, "")
|
if div.Maintenance != nil {
|
||||||
if cell == nil {
|
w.Write([]byte(fmt.Sprintf(`{"notice":"%s"}`, div.Maintenance.link)))
|
||||||
logger.Println("sessionkey is not valid :", sk)
|
} else {
|
||||||
w.WriteHeader(http.StatusBadRequest)
|
logger.Println("div.Maintenance is nil :", divname)
|
||||||
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)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
divstrptr := atomic.LoadPointer(&sh.divisionsForUsersSerialized)
|
logger.Println("div is not found :", divname)
|
||||||
divstr := *(*string)(divstrptr)
|
w.WriteHeader(http.StatusBadRequest)
|
||||||
w.Write([]byte(divstr))
|
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
logger.Println("??? :", r.URL.Path)
|
||||||
|
w.WriteHeader(http.StatusBadRequest)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user