Files
node-template-express/src/utils/auth-proxy.ts
Sebastian Seedorf 689e087aef Optimize Imports
2020-11-16 00:00:29 +01:00

41 lines
1.1 KiB
TypeScript

import {Request, RequestHandler} from 'express';
import {DefaultConfig, Logger, Resolvable, urlJoin} from '.';
import fetch from 'node-fetch';
const router: RequestHandler = (req: Request, res, next) => {
const resolvable = new Resolvable(async () => {
if (!DefaultConfig.USERINFO_HEADER) {
return undefined;
}
const token = req.header(DefaultConfig.USERINFO_HEADER);
const url = DefaultConfig.AUTH_PROXY_USERINFO_URL ||
DefaultConfig.AUTH_PROXY_URL && urlJoin(DefaultConfig.AUTH_PROXY_URL, "userinfo");
if (token === undefined || url === undefined) {
return undefined;
}
try {
const res = await fetch(url, {headers: [[DefaultConfig.USERINFO_HEADER, token]]});
return await res.json() as UserInfo;
} catch (e) {
Logger.warn(e);
return undefined;
}
});
req.getUserInfo = () => resolvable.resolve();
res.initLogout = function() {
const url = DefaultConfig.AUTH_PROXY_INIT_LOGOUT_URL ||
DefaultConfig.AUTH_PROXY_URL && urlJoin(DefaultConfig.AUTH_PROXY_URL, "init-logout");
if (url === undefined) {
return false;
}
this.redirect(307, url);
return true;
};
next();
};
export const AuthProxy = {
router,
};