Timo Hocker
31f739d4b8
All checks were successful
continuous-integration/drone/push Build is passing
53 lines
1.4 KiB
TypeScript
53 lines
1.4 KiB
TypeScript
/*
|
|
* Copyright (C) Sapphirecode - All Rights Reserved
|
|
* This file is part of Auth-Server-Helper which is released under MIT.
|
|
* See file 'LICENSE' for full license details.
|
|
* Created by Timo Hocker <timo@scode.ovh>, August 2022
|
|
*/
|
|
|
|
import { debug } from '../debug';
|
|
import { LabelledKey } from '../Key';
|
|
import { Redis } from '../Redis';
|
|
|
|
const logger = debug ('RedisKeyStore');
|
|
|
|
export class RedisKeyStore extends Redis {
|
|
public async set (value: LabelledKey): Promise<void> {
|
|
const log = logger.extend ('set');
|
|
log ('trying to set key %s to redis', value.index);
|
|
if (!this.is_active) {
|
|
log ('redis is inactive, skipping');
|
|
return;
|
|
}
|
|
const valid_for = Math.floor (
|
|
(value.valid_until - (new Date)
|
|
.getTime ()) / 1000
|
|
);
|
|
log ('key is valid for %d seconds', valid_for);
|
|
await this.redis.setex (
|
|
`keystore_${value.index}`,
|
|
valid_for,
|
|
JSON.stringify (value)
|
|
);
|
|
log ('saved key');
|
|
}
|
|
|
|
public async get (index: string): Promise<LabelledKey | null> {
|
|
const log = logger.extend ('get');
|
|
log ('trying to get key %s from redis', index);
|
|
if (!this.is_active) {
|
|
log ('redis is inactive, skipping');
|
|
return null;
|
|
}
|
|
const res = await this.redis.get (`keystore_${index}`);
|
|
if (res === null) {
|
|
log ('key not found in redis');
|
|
return null;
|
|
}
|
|
log ('key found');
|
|
return JSON.parse (res);
|
|
}
|
|
}
|
|
|
|
export const redis_key_store = new RedisKeyStore;
|