37 lines
1.2 KiB
JavaScript
37 lines
1.2 KiB
JavaScript
// Root data-source redirect only.
|
|
|
|
const { PERMISSION_DENIED_MESSAGE } = require('#src/rbac');
|
|
|
|
module.exports = function registerDataSourceRoutes(app, deps) {
|
|
const setAuthMessageCookie = deps.setAuthMessageCookie;
|
|
const { hasAnyPermission } = require('#src/rbac');
|
|
|
|
app.get('/data-sources', function (req, res, next) {
|
|
if (!req.currentUser) {
|
|
if (typeof setAuthMessageCookie === 'function') {
|
|
setAuthMessageCookie(res, 'Please sign in to continue.');
|
|
return res.redirect('/login');
|
|
}
|
|
return res.redirect('/login');
|
|
}
|
|
|
|
if (hasAnyPermission(req.currentUser, ['timetables.read', 'rss-feeds.read', 'api-sources.read', 'weather.read'])) {
|
|
if (hasAnyPermission(req.currentUser, ['timetables.read'])) {
|
|
return res.redirect('/data-sources/timetables');
|
|
}
|
|
if (hasAnyPermission(req.currentUser, ['rss-feeds.read'])) {
|
|
return res.redirect('/data-sources/rss-feeds');
|
|
}
|
|
if (hasAnyPermission(req.currentUser, ['weather.read'])) {
|
|
return res.redirect('/data-sources/weather');
|
|
}
|
|
return res.redirect('/data-sources/api-sources');
|
|
}
|
|
|
|
const error = new Error(PERMISSION_DENIED_MESSAGE);
|
|
error.statusCode = 403;
|
|
error.expose = true;
|
|
next(error);
|
|
});
|
|
};
|