summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--modules/auth/admin.go10
-rw-r--r--routers/admin/admin.go30
-rw-r--r--routers/routes/routes.go1
-rw-r--r--templates/admin/dashboard.tmpl91
-rw-r--r--web_src/less/_admin.less4
5 files changed, 81 insertions, 55 deletions
diff --git a/modules/auth/admin.go b/modules/auth/admin.go
index 975069a4b7..a772680680 100644
--- a/modules/auth/admin.go
+++ b/modules/auth/admin.go
@@ -48,3 +48,13 @@ type AdminEditUserForm struct {
func (f *AdminEditUserForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors {
return validate(errs, ctx.Data, f, ctx.Locale)
}
+
+// AdminDashboardForm form for admin dashboard operations
+type AdminDashboardForm struct {
+ Op int `binding:"required"`
+}
+
+// Validate validates form fields
+func (f *AdminDashboardForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors {
+ return validate(errs, ctx.Data, f, ctx.Locale)
+}
diff --git a/routers/admin/admin.go b/routers/admin/admin.go
index cd425271a3..1b4a8631cd 100644
--- a/routers/admin/admin.go
+++ b/routers/admin/admin.go
@@ -16,6 +16,7 @@ import (
"time"
"code.gitea.io/gitea/models"
+ "code.gitea.io/gitea/modules/auth"
"code.gitea.io/gitea/modules/base"
"code.gitea.io/gitea/modules/context"
"code.gitea.io/gitea/modules/cron"
@@ -31,7 +32,6 @@ import (
"gitea.com/macaron/macaron"
"gitea.com/macaron/session"
- "github.com/unknwon/com"
)
const (
@@ -145,15 +145,29 @@ func Dashboard(ctx *context.Context) {
ctx.Data["Title"] = ctx.Tr("admin.dashboard")
ctx.Data["PageIsAdmin"] = true
ctx.Data["PageIsAdminDashboard"] = true
+ ctx.Data["Stats"] = models.GetStatistic()
+ // FIXME: update periodically
+ updateSystemStatus()
+ ctx.Data["SysStatus"] = sysStatus
+ ctx.HTML(200, tplDashboard)
+}
+
+// DashboardPost run an admin operation
+func DashboardPost(ctx *context.Context, form auth.AdminDashboardForm) {
+ ctx.Data["Title"] = ctx.Tr("admin.dashboard")
+ ctx.Data["PageIsAdmin"] = true
+ ctx.Data["PageIsAdminDashboard"] = true
+ ctx.Data["Stats"] = models.GetStatistic()
+ updateSystemStatus()
+ ctx.Data["SysStatus"] = sysStatus
// Run operation.
- op, _ := com.StrTo(ctx.Query("op")).Int()
- if op > 0 {
+ if form.Op > 0 {
var err error
var success string
shutdownCtx := graceful.GetManager().ShutdownContext()
- switch Operation(op) {
+ switch Operation(form.Op) {
case cleanInactivateUser:
success = ctx.Tr("admin.dashboard.delete_inactivate_accounts_success")
err = models.DeleteInactivateUsers()
@@ -191,15 +205,9 @@ func Dashboard(ctx *context.Context) {
} else {
ctx.Flash.Success(success)
}
- ctx.Redirect(setting.AppSubURL + "/admin")
- return
}
- ctx.Data["Stats"] = models.GetStatistic()
- // FIXME: update periodically
- updateSystemStatus()
- ctx.Data["SysStatus"] = sysStatus
- ctx.HTML(200, tplDashboard)
+ ctx.Redirect(setting.AppSubURL + "/admin")
}
// SendTestMail send test mail to confirm mail service is OK
diff --git a/routers/routes/routes.go b/routers/routes/routes.go
index 69745f6ebc..df39d9e370 100644
--- a/routers/routes/routes.go
+++ b/routers/routes/routes.go
@@ -422,6 +422,7 @@ func RegisterRoutes(m *macaron.Macaron) {
// ***** START: Admin *****
m.Group("/admin", func() {
m.Get("", adminReq, admin.Dashboard)
+ m.Post("", adminReq, bindIgnErr(auth.AdminDashboardForm{}), admin.DashboardPost)
m.Get("/config", admin.Config)
m.Post("/config/test_mail", admin.SendTestMail)
m.Group("/monitor", func() {
diff --git a/templates/admin/dashboard.tmpl b/templates/admin/dashboard.tmpl
index 262db04b90..151b489710 100644
--- a/templates/admin/dashboard.tmpl
+++ b/templates/admin/dashboard.tmpl
@@ -15,50 +15,53 @@
{{.i18n.Tr "admin.dashboard.operations"}}
</h4>
<div class="ui attached table segment">
- <table class="ui very basic table">
- <tbody>
- <tr>
- <td>{{.i18n.Tr "admin.dashboard.delete_inactivate_accounts"}}</td>
- <td><i class="fa fa-caret-square-o-right"></i> <a href="{{AppSubUrl}}/admin?op=1">{{.i18n.Tr "admin.dashboard.operation_run"}}</a></td>
- </tr>
- <tr>
- <td>{{.i18n.Tr "admin.dashboard.delete_repo_archives"}}</td>
- <td><i class="fa fa-caret-square-o-right"></i> <a href="{{AppSubUrl}}/admin?op=2">{{.i18n.Tr "admin.dashboard.operation_run"}}</a></td>
- </tr>
- <tr>
- <td>{{.i18n.Tr "admin.dashboard.delete_missing_repos"}}</td>
- <td><i class="fa fa-caret-square-o-right"></i> <a href="{{AppSubUrl}}/admin?op=3">{{.i18n.Tr "admin.dashboard.operation_run"}}</a></td>
- </tr>
- <tr>
- <td>{{.i18n.Tr "admin.dashboard.git_gc_repos"}}</td>
- <td><i class="fa fa-caret-square-o-right"></i> <a href="{{AppSubUrl}}/admin?op=4">{{.i18n.Tr "admin.dashboard.operation_run"}}</a></td>
- </tr>
- <tr>
- <td>{{.i18n.Tr "admin.dashboard.resync_all_sshkeys"}}</td>
- <td><i class="fa fa-caret-square-o-right"></i> <a href="{{AppSubUrl}}/admin?op=5">{{.i18n.Tr "admin.dashboard.operation_run"}}</a></td>
- </tr>
- <tr>
- <td>{{.i18n.Tr "admin.dashboard.resync_all_hooks"}}</td>
- <td><i class="fa fa-caret-square-o-right"></i> <a href="{{AppSubUrl}}/admin?op=6">{{.i18n.Tr "admin.dashboard.operation_run"}}</a></td>
- </tr>
- <tr>
- <td>{{.i18n.Tr "admin.dashboard.reinit_missing_repos"}}</td>
- <td><i class="fa fa-caret-square-o-right"></i> <a href="{{AppSubUrl}}/admin?op=7">{{.i18n.Tr "admin.dashboard.operation_run"}}</a></td>
- </tr>
- <tr>
- <td>{{.i18n.Tr "admin.dashboard.sync_external_users"}}</td>
- <td><i class="fa fa-caret-square-o-right"></i> <a href="{{AppSubUrl}}/admin?op=8">{{.i18n.Tr "admin.dashboard.operation_run"}}</a></td>
- </tr>
- <tr>
- <td>{{.i18n.Tr "admin.dashboard.git_fsck"}}</td>
- <td><i class="fa fa-caret-square-o-right"></i> <a href="{{AppSubUrl}}/admin?op=9">{{.i18n.Tr "admin.dashboard.operation_run"}}</a></td>
- </tr>
- <tr>
- <td>{{.i18n.Tr "admin.dashboard.delete_generated_repository_avatars"}}</td>
- <td><i class="fa fa-caret-square-o-right"></i> <a href="{{AppSubUrl}}/admin?op=10">{{.i18n.Tr "admin.dashboard.operation_run"}}</a></td>
- </tr>
- </tbody>
- </table>
+ <form method="post" action="{{AppSubUrl}}/admin">
+ {{.CsrfTokenHtml}}
+ <table class="ui very basic table">
+ <tbody>
+ <tr>
+ <td>{{.i18n.Tr "admin.dashboard.delete_inactivate_accounts"}}</td>
+ <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>
+ </tr>
+ <tr>
+ <td>{{.i18n.Tr "admin.dashboard.delete_repo_archives"}}</td>
+ <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>
+ </tr>
+ <tr>
+ <td>{{.i18n.Tr "admin.dashboard.delete_missing_repos"}}</td>
+ <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>
+ </tr>
+ <tr>
+ <td>{{.i18n.Tr "admin.dashboard.git_gc_repos"}}</td>
+ <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>
+ </tr>
+ <tr>
+ <td>{{.i18n.Tr "admin.dashboard.resync_all_sshkeys"}}</td>
+ <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>
+ </tr>
+ <tr>
+ <td>{{.i18n.Tr "admin.dashboard.resync_all_hooks"}}</td>
+ <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>
+ </tr>
+ <tr>
+ <td>{{.i18n.Tr "admin.dashboard.reinit_missing_repos"}}</td>
+ <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>
+ </tr>
+ <tr>
+ <td>{{.i18n.Tr "admin.dashboard.sync_external_users"}}</td>
+ <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>
+ </tr>
+ <tr>
+ <td>{{.i18n.Tr "admin.dashboard.git_fsck"}}</td>
+ <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>
+ </tr>
+ <tr>
+ <td>{{.i18n.Tr "admin.dashboard.delete_generated_repository_avatars"}}</td>
+ <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>
+ </tr>
+ </tbody>
+ </table>
+ </form>
</div>
<h4 class="ui top attached header">
diff --git a/web_src/less/_admin.less b/web_src/less/_admin.less
index cadb095a99..2f9410512d 100644
--- a/web_src/less/_admin.less
+++ b/web_src/less/_admin.less
@@ -28,6 +28,10 @@
}
}
}
+
+ form button[type='submit'] {
+ padding: 5px 8px;
+ }
}
.ui.header,