summaryrefslogtreecommitdiff
path: root/src/routers/vault/utils/ephemeral.js
diff options
context:
space:
mode:
authorgumi <git@gumi.ca>2020-03-15 17:28:35 -0400
committergumi <git@gumi.ca>2020-03-15 17:28:35 -0400
commita0a35766911f5354487663b0f148b824ca32ba44 (patch)
tree6a5a80a52eaacc8f8b35798cedd16ddea37e3992 /src/routers/vault/utils/ephemeral.js
parent267b900a82d7870e4bcd56857887fd3f697e6e45 (diff)
downloadapi-a0a35766911f5354487663b0f148b824ca32ba44.tar.gz
api-a0a35766911f5354487663b0f148b824ca32ba44.tar.bz2
api-a0a35766911f5354487663b0f148b824ca32ba44.tar.xz
api-a0a35766911f5354487663b0f148b824ca32ba44.zip
turn the session store into a proper class
Diffstat (limited to 'src/routers/vault/utils/ephemeral.js')
-rw-r--r--src/routers/vault/utils/ephemeral.js45
1 files changed, 0 insertions, 45 deletions
diff --git a/src/routers/vault/utils/ephemeral.js b/src/routers/vault/utils/ephemeral.js
index 570600c..87889da 100644
--- a/src/routers/vault/utils/ephemeral.js
+++ b/src/routers/vault/utils/ephemeral.js
@@ -1,50 +1,6 @@
-// TODO: use Redis for in-memory caching of sessions
-
-// this was originally a Proxy<Map<String, Session>> but was replaced because of a nodejs bug
-// XXX: maybe we should use an already-existing Express session manager // NIH syndrome
const timeout_symbol = Symbol("timeout");
const hydrate_symbol = Symbol("hydrate");
const container_symbol = Symbol("container");
-const session_handler = {
- [container_symbol]: new Map(),
- [hydrate_symbol] (key, obj) {
- if (obj === null || obj === undefined)
- return obj;
-
- let minutes = 30;
-
- if (Reflect.has(obj, timeout_symbol)) {
- clearTimeout(obj[timeout_symbol]);
- minutes = 360; // 6 hours
- }
-
- let expires = new Date();
- expires.setUTCMinutes(expires.getUTCMinutes() + minutes);
- obj.expires = expires // this could also be a symbol
- obj[timeout_symbol] = setTimeout(() => session_handler.delete(key), minutes * 60000);
-
- return obj;
- },
- has (key) {
- return session_handler[container_symbol].has(key);
- },
- get (key) {
- return session_handler[hydrate_symbol](key, session_handler[container_symbol].get(key));
- },
- set (key, obj) {
- return session_handler[container_symbol].set(key, session_handler[hydrate_symbol](key, obj));
- },
- delete (key) {
- if (session_handler[container_symbol].get(key) && session_handler[container_symbol].get(key)[timeout_symbol])
- clearTimeout(session_handler[container_symbol].get(key)[timeout_symbol]);
- return session_handler[container_symbol].delete(key);
- },
- [Symbol.iterator]: function* () {
- for (const [key, obj] of session_handler[container_symbol]) {
- yield [key, obj];
- }
- },
-};
// TODO: DRY this shit
const identity_handler = {
@@ -86,6 +42,5 @@ const identity_handler = {
module.exports = {
- session_handler,
identity_handler,
}