From 8a8bd50e287d68ba6c515f46709f5c3d8958a937 Mon Sep 17 00:00:00 2001 From: mountain Date: Wed, 29 Nov 2023 17:36:25 +0900 Subject: [PATCH] =?UTF-8?q?=EA=B3=84=EC=A0=95=20=EC=A0=9C=EC=9E=AC=20?= =?UTF-8?q?=EA=B0=9C=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/api.go | 54 ++++++++++++++++++++++++------------------------ core/api_test.go | 30 --------------------------- core/maingate.go | 11 ++-------- core/service.go | 16 ++++---------- 4 files changed, 33 insertions(+), 78 deletions(-) diff --git a/core/api.go b/core/api.go index 51774f5..847f720 100644 --- a/core/api.go +++ b/core/api.go @@ -160,9 +160,12 @@ func (caller apiCaller) uploadAPI(w http.ResponseWriter, r *http.Request) error func (caller apiCaller) blockAPI(w http.ResponseWriter, r *http.Request) error { mg := caller.mg + logger.Println("blockAPI :", r.Method) if r.Method == "GET" { target, ok := gocommon.ReadObjectIDFormValue(r.Form, "accid") + logger.Println("Get :", target, ok) if !ok { + // 페이지네이션 해야할 듯 json.NewEncoder(w).Encode(mg.bl.all()) } else if !target.IsZero() { if blocked, ok := mg.bl.get(target); ok && blocked != nil { @@ -170,37 +173,34 @@ func (caller apiCaller) blockAPI(w http.ResponseWriter, r *http.Request) error { } } } else if r.Method == "PUT" { - body, _ := io.ReadAll(r.Body) - - var bipl blockinfoWithStringId - if err := json.Unmarshal(body, &bipl); err != nil { + var targets struct { + Start primitive.DateTime + End primitive.DateTime + Accounts map[primitive.ObjectID]primitive.M // accid->meta + } + if err := gocommon.MakeDecoder(r).Decode(&targets); err != nil { return err } - accid, err := primitive.ObjectIDFromHex(bipl.StrId) - if err != nil { - return err + for accid, meta := range targets.Accounts { + bi := blockinfo{ + Start: targets.Start, + End: targets.End, + Meta: meta, + } + + _, _, err := mg.mongoClient.Update(CollectionBlock, bson.M{ + "_id": accid, + }, bson.M{ + "$set": &bi, + }, options.Update().SetUpsert(true)) + if err != nil { + logger.Println("account is not blocked. err :", err) + } else { + logger.Println("account is blocked :", meta) + mg.sessionProvider.Delete(accid) + } } - - bi := blockinfo{ - Start: primitive.NewDateTimeFromTime(time.Unix(bipl.StartUnix, 0)), - End: primitive.NewDateTimeFromTime(time.Unix(bipl.EndUnix, 0)), - Reason: bipl.Reason, - } - - logger.Println("bi :", accid, bi) - - _, _, err = mg.mongoClient.Update(CollectionBlock, bson.M{ - "_id": accid, - }, bson.M{ - "$set": &bi, - }, options.Update().SetUpsert(true)) - - if err != nil { - return err - } - - mg.sessionProvider.Delete(accid) } else if r.Method == "DELETE" { id := r.URL.Query().Get("id") diff --git a/core/api_test.go b/core/api_test.go index 38f7e8a..632f804 100644 --- a/core/api_test.go +++ b/core/api_test.go @@ -1,39 +1,9 @@ package core import ( - "context" - "fmt" "testing" - "time" - - "go.mongodb.org/mongo-driver/bson" - "go.mongodb.org/mongo-driver/bson/primitive" - "go.mongodb.org/mongo-driver/mongo/options" - "repositories.action2quare.com/ayo/gocommon" ) func TestMakeLocalUniqueId(t *testing.T) { - ts := int64(1690815600) - start := primitive.NewDateTimeFromTime(time.Unix(ts, 0)) - ts = int64(1693493999) - end := primitive.NewDateTimeFromTime(time.Unix(ts, 0)) - fmt.Println(start.Time().Format(time.RFC3339)) - fmt.Println(end.Time().Format(time.RFC3339)) - - mongoClient, err := gocommon.NewMongoClient(context.Background(), "mongodb://121.134.91.160:27018/?replicaSet=rs0&retrywrites=true") - if err != nil { - t.Error(err) - } - - bi := blockinfo{ - Start: start, - End: end, - Reason: "test", - } - mongoClient.Update(CollectionBlock, bson.M{ - "_id": primitive.NewObjectID(), - }, bson.M{ - "$set": &bi, - }, options.Update().SetUpsert(true)) } diff --git a/core/maingate.go b/core/maingate.go index 2879a6b..d6fb12d 100644 --- a/core/maingate.go +++ b/core/maingate.go @@ -387,6 +387,8 @@ func (mg *Maingate) prepare(context context.Context) (err error) { if err := mg.mongoClient.AllAs(CollectionBlock, &blocks); err != nil { return logger.ErrorWithCallStack(err) } + + logger.Println("allblocks :", blocks) mg.bl.init(blocks) go mg.wl.watchCollection(context, CollectionWhitelist, mg.mongoClient) @@ -870,15 +872,6 @@ func JWTparseCode(keyurl string, code string) (string, string, string) { return claims["sub"].(string), email, nonce } -func (mg *Maingate) google_analytics_html(w http.ResponseWriter, r *http.Request) { - parsedTemplate, _ := template.ParseFiles("template/track-event.html") - err := parsedTemplate.Execute(w, nil) - if err != nil { - logger.Error("Error executing template :", err) - return - } -} - func (mg *Maingate) google_analytics_js(w http.ResponseWriter, r *http.Request) { fgaconfig := Firebase_Google_Analytics_JS_SDK_Config{ FGA_apiKey: mg.FGA_apiKey, diff --git a/core/service.go b/core/service.go index 6f8e124..b685a58 100644 --- a/core/service.go +++ b/core/service.go @@ -22,17 +22,10 @@ import ( ) type blockinfo struct { - Start primitive.DateTime `bson:"start" json:"start"` - End primitive.DateTime `bson:"_ts" json:"_ts"` - Reason string `bson:"reason" json:"reason"` - Accid primitive.ObjectID `bson:"_id,omitempty" json:"_id,omitempty"` -} - -type blockinfoWithStringId struct { - Reason string `bson:"reason" json:"reason"` - StrId string `bson:"id" json:"id"` - StartUnix int64 `bson:"start_unix" json:"start_unix"` - EndUnix int64 `bson:"end_unix" json:"end_unix"` + Start primitive.DateTime `bson:"start" json:"start"` + End primitive.DateTime `bson:"_ts" json:"_ts"` + Accid primitive.ObjectID `bson:"_id,omitempty" json:"_id,omitempty"` + Meta primitive.M `bson:"meta,omitempty" json:"meta,omitempty"` } type whitelistmember struct { @@ -663,7 +656,6 @@ func (sh *serviceDescription) authorize(w http.ResponseWriter, r *http.Request) // 블럭된 계정. 블락 정보를 알려준다. w.Header().Add("MG-ACCOUNTBLOCK-START", strconv.FormatInt(bi.Start.Time().Unix(), 10)) w.Header().Add("MG-ACCOUNTBLOCK-END", strconv.FormatInt(bi.End.Time().Unix(), 10)) - w.Header().Add("MG-ACCOUNTBLOCK-REASON", bi.Reason) w.WriteHeader(http.StatusUnauthorized) return }