// logout router.get('/logout', (req, res) => { req.session.user = null; req.session.users_name = null; req.session.is_admin = null; req.session.pw_validated = null; req.session.message = null; req.session.message_type = null; res.redirect(req.app_context + '/'); });
// redirect to "/app" on home route router.all('/', common.checkLogin, function (req, res, next){ res.redirect(req.app_context + '/app/'); });
// login page router.get('/app/login', function (req, res, next){ var passwordConf = req.nconf.app.get('app'); // if password is set then render the login page, else continue if(passwordConf && passwordConf.hasOwnProperty('password')){ res.render('login', { message: '', helpers: req.handlebars.helpers }); }else{ res.redirect(req.app_context + '/'); } });
// resets the view count of a given article ID router.get('/' + config.settings.route_name + '/resetviewCount/:id', common.restrict, (req, res) => { const db = req.app.db; db.kb.update({ _id: common.getId(req.params.id) }, { $set: { kb_viewcount: 0 } }, { multi: false }, (err, numReplaced) => { if(err){ req.session.message = req.i18n.__('View count could not be reset. Try again.'); req.session.message_type = 'danger'; }else{ req.session.message = req.i18n.__('View count successfully reset to zero.'); req.session.message_type = 'success'; } // redirect to new doc res.redirect(req.app_context + '/edit/' + req.params.id); }); });
// Pagination redirect to page 1 router.get('/app/:conn/:db/:coll/', function (req, res, next){ res.redirect(req.app_context + '/app/' + req.params.conn + '/' + req.params.db + '/' + req.params.coll + '/view/1'); });
router.post('/file/upload_file', common.restrict, inline_upload.single('file'), (req, res, next) => { if(req.file){ // check for upload select const upload_dir = path.join(appDir, 'public', 'uploads', 'inline_files'); const relative_upload_dir = req.app_context + '/uploads/inline_files'; const file = req.file; const source = fs.createReadStream(file.path); const dest = fs.createWriteStream(path.join(upload_dir, file.originalname)); // save the new file source.pipe(dest); source.on('end', () => { }); // delete the temp file. fs.unlink(file.path, (err) => { }); // uploaded res.writeHead(200, { 'Content-Type': 'application/json' }); res.end(JSON.stringify({ filename: relative_upload_dir + '/' + file.originalname })); return; } res.writeHead(500, { 'Content-Type': 'application/json' }); res.end(JSON.stringify({ filename: 'fail' }, null, 3)); });
router.post('/file/new_dir', common.restrict, (req, res, next) => { // if new directory exists if(req.body.custom_dir){ mkdirp(path.join(appDir, 'public', 'uploads', req.body.custom_dir), (err) => { if(err){ console.error('Directory creation error: ' + err); req.session.message = req.i18n.__('Directory creation error. Please try again'); req.session.message_type = 'danger'; res.redirect(req.app_context + '/files'); }else{ req.session.message = req.i18n.__('Directory successfully created'); req.session.message_type = 'success'; res.redirect(req.app_context + '/files'); } }); }else{ req.session.message = req.i18n.__('Please enter a directory name'); req.session.message_type = 'danger'; res.redirect(req.app_context + '/files'); } });
// login page router.post('/app/login_action', function (req, res, next){ var passwordConf = req.nconf.app.get('app'); if(passwordConf && passwordConf.hasOwnProperty('password')){ if(req.body.inputPassword === passwordConf.password){ // password is ok, go to home req.session.loggedIn = true; res.redirect(req.app_context + '/'); }else{ // password is wrong. Show login form with a message res.render('login', { message: 'Password is incorrect', helpers: req.handlebars.helpers }); } }else{ res.redirect(req.app_context + '/'); } });
// delete a article router.get('/delete/:id', common.restrict, (req, res) => { const db = req.app.db; const lunr_index = req.app.index; // remove the article db.kb.remove({ _id: common.getId(req.params.id) }, {}, (err, numRemoved) => { // create lunr doc const lunr_doc = { id: req.params.id }; // remove from index lunr_index.remove(lunr_doc, false); // redirect home req.session.message = req.i18n.__('Article successfully deleted'); req.session.message_type = 'success'; res.redirect(req.app_context + '/articles'); }); });
// setup form is shown when there are no users setup in the DB router.get('/setup', (req, res) => { const db = req.app.db; db.users.count({}, (err, user_count) => { // dont allow the user to "re-setup" if a user exists. // set needs_setup to false as a user exists req.session.needs_setup = false; if(user_count === 0){ res.render('setup', { title: 'Setup', config: config, message: common.clear_session_value(req.session, 'message'), message_type: common.clear_session_value(req.session, 'message_type'), show_footer: 'show_footer', helpers: req.handlebars }); }else{ res.redirect(req.app_context + '/login'); } }); });
// the home route router.get('/app/', function (req, res, next){ var connection_list = req.nconf.connections.get('connections'); if(connection_list){ if(Object.keys(connection_list).length > 0){ // we have a connection and redirect to the first var first_conn = Object.keys(connection_list)[0]; res.redirect(req.app_context + '/app/' + first_conn); return; } } // if no connections, go to connection setup res.redirect(req.app_context + '/app/connection_list'); return; });
// logout router.get('/app/logout', function (req, res, next){ req.session.loggedIn = null; res.redirect(req.app_context + '/app'); });
// delete a user router.get('/user/delete/:id', common.restrict, (req, res) => { // only allow admin if(req.session.is_admin !== 'true'){ res.render('error', { message: 'Access denied', helpers: req.handlebars, config: config }); return; } const db = req.app.db; // remove the article if(req.session.is_admin === 'true'){ db.users.remove({ _id: common.getId(req.params.id) }, {}, (err, numRemoved) => { req.session.message = req.i18n.__('User deleted.'); req.session.message_type = 'success'; res.redirect(req.app_context + '/users'); }); }else{ req.session.message = req.i18n.__('Access denied.'); req.session.message_type = 'danger'; res.redirect(req.app_context + '/users'); } });
// Pagination redirect to page 1 router.get('/app/:conn/:db/:coll/view/', function (req, res, next){ res.redirect(req.app_context + '/app/' + req.params.conn + '/' + req.params.db + '/' + req.params.coll + '/view/1'); });
// resets the vote count of a given article ID router.get('/' + config.settings.route_name + '/resetvoteCount/:id', common.restrict, (req, res) => { const db = req.app.db; db.kb.update({ _id: common.getId(req.params.id) }, { $set: { kb_votes: 0 } }, { multi: false }, (err, numReplaced) => { if(err){ req.session.message = req.i18n.__('Vote count could not be reset. Try again.'); req.session.message_type = 'danger'; }else{ req.session.message = req.i18n.__('Vote count successfully reset to zero.'); req.session.message_type = 'success'; } // redirect to new doc res.redirect(req.app_context + '/edit/' + req.params.id); }); });