39 lines
997 B
TypeScript
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,
|
|
};
|