Remove auth
This commit is contained in:
@ -1,39 +0,0 @@
|
||||
import * as auth from '../auth';
|
||||
|
||||
describe('Auth API', () => {
|
||||
beforeEach(done => {
|
||||
auth.removeAllRevokedTokens().then(() => done(), done);
|
||||
});
|
||||
|
||||
it('creates tokens with the right scopes', done => {
|
||||
const scopes = {
|
||||
blacklist: {
|
||||
add: true,
|
||||
remove: true
|
||||
}
|
||||
};
|
||||
|
||||
auth.createToken(scopes).then(token => {
|
||||
auth.verifyToken(token).then(payload => {
|
||||
expect(payload.jti).toEqual(expect.any(String));
|
||||
expect(payload.iss).toEqual(expect.any(String));
|
||||
expect(payload.iat).toEqual(expect.any(Number));
|
||||
expect(payload.scopes).toMatchObject(scopes);
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
it('refuses to verify revoked tokens', done => {
|
||||
const scopes = {};
|
||||
|
||||
auth.createToken(scopes).then(token => {
|
||||
auth.revokeToken(token).then(() => {
|
||||
auth.verifyToken(token).then(payload => {
|
||||
expect(payload).toBe(null);
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
@ -1,86 +0,0 @@
|
||||
import crypto from 'crypto';
|
||||
import jwt from 'jsonwebtoken';
|
||||
|
||||
import data from './data';
|
||||
import { privateKey, publicKey } from './secret';
|
||||
|
||||
function getCurrentSeconds() {
|
||||
return Math.floor(Date.now() / 1000);
|
||||
}
|
||||
|
||||
function createTokenId() {
|
||||
return crypto.randomBytes(16).toString('hex');
|
||||
}
|
||||
|
||||
export function createToken(scopes = {}) {
|
||||
return new Promise((resolve, reject) => {
|
||||
const payload = {
|
||||
jti: createTokenId(),
|
||||
iss: 'https://unpkg.com',
|
||||
iat: getCurrentSeconds(),
|
||||
scopes
|
||||
};
|
||||
|
||||
jwt.sign(payload, privateKey, { algorithm: 'RS256' }, (error, token) => {
|
||||
if (error) {
|
||||
reject(error);
|
||||
} else {
|
||||
resolve(token);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
const revokedTokensSet = 'revoked-tokens';
|
||||
|
||||
export function verifyToken(token) {
|
||||
return new Promise((resolve, reject) => {
|
||||
const options = { algorithms: ['RS256'] };
|
||||
|
||||
jwt.verify(token, publicKey, options, (error, payload) => {
|
||||
if (error) {
|
||||
reject(error);
|
||||
} else {
|
||||
if (payload.jti) {
|
||||
data.sismember(revokedTokensSet, payload.jti, (error, value) => {
|
||||
if (error) {
|
||||
reject(error);
|
||||
} else {
|
||||
resolve(value === 0 ? payload : null);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
resolve(null);
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
export function revokeToken(token) {
|
||||
return verifyToken(token).then(payload => {
|
||||
if (payload) {
|
||||
return new Promise((resolve, reject) => {
|
||||
data.sadd(revokedTokensSet, payload.jti, error => {
|
||||
if (error) {
|
||||
reject(error);
|
||||
} else {
|
||||
resolve();
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
export function removeAllRevokedTokens() {
|
||||
return new Promise((resolve, reject) => {
|
||||
data.del(revokedTokensSet, error => {
|
||||
if (error) {
|
||||
reject(error);
|
||||
} else {
|
||||
resolve();
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
@ -1,9 +0,0 @@
|
||||
import redis from 'redis';
|
||||
|
||||
redis.debug_mode = process.env.DEBUG_REDIS != null;
|
||||
|
||||
const client = redis.createClient(
|
||||
process.env.DATA_URL || process.env.OPENREDIS_URL || 'redis://localhost:6379'
|
||||
);
|
||||
|
||||
export default client;
|
||||
Reference in New Issue
Block a user