From d8e18d7ffcafd01c051a58aab98eff1401e75529 Mon Sep 17 00:00:00 2001 From: mklee Date: Tue, 9 Jan 2024 19:56:57 +0900 Subject: [PATCH] =?UTF-8?q?[=EC=9D=B4=EB=AF=BC=EA=B6=8C]=20=EC=84=9C?= =?UTF-8?q?=EB=B9=84=EC=8A=A4=20=EC=A4=80=EB=B9=84=20-=20=EA=B3=84?= =?UTF-8?q?=EC=A0=95=20=EC=82=AD=EC=A0=9C=20=EC=8B=9C,=20TTL=20=EC=A0=81?= =?UTF-8?q?=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config_template.json | 1 + core/maingate.go | 9 +++++++++ core/service.go | 25 ++++++++++++++++--------- 3 files changed, 26 insertions(+), 9 deletions(-) diff --git a/config_template.json b/config_template.json index 4aca86f..8c0ecff 100644 --- a/config_template.json +++ b/config_template.json @@ -1,6 +1,7 @@ { "maingate_mongodb_url": "mongodb://...", "autologin_ttl": 604800, + "acc_del_ttl": 7776000, "maximum_num_link_account": 10, "redirect_base_url": "", "google_client_id" : "", diff --git a/core/maingate.go b/core/maingate.go index d168a6a..7d61003 100644 --- a/core/maingate.go +++ b/core/maingate.go @@ -124,6 +124,7 @@ type maingateConfig struct { Mongo string `json:"maingate_mongodb_url"` SessionTTL int64 `json:"maingate_session_ttl"` Autologin_ttl int64 `json:"autologin_ttl"` + AccDelTTL int64 `json:"acc_del_ttl"` MaximumNumLinkAccount int64 `json:"maximum_num_link_account"` RedirectBaseUrl string `json:"redirect_base_url"` GoogleClientId string `json:"google_client_id"` @@ -354,6 +355,14 @@ func (mg *Maingate) prepare(context context.Context) (err error) { return makeErrorWithStack(err) } + if err = mg.mongoClient.MakeExpireIndex(CollectionAccount, int32(mg.AccDelTTL)); err != nil { + return makeErrorWithStack(err) + } + + if err = mg.mongoClient.MakeExpireIndex(CollectionLink, int32(mg.AccDelTTL)); err != nil { + return makeErrorWithStack(err) + } + // Delete대신 _ts로 expire시킴. pipeline에 삭제 알려주기 위함 if err = mg.mongoClient.MakeExpireIndex(CollectionWhitelist, 10); err != nil { return makeErrorWithStack(err) diff --git a/core/service.go b/core/service.go index 0058d0b..fc9df45 100644 --- a/core/service.go +++ b/core/service.go @@ -673,6 +673,7 @@ func (sh *serviceDescription) authorize(w http.ResponseWriter, r *http.Request) link, err := sh.mongoClient.FindOneAndUpdate(CollectionLink, bson.M{ "platform": authtype, "uid": uid, + "_ts": bson.M{"$exists": false}, }, bson.M{ "$setOnInsert": bson.M{ "create": createtime, @@ -850,27 +851,33 @@ func (sh *serviceDescription) delacc(w http.ResponseWriter, r *http.Request) { return } - var addIdFilter bson.A + var addIdFilter primitive.A for _, accid := range accids { addIdFilter = append(addIdFilter, accid["_id"].(primitive.ObjectID)) } - delfilter := bson.D{{Key: "_id", Value: bson.D{{Key: "$in", Value: addIdFilter}}}} - delaccnum, err := sh.mongoClient.DeleteMany(CollectionAccount, delfilter) - if err != nil { - logger.Error("delacc failed. Delete many CollectionAccount err :", err) + delfilter := primitive.M{"_id": bson.M{"$in": addIdFilter}} + curtime := primitive.NewDateTimeFromTime(time.Now().UTC()) + updated, _, err := sh.mongoClient.Update(CollectionAccount, delfilter, bson.M{ + "$set": bson.M{"_ts": curtime}, + }, options.Update().SetUpsert(false)) + + if !updated || err != nil { + logger.Error("delacc failed. Update CollectionAccount timestamp err :", err) w.WriteHeader(http.StatusInternalServerError) return } - _, err = sh.mongoClient.DeleteMany(CollectionLink, delfilter) - if err != nil { - logger.Error("delacc failed. Delete many CollectionLink err :", err) + updated, _, err = sh.mongoClient.Update(CollectionLink, delfilter, bson.M{ + "$set": bson.M{"_ts": curtime}, + }, options.Update().SetUpsert(false)) + if !updated || err != nil { + logger.Error("delacc failed. Update CollectionLink timestamp err :", err) w.WriteHeader(http.StatusInternalServerError) return } - logger.Println("delacc success :", delaccnum) + logger.Println("delacc success :", accids) } func (sh *serviceDescription) serveHTTP(w http.ResponseWriter, r *http.Request) {