2017-04-12 10:10:36 +00:00
package main
2018-04-22 12:33:56 +00:00
// TODO: How should we handle *HeaderLite and *Header?
2018-11-13 04:43:05 +00:00
func routes ( r * Router ) {
r . Add ( View ( "routes.Overview" , "/overview/" ) )
r . Add ( View ( "routes.CustomPage" , "/pages/" , "extraData" ) )
r . Add ( View ( "routes.ForumList" , "/forums/" /*,"&forums"*/ ) )
r . Add ( View ( "routes.ViewForum" , "/forum/" , "extraData" ) )
r . Add ( AnonAction ( "routes.ChangeTheme" , "/theme/" ) )
r . Add (
2018-11-12 09:23:36 +00:00
View ( "routes.ShowAttachment" , "/attachs/" , "extraData" ) . Before ( "ParseForm" ) . NoGzip ( ) . NoHeader ( ) ,
2017-11-12 07:18:25 +00:00
)
2017-06-05 11:57:27 +00:00
2018-06-24 13:49:29 +00:00
apiGroup := newRouteGroup ( "/api/" ,
View ( "routeAPI" , "/api/" ) ,
View ( "routeAPIPhrases" , "/api/phrases/" ) , // TODO: Be careful with exposing the panel phrases here
2018-08-11 15:53:42 +00:00
View ( "routes.APIMe" , "/api/me/" ) ,
2018-07-05 09:54:01 +00:00
View ( "routeJSAntispam" , "/api/watches/" ) ,
2018-11-12 09:23:36 +00:00
) . NoHeader ( )
2018-11-13 04:43:05 +00:00
r . AddGroup ( apiGroup )
2018-06-24 13:49:29 +00:00
2017-11-08 07:28:33 +00:00
// TODO: Reduce the number of Befores. With a new method, perhaps?
2017-10-30 09:57:08 +00:00
reportGroup := newRouteGroup ( "/report/" ,
2018-05-27 09:36:35 +00:00
Action ( "routes.ReportSubmit" , "/report/submit/" , "extraData" ) ,
2017-11-12 07:18:25 +00:00
) . Before ( "NoBanned" )
2018-11-13 04:43:05 +00:00
r . AddGroup ( reportGroup )
2017-06-05 11:57:27 +00:00
2017-10-30 09:57:08 +00:00
topicGroup := newRouteGroup ( "/topics/" ,
2018-02-10 15:07:21 +00:00
View ( "routes.TopicList" , "/topics/" ) ,
2018-09-26 07:46:30 +00:00
View ( "routes.TopicListMostViewed" , "/topics/most-viewed/" ) ,
2019-07-12 08:33:25 +00:00
MView ( "routes.CreateTopic" , "/topics/create/" , "extraData" ) ,
2017-04-13 09:26:40 +00:00
)
2018-11-13 04:43:05 +00:00
r . AddGroup ( topicGroup )
r . AddGroup ( panelRoutes ( ) )
r . AddGroup ( userRoutes ( ) )
r . AddGroup ( usersRoutes ( ) )
r . AddGroup ( topicRoutes ( ) )
r . AddGroup ( replyRoutes ( ) )
r . AddGroup ( profileReplyRoutes ( ) )
r . AddGroup ( pollRoutes ( ) )
r . AddGroup ( accountRoutes ( ) )
2019-04-19 07:25:49 +00:00
r . Add ( Special ( "common.RouteWebsockets" , "/ws/" ) )
2017-11-05 09:55:34 +00:00
}
// TODO: Test the email token route
2018-11-13 04:43:05 +00:00
func userRoutes ( ) * RouteGroup {
return newRouteGroup ( "/user/" ) . Routes (
2018-02-26 09:07:00 +00:00
View ( "routes.ViewProfile" , "/user/" ) . LitBefore ( "req.URL.Path += extraData" ) ,
2018-10-10 07:33:51 +00:00
2019-08-14 10:39:04 +00:00
Set ( "routes.AccountEdit" , "/user/edit/" ,
2019-07-12 08:33:25 +00:00
MView ( "" , "/" ) ,
MView ( "Password" , "/password/" ) ,
Action ( "PasswordSubmit" , "/password/submit/" ) , // TODO: Full test this
UploadAction ( "AvatarSubmit" , "/avatar/submit/" ) . MaxSizeVar ( "int(c.Config.MaxRequestSize)" ) ,
Action ( "RevokeAvatarSubmit" , "/avatar/revoke/submit/" ) ,
Action ( "UsernameSubmit" , "/username/submit/" ) , // TODO: Full test this
MView ( "MFA" , "/mfa/" ) ,
MView ( "MFASetup" , "/mfa/setup/" ) ,
Action ( "MFASetupSubmit" , "/mfa/setup/submit/" ) ,
Action ( "MFADisableSubmit" , "/mfa/disable/submit/" ) ,
MView ( "Email" , "/email/" ) ,
View ( "EmailTokenSubmit" , "/token/" , "extraData" ) . NoHeader ( ) ,
2019-11-06 02:00:44 +00:00
//Action("EmailAddSubmit", "/user/edit/email/add/submit/"),
//Action("EmailRemoveSubmit", "/user/edit/email/remove/submit/"),
2019-07-12 08:33:25 +00:00
) ,
/ * MView ( "routes.AccountEdit" , "/user/edit/" ) ,
MView ( "routes.AccountEditPassword" , "/user/edit/password/" ) ,
2018-06-17 07:28:18 +00:00
Action ( "routes.AccountEditPasswordSubmit" , "/user/edit/password/submit/" ) , // TODO: Full test this
2019-04-19 07:16:09 +00:00
UploadAction ( "routes.AccountEditAvatarSubmit" , "/user/edit/avatar/submit/" ) . MaxSizeVar ( "int(c.Config.MaxRequestSize)" ) ,
2019-06-09 03:21:48 +00:00
Action ( "routes.AccountEditRevokeAvatarSubmit" , "/user/edit/avatar/revoke/submit/" ) ,
2018-05-14 08:56:56 +00:00
Action ( "routes.AccountEditUsernameSubmit" , "/user/edit/username/submit/" ) , // TODO: Full test this
2019-07-12 08:33:25 +00:00
MView ( "routes.AccountEditMFA" , "/user/edit/mfa/" ) ,
MView ( "routes.AccountEditMFASetup" , "/user/edit/mfa/setup/" ) ,
2018-06-17 07:28:18 +00:00
Action ( "routes.AccountEditMFASetupSubmit" , "/user/edit/mfa/setup/submit/" ) ,
Action ( "routes.AccountEditMFADisableSubmit" , "/user/edit/mfa/disable/submit/" ) ,
2019-07-12 08:33:25 +00:00
MView ( "routes.AccountEditEmail" , "/user/edit/email/" ) ,
View ( "routes.AccountEditEmailTokenSubmit" , "/user/edit/token/" , "extraData" ) . NoHeader ( ) , * /
2018-10-10 07:33:51 +00:00
2019-07-12 08:33:25 +00:00
MView ( "routes.AccountLogins" , "/user/edit/logins/" ) ,
2019-11-12 06:17:46 +00:00
MView ( "routes.AccountBlocked" , "/user/edit/blocked/" ) ,
2018-12-17 04:58:55 +00:00
2019-07-12 08:33:25 +00:00
MView ( "routes.LevelList" , "/user/levels/" ) ,
//MView("routes.LevelRankings", "/user/rankings/"),
//MView("routes.Alerts", "/user/alerts/"),
2019-08-14 10:39:04 +00:00
MView ( "routes.Convos" , "/user/convos/" ) ,
2019-07-12 08:33:25 +00:00
MView ( "routes.ConvosCreate" , "/user/convos/create/" ) ,
2019-08-14 10:39:04 +00:00
MView ( "routes.Convo" , "/user/convo/" , "extraData" ) ,
2019-07-12 08:33:25 +00:00
Action ( "routes.ConvosCreateSubmit" , "/user/convos/create/submit/" ) ,
2019-08-20 08:44:37 +00:00
//Action("routes.ConvosDeleteSubmit", "/user/convos/delete/submit/", "extraData"),
2019-10-13 08:50:55 +00:00
Action ( "routes.ConvosCreateReplySubmit" , "/user/convo/create/submit/" , "extraData" ) ,
Action ( "routes.ConvosDeleteReplySubmit" , "/user/convo/delete/submit/" , "extraData" ) ,
2019-08-14 10:39:04 +00:00
Action ( "routes.ConvosEditReplySubmit" , "/user/convo/edit/submit/" , "extraData" ) ,
2019-10-13 08:50:55 +00:00
2019-10-18 00:35:13 +00:00
MView ( "routes.RelationsBlockCreate" , "/user/block/create/" , "extraData" ) ,
Action ( "routes.RelationsBlockCreateSubmit" , "/user/block/create/submit/" , "extraData" ) ,
MView ( "routes.RelationsBlockRemove" , "/user/block/remove/" , "extraData" ) ,
Action ( "routes.RelationsBlockRemoveSubmit" , "/user/block/remove/submit/" , "extraData" ) ,
2017-11-12 07:18:25 +00:00
)
2018-11-13 04:43:05 +00:00
}
2017-11-10 03:33:11 +00:00
2018-11-13 04:43:05 +00:00
func usersRoutes ( ) * RouteGroup {
2017-11-10 03:33:11 +00:00
// TODO: Auto test and manual test these routes
2018-11-13 04:43:05 +00:00
return newRouteGroup ( "/users/" ) . Routes (
2018-01-21 11:17:43 +00:00
Action ( "routes.BanUserSubmit" , "/users/ban/submit/" , "extraData" ) ,
Action ( "routes.UnbanUser" , "/users/unban/" , "extraData" ) ,
Action ( "routes.ActivateUser" , "/users/activate/" , "extraData" ) ,
2019-07-12 08:33:25 +00:00
MView ( "routes.IPSearch" , "/users/ips/" ) , // TODO: .Perms("ViewIPs")?
2017-11-12 07:18:25 +00:00
)
2017-10-31 07:26:44 +00:00
}
2018-11-13 04:43:05 +00:00
func topicRoutes ( ) * RouteGroup {
return newRouteGroup ( "/topic/" ) . Routes (
2018-02-03 05:47:14 +00:00
View ( "routes.ViewTopic" , "/topic/" , "extraData" ) ,
2019-04-19 07:16:09 +00:00
UploadAction ( "routes.CreateTopicSubmit" , "/topic/create/submit/" ) . MaxSizeVar ( "int(c.Config.MaxRequestSize)" ) ,
2018-01-18 12:31:25 +00:00
Action ( "routes.EditTopicSubmit" , "/topic/edit/submit/" , "extraData" ) ,
2018-01-20 06:50:29 +00:00
Action ( "routes.DeleteTopicSubmit" , "/topic/delete/submit/" ) . LitBefore ( "req.URL.Path += extraData" ) ,
Action ( "routes.StickTopicSubmit" , "/topic/stick/submit/" , "extraData" ) ,
Action ( "routes.UnstickTopicSubmit" , "/topic/unstick/submit/" , "extraData" ) ,
Action ( "routes.LockTopicSubmit" , "/topic/lock/submit/" ) . LitBefore ( "req.URL.Path += extraData" ) ,
Action ( "routes.UnlockTopicSubmit" , "/topic/unlock/submit/" , "extraData" ) ,
Action ( "routes.MoveTopicSubmit" , "/topic/move/submit/" , "extraData" ) ,
2018-12-27 05:42:41 +00:00
Action ( "routes.LikeTopicSubmit" , "/topic/like/submit/" , "extraData" ) ,
2019-04-19 07:16:09 +00:00
UploadAction ( "routes.AddAttachToTopicSubmit" , "/topic/attach/add/submit/" , "extraData" ) . MaxSizeVar ( "int(c.Config.MaxRequestSize)" ) ,
2018-12-27 05:42:41 +00:00
Action ( "routes.RemoveAttachFromTopicSubmit" , "/topic/attach/remove/submit/" , "extraData" ) ,
2018-01-14 12:03:20 +00:00
)
}
2018-11-13 04:43:05 +00:00
func replyRoutes ( ) * RouteGroup {
return newRouteGroup ( "/reply/" ) . Routes (
2018-01-14 12:03:20 +00:00
// TODO: Reduce this to 1MB for attachments for each file?
2019-04-19 07:16:09 +00:00
UploadAction ( "routes.CreateReplySubmit" , "/reply/create/" ) . MaxSizeVar ( "int(c.Config.MaxRequestSize)" ) , // TODO: Rename the route so it's /reply/create/submit/
2018-01-20 06:50:29 +00:00
Action ( "routes.ReplyEditSubmit" , "/reply/edit/submit/" , "extraData" ) ,
Action ( "routes.ReplyDeleteSubmit" , "/reply/delete/submit/" , "extraData" ) ,
2018-12-27 05:42:41 +00:00
Action ( "routes.ReplyLikeSubmit" , "/reply/like/submit/" , "extraData" ) ,
2018-10-27 03:21:02 +00:00
//MemberView("routes.ReplyEdit","/reply/edit/","extraData"), // No js fallback
//MemberView("routes.ReplyDelete","/reply/delete/","extraData"), // No js confirmation page? We could have a confirmation modal for the JS case
2019-04-19 07:16:09 +00:00
UploadAction ( "routes.AddAttachToReplySubmit" , "/reply/attach/add/submit/" , "extraData" ) . MaxSizeVar ( "int(c.Config.MaxRequestSize)" ) ,
2018-12-31 09:03:49 +00:00
Action ( "routes.RemoveAttachFromReplySubmit" , "/reply/attach/remove/submit/" , "extraData" ) ,
2018-01-14 12:03:20 +00:00
)
}
2018-01-14 14:27:10 +00:00
// TODO: Move these into /user/?
2018-11-13 04:43:05 +00:00
func profileReplyRoutes ( ) * RouteGroup {
return newRouteGroup ( "/profile/" ) . Routes (
2018-05-15 05:59:52 +00:00
Action ( "routes.ProfileReplyCreateSubmit" , "/profile/reply/create/" ) , // TODO: Add /submit/ to the end
2018-01-20 06:50:29 +00:00
Action ( "routes.ProfileReplyEditSubmit" , "/profile/reply/edit/submit/" , "extraData" ) ,
Action ( "routes.ProfileReplyDeleteSubmit" , "/profile/reply/delete/submit/" , "extraData" ) ,
2018-01-14 14:27:10 +00:00
)
}
2018-11-13 04:43:05 +00:00
func pollRoutes ( ) * RouteGroup {
return newRouteGroup ( "/poll/" ) . Routes (
2018-01-27 07:30:44 +00:00
Action ( "routes.PollVote" , "/poll/vote/" , "extraData" ) ,
2018-11-12 09:38:46 +00:00
View ( "routes.PollResults" , "/poll/results/" , "extraData" ) . NoHeader ( ) ,
2018-01-27 07:30:44 +00:00
)
}
2018-11-13 04:43:05 +00:00
func accountRoutes ( ) * RouteGroup {
2018-01-17 11:13:08 +00:00
//router.HandleFunc("/accounts/list/", routeLogin) // Redirect /accounts/ and /user/ to here.. // Get a list of all of the accounts on the forum
2018-11-13 04:43:05 +00:00
return newRouteGroup ( "/accounts/" ) . Routes (
2018-02-03 05:47:14 +00:00
View ( "routes.AccountLogin" , "/accounts/login/" ) ,
View ( "routes.AccountRegister" , "/accounts/create/" ) ,
2018-05-15 05:59:52 +00:00
Action ( "routes.AccountLogout" , "/accounts/logout/" ) ,
2018-02-03 05:47:14 +00:00
AnonAction ( "routes.AccountLoginSubmit" , "/accounts/login/submit/" ) , // TODO: Guard this with a token, maybe the IP hashed with a rotated key?
2018-06-17 07:28:18 +00:00
View ( "routes.AccountLoginMFAVerify" , "/accounts/mfa_verify/" ) ,
AnonAction ( "routes.AccountLoginMFAVerifySubmit" , "/accounts/mfa_verify/submit/" ) , // We have logic in here which filters out regular guests
2018-02-03 05:47:14 +00:00
AnonAction ( "routes.AccountRegisterSubmit" , "/accounts/create/submit/" ) ,
2019-03-11 08:47:45 +00:00
View ( "routes.AccountPasswordReset" , "/accounts/password-reset/" ) ,
AnonAction ( "routes.AccountPasswordResetSubmit" , "/accounts/password-reset/submit/" ) ,
View ( "routes.AccountPasswordResetToken" , "/accounts/password-reset/token/" ) ,
AnonAction ( "routes.AccountPasswordResetTokenSubmit" , "/accounts/password-reset/token/submit/" ) ,
2018-01-17 11:13:08 +00:00
)
}
2018-11-13 04:43:05 +00:00
func panelRoutes ( ) * RouteGroup {
return newRouteGroup ( "/panel/" ) . Before ( "SuperModOnly" ) . NoHeader ( ) . Routes (
2018-10-02 05:03:20 +00:00
View ( "panel.Dashboard" , "/panel/" ) ,
2019-08-14 10:39:04 +00:00
//View("panel.StatsDisk", "/panel/stats/disk/"),
2018-05-27 09:36:35 +00:00
View ( "panel.Forums" , "/panel/forums/" ) ,
Action ( "panel.ForumsCreateSubmit" , "/panel/forums/create/" ) ,
Action ( "panel.ForumsDelete" , "/panel/forums/delete/" , "extraData" ) ,
Action ( "panel.ForumsDeleteSubmit" , "/panel/forums/delete/submit/" , "extraData" ) ,
2019-04-27 06:32:26 +00:00
Action ( "panel.ForumsOrderSubmit" , "/panel/forums/order/edit/submit/" ) ,
2018-05-27 09:36:35 +00:00
View ( "panel.ForumsEdit" , "/panel/forums/edit/" , "extraData" ) ,
Action ( "panel.ForumsEditSubmit" , "/panel/forums/edit/submit/" , "extraData" ) ,
Action ( "panel.ForumsEditPermsSubmit" , "/panel/forums/edit/perms/submit/" , "extraData" ) ,
View ( "panel.ForumsEditPermsAdvance" , "/panel/forums/edit/perms/" , "extraData" ) ,
Action ( "panel.ForumsEditPermsAdvanceSubmit" , "/panel/forums/edit/perms/adv/submit/" , "extraData" ) ,
View ( "panel.Settings" , "/panel/settings/" ) ,
View ( "panel.SettingEdit" , "/panel/settings/edit/" , "extraData" ) ,
Action ( "panel.SettingEditSubmit" , "/panel/settings/edit/submit/" , "extraData" ) ,
2017-10-31 07:26:44 +00:00
2018-08-04 11:46:36 +00:00
View ( "panel.WordFilters" , "/panel/settings/word-filters/" ) ,
Action ( "panel.WordFiltersCreateSubmit" , "/panel/settings/word-filters/create/" ) ,
View ( "panel.WordFiltersEdit" , "/panel/settings/word-filters/edit/" , "extraData" ) ,
Action ( "panel.WordFiltersEditSubmit" , "/panel/settings/word-filters/edit/submit/" , "extraData" ) ,
Action ( "panel.WordFiltersDeleteSubmit" , "/panel/settings/word-filters/delete/submit/" , "extraData" ) ,
2017-10-31 07:26:44 +00:00
2018-06-06 00:21:22 +00:00
View ( "panel.Pages" , "/panel/pages/" ) . Before ( "AdminOnly" ) ,
Action ( "panel.PagesCreateSubmit" , "/panel/pages/create/submit/" ) . Before ( "AdminOnly" ) ,
View ( "panel.PagesEdit" , "/panel/pages/edit/" , "extraData" ) . Before ( "AdminOnly" ) ,
Action ( "panel.PagesEditSubmit" , "/panel/pages/edit/submit/" , "extraData" ) . Before ( "AdminOnly" ) ,
Action ( "panel.PagesDeleteSubmit" , "/panel/pages/delete/submit/" , "extraData" ) . Before ( "AdminOnly" ) ,
2018-09-30 14:43:46 +00:00
View ( "panel.Themes" , "/panel/themes/" ) ,
2018-10-02 04:09:17 +00:00
Action ( "panel.ThemesSetDefault" , "/panel/themes/default/" , "extraData" ) ,
2018-09-30 14:43:46 +00:00
View ( "panel.ThemesMenus" , "/panel/themes/menus/" ) ,
View ( "panel.ThemesMenusEdit" , "/panel/themes/menus/edit/" , "extraData" ) ,
View ( "panel.ThemesMenuItemEdit" , "/panel/themes/menus/item/edit/" , "extraData" ) ,
Action ( "panel.ThemesMenuItemEditSubmit" , "/panel/themes/menus/item/edit/submit/" , "extraData" ) ,
Action ( "panel.ThemesMenuItemCreateSubmit" , "/panel/themes/menus/item/create/submit/" ) ,
Action ( "panel.ThemesMenuItemDeleteSubmit" , "/panel/themes/menus/item/delete/submit/" , "extraData" ) ,
Action ( "panel.ThemesMenuItemOrderSubmit" , "/panel/themes/menus/item/order/edit/submit/" , "extraData" ) ,
2017-10-31 07:26:44 +00:00
2019-01-21 12:27:59 +00:00
View ( "panel.ThemesWidgets" , "/panel/themes/widgets/" ) ,
//View("panel.ThemesWidgetsEdit", "/panel/themes/widgets/edit/", "extraData"),
Action ( "panel.ThemesWidgetsEditSubmit" , "/panel/themes/widgets/edit/submit/" , "extraData" ) ,
Action ( "panel.ThemesWidgetsCreateSubmit" , "/panel/themes/widgets/create/submit/" ) ,
Action ( "panel.ThemesWidgetsDeleteSubmit" , "/panel/themes/widgets/delete/submit/" , "extraData" ) ,
2018-07-29 10:54:12 +00:00
View ( "panel.Plugins" , "/panel/plugins/" ) ,
Action ( "panel.PluginsActivate" , "/panel/plugins/activate/" , "extraData" ) ,
Action ( "panel.PluginsDeactivate" , "/panel/plugins/deactivate/" , "extraData" ) ,
Action ( "panel.PluginsInstall" , "/panel/plugins/install/" , "extraData" ) ,
2017-10-31 07:26:44 +00:00
2018-06-17 07:28:18 +00:00
View ( "panel.Users" , "/panel/users/" ) ,
View ( "panel.UsersEdit" , "/panel/users/edit/" , "extraData" ) ,
Action ( "panel.UsersEditSubmit" , "/panel/users/edit/submit/" , "extraData" ) ,
2019-06-10 22:00:57 +00:00
UploadAction ( "panel.UsersAvatarSubmit" , "/panel/users/avatar/submit/" , "extraData" ) . MaxSizeVar ( "int(c.Config.MaxRequestSize)" ) ,
Action ( "panel.UsersAvatarRemoveSubmit" , "/panel/users/avatar/remove/submit/" , "extraData" ) ,
2017-10-31 07:26:44 +00:00
2018-05-27 09:36:35 +00:00
View ( "panel.AnalyticsViews" , "/panel/analytics/views/" ) . Before ( "ParseForm" ) ,
View ( "panel.AnalyticsRoutes" , "/panel/analytics/routes/" ) . Before ( "ParseForm" ) ,
View ( "panel.AnalyticsAgents" , "/panel/analytics/agents/" ) . Before ( "ParseForm" ) ,
View ( "panel.AnalyticsSystems" , "/panel/analytics/systems/" ) . Before ( "ParseForm" ) ,
View ( "panel.AnalyticsLanguages" , "/panel/analytics/langs/" ) . Before ( "ParseForm" ) ,
View ( "panel.AnalyticsReferrers" , "/panel/analytics/referrers/" ) . Before ( "ParseForm" ) ,
View ( "panel.AnalyticsRouteViews" , "/panel/analytics/route/" , "extraData" ) ,
View ( "panel.AnalyticsAgentViews" , "/panel/analytics/agent/" , "extraData" ) ,
View ( "panel.AnalyticsForumViews" , "/panel/analytics/forum/" , "extraData" ) ,
View ( "panel.AnalyticsSystemViews" , "/panel/analytics/system/" , "extraData" ) ,
View ( "panel.AnalyticsLanguageViews" , "/panel/analytics/lang/" , "extraData" ) ,
View ( "panel.AnalyticsReferrerViews" , "/panel/analytics/referrer/" , "extraData" ) ,
View ( "panel.AnalyticsPosts" , "/panel/analytics/posts/" ) . Before ( "ParseForm" ) ,
2019-05-01 06:59:51 +00:00
View ( "panel.AnalyticsMemory" , "/panel/analytics/memory/" ) . Before ( "ParseForm" ) ,
2019-05-09 06:58:55 +00:00
View ( "panel.AnalyticsActiveMemory" , "/panel/analytics/active-memory/" ) . Before ( "ParseForm" ) ,
2018-05-27 09:36:35 +00:00
View ( "panel.AnalyticsTopics" , "/panel/analytics/topics/" ) . Before ( "ParseForm" ) ,
View ( "panel.AnalyticsForums" , "/panel/analytics/forums/" ) . Before ( "ParseForm" ) ,
2017-12-30 05:47:46 +00:00
2018-09-30 00:08:27 +00:00
View ( "panel.Groups" , "/panel/groups/" ) ,
View ( "panel.GroupsEdit" , "/panel/groups/edit/" , "extraData" ) ,
2019-09-29 04:56:39 +00:00
View ( "panel.GroupsEditPromotions" , "/panel/groups/edit/promotions/" , "extraData" ) ,
2019-10-13 08:50:55 +00:00
Action ( "panel.GroupsPromotionsCreateSubmit" , "/panel/groups/promotions/create/submit/" , "extraData" ) ,
Action ( "panel.GroupsPromotionsDeleteSubmit" , "/panel/groups/promotions/delete/submit/" , "extraData" ) ,
2018-09-30 00:08:27 +00:00
View ( "panel.GroupsEditPerms" , "/panel/groups/edit/perms/" , "extraData" ) ,
Action ( "panel.GroupsEditSubmit" , "/panel/groups/edit/submit/" , "extraData" ) ,
Action ( "panel.GroupsEditPermsSubmit" , "/panel/groups/edit/perms/submit/" , "extraData" ) ,
Action ( "panel.GroupsCreateSubmit" , "/panel/groups/create/" ) ,
2017-10-31 07:26:44 +00:00
2018-08-22 07:10:29 +00:00
View ( "panel.Backups" , "/panel/backups/" , "extraData" ) . Before ( "SuperAdminOnly" ) . NoGzip ( ) , // TODO: Tests for this
2018-05-27 09:36:35 +00:00
View ( "panel.LogsRegs" , "/panel/logs/regs/" ) ,
View ( "panel.LogsMod" , "/panel/logs/mod/" ) ,
2019-11-06 02:00:44 +00:00
View ( "panel.LogsAdmin" , "/panel/logs/admin/" ) ,
2018-05-27 09:36:35 +00:00
View ( "panel.Debug" , "/panel/debug/" ) . Before ( "AdminOnly" ) ,
2017-04-13 10:55:51 +00:00
)
2017-04-12 10:10:36 +00:00
}