Skip to content

Commit e5944a9

Browse files
authored
Change admin dashboard to POST (#10465)
* Add form and convert to POST * Redirect for flash Signed-off-by: jolheiser <[email protected]>
1 parent c161bb0 commit e5944a9

File tree

5 files changed

+81
-55
lines changed

5 files changed

+81
-55
lines changed

modules/auth/admin.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,3 +48,13 @@ type AdminEditUserForm struct {
4848
func (f *AdminEditUserForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors {
4949
return validate(errs, ctx.Data, f, ctx.Locale)
5050
}
51+
52+
// AdminDashboardForm form for admin dashboard operations
53+
type AdminDashboardForm struct {
54+
Op int `binding:"required"`
55+
}
56+
57+
// Validate validates form fields
58+
func (f *AdminDashboardForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors {
59+
return validate(errs, ctx.Data, f, ctx.Locale)
60+
}

routers/admin/admin.go

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import (
1616
"time"
1717

1818
"code.gitea.io/gitea/models"
19+
"code.gitea.io/gitea/modules/auth"
1920
"code.gitea.io/gitea/modules/base"
2021
"code.gitea.io/gitea/modules/context"
2122
"code.gitea.io/gitea/modules/cron"
@@ -31,7 +32,6 @@ import (
3132

3233
"gitea.com/macaron/macaron"
3334
"gitea.com/macaron/session"
34-
"github.com/unknwon/com"
3535
)
3636

3737
const (
@@ -145,15 +145,29 @@ func Dashboard(ctx *context.Context) {
145145
ctx.Data["Title"] = ctx.Tr("admin.dashboard")
146146
ctx.Data["PageIsAdmin"] = true
147147
ctx.Data["PageIsAdminDashboard"] = true
148+
ctx.Data["Stats"] = models.GetStatistic()
149+
// FIXME: update periodically
150+
updateSystemStatus()
151+
ctx.Data["SysStatus"] = sysStatus
152+
ctx.HTML(200, tplDashboard)
153+
}
154+
155+
// DashboardPost run an admin operation
156+
func DashboardPost(ctx *context.Context, form auth.AdminDashboardForm) {
157+
ctx.Data["Title"] = ctx.Tr("admin.dashboard")
158+
ctx.Data["PageIsAdmin"] = true
159+
ctx.Data["PageIsAdminDashboard"] = true
160+
ctx.Data["Stats"] = models.GetStatistic()
161+
updateSystemStatus()
162+
ctx.Data["SysStatus"] = sysStatus
148163

149164
// Run operation.
150-
op, _ := com.StrTo(ctx.Query("op")).Int()
151-
if op > 0 {
165+
if form.Op > 0 {
152166
var err error
153167
var success string
154168
shutdownCtx := graceful.GetManager().ShutdownContext()
155169

156-
switch Operation(op) {
170+
switch Operation(form.Op) {
157171
case cleanInactivateUser:
158172
success = ctx.Tr("admin.dashboard.delete_inactivate_accounts_success")
159173
err = models.DeleteInactivateUsers()
@@ -191,15 +205,9 @@ func Dashboard(ctx *context.Context) {
191205
} else {
192206
ctx.Flash.Success(success)
193207
}
194-
ctx.Redirect(setting.AppSubURL + "/admin")
195-
return
196208
}
197209

198-
ctx.Data["Stats"] = models.GetStatistic()
199-
// FIXME: update periodically
200-
updateSystemStatus()
201-
ctx.Data["SysStatus"] = sysStatus
202-
ctx.HTML(200, tplDashboard)
210+
ctx.Redirect(setting.AppSubURL + "/admin")
203211
}
204212

205213
// SendTestMail send test mail to confirm mail service is OK

routers/routes/routes.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -422,6 +422,7 @@ func RegisterRoutes(m *macaron.Macaron) {
422422
// ***** START: Admin *****
423423
m.Group("/admin", func() {
424424
m.Get("", adminReq, admin.Dashboard)
425+
m.Post("", adminReq, bindIgnErr(auth.AdminDashboardForm{}), admin.DashboardPost)
425426
m.Get("/config", admin.Config)
426427
m.Post("/config/test_mail", admin.SendTestMail)
427428
m.Group("/monitor", func() {

templates/admin/dashboard.tmpl

Lines changed: 47 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -15,50 +15,53 @@
1515
{{.i18n.Tr "admin.dashboard.operations"}}
1616
</h4>
1717
<div class="ui attached table segment">
18-
<table class="ui very basic table">
19-
<tbody>
20-
<tr>
21-
<td>{{.i18n.Tr "admin.dashboard.delete_inactivate_accounts"}}</td>
22-
<td><i class="fa fa-caret-square-o-right"></i> <a href="{{AppSubUrl}}/admin?op=1">{{.i18n.Tr "admin.dashboard.operation_run"}}</a></td>
23-
</tr>
24-
<tr>
25-
<td>{{.i18n.Tr "admin.dashboard.delete_repo_archives"}}</td>
26-
<td><i class="fa fa-caret-square-o-right"></i> <a href="{{AppSubUrl}}/admin?op=2">{{.i18n.Tr "admin.dashboard.operation_run"}}</a></td>
27-
</tr>
28-
<tr>
29-
<td>{{.i18n.Tr "admin.dashboard.delete_missing_repos"}}</td>
30-
<td><i class="fa fa-caret-square-o-right"></i> <a href="{{AppSubUrl}}/admin?op=3">{{.i18n.Tr "admin.dashboard.operation_run"}}</a></td>
31-
</tr>
32-
<tr>
33-
<td>{{.i18n.Tr "admin.dashboard.git_gc_repos"}}</td>
34-
<td><i class="fa fa-caret-square-o-right"></i> <a href="{{AppSubUrl}}/admin?op=4">{{.i18n.Tr "admin.dashboard.operation_run"}}</a></td>
35-
</tr>
36-
<tr>
37-
<td>{{.i18n.Tr "admin.dashboard.resync_all_sshkeys"}}</td>
38-
<td><i class="fa fa-caret-square-o-right"></i> <a href="{{AppSubUrl}}/admin?op=5">{{.i18n.Tr "admin.dashboard.operation_run"}}</a></td>
39-
</tr>
40-
<tr>
41-
<td>{{.i18n.Tr "admin.dashboard.resync_all_hooks"}}</td>
42-
<td><i class="fa fa-caret-square-o-right"></i> <a href="{{AppSubUrl}}/admin?op=6">{{.i18n.Tr "admin.dashboard.operation_run"}}</a></td>
43-
</tr>
44-
<tr>
45-
<td>{{.i18n.Tr "admin.dashboard.reinit_missing_repos"}}</td>
46-
<td><i class="fa fa-caret-square-o-right"></i> <a href="{{AppSubUrl}}/admin?op=7">{{.i18n.Tr "admin.dashboard.operation_run"}}</a></td>
47-
</tr>
48-
<tr>
49-
<td>{{.i18n.Tr "admin.dashboard.sync_external_users"}}</td>
50-
<td><i class="fa fa-caret-square-o-right"></i> <a href="{{AppSubUrl}}/admin?op=8">{{.i18n.Tr "admin.dashboard.operation_run"}}</a></td>
51-
</tr>
52-
<tr>
53-
<td>{{.i18n.Tr "admin.dashboard.git_fsck"}}</td>
54-
<td><i class="fa fa-caret-square-o-right"></i> <a href="{{AppSubUrl}}/admin?op=9">{{.i18n.Tr "admin.dashboard.operation_run"}}</a></td>
55-
</tr>
56-
<tr>
57-
<td>{{.i18n.Tr "admin.dashboard.delete_generated_repository_avatars"}}</td>
58-
<td><i class="fa fa-caret-square-o-right"></i> <a href="{{AppSubUrl}}/admin?op=10">{{.i18n.Tr "admin.dashboard.operation_run"}}</a></td>
59-
</tr>
60-
</tbody>
61-
</table>
18+
<form method="post" action="{{AppSubUrl}}/admin">
19+
{{.CsrfTokenHtml}}
20+
<table class="ui very basic table">
21+
<tbody>
22+
<tr>
23+
<td>{{.i18n.Tr "admin.dashboard.delete_inactivate_accounts"}}</td>
24+
<td><button type="submit" class="ui green button" name="op" value="1">{{svg "octicon-triangle-right" 16}} {{.i18n.Tr "admin.dashboard.operation_run"}}</button></td>
25+
</tr>
26+
<tr>
27+
<td>{{.i18n.Tr "admin.dashboard.delete_repo_archives"}}</td>
28+
<td><button type="submit" class="ui green button" name="op" value="2">{{svg "octicon-triangle-right" 16}} {{.i18n.Tr "admin.dashboard.operation_run"}}</button></td>
29+
</tr>
30+
<tr>
31+
<td>{{.i18n.Tr "admin.dashboard.delete_missing_repos"}}</td>
32+
<td><button type="submit" class="ui green button" name="op" value="3">{{svg "octicon-triangle-right" 16}} {{.i18n.Tr "admin.dashboard.operation_run"}}</button></td>
33+
</tr>
34+
<tr>
35+
<td>{{.i18n.Tr "admin.dashboard.git_gc_repos"}}</td>
36+
<td><button type="submit" class="ui green button" name="op" value="4">{{svg "octicon-triangle-right" 16}} {{.i18n.Tr "admin.dashboard.operation_run"}}</button></td>
37+
</tr>
38+
<tr>
39+
<td>{{.i18n.Tr "admin.dashboard.resync_all_sshkeys"}}</td>
40+
<td><button type="submit" class="ui green button" name="op" value="5">{{svg "octicon-triangle-right" 16}} {{.i18n.Tr "admin.dashboard.operation_run"}}</button></td>
41+
</tr>
42+
<tr>
43+
<td>{{.i18n.Tr "admin.dashboard.resync_all_hooks"}}</td>
44+
<td><button type="submit" class="ui green button" name="op" value="6">{{svg "octicon-triangle-right" 16}} {{.i18n.Tr "admin.dashboard.operation_run"}}</button></td>
45+
</tr>
46+
<tr>
47+
<td>{{.i18n.Tr "admin.dashboard.reinit_missing_repos"}}</td>
48+
<td><button type="submit" class="ui green button" name="op" value="7">{{svg "octicon-triangle-right" 16}} {{.i18n.Tr "admin.dashboard.operation_run"}}</button></td>
49+
</tr>
50+
<tr>
51+
<td>{{.i18n.Tr "admin.dashboard.sync_external_users"}}</td>
52+
<td><button type="submit" class="ui green button" name="op" value="8">{{svg "octicon-triangle-right" 16}} {{.i18n.Tr "admin.dashboard.operation_run"}}</button></td>
53+
</tr>
54+
<tr>
55+
<td>{{.i18n.Tr "admin.dashboard.git_fsck"}}</td>
56+
<td><button type="submit" class="ui green button" name="op" value="9">{{svg "octicon-triangle-right" 16}} {{.i18n.Tr "admin.dashboard.operation_run"}}</button></td>
57+
</tr>
58+
<tr>
59+
<td>{{.i18n.Tr "admin.dashboard.delete_generated_repository_avatars"}}</td>
60+
<td><button type="submit" class="ui green button" name="op" value="10">{{svg "octicon-triangle-right" 16}} {{.i18n.Tr "admin.dashboard.operation_run"}}</button></td>
61+
</tr>
62+
</tbody>
63+
</table>
64+
</form>
6265
</div>
6366

6467
<h4 class="ui top attached header">

web_src/less/_admin.less

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,10 @@
2828
}
2929
}
3030
}
31+
32+
form button[type='submit'] {
33+
padding: 5px 8px;
34+
}
3135
}
3236

3337
.ui.header,

0 commit comments

Comments
 (0)