mirror of
https://github.com/matt-fidd/stratos.git
synced 2026-01-01 16:19:26 +00:00
Added generalised handlebars context
This commit is contained in:
12
app.js
12
app.js
@@ -102,6 +102,17 @@ async function main() {
|
|||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
// Generic handlebars context
|
||||||
|
app.use((req, res, next) => {
|
||||||
|
req.hbsContext = {
|
||||||
|
name: req.session?.fullName,
|
||||||
|
userType: req.session?.userType,
|
||||||
|
title: 'Stratos'
|
||||||
|
};
|
||||||
|
|
||||||
|
next();
|
||||||
|
});
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Authentication middleware that redirects unauthenticated users
|
* Authentication middleware that redirects unauthenticated users
|
||||||
* back to the login page if they request a page they don't have access
|
* back to the login page if they request a page they don't have access
|
||||||
@@ -145,6 +156,7 @@ async function main() {
|
|||||||
*/
|
*/
|
||||||
app.use((req, res) => {
|
app.use((req, res) => {
|
||||||
res.status(404).render('error', {
|
res.status(404).render('error', {
|
||||||
|
...req.hbsContext,
|
||||||
title: 'Stratos - Error',
|
title: 'Stratos - Error',
|
||||||
code: 404,
|
code: 404,
|
||||||
msg: 'Page Not Found'
|
msg: 'Page Not Found'
|
||||||
|
|||||||
@@ -20,9 +20,9 @@ router.get('/dashboard', async (req, res) => {
|
|||||||
const classes = await u.getClasses();
|
const classes = await u.getClasses();
|
||||||
|
|
||||||
return res.render('dashboard', {
|
return res.render('dashboard', {
|
||||||
|
...req.hbsContext,
|
||||||
title: 'Stratos - Dashboard',
|
title: 'Stratos - Dashboard',
|
||||||
current: 'Dashboard',
|
current: 'Dashboard',
|
||||||
name: req.session.fullName,
|
|
||||||
stats: [
|
stats: [
|
||||||
{
|
{
|
||||||
value: classes.length,
|
value: classes.length,
|
||||||
@@ -55,9 +55,9 @@ router.all(/user\/(.{36})(\/.*)?/, async (req, res, next) => {
|
|||||||
u = await new User(req.db, req.params[0]);
|
u = await new User(req.db, req.params[0]);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
return res.status(400).render('error', {
|
return res.status(400).render('error', {
|
||||||
|
...req.hbsContext,
|
||||||
title: 'Stratos - Error',
|
title: 'Stratos - Error',
|
||||||
current: 'Dashboard',
|
current: 'Dashboard',
|
||||||
name: req.session.fullName,
|
|
||||||
code: 400,
|
code: 400,
|
||||||
msg: e.message
|
msg: e.message
|
||||||
});
|
});
|
||||||
@@ -77,9 +77,9 @@ router.get('/user/:id', (req, res) => {
|
|||||||
const u = req.user;
|
const u = req.user;
|
||||||
|
|
||||||
return res.render('user', {
|
return res.render('user', {
|
||||||
|
...req.hbsContext,
|
||||||
title: `Stratos - ${u.shortName}`,
|
title: `Stratos - ${u.shortName}`,
|
||||||
current: 'Dashboard',
|
current: 'Dashboard',
|
||||||
name: req.session.fullName,
|
|
||||||
user: u
|
user: u
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -14,11 +14,10 @@ router.get('/classes', async (req, res) => {
|
|||||||
const u = await new User(req.db, req.session.userId);
|
const u = await new User(req.db, req.session.userId);
|
||||||
|
|
||||||
return res.render('classes', {
|
return res.render('classes', {
|
||||||
|
...req.hbsContext,
|
||||||
title: 'Stratos - Classes',
|
title: 'Stratos - Classes',
|
||||||
current: 'Classes',
|
current: 'Classes',
|
||||||
name: req.session.fullName,
|
classes: await u.getClasses()
|
||||||
classes: await u.getClasses(),
|
|
||||||
userType: req.session.userType
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -26,9 +25,9 @@ router.get('/class/add', async (req, res) => {
|
|||||||
const subjects = await Subject.getAllSubjects(req.db);
|
const subjects = await Subject.getAllSubjects(req.db);
|
||||||
|
|
||||||
res.render('addClass', {
|
res.render('addClass', {
|
||||||
|
...req.hbsContext,
|
||||||
title: 'Stratos - Add class',
|
title: 'Stratos - Add class',
|
||||||
current: 'Classes',
|
current: 'Classes',
|
||||||
name: req.session.fullName,
|
|
||||||
subjects: subjects
|
subjects: subjects
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@@ -62,9 +61,9 @@ router.all(/class\/(.{36})(\/.*)?/, async (req, res, next) => {
|
|||||||
c = await new Class(req.db, req.params[0]);
|
c = await new Class(req.db, req.params[0]);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
return res.status(400).render('error', {
|
return res.status(400).render('error', {
|
||||||
|
...req.hbsContext,
|
||||||
title: 'Stratos - Error',
|
title: 'Stratos - Error',
|
||||||
current: 'Classes',
|
current: 'Classes',
|
||||||
name: req.session.fullName,
|
|
||||||
code: 400,
|
code: 400,
|
||||||
msg: e.message
|
msg: e.message
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ const validator = require('../lib/validator');
|
|||||||
|
|
||||||
router.get('/', (req, res) => {
|
router.get('/', (req, res) => {
|
||||||
return res.render('index', {
|
return res.render('index', {
|
||||||
|
...req.hbsContext,
|
||||||
title: 'Stratos - Home'
|
title: 'Stratos - Home'
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@@ -21,6 +22,7 @@ router.get('/login', (req, res) => {
|
|||||||
return res.redirect('/admin');
|
return res.redirect('/admin');
|
||||||
|
|
||||||
return res.render('login', {
|
return res.render('login', {
|
||||||
|
...req.hbsContext,
|
||||||
title: 'Stratos - Login',
|
title: 'Stratos - Login',
|
||||||
redirect_to: req.query?.redirect_to
|
redirect_to: req.query?.redirect_to
|
||||||
});
|
});
|
||||||
@@ -28,20 +30,22 @@ router.get('/login', (req, res) => {
|
|||||||
|
|
||||||
router.get('/register', (req, res) => {
|
router.get('/register', (req, res) => {
|
||||||
return res.render('register', {
|
return res.render('register', {
|
||||||
|
...req.hbsContext,
|
||||||
title: 'Stratos - Register'
|
title: 'Stratos - Register'
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
router.get('/password-reset', (req, res) => {
|
router.get('/password-reset', (req, res) => {
|
||||||
return res.render('password-reset', {
|
return res.render('password-reset', {
|
||||||
|
...req.hbsContext,
|
||||||
title: 'Stratos - Password Recovery'
|
title: 'Stratos - Password Recovery'
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
router.get('/logout', (req, res) => {
|
router.get('/logout', (req, res) => {
|
||||||
return res.render('logout', {
|
return res.render('logout', {
|
||||||
title: 'Stratos - Logout',
|
...req.hbsContext,
|
||||||
username: req.session.fullName
|
title: 'Stratos - Logout'
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -124,6 +128,7 @@ router.post('/register', async (req, res) => {
|
|||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error(e);
|
console.error(e);
|
||||||
return res.render('error', {
|
return res.render('error', {
|
||||||
|
...req.hbsContext,
|
||||||
code: 400,
|
code: 400,
|
||||||
msg: 'Unable to create account'
|
msg: 'Unable to create account'
|
||||||
});
|
});
|
||||||
@@ -196,6 +201,7 @@ router.get('/password-reset/:uuid/:token', async (req, res) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return res.render('change-password', {
|
return res.render('change-password', {
|
||||||
|
...req.hbsContext,
|
||||||
uuid: uuid,
|
uuid: uuid,
|
||||||
token: token
|
token: token
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -7,9 +7,9 @@ router.get('/reports', (req, res, next) => {
|
|||||||
/* eslint-disable multiline-comment-style */
|
/* eslint-disable multiline-comment-style */
|
||||||
/*
|
/*
|
||||||
return res.render('reports', {
|
return res.render('reports', {
|
||||||
|
...req.hbsContext,
|
||||||
title: 'Stratos - Reports',
|
title: 'Stratos - Reports',
|
||||||
current: 'Reports',
|
current: 'Reports'
|
||||||
name: req.session.fullName
|
|
||||||
});
|
});
|
||||||
*/
|
*/
|
||||||
/* eslint-enable multiline-comment-style */
|
/* eslint-enable multiline-comment-style */
|
||||||
|
|||||||
@@ -16,9 +16,9 @@ router.get('/:id', async (req, res) => {
|
|||||||
const testCount = recentTests.length + upcomingTests.length;
|
const testCount = recentTests.length + upcomingTests.length;
|
||||||
|
|
||||||
return res.render('class', {
|
return res.render('class', {
|
||||||
|
...req.hbsContext,
|
||||||
title: `Stratos - ${c.name}`,
|
title: `Stratos - ${c.name}`,
|
||||||
current: 'Classes',
|
current: 'Classes',
|
||||||
name: req.session.fullName,
|
|
||||||
className: c.name,
|
className: c.name,
|
||||||
teachers: c.teachers,
|
teachers: c.teachers,
|
||||||
members: c.students,
|
members: c.students,
|
||||||
@@ -30,7 +30,6 @@ router.get('/:id', async (req, res) => {
|
|||||||
deleteLink: `${linkRoot}/delete`,
|
deleteLink: `${linkRoot}/delete`,
|
||||||
membersLink: `${linkRoot}/members`,
|
membersLink: `${linkRoot}/members`,
|
||||||
teachersLink: `${linkRoot}/teachers`,
|
teachersLink: `${linkRoot}/teachers`,
|
||||||
userType: req.session.userType,
|
|
||||||
stats: [
|
stats: [
|
||||||
{
|
{
|
||||||
value: testCount,
|
value: testCount,
|
||||||
@@ -76,10 +75,9 @@ router.get('/:id/:memberType(members|teachers)', (req, res) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return res.render('classUsers', {
|
return res.render('classUsers', {
|
||||||
|
...req.hbsContext,
|
||||||
title: `Stratos - ${c.name}`,
|
title: `Stratos - ${c.name}`,
|
||||||
current: 'Classes',
|
current: 'Classes',
|
||||||
name: req.session.fullName,
|
|
||||||
userType: req.session.userType,
|
|
||||||
className: c.name,
|
className: c.name,
|
||||||
users: users,
|
users: users,
|
||||||
addLink: addLink,
|
addLink: addLink,
|
||||||
@@ -116,9 +114,9 @@ router.get('/:id/:userType(members|teachers)/add', (req, res) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
return res.render('addClassUser', {
|
return res.render('addClassUser', {
|
||||||
|
...req.hbsContext,
|
||||||
title: `Stratos - ${c.name}`,
|
title: `Stratos - ${c.name}`,
|
||||||
current: 'Classes',
|
current: 'Classes',
|
||||||
name: req.session.fullName,
|
|
||||||
className: c.name,
|
className: c.name,
|
||||||
postLink: `/admin/class/${c.id}/${req.params.userType}/add`,
|
postLink: `/admin/class/${c.id}/${req.params.userType}/add`,
|
||||||
newType: userType.slice(0, -1),
|
newType: userType.slice(0, -1),
|
||||||
@@ -153,9 +151,9 @@ router.post('/:id/:userType(members|teachers)/add', async (req, res) => {
|
|||||||
return res.redirect(`${rejectURL}/?err=no_user`);
|
return res.redirect(`${rejectURL}/?err=no_user`);
|
||||||
|
|
||||||
return res.render('addClassUser2', {
|
return res.render('addClassUser2', {
|
||||||
|
...req.hbsContext,
|
||||||
title: `Stratos - ${c.name}`,
|
title: `Stratos - ${c.name}`,
|
||||||
current: 'Classes',
|
current: 'Classes',
|
||||||
name: req.session.fullName,
|
|
||||||
className: c.name,
|
className: c.name,
|
||||||
postLink: `/admin/class/${c.id}/members/add2`,
|
postLink: `/admin/class/${c.id}/members/add2`,
|
||||||
newType: 'student',
|
newType: 'student',
|
||||||
@@ -224,12 +222,12 @@ router.get('/:id/:userType(members|teachers)/:userId/remove',
|
|||||||
`/${u.id}/remove`;
|
`/${u.id}/remove`;
|
||||||
|
|
||||||
return res.render('removeClassUser', {
|
return res.render('removeClassUser', {
|
||||||
|
...req.hbsContext,
|
||||||
title: `Stratos - ${c.name}`,
|
title: `Stratos - ${c.name}`,
|
||||||
current: 'Classes',
|
current: 'Classes',
|
||||||
name: req.session.fullName,
|
|
||||||
u: u,
|
u: u,
|
||||||
postLink: postLink,
|
postLink: postLink,
|
||||||
pageTitle: `Remove a ${userType.slice(0, -1)}`,
|
pageTitle: `Remove a ${userType.slice(0, -1)}`
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
@@ -246,9 +244,9 @@ router.post('/:id/:userType(members|teachers)/:userId/remove',
|
|||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error(e);
|
console.error(e);
|
||||||
return res.render('error', {
|
return res.render('error', {
|
||||||
|
...req.hbsContext,
|
||||||
title: 'Stratos - Error',
|
title: 'Stratos - Error',
|
||||||
current: 'Classes',
|
current: 'Classes',
|
||||||
name: req.session.fullName,
|
|
||||||
msg: `Can not remove this user: ${e.message}`
|
msg: `Can not remove this user: ${e.message}`
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,9 +20,9 @@ router.get('/:id', async (req, res) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return res.render('test', {
|
return res.render('test', {
|
||||||
|
...req.hbsContext,
|
||||||
title: `Stratos - ${t.template.name}`,
|
title: `Stratos - ${t.template.name}`,
|
||||||
current: 'Tests',
|
current: 'Tests',
|
||||||
name: req.session.fullName,
|
|
||||||
testName: t.template.name,
|
testName: t.template.name,
|
||||||
class: t.class,
|
class: t.class,
|
||||||
subject: t.class.subject.name,
|
subject: t.class.subject.name,
|
||||||
@@ -30,7 +30,6 @@ router.get('/:id', async (req, res) => {
|
|||||||
reportsLink: `${linkRoot}/reports`,
|
reportsLink: `${linkRoot}/reports`,
|
||||||
resultsLink: `${linkRoot}/results`,
|
resultsLink: `${linkRoot}/results`,
|
||||||
deleteLink: `${linkRoot}/delete`,
|
deleteLink: `${linkRoot}/delete`,
|
||||||
userType: req.session.userType,
|
|
||||||
testResults: results,
|
testResults: results,
|
||||||
stats: [
|
stats: [
|
||||||
{
|
{
|
||||||
@@ -67,11 +66,10 @@ router.get('/:id/results', async (req, res) => {
|
|||||||
const results = await t.getTestResults();
|
const results = await t.getTestResults();
|
||||||
|
|
||||||
return res.render('testResults', {
|
return res.render('testResults', {
|
||||||
|
...req.hbsContext,
|
||||||
title: `Stratos - ${t.template.name}`,
|
title: `Stratos - ${t.template.name}`,
|
||||||
current: 'Tests',
|
current: 'Tests',
|
||||||
name: req.session.fullName,
|
|
||||||
testName: t.template.name,
|
testName: t.template.name,
|
||||||
userType: req.session.userType,
|
|
||||||
testResults: results,
|
testResults: results,
|
||||||
linkRoot: linkRoot,
|
linkRoot: linkRoot,
|
||||||
addLink: `${linkRoot}/add`
|
addLink: `${linkRoot}/add`
|
||||||
@@ -122,9 +120,9 @@ router.get('/:id/results/add', async (req, res) => {
|
|||||||
.filter(s => !existingResults.includes(s.id));
|
.filter(s => !existingResults.includes(s.id));
|
||||||
|
|
||||||
return res.render('addTestResult', {
|
return res.render('addTestResult', {
|
||||||
|
...req.hbsContext,
|
||||||
title: `Stratos - ${t.template.name}`,
|
title: `Stratos - ${t.template.name}`,
|
||||||
current: 'Tests',
|
current: 'Tests',
|
||||||
name: req.session.fullName,
|
|
||||||
testName: t.template.name,
|
testName: t.template.name,
|
||||||
linkRoot: linkRoot,
|
linkRoot: linkRoot,
|
||||||
students: students,
|
students: students,
|
||||||
|
|||||||
@@ -13,11 +13,10 @@ router.get('/tests', async (req, res) => {
|
|||||||
const u = await new User(req.db, req.session.userId);
|
const u = await new User(req.db, req.session.userId);
|
||||||
|
|
||||||
return res.render('tests', {
|
return res.render('tests', {
|
||||||
|
...req.hbsContext,
|
||||||
title: 'Stratos - Tests',
|
title: 'Stratos - Tests',
|
||||||
current: 'Tests',
|
current: 'Tests',
|
||||||
name: req.session.fullName,
|
tests: await u.getTests()
|
||||||
tests: await u.getTests(),
|
|
||||||
userType: req.session.userType
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -32,9 +31,9 @@ router.get('/test/add', async (req, res) => {
|
|||||||
const [ testTemplates, classes ] = await Promise.all(promises);
|
const [ testTemplates, classes ] = await Promise.all(promises);
|
||||||
|
|
||||||
res.render('addTest', {
|
res.render('addTest', {
|
||||||
|
...req.hbsContext,
|
||||||
title: 'Stratos - Add test',
|
title: 'Stratos - Add test',
|
||||||
current: 'Tests',
|
current: 'Tests',
|
||||||
name: req.session.fullName,
|
|
||||||
testTemplates: testTemplates,
|
testTemplates: testTemplates,
|
||||||
classes: classes
|
classes: classes
|
||||||
});
|
});
|
||||||
@@ -72,9 +71,9 @@ router.post('/test/add', async (req, res) => {
|
|||||||
|
|
||||||
router.get('/testTemplate/add', (req, res) => {
|
router.get('/testTemplate/add', (req, res) => {
|
||||||
res.render('addTestTemplate', {
|
res.render('addTestTemplate', {
|
||||||
|
...req.hbsContext,
|
||||||
title: 'Stratos - Add test template',
|
title: 'Stratos - Add test template',
|
||||||
current: 'Tests',
|
current: 'Tests'
|
||||||
name: req.session.fullName
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -103,9 +102,9 @@ router.post('/testTemplate/add', async (req, res) => {
|
|||||||
console.error(e);
|
console.error(e);
|
||||||
|
|
||||||
return res.render('error', {
|
return res.render('error', {
|
||||||
|
...req.hbsContext,
|
||||||
title: 'Stratos - Error',
|
title: 'Stratos - Error',
|
||||||
current: 'Tests',
|
current: 'Tests',
|
||||||
name: req.session.fullName,
|
|
||||||
msg: 'Could not create test template'
|
msg: 'Could not create test template'
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -119,9 +118,9 @@ router.all(/test\/(.{36})(\/.*)?/, async (req, res, next) => {
|
|||||||
t = await new Test(req.db, req.params[0]);
|
t = await new Test(req.db, req.params[0]);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
return res.status(400).render('error', {
|
return res.status(400).render('error', {
|
||||||
|
...req.hbsContext,
|
||||||
title: 'Stratos - Error',
|
title: 'Stratos - Error',
|
||||||
current: 'Tests',
|
current: 'Tests',
|
||||||
name: req.session.fullName,
|
|
||||||
code: 400,
|
code: 400,
|
||||||
msg: e.message
|
msg: e.message
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{{> mainPageHeader name='Log Out' }}
|
{{> mainPageHeader name='Log Out' }}
|
||||||
|
|
||||||
<div class='formContainer'>
|
<div class='formContainer'>
|
||||||
<p style='text-align: center;'>You are logged in as <span class='hl'>{{ username }}</span></p>
|
<p style='text-align: center;'>You are logged in as <span class='hl'>{{ name }}</span></p>
|
||||||
<form action='/logout' method='post'>
|
<form action='/logout' method='post'>
|
||||||
<input type='submit' class='btn btn--primary btn--full' value='Log Out'/>
|
<input type='submit' class='btn btn--primary btn--full' value='Log Out'/>
|
||||||
</form>
|
</form>
|
||||||
|
|||||||
Reference in New Issue
Block a user