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