proxyAuth: authorization logic

This commit is contained in:
Girish Ramakrishnan
2020-11-20 17:54:17 -08:00
parent 735485b539
commit 71648d92ae
+26 -10
View File
@@ -95,7 +95,7 @@ function auth(req, res, next) {
}
// endpoint called by login page, username and password posted as JSON body
function login(req, res, next) {
function authenticate(req, res, next) {
assert.strictEqual(typeof req.body, 'object');
const appId = req.headers['x-app-id'] || '';
@@ -111,15 +111,32 @@ function login(req, res, next) {
api(username, password, appId, function (error, user) {
if (error) return next(new HttpError(403, 'Invalid username or password' ));
const token = jwt.sign({ user: users.removePrivateFields(user) }, TOKEN_SECRET, { expiresIn: `${EXPIRY_DAYS}d` });
req.user = user;
next();
});
}
res.cookie('authToken', token, {
httpOnly: true,
maxAge: EXPIRY_DAYS * 86400 * 1000, // milliseconds
secure: true
function authorize(req, res, next) {
const appId = req.headers['x-app-id'] || '';
if (!appId) return next(new HttpError(503, 'Nginx misconfiguration'));
apps.get(appId, function (error, app) {
if (error) return next(new HttpError(403, 'No such app' ));
apps.hasAccessTo(app, req.user, function (error, hasAccess) {
if (error) return next(new HttpError(403, 'Forbidden' ));
if (!hasAccess) return next(new HttpError(403, 'Forbidden' ));
const token = jwt.sign({ user: users.removePrivateFields(req.user) }, TOKEN_SECRET, { expiresIn: `${EXPIRY_DAYS}d` });
res.cookie('authToken', token, {
httpOnly: true,
maxAge: EXPIRY_DAYS * 86400 * 1000, // milliseconds
secure: true
});
res.redirect('/');
});
res.redirect('/');
});
}
@@ -156,10 +173,9 @@ function initializeAuthwallExpressSync() {
.use(router)
.use(middleware.lastMile());
router.get ('/', (req, res) => { res.redirect('/login'); }); // this can never happen
router.get ('/login', loginPage);
router.get ('/auth', jwtVerify, basicAuthVerify, auth);
router.post('/login', json, login);
router.post('/login', json, authenticate, authorize);
router.get ('/logout', logoutPage);
router.post('/logout', json, logout);