1
0
Fork 0

web - dynamic path rules

This commit is contained in:
Ruben Meyer 2019-09-25 20:22:25 +02:00
parent 183f3b660c
commit 4eff02408d
3 changed files with 47 additions and 8 deletions

View File

@ -33,7 +33,7 @@ methods.start = () => {
// Access Control Headers // Access Control Headers
app.use( (req, res, next) => { app.use( (req, res, next) => {
res.set({ res.set({
'X-Powered-By': global['gds'].cfg 'X-Powered-By': global['gds'].cfg.web.poweredBy
}); });
res.header("Access-Control-Allow-Origin", "*"); res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
@ -78,6 +78,10 @@ methods.start = () => {
})); }));
app.use(cp(global['gds'].cfg.web.cookieKey)); app.use(cp(global['gds'].cfg.web.cookieKey));
// Pretty print
if(app.get('env') === 'debug')
app.locals.pretty = true;
// Sessions // Sessions
session_options = { session_options = {
secret: global['gds'].cfg.web.sessionKey, secret: global['gds'].cfg.web.sessionKey,

View File

@ -6,10 +6,25 @@
/** /**
* EXPLANATIONS: * EXPLANATIONS:
*
* groups: ["anon", "user", "admin"] * groups: ["anon", "user", "admin"]
* - anon: not logged in; no cookies * - anon: not logged in; no cookies
* - user: logged in; non-special group * - user: logged in; non-special group
* - admin: logged in; admin group 999 or equivalent * - admin: logged in; admin group 999 or equivalent
*
* expressions: RegExp tested on req.path
* - ex.:
* - req.path = "/profile/456";
* - expression = "(/profile/.*)";
* - (new RegExp(expression, "g")).test(req.path) ~> true
*
* rules: rules which can be rolled out
* - block: block direct access
*
* types: ["404", "missing_permission"]
* - 404: File not found
* - missing_permission: Missing Permission page
* - login: login page
*/ */
let rules = [ let rules = [
{ {
@ -24,6 +39,12 @@ let rules = [
rule: "block", rule: "block",
type: "404" type: "404"
}, },
{
group: "anon",
expression: "(/admin/.*)",
rule: "block",
type: "login"
},
{ {
group: "user", group: "user",
expression: "(/blocks/.*)", expression: "(/blocks/.*)",
@ -35,6 +56,12 @@ let rules = [
expression: "(/error/.*)", expression: "(/error/.*)",
rule: "block", rule: "block",
type: "404" type: "404"
},
{
group: "user",
expression: "(/admin/.*)",
rule: "block",
type: "missing_permission"
} }
]; ];

View File

@ -77,18 +77,25 @@ route.all('/*', (req, res, next) => {
let regex = new RegExp(rule.expression, "g"); let regex = new RegExp(rule.expression, "g");
if(regex.test(req.path)) { if(regex.test(req.path)) {
if(rule.type == "404") { if(rule.type == "404") {
resSent = true;
return res.status(404).render('error/404', { return res.status(404).render('error/404', {
error_code: 404, error_code: 404,
error_msg: 'msg.request.file.not_found', error_msg: 'msg.request.file.not_found',
user: req.session.user session: req.session
}); });
} else if(rule.type == "missing_permission") { } else if(rule.type == "missing_permission") {
resSent = true;
return res.status(401).render('error/permission', { return res.status(401).render('error/permission', {
error_code: 401, error_code: 401,
error_msg: 'msg.auth.login.required', session: req.session
user: req.session.user });
} else if(rule.type == "login") {
return res.status(401).render('error/login', {
error_code: 401,
session: req.session
});
} else {
return res.status(401).render('error/error', {
error_code: 401,
session: req.session
}); });
} }
} }
@ -98,13 +105,14 @@ route.all('/*', (req, res, next) => {
if(fileCheck(req.path)) { if(fileCheck(req.path)) {
return res.render(req.path.replace(/^\//, ''), { return res.render(req.path.replace(/^\//, ''), {
user: req.session.user session: req.session,
cfg: global['gds'].cfg
}); });
} else { } else {
return res.status(404).render('error/404', { return res.status(404).render('error/404', {
error_code: 404, error_code: 404,
error_msg: 'msg.request.file.not_found', error_msg: 'msg.request.file.not_found',
user: req.session.user session: req.session
}); });
} }