forked from gitea/gitea
		
	Change admin dashboard to POST (#10465)
* Add form and convert to POST * Redirect for flash Signed-off-by: jolheiser <john.olheiser@gmail.com>
This commit is contained in:
		
							parent
							
								
									c161bb013e
								
							
						
					
					
						commit
						e5944a9521
					
				| @ -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) | ||||
| } | ||||
|  | ||||
| @ -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 | ||||
|  | ||||
| @ -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() { | ||||
|  | ||||
| @ -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"> | ||||
|  | ||||
| @ -28,6 +28,10 @@ | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         form button[type='submit'] { | ||||
|             padding: 5px 8px; | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     .ui.header, | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 John Olheiser
						John Olheiser