Cache user info until expire
This commit is contained in:
@@ -12,19 +12,30 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.AuthProxy = void 0;
|
||||
const _1 = require(".");
|
||||
const node_fetch_1 = require("node-fetch");
|
||||
const cachedUsers = {};
|
||||
const router = (req, res, next) => {
|
||||
const resolvable = new _1.Resolvable(() => __awaiter(void 0, void 0, void 0, function* () {
|
||||
if (!_1.DefaultConfig.USERINFO_HEADER) {
|
||||
return undefined;
|
||||
}
|
||||
const token = req.header(_1.DefaultConfig.USERINFO_HEADER);
|
||||
if (token && cachedUsers[token])
|
||||
return cachedUsers[token];
|
||||
const url = _1.DefaultConfig.AUTH_PROXY_USERINFO_URL;
|
||||
if (token === undefined || url === undefined) {
|
||||
return undefined;
|
||||
}
|
||||
try {
|
||||
const expireHeader = req.header(_1.DefaultConfig.EXPIRE_HEADER);
|
||||
const expireSecDate = expireHeader && parseInt(expireHeader, 10) || undefined;
|
||||
const expiresIn = expireSecDate && expireSecDate * 1000 > Date.now() && expireSecDate * 1000 - Date.now();
|
||||
const res = yield node_fetch_1.default(url, { headers: [[_1.DefaultConfig.USERINFO_HEADER, token]] });
|
||||
return yield res.json();
|
||||
const userinfo = yield res.json();
|
||||
if (expiresIn) {
|
||||
cachedUsers[token] = userinfo;
|
||||
setTimeout(() => delete cachedUsers[token], expiresIn);
|
||||
}
|
||||
return userinfo;
|
||||
}
|
||||
catch (e) {
|
||||
_1.Logger.warn(e);
|
||||
|
||||
@@ -2,19 +2,30 @@ import {Request, RequestHandler} from 'express';
|
||||
import {DefaultConfig, Logger, Resolvable, UserInfo} from '.';
|
||||
import fetch from 'node-fetch';
|
||||
|
||||
const cachedUsers: {[token: string]: UserInfo} = {};
|
||||
|
||||
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);
|
||||
if (token && cachedUsers[token]) return cachedUsers[token];
|
||||
const url = DefaultConfig.AUTH_PROXY_USERINFO_URL;
|
||||
if (token === undefined || url === undefined) {
|
||||
return undefined;
|
||||
}
|
||||
try {
|
||||
const expireHeader = req.header(DefaultConfig.EXPIRE_HEADER);
|
||||
const expireSecDate = expireHeader && parseInt(expireHeader, 10) || undefined;
|
||||
const expiresIn = expireSecDate && expireSecDate * 1000 > Date.now() && expireSecDate * 1000 - Date.now();
|
||||
const res = await fetch(url, {headers: [[DefaultConfig.USERINFO_HEADER, token]]});
|
||||
return await res.json() as UserInfo;
|
||||
const userinfo = await res.json() as UserInfo;
|
||||
if (expiresIn) {
|
||||
cachedUsers[token] = userinfo;
|
||||
setTimeout(() => delete cachedUsers[token], expiresIn);
|
||||
}
|
||||
return userinfo;
|
||||
} catch (e) {
|
||||
Logger.warn(e);
|
||||
return undefined;
|
||||
|
||||
Reference in New Issue
Block a user