'use strict' ;
const express = require ( 'express' )
, router = express . Router ( { caseSensitive : true } )
, Boards = require ( _ _dirname + '/../db/boards.js' )
, Posts = require ( _ _dirname + '/../db/posts.js' )
//middlewares
, processIp = require ( _ _dirname + '/../lib/middleware/ip/processip.js' )
, geoIp = require ( _ _dirname + '/../lib/middleware/ip/geoip.js' )
, calcPerms = require ( _ _dirname + '/../lib/middleware/permission/calcpermsmiddleware.js' )
, { Permissions } = require ( _ _dirname + '/../lib/permission/permissions.js' )
, hasPerms = require ( _ _dirname + '/../lib/middleware/permission/haspermsmiddleware.js' )
, isLoggedIn = require ( _ _dirname + '/../lib/middleware/permission/isloggedin.js' )
, paramConverter = require ( _ _dirname + '/../lib/middleware/input/paramconverter.js' )
, useSession = require ( _ _dirname + '/../lib/middleware/permission/usesession.js' )
, sessionRefresh = require ( _ _dirname + '/../lib/middleware/permission/sessionrefresh.js' )
, csrf = require ( _ _dirname + '/../lib/middleware/misc/csrfmiddleware.js' )
, setMinimal = require ( _ _dirname + '/../lib/middleware/misc/setminimal.js' )
, { setBoardLanguage , setQueryLanguage } = require ( _ _dirname + '/../lib/middleware/locale/locale.js' )
//page models
, { manageRecent , manageReports , manageAssets , manageSettings , manageBans , editCustomPage , manageMyPermissions ,
manageBoard , manageThread , manageLogs , manageCatalog , manageCustomPages , manageStaff , editStaff , editPost } = require ( _ _dirname + '/../models/pages/manage/' )
, { globalManageSettings , globalManageReports , globalManageBans , globalManageBoards , editNews , editAccount , editRole ,
globalManageRecent , globalManageAccounts , globalManageNews , globalManageLogs , globalManageRoles } = require ( _ _dirname + '/../models/pages/globalmanage/' )
, { changePassword , blockBypass , home , register , login , create , myPermissions , sessions , setupTwoFactor ,
board , catalog , banners , boardSettings , globalSettings , randombanner , news , captchaPage , overboard , overboardCatalog ,
captcha , thread , modlog , modloglist , account , boardlist , customPage , csrfPage } = require ( _ _dirname + '/../models/pages/' )
, threadParamConverter = paramConverter ( { processThreadIdParam : true } )
, logParamConverter = paramConverter ( { processDateParam : true } )
, newsParamConverter = paramConverter ( { objectIdParams : [ 'newsid' ] } )
, roleParamConverter = paramConverter ( { objectIdParams : [ 'roleid' ] } )
, custompageParamConverter = paramConverter ( { objectIdParams : [ 'custompageid' ] } ) ;
//homepage
router . get ( '/index.html' , home ) ;
//news page
router . get ( '/news.html' , news ) ;
//board list
router . get ( '/boards.(html|json)' , boardlist ) ;
//overboard
router . get ( '/overboard.(html|json)' , overboard ) ; //overboard
router . get ( '/catalog.(html|json)' , overboardCatalog ) ; //overboard catalog view
//board pages
router . get ( '/:board/:page(1[0-9]{1,}|[2-9][0-9]{0,}|index).(html|json)' , Boards . exists , setBoardLanguage , board ) ; //index
router . get ( '/:board/thread/:id([1-9][0-9]{0,}).(html|json)' , Boards . exists , setBoardLanguage , threadParamConverter , Posts . threadExistsMiddleware , thread ) ; //thread view
router . get ( '/:board/catalog.(html|json)' , Boards . exists , setBoardLanguage , catalog ) ; //catalog
router . get ( '/:board/logs.(html|json)' , Boards . exists , setBoardLanguage , modloglist ) ; //modlog list
router . get ( '/:board/logs/:date(\\d{2}-\\d{2}-\\d{4}).(html|json)' , Boards . exists , setBoardLanguage , logParamConverter , modlog ) ; //daily log
router . get ( '/:board/custompage/:page.(html|json)' , Boards . exists , setBoardLanguage , customPage ) ; //board custom page
router . get ( '/:board/banners.(html|json)' , Boards . exists , setBoardLanguage , banners ) ; //banners
router . get ( '/:board/settings.json' , Boards . exists , setBoardLanguage , boardSettings ) ; //public board settings
router . get ( '/settings.json' , globalSettings ) ; //public global settings
router . get ( '/randombanner' , randombanner ) ; //random banner
//board manage pages
router . get ( '/:board/manage/catalog.html' , useSession , sessionRefresh , isLoggedIn , Boards . exists , setBoardLanguage , calcPerms ,
hasPerms . one ( Permissions . MANAGE _BOARD _GENERAL ) , csrf , manageCatalog ) ;
router . get ( '/:board/manage/:page(1[0-9]{1,}|[2-9][0-9]{0,}|index).html' , useSession , sessionRefresh , isLoggedIn , Boards . exists , setBoardLanguage , calcPerms ,
hasPerms . one ( Permissions . MANAGE _BOARD _GENERAL ) , csrf , manageBoard ) ;
router . get ( '/:board/manage/thread/:id([1-9][0-9]{0,}).html' , useSession , sessionRefresh , isLoggedIn , Boards . exists , setBoardLanguage , threadParamConverter , calcPerms ,
hasPerms . one ( Permissions . MANAGE _BOARD _GENERAL ) , csrf , Posts . threadExistsMiddleware , manageThread ) ;
router . get ( '/:board/manage/editpost/:id([1-9][0-9]{0,}).html' , useSession , sessionRefresh , isLoggedIn , Boards . exists , setBoardLanguage , threadParamConverter , calcPerms ,
hasPerms . one ( Permissions . MANAGE _BOARD _GENERAL ) , csrf , Posts . postExistsMiddleware , editPost ) ;
router . get ( '/:board/manage/reports.(html|json)' , useSession , sessionRefresh , isLoggedIn , Boards . exists , setBoardLanguage , calcPerms ,
hasPerms . one ( Permissions . MANAGE _BOARD _GENERAL ) , csrf , manageReports ) ;
router . get ( '/:board/manage/recent.(html|json)' , useSession , sessionRefresh , isLoggedIn , Boards . exists , setBoardLanguage , calcPerms ,
hasPerms . one ( Permissions . MANAGE _BOARD _GENERAL ) , csrf , manageRecent ) ;
router . get ( '/:board/manage/mypermissions.html' , useSession , sessionRefresh , isLoggedIn , Boards . exists , setBoardLanguage , calcPerms ,
hasPerms . one ( Permissions . MANAGE _BOARD _GENERAL ) , manageMyPermissions ) ;
router . get ( '/:board/manage/logs.html' , useSession , sessionRefresh , isLoggedIn , Boards . exists , setBoardLanguage , calcPerms ,
hasPerms . one ( Permissions . MANAGE _BOARD _LOGS ) , csrf , manageLogs ) ;
router . get ( '/:board/manage/bans.html' , useSession , sessionRefresh , isLoggedIn , Boards . exists , setBoardLanguage , calcPerms ,
hasPerms . one ( Permissions . MANAGE _BOARD _BANS ) , csrf , manageBans ) ;
router . get ( '/:board/manage/settings.html' , useSession , sessionRefresh , isLoggedIn , Boards . exists , setBoardLanguage , calcPerms ,
hasPerms . one ( Permissions . MANAGE _BOARD _SETTINGS ) , csrf , manageSettings ) ;
router . get ( '/:board/manage/assets.html' , useSession , sessionRefresh , isLoggedIn , Boards . exists , setBoardLanguage , calcPerms ,
hasPerms . one ( Permissions . MANAGE _BOARD _CUSTOMISATION ) , csrf , manageAssets ) ;
router . get ( '/:board/manage/custompages.html' , useSession , sessionRefresh , isLoggedIn , Boards . exists , setBoardLanguage , calcPerms ,
hasPerms . one ( Permissions . MANAGE _BOARD _CUSTOMISATION ) , csrf , manageCustomPages ) ;
router . get ( '/:board/manage/editcustompage/:custompageid([a-f0-9]{24}).html' , useSession , sessionRefresh , isLoggedIn , Boards . exists , setBoardLanguage , calcPerms ,
hasPerms . one ( Permissions . MANAGE _BOARD _CUSTOMISATION ) , csrf , custompageParamConverter , editCustomPage ) ;
router . get ( '/:board/manage/staff.html' , useSession , sessionRefresh , isLoggedIn , Boards . exists , setBoardLanguage , calcPerms ,
hasPerms . one ( Permissions . MANAGE _BOARD _STAFF ) , csrf , manageStaff ) ;
router . get ( '/:board/manage/editstaff/:staffusername([a-zA-Z0-9]{1,50}).html' , useSession , sessionRefresh , isLoggedIn , Boards . exists , setBoardLanguage , calcPerms ,
hasPerms . one ( Permissions . MANAGE _BOARD _STAFF ) , csrf , editStaff ) ;
//global manage pages
router . get ( '/globalmanage/reports.(html|json)' , useSession , sessionRefresh , isLoggedIn , calcPerms ,
hasPerms . one ( Permissions . MANAGE _GLOBAL _GENERAL ) , csrf , globalManageReports ) ;
router . get ( '/globalmanage/recent.(html|json)' , useSession , sessionRefresh , isLoggedIn , calcPerms ,
hasPerms . one ( Permissions . MANAGE _GLOBAL _GENERAL ) , csrf , globalManageRecent ) ;
router . get ( '/globalmanage/globallogs.html' , useSession , sessionRefresh , isLoggedIn , calcPerms ,
hasPerms . one ( Permissions . MANAGE _GLOBAL _LOGS ) , csrf , globalManageLogs ) ;
router . get ( '/globalmanage/bans.html' , useSession , sessionRefresh , isLoggedIn , calcPerms ,
hasPerms . one ( Permissions . MANAGE _GLOBAL _BANS ) , csrf , globalManageBans ) ;
router . get ( '/globalmanage/boards.(html|json)' , useSession , sessionRefresh , isLoggedIn , calcPerms ,
hasPerms . one ( Permissions . MANAGE _GLOBAL _BOARDS ) , globalManageBoards ) ;
router . get ( '/globalmanage/news.html' , useSession , sessionRefresh , isLoggedIn , calcPerms ,
hasPerms . one ( Permissions . MANAGE _GLOBAL _NEWS ) , csrf , globalManageNews ) ;
router . get ( '/globalmanage/accounts.html' , useSession , sessionRefresh , isLoggedIn , calcPerms ,
hasPerms . one ( Permissions . MANAGE _GLOBAL _ACCOUNTS ) , csrf , globalManageAccounts ) ;
router . get ( '/globalmanage/roles.(html|json)' , useSession , sessionRefresh , isLoggedIn , calcPerms ,
hasPerms . one ( Permissions . MANAGE _GLOBAL _ROLES ) , csrf , globalManageRoles ) ;
router . get ( '/globalmanage/settings.html' , useSession , sessionRefresh , isLoggedIn , calcPerms ,
hasPerms . one ( Permissions . MANAGE _GLOBAL _SETTINGS ) , csrf , globalManageSettings ) ;
router . get ( '/globalmanage/editnews/:newsid([a-f0-9]{24}).html' , useSession , sessionRefresh , isLoggedIn , calcPerms ,
hasPerms . one ( Permissions . MANAGE _GLOBAL _NEWS ) , csrf , newsParamConverter , editNews ) ;
router . get ( '/globalmanage/editaccount/:accountusername([a-zA-Z0-9]{1,50}).html' , useSession , sessionRefresh , isLoggedIn , calcPerms ,
hasPerms . one ( Permissions . MANAGE _GLOBAL _ACCOUNTS ) , csrf , editAccount ) ;
router . get ( '/globalmanage/editrole/:roleid([a-f0-9]{24}).html' , useSession , sessionRefresh , isLoggedIn , calcPerms ,
hasPerms . one ( Permissions . MANAGE _GLOBAL _ROLES ) , csrf , roleParamConverter , editRole ) ;
//captcha
router . get ( '/captcha' , geoIp , processIp , captcha ) ; //get captcha image and cookie
router . get ( '/captcha.html' , captchaPage ) ; //iframed for noscript users
router . get ( '/bypass.html' , blockBypass ) ; //block bypass page
router . get ( '/bypass_minimal.html' , setMinimal , setQueryLanguage , blockBypass ) ; //block bypass page
//accounts
router . get ( '/account.html' , useSession , sessionRefresh , isLoggedIn , calcPerms , csrf , account ) ; //page showing boards you are mod/owner of, links to password rese, logout, etc
router . get ( '/mypermissions.html' , useSession , sessionRefresh , isLoggedIn , calcPerms , myPermissions ) ;
router . get ( '/twofactor.html' , useSession , sessionRefresh , isLoggedIn , calcPerms , csrf , setupTwoFactor ) ;
router . get ( '/sessions.html' , useSession , sessionRefresh , isLoggedIn , calcPerms , csrf , sessions ) ;
router . get ( '/login.html' , login ) ;
router . get ( '/register.html' , register ) ;
router . get ( '/changepassword.html' , changePassword ) ;
router . get ( '/create.html' , useSession , sessionRefresh , isLoggedIn , create ) ; //create new board
router . get ( '/csrf.json' , useSession , sessionRefresh , isLoggedIn , csrf , csrfPage ) ; //just the token, for 3rd party stuff posting
module . exports = router ;