'use strict' ;
const express = require ( 'express' ) ;
const winston = require ( 'winston' ) ;
const uploadsController = require ( '../controllers/uploads' ) ;
const helpers = require ( './helpers' ) ;
module . exports = function ( app , middleware , controllers ) {
const middlewares = [ middleware . authenticateRequest ] ;
const router = express . Router ( ) ;
app . use ( '/api' , router ) ;
router . get ( '/config' , [ ... middlewares , middleware . applyCSRF ] , helpers . tryRoute ( controllers . api . getConfig ) ) ;
router . get ( '/self' , [ ... middlewares ] , helpers . tryRoute ( controllers . user . getCurrentUser ) ) ;
router . get ( '/user/uid/:uid' , [ ... middlewares , middleware . canViewUsers ] , helpers . tryRoute ( controllers . user . getUserByUID ) ) ;
router . get ( '/user/username/:username' , [ ... middlewares , middleware . canViewUsers ] , helpers . tryRoute ( controllers . user . getUserByUsername ) ) ;
router . get ( '/user/email/:email' , [ ... middlewares , middleware . canViewUsers ] , helpers . tryRoute ( controllers . user . getUserByEmail ) ) ;
router . get ( '/user/:userslug/export/posts' , [ ... middlewares , middleware . authenticateRequest , middleware . ensureLoggedIn , middleware . checkAccountPermissions , middleware . exposeUid ] , helpers . tryRoute ( controllers . user . exportPosts ) ) ;
router . get ( '/user/:userslug/export/uploads' , [ ... middlewares , middleware . authenticateRequest , middleware . ensureLoggedIn , middleware . checkAccountPermissions , middleware . exposeUid ] , helpers . tryRoute ( controllers . user . exportUploads ) ) ;
router . get ( '/user/:userslug/export/profile' , [ ... middlewares , middleware . authenticateRequest , middleware . ensureLoggedIn , middleware . checkAccountPermissions , middleware . exposeUid ] , helpers . tryRoute ( controllers . user . exportProfile ) ) ;
// Deprecated, remove in v1.20.0
router . get ( '/user/uid/:userslug/export/:type' , ( req , res ) => {
winston . warn ( ` [router] \` /api/user/uid/ ${ req . params . userslug } /export/ ${ req . params . type } \` is deprecated, call it \` /api/user/ ${ req . params . userslug } /export/ ${ req . params . type } \` instead. ` ) ;
res . redirect ( ` /api/user/ ${ req . params . userslug } /export/ ${ req . params . type } ` ) ;
} ) ;
router . get ( '/categories/:cid/moderators' , [ ... middlewares ] , helpers . tryRoute ( controllers . api . getModerators ) ) ;
router . get ( '/recent/posts/:term?' , [ ... middlewares ] , helpers . tryRoute ( controllers . posts . getRecentPosts ) ) ;
router . get ( '/unread/total' , [ ... middlewares , middleware . ensureLoggedIn ] , helpers . tryRoute ( controllers . unread . unreadTotal ) ) ;
router . get ( '/topic/teaser/:topic_id' , [ ... middlewares ] , helpers . tryRoute ( controllers . topics . teaser ) ) ;
router . get ( '/topic/pagination/:topic_id' , [ ... middlewares ] , helpers . tryRoute ( controllers . topics . pagination ) ) ;
const multipart = require ( 'connect-multiparty' ) ;
const multipartMiddleware = multipart ( ) ;
const postMiddlewares = [
middleware . maintenanceMode ,
multipartMiddleware ,
middleware . validateFiles ,
middleware . uploads . ratelimit ,
middleware . applyCSRF ,
] ;
router . post ( '/post/upload' , middlewares , helpers . tryRoute ( uploadsController . uploadPost ) ) ;
router . post ( '/user/:userslug/uploadpicture' , [
... middlewares ,
... postMiddlewares ,
middleware . exposeUid ,
middleware . ensureLoggedIn ,
middleware . canViewUsers ,
middleware . checkAccountPermissions ,
] , helpers . tryRoute ( controllers . accounts . edit . uploadPicture ) ) ;
} ;