inital #2
This commit is contained in:
40
src/auth-proxy.ts
Normal file
40
src/auth-proxy.ts
Normal file
@@ -0,0 +1,40 @@
|
||||
import {Request, RequestHandler} from 'express';
|
||||
import {DefaultConfig, Logger, Resolvable, urlJoin, 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 ||
|
||||
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,
|
||||
};
|
||||
Reference in New Issue
Block a user