Cache user info until expire

This commit is contained in:
Sebastian Seedorf
2020-11-19 20:31:17 +01:00
parent e2662b1c3b
commit 7f44df42e7
2 changed files with 24 additions and 2 deletions

View File

@@ -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);