'use strict' ;
const express = require ( 'express' )
, router = express . Router ( )
, Boards = require ( _ _dirname + '/../db/boards.js' )
//middlewares
, torPreBypassCheck = require ( _ _dirname + '/../helpers/checks/torprebypass.js' )
, geoAndTor = require ( _ _dirname + '/../helpers/geoip.js' )
, processIp = require ( _ _dirname + '/../helpers/processip.js' )
, calcPerms = require ( _ _dirname + '/../helpers/checks/calcpermsmiddleware.js' )
, hasPerms = require ( _ _dirname + '/../helpers/checks/haspermsmiddleware.js' )
, paramConverter = require ( _ _dirname + '/../helpers/paramconverter.js' )
, numFiles = require ( _ _dirname + '/../helpers/numfiles.js' )
, imageHashes = require ( _ _dirname + '/../helpers/imagehash.js' )
, banCheck = require ( _ _dirname + '/../helpers/checks/bancheck.js' )
, isLoggedIn = require ( _ _dirname + '/../helpers/checks/isloggedin.js' )
, verifyCaptcha = require ( _ _dirname + '/../helpers/captcha/verify.js' )
, csrf = require ( _ _dirname + '/../helpers/checks/csrfmiddleware.js' )
, useSession = require ( _ _dirname + '/../helpers/usesession.js' )
, sessionRefresh = require ( _ _dirname + '/../helpers/sessionrefresh.js' )
, dnsblCheck = require ( _ _dirname + '/../helpers/checks/dnsbl.js' )
, blockBypassCheck = require ( _ _dirname + '/../helpers/checks/blockbypass.js' )
, { handleBannerFiles , handlePostFilesEarlyTor , handlePostFiles } = require ( _ _dirname + '/../helpers/filemiddlewares.js' )
//controllers
, deleteBoardController = require ( _ _dirname + '/forms/deleteboard.js' )
, editBansController = require ( _ _dirname + '/forms/editbans.js' )
, appealController = require ( _ _dirname + '/forms/appeal.js' )
, globalActionController = require ( _ _dirname + '/forms/globalactions.js' )
, actionController = require ( _ _dirname + '/forms/actions.js' )
// , addBanController = require(__dirname+'/forms/addban.js')
, addCustomPageController = require ( _ _dirname + '/forms/addcustompage.js' )
, deleteCustomPageController = require ( _ _dirname + '/forms/deletecustompage.js' )
, addNewsController = require ( _ _dirname + '/forms/addnews.js' )
, editNewsController = require ( _ _dirname + '/forms/editnews.js' )
, deleteNewsController = require ( _ _dirname + '/forms/deletenews.js' )
, uploadBannersController = require ( _ _dirname + '/forms/uploadbanners.js' )
, deleteBannersController = require ( _ _dirname + '/forms/deletebanners.js' )
, boardSettingsController = require ( _ _dirname + '/forms/boardsettings.js' )
, transferController = require ( _ _dirname + '/forms/transfer.js' )
, resignController = require ( _ _dirname + '/forms/resign.js' )
, deleteAccountController = require ( _ _dirname + '/forms/deleteaccount.js' )
, loginController = require ( _ _dirname + '/forms/login.js' )
, registerController = require ( _ _dirname + '/forms/register.js' )
, changePasswordController = require ( _ _dirname + '/forms/changepassword.js' )
, editAccountsController = require ( _ _dirname + '/forms/editaccounts.js' )
, globalSettingsController = require ( _ _dirname + '/forms/globalsettings.js' )
, createBoardController = require ( _ _dirname + '/forms/create.js' )
, makePostController = require ( _ _dirname + '/forms/makepost.js' )
, editPostController = require ( _ _dirname + '/forms/editpost.js' )
, newCaptcha = require ( _ _dirname + '/../models/forms/newcaptcha.js' )
, blockBypass = require ( _ _dirname + '/../models/forms/blockbypass.js' )
, logout = require ( _ _dirname + '/../models/forms/logout.js' ) ;
//make new post
router . post ( '/board/:board/post' , geoAndTor , handlePostFilesEarlyTor , torPreBypassCheck , processIp , useSession , sessionRefresh , Boards . exists , calcPerms , banCheck , handlePostFiles ,
paramConverter , verifyCaptcha , numFiles , blockBypassCheck , dnsblCheck , imageHashes , makePostController ) ;
router . post ( '/board/:board/modpost' , geoAndTor , handlePostFilesEarlyTor , torPreBypassCheck , processIp , useSession , sessionRefresh , Boards . exists , calcPerms , banCheck , isLoggedIn , hasPerms ( 3 ) , handlePostFiles ,
paramConverter , csrf , numFiles , blockBypassCheck , dnsblCheck , makePostController ) ; //mod post has token instead of captcha
//post actions
router . post ( '/board/:board/actions' , geoAndTor , torPreBypassCheck , processIp , useSession , sessionRefresh , Boards . exists , calcPerms , banCheck , paramConverter , verifyCaptcha , actionController ) ; //public, with captcha
router . post ( '/board/:board/modactions' , geoAndTor , torPreBypassCheck , processIp , useSession , sessionRefresh , csrf , Boards . exists , calcPerms , banCheck , isLoggedIn , hasPerms ( 3 ) , paramConverter , actionController ) ; //board manage page
router . post ( '/global/actions' , geoAndTor , torPreBypassCheck , processIp , useSession , sessionRefresh , csrf , calcPerms , isLoggedIn , hasPerms ( 1 ) , paramConverter , globalActionController ) ; //global manage page
//appeal ban
router . post ( '/appeal' , geoAndTor , torPreBypassCheck , processIp , useSession , sessionRefresh , paramConverter , verifyCaptcha , appealController ) ;
//edit post
router . post ( '/editpost' , geoAndTor , torPreBypassCheck , processIp , useSession , sessionRefresh , csrf , paramConverter , Boards . bodyExists , calcPerms , hasPerms ( 3 ) , editPostController ) ;
//board management forms
router . post ( '/board/:board/transfer' , /*geoAndTor, torPreBypassCheck, processIp,*/ useSession , sessionRefresh , csrf , Boards . exists , calcPerms , isLoggedIn , hasPerms ( 2 ) , paramConverter , transferController ) ;
router . post ( '/board/:board/settings' , /*geoAndTor, torPreBypassCheck, processIp,*/ useSession , sessionRefresh , csrf , Boards . exists , calcPerms , isLoggedIn , hasPerms ( 2 ) , paramConverter , boardSettingsController ) ;
router . post ( '/board/:board/addbanners' , /*geoAndTor, torPreBypassCheck, processIp,*/ useSession , sessionRefresh , handleBannerFiles , csrf , Boards . exists , calcPerms , isLoggedIn , hasPerms ( 2 ) , paramConverter , numFiles , uploadBannersController ) ; //add banners
router . post ( '/board/:board/deletebanners' , /*geoAndTor, torPreBypassCheck, processIp,*/ useSession , sessionRefresh , csrf , Boards . exists , calcPerms , isLoggedIn , hasPerms ( 2 ) , paramConverter , deleteBannersController ) ; //delete banners
router . post ( '/board/:board/addcustompages' , /*geoAndTor, torPreBypassCheck, processIp,*/ useSession , sessionRefresh , csrf , Boards . exists , calcPerms , isLoggedIn , hasPerms ( 2 ) , paramConverter , addCustomPageController ) ; //add banners
router . post ( '/board/:board/deletecustompages' , /*geoAndTor, torPreBypassCheck, processIp,*/ useSession , sessionRefresh , csrf , Boards . exists , calcPerms , isLoggedIn , hasPerms ( 2 ) , paramConverter , deleteCustomPageController ) ; //delete banners
//router.post('/board/:board/addban', geoAndTor, torPreBypassCheck, processIp, useSession, sessionRefresh, csrf, Boards.exists, calcPerms, isLoggedIn, hasPerms(3), paramConverter, addBanController); //add ban manually without post
router . post ( '/board/:board/editbans' , /*geoAndTor, torPreBypassCheck, processIp,*/ useSession , sessionRefresh , csrf , Boards . exists , calcPerms , isLoggedIn , hasPerms ( 3 ) , paramConverter , editBansController ) ; //edit bans
router . post ( '/board/:board/deleteboard' , /*geoAndTor, torPreBypassCheck, processIp,*/ useSession , sessionRefresh , csrf , Boards . exists , calcPerms , isLoggedIn , hasPerms ( 2 ) , deleteBoardController ) ; //delete board
//global management forms
router . post ( '/global/editbans' , useSession , sessionRefresh , csrf , calcPerms , isLoggedIn , hasPerms ( 1 ) , paramConverter , editBansController ) ; //remove bans
//commented out for now, because we cant add a manual ban based on a non existing hash suffix (or fetch the full hash from a non existing post), and the user wouldnt know if it the post didn't exist so its pointless anyway.
//router.post('/global/addban', geoAndTor, torPreBypassCheck, processIp, useSession, sessionRefresh, csrf, calcPerms, isLoggedIn, hasPerms(1), paramConverter, addBanController); //add ban manually without post
router . post ( '/global/deleteboard' , useSession , sessionRefresh , csrf , paramConverter , calcPerms , isLoggedIn , hasPerms ( 1 ) , deleteBoardController ) ; //delete board
router . post ( '/global/addnews' , useSession , sessionRefresh , csrf , calcPerms , isLoggedIn , hasPerms ( 0 ) , addNewsController ) ; //add new newspost
router . post ( '/global/editnews' , useSession , sessionRefresh , csrf , calcPerms , isLoggedIn , hasPerms ( 0 ) , paramConverter , editNewsController ) ; //add new newspost
router . post ( '/global/deletenews' , useSession , sessionRefresh , csrf , calcPerms , isLoggedIn , hasPerms ( 0 ) , paramConverter , deleteNewsController ) ; //delete news
router . post ( '/global/editaccounts' , useSession , sessionRefresh , csrf , calcPerms , isLoggedIn , hasPerms ( 0 ) , paramConverter , editAccountsController ) ; //account editing
router . post ( '/global/settings' , useSession , sessionRefresh , csrf , calcPerms , isLoggedIn , hasPerms ( 0 ) , paramConverter , globalSettingsController ) ; //global settings
//create board
router . post ( '/create' , geoAndTor , torPreBypassCheck , processIp , useSession , sessionRefresh , isLoggedIn , verifyCaptcha , calcPerms , createBoardController ) ;
//accounts
router . post ( '/login' , useSession , loginController ) ;
router . post ( '/logout' , useSession , logout ) ;
router . post ( '/register' , geoAndTor , torPreBypassCheck , processIp , useSession , sessionRefresh , verifyCaptcha , calcPerms , registerController ) ;
router . post ( '/changepassword' , geoAndTor , torPreBypassCheck , processIp , useSession , sessionRefresh , verifyCaptcha , changePasswordController ) ;
router . post ( '/resign' , useSession , sessionRefresh , csrf , calcPerms , isLoggedIn , paramConverter , resignController ) ;
router . post ( '/deleteaccount' , useSession , sessionRefresh , csrf , calcPerms , isLoggedIn , paramConverter , deleteAccountController ) ;
//removes captcha cookie, for refreshing for noscript users
router . post ( '/newcaptcha' , newCaptcha ) ;
//solve captcha for block bypass
router . post ( '/blockbypass' , geoAndTor , /*torPreBypassCheck,*/ processIp , verifyCaptcha , blockBypass ) ;
module . exports = router ;