blacklist sync
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
2022-08-27 16:39:07 +02:00
parent e80e3f9a94
commit 31f739d4b8
15 changed files with 271 additions and 207 deletions

View File

@ -104,7 +104,7 @@ describe ('authority', () => {
const token = await auth.sign ('access_token', 60);
jasmine.clock ()
.tick (30000);
bl.add_signature (token.id);
await bl.add_signature (token.id);
const res = await auth.verify (token.signature);
expect (res.authorized)
.toBeFalse ();
@ -144,7 +144,7 @@ describe ('authority', () => {
const token = await auth.sign ('refresh_token', 600);
jasmine.clock ()
.tick (30000);
bl.add_signature (token.id);
await bl.add_signature (token.id);
const res = await auth.verify (token.signature);
expect (res.authorized)
.toBeFalse ();

View File

@ -18,70 +18,70 @@ describe ('blacklist', () => {
clock_finalize ();
});
it ('should validate any string', () => {
expect (blacklist.is_valid ('foo'))
it ('should validate any string', async () => {
expect (await blacklist.is_valid ('foo'))
.toBeTrue ();
expect (blacklist.is_valid ('bar'))
expect (await blacklist.is_valid ('bar'))
.toBeTrue ();
expect (blacklist.is_valid ('baz'))
expect (await blacklist.is_valid ('baz'))
.toBeTrue ();
});
it ('should blacklist strings', () => {
blacklist.add_signature ('foo');
blacklist.add_signature ('bar');
expect (blacklist.is_valid ('foo'))
it ('should blacklist strings', async () => {
await blacklist.add_signature ('foo');
await blacklist.add_signature ('bar');
expect (await blacklist.is_valid ('foo'))
.toBeFalse ();
expect (blacklist.is_valid ('bar'))
expect (await blacklist.is_valid ('bar'))
.toBeFalse ();
expect (blacklist.is_valid ('baz'))
expect (await blacklist.is_valid ('baz'))
.toBeTrue ();
});
it ('should remove one string', () => {
blacklist.remove_signature ('foo');
expect (blacklist.is_valid ('foo'))
it ('should remove one string', async () => {
await blacklist.remove_signature ('foo');
expect (await blacklist.is_valid ('foo'))
.toBeTrue ();
expect (blacklist.is_valid ('bar'))
expect (await blacklist.is_valid ('bar'))
.toBeFalse ();
expect (blacklist.is_valid ('baz'))
expect (await blacklist.is_valid ('baz'))
.toBeTrue ();
});
it ('should clear after time', () => {
it ('should clear after time', async () => {
jasmine.clock ()
.tick (5000);
blacklist.add_signature ('baz');
blacklist.clear (Date.now () - 100);
expect (blacklist.is_valid ('foo'))
await blacklist.add_signature ('baz');
await blacklist.clear (Date.now () - 100);
expect (await blacklist.is_valid ('foo'))
.toBeTrue ();
expect (blacklist.is_valid ('bar'))
expect (await blacklist.is_valid ('bar'))
.toBeTrue ();
expect (blacklist.is_valid ('baz'))
expect (await blacklist.is_valid ('baz'))
.toBeFalse ();
});
it ('should clear all', () => {
blacklist.add_signature ('foo');
blacklist.add_signature ('bar');
blacklist.add_signature ('baz');
expect (blacklist.is_valid ('foo'))
it ('should clear all', async () => {
await blacklist.add_signature ('foo');
await blacklist.add_signature ('bar');
await blacklist.add_signature ('baz');
expect (await blacklist.is_valid ('foo'))
.toBeFalse ();
expect (blacklist.is_valid ('bar'))
expect (await blacklist.is_valid ('bar'))
.toBeFalse ();
expect (blacklist.is_valid ('baz'))
expect (await blacklist.is_valid ('baz'))
.toBeFalse ();
blacklist.clear ();
expect (blacklist.is_valid ('foo'))
await blacklist.clear ();
expect (await blacklist.is_valid ('foo'))
.toBeTrue ();
expect (blacklist.is_valid ('bar'))
expect (await blacklist.is_valid ('bar'))
.toBeTrue ();
expect (blacklist.is_valid ('baz'))
expect (await blacklist.is_valid ('baz'))
.toBeTrue ();
});
it ('should export and import data', () => {
blacklist.add_signature ('baz');
it ('should export and import data', async () => {
await blacklist.add_signature ('baz');
const exp = blacklist.export_blacklist ();
// eslint-disable-next-line dot-notation
expect (blacklist['_signatures'])

View File

@ -127,7 +127,7 @@ describe ('gateway', () => {
it ('should reject a blacklisted access token', async () => {
const token = await authority.sign ('access_token', 60);
blacklist.add_signature (token.id);
await blacklist.add_signature (token.id);
const resp = await get ({ authorization: `Bearer ${token.signature}` });
expect (resp.statusCode)
.toEqual (302);

View File

@ -5,17 +5,25 @@
* Created by Timo Hocker <timo@scode.ovh>, August 2022
*/
/* eslint-disable dot-notation */
import { blacklist } from '../../lib';
import ks from '../../lib/KeyStore';
import { redis } from '../../lib/Redis';
import { Redis } from '../../lib/Redis';
import { clock_finalize, clock_setup } from '../Helper';
const frame = 3600;
const redis_url = process.env.TEST_REDIS_URL || 'redis://localhost';
const redis = new Redis;
redis.connect (redis_url);
// eslint-disable-next-line max-lines-per-function
describe ('redis', () => {
beforeAll (() => {
beforeAll (async () => {
ks.reset_instance ();
ks.sync_redis (redis_url);
await blacklist.clear ();
blacklist.sync_redis (redis_url);
clock_setup ();
});
@ -48,11 +56,9 @@ describe ('redis', () => {
});
it ('should have two keys in redis', async () => {
// eslint-disable-next-line dot-notation
expect (JSON.parse (await redis['_redis']
?.get (`keystore_${i1}`) as string).key)
.toEqual (k1);
// eslint-disable-next-line dot-notation
expect (JSON.parse (await redis['_redis']
?.get (`keystore_${i2}`) as string).key)
.toEqual (k2);
@ -72,4 +78,28 @@ describe ('redis', () => {
expect (await ks.get_key (iat2, old_instance))
.toEqual (k2);
});
it ('should add two keys to the blacklist', async () => {
await blacklist.add_signature ('test');
await blacklist.add_signature ('foo');
});
it ('should have two keys in redis blacklist', async () => {
expect ((await redis['_redis']?.sismember ('blacklist', 'test')) === 1)
.toBeTrue ();
expect ((await redis['_redis']?.sismember ('blacklist', 'foo')) === 1)
.toBeTrue ();
expect ((await redis['_redis']?.sismember ('blacklist', 'bar')) === 1)
.toBeFalse ();
});
it ('should read keys from redis', async () => {
blacklist['_signatures'].splice (0, blacklist['_signatures'].length);
expect (await blacklist.is_valid ('test'))
.toBeFalse ();
expect (await blacklist.is_valid ('foo'))
.toBeFalse ();
expect (await blacklist.is_valid ('bar'))
.toBeTrue ();
});
});