Versie 0.2.0
This commit is contained in:
commit
e77d8fd373
495 files changed
+81026
No files matched your search
@@ -0,0 +1,79 @@
|
||||
// Generated, do not edit. sha256:267314982d9469bd348aa537982dfb5f7b94157d526aea6cbeeb8cefdfe06595
|
||||
import { randomBytes } from 'node:crypto';
|
||||
import { CONFIG } from '../shared/config.js';
|
||||
|
||||
const nieuwToken = () => randomBytes(32).toString('hex');
|
||||
|
||||
export function createSessionStore({ ttlMs = CONFIG.AUTH.SESSION_TTL_MS, now = Date.now } = {}) {
|
||||
const sessies = new Map();
|
||||
|
||||
const verlopen = (aangemaakt) => now() - aangemaakt >= ttlMs;
|
||||
|
||||
return {
|
||||
create() {
|
||||
for (const [token, aangemaakt] of sessies) if (verlopen(aangemaakt)) sessies.delete(token);
|
||||
const token = nieuwToken();
|
||||
sessies.set(token, now());
|
||||
return token;
|
||||
},
|
||||
|
||||
isValid(token) {
|
||||
if (typeof token !== 'string' || !token) return false;
|
||||
const aangemaakt = sessies.get(token);
|
||||
if (aangemaakt === undefined) return false;
|
||||
if (verlopen(aangemaakt)) { sessies.delete(token); return false; }
|
||||
return true;
|
||||
},
|
||||
|
||||
drop(token) {
|
||||
return sessies.delete(token);
|
||||
},
|
||||
|
||||
size() {
|
||||
return sessies.size;
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
export function createAttemptLimiter({
|
||||
free = CONFIG.AUTH.LOGIN_ATTEMPTS.FREE,
|
||||
baseLockMs = CONFIG.AUTH.LOGIN_ATTEMPTS.BASE_LOCK_MS,
|
||||
maxLockMs = CONFIG.AUTH.LOGIN_ATTEMPTS.MAX_LOCK_MS,
|
||||
now = Date.now,
|
||||
} = {}) {
|
||||
const pogingen = new Map();
|
||||
|
||||
const wachttijd = (missers) => {
|
||||
if (missers <= free) return 0;
|
||||
return Math.min(maxLockMs, baseLockMs * 2 ** (missers - free - 1));
|
||||
};
|
||||
|
||||
return {
|
||||
retryAfterMs(adres) {
|
||||
const staat = pogingen.get(adres);
|
||||
if (!staat) return 0;
|
||||
const over = staat.laatste + wachttijd(staat.missers) - now();
|
||||
if (over <= 0) {
|
||||
if (over < -maxLockMs) pogingen.delete(adres);
|
||||
return 0;
|
||||
}
|
||||
return over;
|
||||
},
|
||||
|
||||
fail(adres) {
|
||||
const staat = pogingen.get(adres) || { missers: 0, laatste: 0 };
|
||||
staat.missers += 1;
|
||||
staat.laatste = now();
|
||||
pogingen.set(adres, staat);
|
||||
return wachttijd(staat.missers);
|
||||
},
|
||||
|
||||
succeed(adres) {
|
||||
pogingen.delete(adres);
|
||||
},
|
||||
|
||||
size() {
|
||||
return pogingen.size;
|
||||
},
|
||||
};
|
||||
}
|
||||
Reference in new issue
Block a user