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?
2017-04-12 10:10:36 +00:00
func routes ( ) {
2018-02-03 05:47:14 +00:00
addRoute ( View ( "routes.Overview" , "/overview/" ) )
addRoute ( View ( "routes.CustomPage" , "/pages/" , "extraData" ) )
2018-03-17 08:16:43 +00:00
addRoute ( View ( "routes.ForumList" , "/forums/" /*,"&forums"*/ ) )
2018-02-22 02:27:17 +00:00
addRoute ( View ( "routes.ViewForum" , "/forum/" , "extraData" ) )
2018-05-15 05:59:52 +00:00
addRoute ( AnonAction ( "routes.ChangeTheme" , "/theme/" ) )
2017-11-12 07:18:25 +00:00
addRoute (
2018-08-22 02:13:17 +00:00
View ( "routes.ShowAttachment" , "/attachs/" , "extraData" ) . Before ( "ParseForm" ) . NoGzip ( ) ,
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-06-24 13:49:29 +00:00
)
addRouteGroup ( apiGroup )
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" )
2017-10-30 09:57:08 +00:00
addRouteGroup ( 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/" ) ,
2018-01-21 11:17:43 +00:00
MemberView ( "routes.CreateTopic" , "/topics/create/" , "extraData" ) ,
2017-04-13 09:26:40 +00:00
)
2017-10-30 09:57:08 +00:00
addRouteGroup ( topicGroup )
2017-06-05 11:57:27 +00:00
2017-10-31 07:26:44 +00:00
buildPanelRoutes ( )
2017-11-05 09:55:34 +00:00
buildUserRoutes ( )
2018-01-14 12:03:20 +00:00
buildTopicRoutes ( )
buildReplyRoutes ( )
2018-01-14 14:27:10 +00:00
buildProfileReplyRoutes ( )
2018-01-27 07:30:44 +00:00
buildPollRoutes ( )
2018-01-17 11:13:08 +00:00
buildAccountRoutes ( )
2018-01-18 12:31:25 +00:00
2018-03-08 03:59:47 +00:00
addRoute ( Special ( "common.RouteWebsockets" , "/ws/" ) )
2017-11-05 09:55:34 +00:00
}
// TODO: Test the email token route
func buildUserRoutes ( ) {
2017-11-08 07:28:33 +00:00
userGroup := newRouteGroup ( "/user/" )
2017-11-05 09:55:34 +00:00
userGroup . Routes (
2018-02-26 09:07:00 +00:00
View ( "routes.ViewProfile" , "/user/" ) . LitBefore ( "req.URL.Path += extraData" ) ,
2018-06-17 07:28:18 +00:00
MemberView ( "routes.AccountEdit" , "/user/edit/" ) ,
MemberView ( "routes.AccountEditPassword" , "/user/edit/password/" ) ,
Action ( "routes.AccountEditPasswordSubmit" , "/user/edit/password/submit/" ) , // TODO: Full test this
2018-05-14 08:56:56 +00:00
UploadAction ( "routes.AccountEditAvatarSubmit" , "/user/edit/avatar/submit/" ) . MaxSizeVar ( "int(common.Config.MaxRequestSize)" ) ,
Action ( "routes.AccountEditUsernameSubmit" , "/user/edit/username/submit/" ) , // TODO: Full test this
2018-06-17 07:28:18 +00:00
MemberView ( "routes.AccountEditMFA" , "/user/edit/mfa/" ) ,
MemberView ( "routes.AccountEditMFASetup" , "/user/edit/mfa/setup/" ) ,
Action ( "routes.AccountEditMFASetupSubmit" , "/user/edit/mfa/setup/submit/" ) ,
Action ( "routes.AccountEditMFADisableSubmit" , "/user/edit/mfa/disable/submit/" ) ,
2018-05-27 09:36:35 +00:00
MemberView ( "routes.AccountEditEmail" , "/user/edit/email/" ) ,
Action ( "routes.AccountEditEmailTokenSubmit" , "/user/edit/token/" , "extraData" ) ,
2017-11-12 07:18:25 +00:00
)
2017-11-05 09:55:34 +00:00
addRouteGroup ( userGroup )
2017-11-10 03:33:11 +00:00
// TODO: Auto test and manual test these routes
2017-11-12 07:18:25 +00:00
userGroup = newRouteGroup ( "/users/" )
2017-11-10 03:33:11 +00:00
userGroup . 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" ) ,
MemberView ( "routes.IPSearch" , "/users/ips/" ) , // TODO: .Perms("ViewIPs")?
2017-11-12 07:18:25 +00:00
)
2017-11-10 03:33:11 +00:00
addRouteGroup ( userGroup )
2017-10-31 07:26:44 +00:00
}
2018-01-14 12:03:20 +00:00
func buildTopicRoutes ( ) {
topicGroup := newRouteGroup ( "/topic/" )
topicGroup . Routes (
2018-02-03 05:47:14 +00:00
View ( "routes.ViewTopic" , "/topic/" , "extraData" ) ,
2018-05-14 08:56:56 +00:00
UploadAction ( "routes.CreateTopicSubmit" , "/topic/create/submit/" ) . MaxSizeVar ( "int(common.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-05-15 05:59:52 +00:00
Action ( "routes.LikeTopicSubmit" , "/topic/like/submit/" , "extraData" ) . Before ( "ParseForm" ) ,
2018-01-14 12:03:20 +00:00
)
addRouteGroup ( topicGroup )
}
func buildReplyRoutes ( ) {
//router.HandleFunc("/reply/edit/", routeReplyEdit) // No js fallback
//router.HandleFunc("/reply/delete/", routeReplyDelete) // No js confirmation page? We could have a confirmation modal for the JS case
replyGroup := newRouteGroup ( "/reply/" )
replyGroup . Routes (
// TODO: Reduce this to 1MB for attachments for each file?
2018-05-14 08:56:56 +00:00
UploadAction ( "routes.CreateReplySubmit" , "/reply/create/" ) . MaxSizeVar ( "int(common.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-05-15 05:59:52 +00:00
Action ( "routes.ReplyLikeSubmit" , "/reply/like/submit/" , "extraData" ) . Before ( "ParseForm" ) ,
2018-01-14 12:03:20 +00:00
)
addRouteGroup ( replyGroup )
}
2018-01-14 14:27:10 +00:00
// TODO: Move these into /user/?
func buildProfileReplyRoutes ( ) {
pReplyGroup := newRouteGroup ( "/profile/" )
pReplyGroup . 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
)
addRouteGroup ( pReplyGroup )
}
2018-01-27 07:30:44 +00:00
func buildPollRoutes ( ) {
pollGroup := newRouteGroup ( "/poll/" )
pollGroup . Routes (
Action ( "routes.PollVote" , "/poll/vote/" , "extraData" ) ,
2018-01-28 14:30:24 +00:00
View ( "routes.PollResults" , "/poll/results/" , "extraData" ) ,
2018-01-27 07:30:44 +00:00
)
addRouteGroup ( pollGroup )
}
2018-01-17 11:13:08 +00:00
func buildAccountRoutes ( ) {
//router.HandleFunc("/accounts/list/", routeLogin) // Redirect /accounts/ and /user/ to here.. // Get a list of all of the accounts on the forum
accReplyGroup := newRouteGroup ( "/accounts/" )
accReplyGroup . 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/" ) ,
2018-01-17 11:13:08 +00:00
)
addRouteGroup ( accReplyGroup )
}
2017-10-31 07:26:44 +00:00
func buildPanelRoutes ( ) {
2017-11-05 09:55:34 +00:00
panelGroup := newRouteGroup ( "/panel/" ) . Before ( "SuperModOnly" )
2017-10-30 09:57:08 +00:00
panelGroup . Routes (
2018-01-22 08:15:45 +00:00
View ( "routePanelDashboard" , "/panel/" ) ,
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" ) ,
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/" ) ,
2017-12-19 03:53:13 +00:00
Action ( "routePanelThemesSetDefault" , "/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
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" ) ,
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" ) ,
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" ) ,
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/" ) ,
View ( "panel.Debug" , "/panel/debug/" ) . Before ( "AdminOnly" ) ,
2017-04-13 10:55:51 +00:00
)
2017-10-30 09:57:08 +00:00
addRouteGroup ( panelGroup )
2017-04-12 10:10:36 +00:00
}