aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoryp05327 <576951401@qq.com>2024-07-25 19:11:04 +0900
committerGitHub <noreply@github.com>2024-07-25 18:11:04 +0800
commitcc044818c33ff066c4e5869c9e75de9707def6ed (patch)
treed679956f5cd3c56836846f9466cecd2e0a2893dd
parentd8f82cbc780d09bb7ad074407a48480f0333b4b3 (diff)
downloadgitea-cc044818c33ff066c4e5869c9e75de9707def6ed.tar.gz
gitea-cc044818c33ff066c4e5869c9e75de9707def6ed.zip
Support delete user email in admin panel (#31690)
![QQ_1721784609320](https://github.com/user-attachments/assets/23f08bf3-93f4-44d7-963d-10380ef8c1f1) ![QQ_1721784616403](https://github.com/user-attachments/assets/667cbd1e-5e21-4489-8d18-2a7be85190db) ![QQ_1721784626722](https://github.com/user-attachments/assets/495beb94-dfa2-481c-aa60-d5115cad1ae1) --------- Co-authored-by: Jason Song <i@wolfogre.com>
-rw-r--r--models/user/email_address.go1
-rw-r--r--options/locale/locale_en-US.ini4
-rw-r--r--routers/web/admin/emails.go30
-rw-r--r--routers/web/web.go1
-rw-r--r--templates/admin/emails/list.tmpl18
5 files changed, 54 insertions, 0 deletions
diff --git a/models/user/email_address.go b/models/user/email_address.go
index 71b96c00be..5c04909ed7 100644
--- a/models/user/email_address.go
+++ b/models/user/email_address.go
@@ -395,6 +395,7 @@ type SearchEmailOptions struct {
// SearchEmailResult is an e-mail address found in the user or email_address table
type SearchEmailResult struct {
+ ID int64
UID int64
Email string
IsActivated bool
diff --git a/options/locale/locale_en-US.ini b/options/locale/locale_en-US.ini
index 746288bb9a..6a748aed00 100644
--- a/options/locale/locale_en-US.ini
+++ b/options/locale/locale_en-US.ini
@@ -2982,6 +2982,10 @@ emails.not_updated = Failed to update the requested email address: %v
emails.duplicate_active = This email address is already active for a different user.
emails.change_email_header = Update Email Properties
emails.change_email_text = Are you sure you want to update this email address?
+emails.delete = Delete Email
+emails.delete_desc = Are you sure you want to delete this email address?
+emails.deletion_success = The email address has been deleted.
+emails.delete_primary_email_error = You can not delete the primary email.
orgs.org_manage_panel = Organization Management
orgs.name = Name
diff --git a/routers/web/admin/emails.go b/routers/web/admin/emails.go
index 2cf4035c6a..f0d8555070 100644
--- a/routers/web/admin/emails.go
+++ b/routers/web/admin/emails.go
@@ -15,6 +15,7 @@ import (
"code.gitea.io/gitea/modules/optional"
"code.gitea.io/gitea/modules/setting"
"code.gitea.io/gitea/services/context"
+ "code.gitea.io/gitea/services/user"
)
const (
@@ -150,3 +151,32 @@ func ActivateEmail(ctx *context.Context) {
redirect.RawQuery = q.Encode()
ctx.Redirect(redirect.String())
}
+
+// DeleteEmail serves a POST request for delete a user's email
+func DeleteEmail(ctx *context.Context) {
+ u, err := user_model.GetUserByID(ctx, ctx.FormInt64("Uid"))
+ if err != nil || u == nil {
+ ctx.ServerError("GetUserByID", err)
+ return
+ }
+
+ email, err := user_model.GetEmailAddressByID(ctx, u.ID, ctx.FormInt64("id"))
+ if err != nil || email == nil {
+ ctx.ServerError("GetEmailAddressByID", err)
+ return
+ }
+
+ if err := user.DeleteEmailAddresses(ctx, u, []string{email.Email}); err != nil {
+ if user_model.IsErrPrimaryEmailCannotDelete(err) {
+ ctx.Flash.Error(ctx.Tr("admin.emails.delete_primary_email_error"))
+ ctx.JSONRedirect("")
+ return
+ }
+ ctx.ServerError("DeleteEmailAddresses", err)
+ return
+ }
+ log.Trace("Email address deleted: %s %s", u.Name, email.Email)
+
+ ctx.Flash.Success(ctx.Tr("admin.emails.deletion_success"))
+ ctx.JSONRedirect("")
+}
diff --git a/routers/web/web.go b/routers/web/web.go
index d08e8da772..0e16c1ca6c 100644
--- a/routers/web/web.go
+++ b/routers/web/web.go
@@ -725,6 +725,7 @@ func registerRoutes(m *web.Router) {
m.Group("/emails", func() {
m.Get("", admin.Emails)
m.Post("/activate", admin.ActivateEmail)
+ m.Post("/delete", admin.DeleteEmail)
})
m.Group("/orgs", func() {
diff --git a/templates/admin/emails/list.tmpl b/templates/admin/emails/list.tmpl
index 1f226afcc4..93fbb9dfc2 100644
--- a/templates/admin/emails/list.tmpl
+++ b/templates/admin/emails/list.tmpl
@@ -38,6 +38,7 @@
</th>
<th>{{ctx.Locale.Tr "admin.emails.primary"}}</th>
<th>{{ctx.Locale.Tr "admin.emails.activated"}}</th>
+ <th></th>
</tr>
</thead>
<tbody>
@@ -59,6 +60,11 @@
{{svg (Iif .IsActivated "octicon-check" "octicon-x")}}
{{end}}
</td>
+ <td>
+ <div class="tw-flex tw-gap-2">
+ <a class="delete-button" href="" data-url="{{$.Link}}/delete" data-id="{{.ID}}" data-data-uid="{{.UID}}">{{svg "octicon-trash"}}</a>
+ </div>
+ </td>
</tr>
{{end}}
</tbody>
@@ -95,4 +101,16 @@
</div>
</div>
+
+<div class="ui g-modal-confirm delete modal">
+ <div class="header">
+ {{svg "octicon-trash"}}
+ {{ctx.Locale.Tr "admin.emails.delete"}}
+ </div>
+ <div class="content">
+ {{ctx.Locale.Tr "admin.emails.delete_desc"}}
+ </div>
+ {{template "base/modal_actions_confirm" .}}
+</div>
+
{{template "admin/layout_footer" .}}