From ef373ca736dd4ad69c291c9bf2d46c6736ff897d Mon Sep 17 00:00:00 2001 From: Satinder Singh Date: Tue, 30 Jan 2024 07:18:32 -0800 Subject: [PATCH] feat: add deletedTime to user (#2652) --- object/syncer_util.go | 3 +++ object/token_jwt.go | 2 ++ object/user.go | 5 +++++ object/user_upload.go | 1 + swagger/swagger.json | 3 +++ swagger/swagger.yml | 2 ++ web/src/Setting.js | 2 +- web/src/UserEditPage.js | 2 ++ web/src/WebhookEditPage.js | 1 + 9 files changed, 20 insertions(+), 1 deletion(-) diff --git a/object/syncer_util.go b/object/syncer_util.go index 05ff32e0..f88af418 100644 --- a/object/syncer_util.go +++ b/object/syncer_util.go @@ -93,6 +93,8 @@ func (syncer *Syncer) setUserByKeyValue(user *User, key string, value string) { user.CreatedTime = value case "UpdatedTime": user.UpdatedTime = value + case "DeletedTime": + user.DeletedTime = value case "Id": user.Id = value case "Type": @@ -266,6 +268,7 @@ func (syncer *Syncer) getMapFromOriginalUser(user *OriginalUser) map[string]stri m["Name"] = user.Name m["CreatedTime"] = user.CreatedTime m["UpdatedTime"] = user.UpdatedTime + m["DeletedTime"] = user.DeletedTime m["Id"] = user.Id m["Type"] = user.Type m["Password"] = user.Password diff --git a/object/token_jwt.go b/object/token_jwt.go index 06ac5a43..e49bb649 100644 --- a/object/token_jwt.go +++ b/object/token_jwt.go @@ -48,6 +48,7 @@ type UserWithoutThirdIdp struct { Name string `xorm:"varchar(100) notnull pk" json:"name"` CreatedTime string `xorm:"varchar(100) index" json:"createdTime"` UpdatedTime string `xorm:"varchar(100)" json:"updatedTime"` + DeletedTime string `xorm:"varchar(100)" json:"deletedTime"` Id string `xorm:"varchar(100) index" json:"id"` Type string `xorm:"varchar(100)" json:"type"` @@ -167,6 +168,7 @@ func getUserWithoutThirdIdp(user *User) *UserWithoutThirdIdp { Name: user.Name, CreatedTime: user.CreatedTime, UpdatedTime: user.UpdatedTime, + DeletedTime: user.DeletedTime, Id: user.Id, Type: user.Type, diff --git a/object/user.go b/object/user.go index 5ff4b305..1fd9dfd2 100644 --- a/object/user.go +++ b/object/user.go @@ -49,6 +49,7 @@ type User struct { Name string `xorm:"varchar(100) notnull pk" json:"name"` CreatedTime string `xorm:"varchar(100) index" json:"createdTime"` UpdatedTime string `xorm:"varchar(100)" json:"updatedTime"` + DeletedTime string `xorm:"varchar(100)" json:"deletedTime"` Id string `xorm:"varchar(100) index" json:"id"` ExternalId string `xorm:"varchar(100) index" json:"externalId"` @@ -658,6 +659,10 @@ func UpdateUser(id string, user *User, columns []string, isAdmin bool) (bool, er columns = append(columns, "updated_time") user.UpdatedTime = util.GetCurrentTime() + if len(user.DeletedTime) > 0 { + columns = append(columns, "deleted_time") + } + if util.ContainsString(columns, "groups") { _, err := userEnforcer.UpdateGroupsForUser(user.GetId(), user.Groups) if err != nil { diff --git a/object/user_upload.go b/object/user_upload.go index 5573d72f..c4df3d6e 100644 --- a/object/user_upload.go +++ b/object/user_upload.go @@ -134,6 +134,7 @@ func UploadUsers(owner string, path string) (bool, error) { LastSigninIp: parseLineItem(&line, 38), Ldap: "", Properties: map[string]string{}, + DeletedTime: parseLineItem(&line, 39), } if _, ok := oldUserMap[user.GetId()]; !ok { diff --git a/swagger/swagger.json b/swagger/swagger.json index 15802521..1f9d9c1d 100644 --- a/swagger/swagger.json +++ b/swagger/swagger.json @@ -7446,6 +7446,9 @@ "displayName": { "type": "string" }, + "deletedTime": { + "type": "string" + }, "douyin": { "type": "string" }, diff --git a/swagger/swagger.yml b/swagger/swagger.yml index ea55ec1e..2095501c 100644 --- a/swagger/swagger.yml +++ b/swagger/swagger.yml @@ -4900,6 +4900,8 @@ definitions: type: string deezer: type: string + deletedTime: + type: string digitalocean: type: string dingtalk: diff --git a/web/src/Setting.js b/web/src/Setting.js index bae2da12..a5ea98dc 100644 --- a/web/src/Setting.js +++ b/web/src/Setting.js @@ -1448,7 +1448,7 @@ export function getFriendlyUserName(account) { } export function getUserCommonFields() { - return ["Owner", "Name", "CreatedTime", "UpdatedTime", "Id", "Type", "Password", "PasswordSalt", "DisplayName", "FirstName", "LastName", "Avatar", "PermanentAvatar", + return ["Owner", "Name", "CreatedTime", "UpdatedTime", "DeletedTime", "Id", "Type", "Password", "PasswordSalt", "DisplayName", "FirstName", "LastName", "Avatar", "PermanentAvatar", "Email", "EmailVerified", "Phone", "Location", "Address", "Affiliation", "Title", "IdCardType", "IdCard", "Homepage", "Bio", "Tag", "Region", "Language", "Gender", "Birthday", "Education", "Score", "Ranking", "IsDefaultAvatar", "IsOnline", "IsAdmin", "IsForbidden", "IsDeleted", "CreatedIp", "PreferredMfaType", "TotpSecret", "SignupApplication"]; diff --git a/web/src/UserEditPage.js b/web/src/UserEditPage.js index 71b0381c..ca683f22 100644 --- a/web/src/UserEditPage.js +++ b/web/src/UserEditPage.js @@ -27,6 +27,7 @@ import * as ApplicationBackend from "./backend/ApplicationBackend"; import PasswordModal from "./common/modal/PasswordModal"; import ResetModal from "./common/modal/ResetModal"; import AffiliationSelect from "./common/select/AffiliationSelect"; +import moment from "moment"; import OAuthWidget from "./common/OAuthWidget"; import SamlWidget from "./common/SamlWidget"; import RegionSelect from "./common/select/RegionSelect"; @@ -869,6 +870,7 @@ class UserEditPage extends React.Component { { this.updateUserField("isDeleted", checked); + this.updateUserField("deletedTime", checked ? moment().format() : ""); }} /> diff --git a/web/src/WebhookEditPage.js b/web/src/WebhookEditPage.js index 90d03917..545008a2 100644 --- a/web/src/WebhookEditPage.js +++ b/web/src/WebhookEditPage.js @@ -62,6 +62,7 @@ const userTemplate = { "name": "admin", "createdTime": "2020-07-16T21:46:52+08:00", "updatedTime": "", + "deletedTime": "", "id": "9eb20f79-3bb5-4e74-99ac-39e3b9a171e8", "type": "normal-user", "password": "***",