|
|
|
@ -322,7 +322,7 @@ func (sh *serviceDescription) link(w http.ResponseWriter, r *http.Request) {
|
|
|
|
if !guestlink {
|
|
|
|
if !guestlink {
|
|
|
|
_, err = sh.readProfile(oldType, oldId, bfinfo)
|
|
|
|
_, err = sh.readProfile(oldType, oldId, bfinfo)
|
|
|
|
if err != nil {
|
|
|
|
if err != nil {
|
|
|
|
logger.Error("readProfile(old) failed :", err)
|
|
|
|
logger.Println("readProfile(old) failed :", err)
|
|
|
|
w.WriteHeader(http.StatusBadRequest)
|
|
|
|
w.WriteHeader(http.StatusBadRequest)
|
|
|
|
return
|
|
|
|
return
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@ -332,7 +332,7 @@ func (sh *serviceDescription) link(w http.ResponseWriter, r *http.Request) {
|
|
|
|
|
|
|
|
|
|
|
|
oldType, oldId, err = sh.getProviderInfo(oldType, oldId)
|
|
|
|
oldType, oldId, err = sh.getProviderInfo(oldType, oldId)
|
|
|
|
if err != nil {
|
|
|
|
if err != nil {
|
|
|
|
logger.Error("getProviderInfo failed :", err)
|
|
|
|
logger.Println("getProviderInfo failed :", err)
|
|
|
|
w.WriteHeader(http.StatusBadRequest)
|
|
|
|
w.WriteHeader(http.StatusBadRequest)
|
|
|
|
return
|
|
|
|
return
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@ -346,7 +346,7 @@ func (sh *serviceDescription) link(w http.ResponseWriter, r *http.Request) {
|
|
|
|
|
|
|
|
|
|
|
|
email, err := sh.readProfile(newType, newId, bfinfo)
|
|
|
|
email, err := sh.readProfile(newType, newId, bfinfo)
|
|
|
|
if err != nil {
|
|
|
|
if err != nil {
|
|
|
|
logger.Error("readProfile(new) failed :", err)
|
|
|
|
logger.Println("readProfile(new) failed :", err)
|
|
|
|
w.WriteHeader(http.StatusBadRequest)
|
|
|
|
w.WriteHeader(http.StatusBadRequest)
|
|
|
|
return
|
|
|
|
return
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@ -359,7 +359,7 @@ func (sh *serviceDescription) link(w http.ResponseWriter, r *http.Request) {
|
|
|
|
|
|
|
|
|
|
|
|
newType, newId, err = sh.getProviderInfo(newType, newId)
|
|
|
|
newType, newId, err = sh.getProviderInfo(newType, newId)
|
|
|
|
if err != nil {
|
|
|
|
if err != nil {
|
|
|
|
logger.Error("getProviderInfo failed :", err)
|
|
|
|
logger.Println("getProviderInfo failed :", err)
|
|
|
|
w.WriteHeader(http.StatusBadRequest)
|
|
|
|
w.WriteHeader(http.StatusBadRequest)
|
|
|
|
return
|
|
|
|
return
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@ -390,7 +390,7 @@ func (sh *serviceDescription) link(w http.ResponseWriter, r *http.Request) {
|
|
|
|
}, options.Update().SetUpsert(true))
|
|
|
|
}, options.Update().SetUpsert(true))
|
|
|
|
if err != nil {
|
|
|
|
if err != nil {
|
|
|
|
logger.Error("link failed. Update ServiceName err :", err)
|
|
|
|
logger.Error("link failed. Update ServiceName err :", err)
|
|
|
|
w.WriteHeader(http.StatusBadRequest)
|
|
|
|
w.WriteHeader(http.StatusInternalServerError)
|
|
|
|
return
|
|
|
|
return
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@ -457,7 +457,7 @@ func (sh *serviceDescription) unlink(w http.ResponseWriter, r *http.Request) {
|
|
|
|
|
|
|
|
|
|
|
|
sType, sId, err := sh.getProviderInfo(sType, sId)
|
|
|
|
sType, sId, err := sh.getProviderInfo(sType, sId)
|
|
|
|
if err != nil {
|
|
|
|
if err != nil {
|
|
|
|
logger.Error("getProviderInfo failed :", err)
|
|
|
|
logger.Println("getProviderInfo failed :", err)
|
|
|
|
w.WriteHeader(http.StatusBadRequest)
|
|
|
|
w.WriteHeader(http.StatusBadRequest)
|
|
|
|
return
|
|
|
|
return
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@ -476,7 +476,7 @@ func (sh *serviceDescription) unlink(w http.ResponseWriter, r *http.Request) {
|
|
|
|
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
if err != nil {
|
|
|
|
logger.Error("unlink failed, fail to count accounts :", err)
|
|
|
|
logger.Error("unlink failed, fail to count accounts :", err)
|
|
|
|
w.WriteHeader(http.StatusBadRequest)
|
|
|
|
w.WriteHeader(http.StatusInternalServerError)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if len(accDocs) <= 1 {
|
|
|
|
if len(accDocs) <= 1 {
|
|
|
|
@ -505,7 +505,7 @@ func (sh *serviceDescription) unlink(w http.ResponseWriter, r *http.Request) {
|
|
|
|
}, options.FindOneAndDelete().SetProjection(bson.M{"_id": 1}))
|
|
|
|
}, options.FindOneAndDelete().SetProjection(bson.M{"_id": 1}))
|
|
|
|
if err != nil {
|
|
|
|
if err != nil {
|
|
|
|
logger.Error("unlink failed. Delete ServiceName err :", err)
|
|
|
|
logger.Error("unlink failed. Delete ServiceName err :", err)
|
|
|
|
w.WriteHeader(http.StatusBadRequest)
|
|
|
|
w.WriteHeader(http.StatusInternalServerError)
|
|
|
|
return
|
|
|
|
return
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if preid == nil {
|
|
|
|
if preid == nil {
|
|
|
|
@ -554,7 +554,7 @@ func (sh *serviceDescription) linkinfo(w http.ResponseWriter, r *http.Request) {
|
|
|
|
|
|
|
|
|
|
|
|
sType, sId, err := sh.getProviderInfo(sType, sId)
|
|
|
|
sType, sId, err := sh.getProviderInfo(sType, sId)
|
|
|
|
if err != nil {
|
|
|
|
if err != nil {
|
|
|
|
logger.Error("getProviderInfo failed :", err)
|
|
|
|
logger.Println("getProviderInfo failed :", err)
|
|
|
|
w.WriteHeader(http.StatusBadRequest)
|
|
|
|
w.WriteHeader(http.StatusBadRequest)
|
|
|
|
return
|
|
|
|
return
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@ -574,7 +574,7 @@ func (sh *serviceDescription) linkinfo(w http.ResponseWriter, r *http.Request) {
|
|
|
|
}))
|
|
|
|
}))
|
|
|
|
if err != nil {
|
|
|
|
if err != nil {
|
|
|
|
logger.Error("linkinfo failed. CountDocuments err :", err)
|
|
|
|
logger.Error("linkinfo failed. CountDocuments err :", err)
|
|
|
|
w.WriteHeader(http.StatusBadRequest)
|
|
|
|
w.WriteHeader(http.StatusInternalServerError)
|
|
|
|
return
|
|
|
|
return
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@ -588,6 +588,11 @@ func (sh *serviceDescription) linkinfo(w http.ResponseWriter, r *http.Request) {
|
|
|
|
}, options.Find().SetLimit(sh.MaximumNumLinkAccount).SetProjection(bson.M{
|
|
|
|
}, options.Find().SetLimit(sh.MaximumNumLinkAccount).SetProjection(bson.M{
|
|
|
|
platformName: 1,
|
|
|
|
platformName: 1,
|
|
|
|
}))
|
|
|
|
}))
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
|
|
logger.Error("linkinfo failed. FindAll returns err :", err)
|
|
|
|
|
|
|
|
w.WriteHeader(http.StatusInternalServerError)
|
|
|
|
|
|
|
|
return
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var linkstrs []string
|
|
|
|
var linkstrs []string
|
|
|
|
for _, link := range links {
|
|
|
|
for _, link := range links {
|
|
|
|
@ -597,7 +602,7 @@ func (sh *serviceDescription) linkinfo(w http.ResponseWriter, r *http.Request) {
|
|
|
|
linkbytes, err := json.Marshal(linkstrs)
|
|
|
|
linkbytes, err := json.Marshal(linkstrs)
|
|
|
|
if err != nil {
|
|
|
|
if err != nil {
|
|
|
|
logger.Error("linkinfo failed. json marshal fail :", err)
|
|
|
|
logger.Error("linkinfo failed. json marshal fail :", err)
|
|
|
|
w.WriteHeader(http.StatusBadRequest)
|
|
|
|
w.WriteHeader(http.StatusInternalServerError)
|
|
|
|
return
|
|
|
|
return
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@ -630,29 +635,29 @@ func (sh *serviceDescription) authorize(w http.ResponseWriter, r *http.Request)
|
|
|
|
//email, err := sh.readProfile(authtype, uid, accesstoken)
|
|
|
|
//email, err := sh.readProfile(authtype, uid, accesstoken)
|
|
|
|
bfinfo, err := sh.getUserBrowserInfo(r)
|
|
|
|
bfinfo, err := sh.getUserBrowserInfo(r)
|
|
|
|
if err != nil {
|
|
|
|
if err != nil {
|
|
|
|
logger.Error("getUserBrowserInfo failed :", err)
|
|
|
|
logger.Println("getUserBrowserInfo failed :", err)
|
|
|
|
w.WriteHeader(http.StatusBadRequest)
|
|
|
|
w.WriteHeader(http.StatusBadRequest)
|
|
|
|
return
|
|
|
|
return
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
email, err = sh.readProfile(authtype, uid, bfinfo)
|
|
|
|
email, err = sh.readProfile(authtype, uid, bfinfo)
|
|
|
|
if err != nil {
|
|
|
|
if err != nil {
|
|
|
|
logger.Error("readProfile failed :", err)
|
|
|
|
logger.Println("readProfile failed :", err)
|
|
|
|
w.WriteHeader(http.StatusBadRequest)
|
|
|
|
w.WriteHeader(http.StatusBadRequest)
|
|
|
|
return
|
|
|
|
return
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
newType, newId, err := sh.getProviderInfo(authtype, uid)
|
|
|
|
newType, newId, err := sh.getProviderInfo(authtype, uid)
|
|
|
|
if err != nil {
|
|
|
|
if err != nil {
|
|
|
|
logger.Error("getProviderInfo failed :", err)
|
|
|
|
logger.Println("getProviderInfo failed :", err)
|
|
|
|
w.WriteHeader(http.StatusBadRequest)
|
|
|
|
w.WriteHeader(http.StatusBadRequest)
|
|
|
|
return
|
|
|
|
return
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if authtype != newType || uid != newId {
|
|
|
|
if authtype != newType || uid != newId {
|
|
|
|
|
|
|
|
logger.Printf("auth success ( redirect ) : %s->%s, %s->%s, %s, %s", authtype, newType, uid, newId, email, session)
|
|
|
|
authtype = newType
|
|
|
|
authtype = newType
|
|
|
|
uid = newId
|
|
|
|
uid = newId
|
|
|
|
logger.Println("auth success ( redirect ) :", authtype, uid, email, session)
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
email = fmt.Sprintf("%s@guest.flag", uid)
|
|
|
|
email = fmt.Sprintf("%s@guest.flag", uid)
|
|
|
|
@ -673,13 +678,15 @@ func (sh *serviceDescription) authorize(w http.ResponseWriter, r *http.Request)
|
|
|
|
"create": createtime,
|
|
|
|
"create": createtime,
|
|
|
|
"email": email,
|
|
|
|
"email": email,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
}, options.FindOneAndUpdate().SetReturnDocument(options.After).SetUpsert(true).SetProjection(bson.M{"_id": 1}))
|
|
|
|
}, options.FindOneAndUpdate().SetReturnDocument(options.After).SetUpsert(true).SetProjection(bson.M{
|
|
|
|
|
|
|
|
"_id": 1,
|
|
|
|
|
|
|
|
"_ts": 1,
|
|
|
|
|
|
|
|
}))
|
|
|
|
if err != nil {
|
|
|
|
if err != nil {
|
|
|
|
logger.Error("authorize failed :", err)
|
|
|
|
logger.Error("authorize failed :", err)
|
|
|
|
w.WriteHeader(http.StatusInternalServerError)
|
|
|
|
w.WriteHeader(http.StatusInternalServerError)
|
|
|
|
return
|
|
|
|
return
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
linkid := link["_id"].(primitive.ObjectID)
|
|
|
|
linkid := link["_id"].(primitive.ObjectID)
|
|
|
|
newaccid := primitive.NewObjectID()
|
|
|
|
newaccid := primitive.NewObjectID()
|
|
|
|
for i := 0; i < len(sh.serviceCodeBytes); i++ {
|
|
|
|
for i := 0; i < len(sh.serviceCodeBytes); i++ {
|
|
|
|
@ -733,6 +740,8 @@ func (sh *serviceDescription) authorize(w http.ResponseWriter, r *http.Request)
|
|
|
|
return
|
|
|
|
return
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
logger.Println("session created :", accid, authtype, uid, email, newsession)
|
|
|
|
|
|
|
|
|
|
|
|
output := map[string]any{
|
|
|
|
output := map[string]any{
|
|
|
|
"sk": newsession.Hex(),
|
|
|
|
"sk": newsession.Hex(),
|
|
|
|
"expirein": sh.sessionTTL.Seconds(),
|
|
|
|
"expirein": sh.sessionTTL.Seconds(),
|
|
|
|
@ -742,6 +751,14 @@ func (sh *serviceDescription) authorize(w http.ResponseWriter, r *http.Request)
|
|
|
|
if *noauth {
|
|
|
|
if *noauth {
|
|
|
|
output["noauth"] = true
|
|
|
|
output["noauth"] = true
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if link["_ts"] != nil {
|
|
|
|
|
|
|
|
delts := link["_ts"].(primitive.DateTime)
|
|
|
|
|
|
|
|
if !delts.Time().IsZero() {
|
|
|
|
|
|
|
|
// 삭제된 계정. 삭제 되었다고 알려주자
|
|
|
|
|
|
|
|
w.Header().Add("MG-ACCOUNT-DELETED", "TRUE")
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
bt, _ := json.Marshal(output)
|
|
|
|
bt, _ := json.Marshal(output)
|
|
|
|
w.Write(bt)
|
|
|
|
w.Write(bt)
|
|
|
|
} else if len(session) > 0 {
|
|
|
|
} else if len(session) > 0 {
|
|
|
|
@ -757,8 +774,7 @@ func (sh *serviceDescription) authorize(w http.ResponseWriter, r *http.Request)
|
|
|
|
},
|
|
|
|
},
|
|
|
|
}, options.Update().SetUpsert(false))
|
|
|
|
}, options.Update().SetUpsert(false))
|
|
|
|
if err != nil {
|
|
|
|
if err != nil {
|
|
|
|
logger.Error("update auth collection failed")
|
|
|
|
logger.Error("update auth collection failed :", err)
|
|
|
|
logger.Error(err)
|
|
|
|
|
|
|
|
return
|
|
|
|
return
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@ -773,6 +789,9 @@ func (sh *serviceDescription) authorize(w http.ResponseWriter, r *http.Request)
|
|
|
|
"sk": session,
|
|
|
|
"sk": session,
|
|
|
|
"expirein": sh.sessionTTL.Seconds(),
|
|
|
|
"expirein": sh.sessionTTL.Seconds(),
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
logger.Println("session updated :", authtype, uid, session)
|
|
|
|
|
|
|
|
|
|
|
|
bt, _ := json.Marshal(output)
|
|
|
|
bt, _ := json.Marshal(output)
|
|
|
|
w.Write(bt)
|
|
|
|
w.Write(bt)
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
@ -815,6 +834,7 @@ func (sh *serviceDescription) delacc(w http.ResponseWriter, r *http.Request) {
|
|
|
|
sType := queryvals.Get("stype")
|
|
|
|
sType := queryvals.Get("stype")
|
|
|
|
sId := queryvals.Get("sid")
|
|
|
|
sId := queryvals.Get("sid")
|
|
|
|
sk := queryvals.Get("sk")
|
|
|
|
sk := queryvals.Get("sk")
|
|
|
|
|
|
|
|
cancel := queryvals.Has("cancel")
|
|
|
|
|
|
|
|
|
|
|
|
authInfo := sh.auths.Find(sk)
|
|
|
|
authInfo := sh.auths.Find(sk)
|
|
|
|
if authInfo == nil {
|
|
|
|
if authInfo == nil {
|
|
|
|
@ -830,7 +850,7 @@ func (sh *serviceDescription) delacc(w http.ResponseWriter, r *http.Request) {
|
|
|
|
return
|
|
|
|
return
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
accids, err := sh.mongoClient.FindAll(CollectionAccount, bson.M{
|
|
|
|
linkidMap, err := sh.mongoClient.FindAll(CollectionAccount, bson.M{
|
|
|
|
"accid": authInfo.Accid,
|
|
|
|
"accid": authInfo.Accid,
|
|
|
|
}, options.Find().SetProjection(bson.M{
|
|
|
|
}, options.Find().SetProjection(bson.M{
|
|
|
|
"_id": 1,
|
|
|
|
"_id": 1,
|
|
|
|
@ -841,27 +861,55 @@ func (sh *serviceDescription) delacc(w http.ResponseWriter, r *http.Request) {
|
|
|
|
return
|
|
|
|
return
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var addIdFilter bson.A
|
|
|
|
var linkidAry primitive.A
|
|
|
|
for _, accid := range accids {
|
|
|
|
for _, linkid := range linkidMap {
|
|
|
|
addIdFilter = append(addIdFilter, accid["_id"].(primitive.ObjectID))
|
|
|
|
linkidAry = append(linkidAry, linkid["_id"].(primitive.ObjectID))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
delfilter := bson.D{{Key: "_id", Value: bson.D{{Key: "$in", Value: addIdFilter}}}}
|
|
|
|
delfilter := primitive.M{"_id": bson.M{"$in": linkidAry}}
|
|
|
|
delaccnum, err := sh.mongoClient.DeleteMany(CollectionAccount, delfilter)
|
|
|
|
var delop primitive.M
|
|
|
|
if err != nil {
|
|
|
|
if !cancel {
|
|
|
|
logger.Error("delacc failed. Delete many CollectionAccount err :", err)
|
|
|
|
curtime := primitive.NewDateTimeFromTime(time.Now().UTC())
|
|
|
|
w.WriteHeader(http.StatusBadRequest)
|
|
|
|
delop = primitive.M{
|
|
|
|
|
|
|
|
"$set": primitive.M{"_ts": curtime},
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if sType == AuthPlatformFirebaseAuth {
|
|
|
|
|
|
|
|
sh.mongoClient.Delete(CollectionFirebaseUserInfo, bson.M{
|
|
|
|
|
|
|
|
"firebaseuserid": sId,
|
|
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
delfilter["platform"] = sType
|
|
|
|
|
|
|
|
targetLinkId, err := sh.mongoClient.FindAll(CollectionLink, delfilter, options.Find().SetProjection(bson.M{
|
|
|
|
|
|
|
|
"_id": 1,
|
|
|
|
|
|
|
|
}))
|
|
|
|
|
|
|
|
if len(targetLinkId) != 1 {
|
|
|
|
|
|
|
|
logger.Error("delacc failed. FindAll link err :", err)
|
|
|
|
|
|
|
|
w.WriteHeader(http.StatusInternalServerError)
|
|
|
|
|
|
|
|
return
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
delfilter = primitive.M{"_id": targetLinkId[0]["_id"].(primitive.ObjectID)}
|
|
|
|
|
|
|
|
delop = primitive.M{
|
|
|
|
|
|
|
|
"$unset": primitive.M{"_ts": true},
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
updated, _, err := sh.mongoClient.Update(CollectionAccount, delfilter, delop, options.Update().SetUpsert(false))
|
|
|
|
|
|
|
|
if !updated || err != nil {
|
|
|
|
|
|
|
|
logger.Error("delacc failed. Update CollectionAccount timestamp err :", err)
|
|
|
|
|
|
|
|
w.WriteHeader(http.StatusInternalServerError)
|
|
|
|
return
|
|
|
|
return
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
_, err = sh.mongoClient.DeleteMany(CollectionLink, delfilter)
|
|
|
|
updated, _, err = sh.mongoClient.Update(CollectionLink, delfilter, delop, options.Update().SetUpsert(false))
|
|
|
|
if err != nil {
|
|
|
|
if !updated || err != nil {
|
|
|
|
logger.Error("delacc failed. Delete many CollectionLink err :", err)
|
|
|
|
logger.Error("delacc failed. Update CollectionLink timestamp err :", err)
|
|
|
|
w.WriteHeader(http.StatusBadRequest)
|
|
|
|
w.WriteHeader(http.StatusInternalServerError)
|
|
|
|
return
|
|
|
|
return
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
logger.Println("delacc success :", delaccnum)
|
|
|
|
logger.Println("delacc success :", linkidMap)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func (sh *serviceDescription) serveHTTP(w http.ResponseWriter, r *http.Request) {
|
|
|
|
func (sh *serviceDescription) serveHTTP(w http.ResponseWriter, r *http.Request) {
|
|
|
|
@ -964,7 +1012,7 @@ func (sh *serviceDescription) serveHTTP(w http.ResponseWriter, r *http.Request)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
logger.Println("div is not found :", divname)
|
|
|
|
logger.Println("div is not found :", divname, sh.Divisions)
|
|
|
|
w.WriteHeader(http.StatusBadRequest)
|
|
|
|
w.WriteHeader(http.StatusBadRequest)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
|