diff --git a/package.json b/package.json index 9f6e7077ee..700c2d4c09 100644 --- a/package.json +++ b/package.json @@ -66,7 +66,7 @@ "async": "^3.1.1", "bcrypt": "^5.0.1", "compression": "^1.7.4", - "connect-session-knex": "^2.0.0", + "connect-session-knex": "^2.1.0", "cookie-parser": "^1.4.5", "cookie-session": "^2.0.0-rc.1", "cors": "^2.8.5", diff --git a/src/lib/middleware/session-db.ts b/src/lib/middleware/session-db.ts index e46dfbe7e2..5815e59018 100644 --- a/src/lib/middleware/session-db.ts +++ b/src/lib/middleware/session-db.ts @@ -6,10 +6,14 @@ const KnexSessionStore = require('connect-session-knex')(session); const TWO_DAYS = 48 * 60 * 60 * 1000; const HOUR = 60 * 60 * 1000; + +// eslint-disable-next-line prettier/prettier +type SessionConfig = Pick; function sessionDb( - config: Pick, + config: SessionConfig, stores: Pick, ): any { + const logger = config.getLogger('/middleware/session-db.ts'); let store; const { db } = config.session; const age = config.session.ttlHours * HOUR || TWO_DAYS; @@ -19,6 +23,32 @@ function sessionDb( tablename: 'unleash_session', createtable: false, }); + + store.get = async (sid, fn) => { + try { + await store.ready; + const condition = 'CAST(? as timestamp with time zone) <= expired'; + const content = await store.knex + .select('sess') + .from(store.tablename) + .where(store.sidfieldname, '=', sid) + .andWhereRaw(condition, new Date()) + .then(response => { + let ret; + if (response[0]) { + ret = response[0].sess; + if (typeof ret === 'string') { + ret = JSON.parse(ret); + } + } + return ret; + }); + fn(null, content); + } catch (e) { + logger.error(e); + fn(null, undefined); + } + }; } else { store = new session.MemoryStore(); } @@ -38,7 +68,13 @@ function sessionDb( maxAge: age, }, }); - return (req, res, next) => sessionMiddleware(req, res, next); + return (req, res, next) => { + try { + sessionMiddleware(req, res, next); + } catch (e) { + console.log(e); + } + }; } export default sessionDb; module.exports = sessionDb; diff --git a/yarn.lock b/yarn.lock index 2064981c8a..fb0fce8b56 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1657,7 +1657,7 @@ confusing-browser-globals@^1.0.10: resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.10.tgz#30d1e7f3d1b882b25ec4933d1d1adac353d20a59" integrity sha512-gNld/3lySHwuhaVluJUKLePYirM3QNCKzVxqAdhJII9/WXKVX5PURzMVJspS1jTslSqjeuG4KMVTSouit5YPHA== -connect-session-knex@^2.0.0: +connect-session-knex@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/connect-session-knex/-/connect-session-knex-2.1.0.tgz#7f1e32594d37f7a1ad24e6dee97d8f2d9799695e" integrity sha512-6xHoDajVWxwByaq6UjfU+qGE89Nurajek4JsxeajtXscr8xznzbsIp+Q/3FKh3/2smfgoSeY+93+Gn+3ZXQVDQ==