Files
node-pkg-express-utils/src/auth-proxy.ts
2020-11-17 15:07:01 +01:00

39 lines
997 B
TypeScript

import {Request, RequestHandler} from 'express';
import {DefaultConfig, Logger, Resolvable, UserInfo} 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;
if (token === undefined || url === undefined) {
return undefined;
}
try {
const res = await fetch(url, {headers: [[DefaultConfig.USERINFO_HEADER, token]]});
return await res.json() as Partial<UserInfo>;
} catch (e) {
Logger.warn(e);
return undefined;
}
});
req.getUserInfo = () => resolvable.resolve();
res.initLogout = function() {
const url = DefaultConfig.AUTH_PROXY_INIT_LOGOUT_URL;
if (url === undefined) {
return false;
}
this.redirect(307, url);
return true;
};
next();
};
export const AuthProxy = {
router,
};