mirror of
https://github.com/bckelley/cgm-remote-monitor.git
synced 2026-08-24 03:14:12 -05:00
* * Simplified bundling to just one bundle * Removed cache invalidation token from bundling * Generate strong persistent random string on deploy to use for JWT signing * WIP: moving api-secret and JWT signing to a separate centralized security component * Moved some server components away from project root * Fix issues reported by linter * Ignore detect-object-injection everywhere but the client * Make admin message button red * Remove alarms for some security alerts on code * api_secret is now fully contained in the enclave
118 lines
3.6 KiB
JavaScript
118 lines
3.6 KiB
JavaScript
'use strict';
|
|
|
|
var request = require('supertest');
|
|
var language = require('../lib/language')();
|
|
require('should');
|
|
|
|
describe('verifyauth', function ( ) {
|
|
var api = require('../lib/api/');
|
|
|
|
this.timeout(25000);
|
|
|
|
var scope = this;
|
|
function setup_app (env, fn) {
|
|
require('../lib/server/bootevent')(env, language).boot(function booted (ctx) {
|
|
ctx.app = api(env, ctx);
|
|
scope.app = ctx.app;
|
|
fn(ctx);
|
|
});
|
|
}
|
|
|
|
after(function (done) {
|
|
done();
|
|
});
|
|
|
|
it('should return defaults when called without secret', function (done) {
|
|
var known = 'b723e97aa97846eb92d5264f084b2823f57c4aa1';
|
|
var known512 = '8c8743d38cbe00debe4b3ba8d0ffbb85e4716c982a61bb9e57bab203178e3718b2965831c1a5e42b9da16f082fdf8a6cecf993b49ed67e3a8b1cd475885d8070';
|
|
delete process.env.API_SECRET;
|
|
process.env.API_SECRET = 'this is my long pass phrase';
|
|
var env = require('../lib/server/env')( );
|
|
env.enclave.isApiKey(known).should.equal(true);
|
|
env.enclave.isApiKey(known512).should.equal(true);
|
|
setup_app(env, function (ctx) {
|
|
ctx.app.enabled('api').should.equal(true);
|
|
ctx.app.api_secret = '';
|
|
ping_authorized_endpoint(ctx.app, 200, done);
|
|
});
|
|
});
|
|
|
|
it('should fail when calling with wrong secret', function (done) {
|
|
var known = 'b723e97aa97846eb92d5264f084b2823f57c4aa1';
|
|
delete process.env.API_SECRET;
|
|
process.env.API_SECRET = 'this is my long pass phrase';
|
|
var env = require('../lib/server/env')( );
|
|
env.enclave.isApiKey(known).should.equal(true);
|
|
setup_app(env, function (ctx) {
|
|
ctx.app.enabled('api').should.equal(true);
|
|
ctx.app.api_secret = 'wrong secret';
|
|
|
|
function check(res) {
|
|
res.body.message.message.should.equal('UNAUTHORIZED');
|
|
done();
|
|
}
|
|
|
|
ping_authorized_endpoint(ctx.app, 200, check, true);
|
|
});
|
|
});
|
|
|
|
|
|
it('should fail unauthorized and delay subsequent attempts', function (done) {
|
|
var known = 'b723e97aa97846eb92d5264f084b2823f57c4aa1';
|
|
delete process.env.API_SECRET;
|
|
process.env.API_SECRET = 'this is my long pass phrase';
|
|
var env = require('../lib/server/env')( );
|
|
env.enclave.isApiKey(known).should.equal(true);
|
|
setup_app(env, function (ctx) {
|
|
ctx.app.enabled('api').should.equal(true);
|
|
ctx.app.api_secret = 'wrong secret';
|
|
const time = Date.now();
|
|
|
|
function checkTimer(res) {
|
|
res.body.message.message.should.equal('UNAUTHORIZED');
|
|
const delta = Date.now() - time;
|
|
delta.should.be.greaterThan(49);
|
|
done();
|
|
}
|
|
|
|
function pingAgain (res) {
|
|
res.body.message.message.should.equal('UNAUTHORIZED');
|
|
ping_authorized_endpoint(ctx.app, 200, checkTimer, true);
|
|
}
|
|
|
|
ping_authorized_endpoint(ctx.app, 200, pingAgain, true);
|
|
});
|
|
});
|
|
|
|
|
|
|
|
it('should work fine authorized', function (done) {
|
|
var known = 'b723e97aa97846eb92d5264f084b2823f57c4aa1';
|
|
delete process.env.API_SECRET;
|
|
process.env.API_SECRET = 'this is my long pass phrase';
|
|
var env = require('../lib/server/env')( );
|
|
env.enclave.isApiKey(known).should.equal(true);
|
|
setup_app(env, function (ctx) {
|
|
ctx.app.enabled('api').should.equal(true);
|
|
ctx.app.api_secret = env.api_secret;
|
|
ping_authorized_endpoint(ctx.app, 200, done);
|
|
});
|
|
|
|
});
|
|
|
|
|
|
function ping_authorized_endpoint (app, httpResponse, fn, passres) {
|
|
request(app)
|
|
.get('/verifyauth')
|
|
.set('api-secret', app.api_secret || '')
|
|
.expect(httpResponse)
|
|
.end(function (err, res) {
|
|
res.body.status.should.equal(httpResponse);
|
|
if (passres) { fn(res); } else { fn(); }
|
|
// console.log('err', err, 'res', res);
|
|
});
|
|
}
|
|
|
|
});
|
|
|