Add checkInvalidCertificate method for SignedMap class
Includes unit test
This commit is contained in:
parent
9018e39762
commit
752e9ec655
@ -85,28 +85,59 @@ o._redisCmd = function(redisFunc, redisArgs, callback) {
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
o._getAuthMethod = function(auth) {
|
||||||
|
return auth.method || 'open';
|
||||||
|
};
|
||||||
|
|
||||||
//--------------- PUBLIC API -------------------------------------
|
//--------------- PUBLIC API -------------------------------------
|
||||||
|
|
||||||
// Check if the given certificate authorizes waiver of "auth"
|
/// Check formal validity of a certificate
|
||||||
o.authorizedByCert = function(cert, auth) {
|
//
|
||||||
|
/// Return an Error instance if invalid, null otherwise
|
||||||
|
///
|
||||||
|
o.checkInvalidCertificate = function(cert) {
|
||||||
//console.log("Checking cert: "); console.dir(cert);
|
//console.log("Checking cert: "); console.dir(cert);
|
||||||
if ( cert.version !== "0.0.1" ) {
|
if ( cert.version !== "0.0.1" ) {
|
||||||
throw new Error("Unsupported certificate version " + cert.version);
|
return new Error("Unsupported certificate version " + cert.version);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( ! cert.auth ) {
|
if ( ! cert.auth ) {
|
||||||
throw new Error("No certificate authorization");
|
console.log("Cert is : "); console.dir(cert);
|
||||||
|
return new Error("No certificate authorization");
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( ! cert.auth.method ) {
|
var method = this._getAuthMethod(cert.auth);
|
||||||
throw new Error("No certificate authorization method");
|
|
||||||
|
switch ( method ) {
|
||||||
|
case 'open':
|
||||||
|
break;
|
||||||
|
case 'token':
|
||||||
|
if ( ! _.isArray(cert.auth.valid_tokens) )
|
||||||
|
return new Error("Invalid 'token' authentication: missing valid_tokens");
|
||||||
|
if ( ! cert.auth.valid_tokens.length )
|
||||||
|
return new Error("Invalid 'token' authentication: no valid_tokens");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return new Error("Unsupported authentication method: " + cert.auth.method);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return null; // all valid
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if the given certificate authorizes waiver of "auth"
|
||||||
|
o.authorizedByCert = function(cert, auth) {
|
||||||
|
|
||||||
|
var err = this.checkInvalidCertificate(cert);
|
||||||
|
if ( err ) throw err;
|
||||||
|
|
||||||
|
var method = this._getAuthMethod(cert.auth);
|
||||||
|
|
||||||
// Open authentication certificates are always authorized
|
// Open authentication certificates are always authorized
|
||||||
if ( cert.auth.method === 'open' ) return true;
|
if ( method === 'open' ) return true;
|
||||||
|
|
||||||
// Token based authentication requires valid token
|
// Token based authentication requires valid token
|
||||||
if ( cert.auth.method === 'token' ) {
|
if ( method === 'token' ) {
|
||||||
var found = cert.auth.valid_tokens.indexOf(auth);
|
var found = cert.auth.valid_tokens.indexOf(auth);
|
||||||
//if ( found !== -1 ) {
|
//if ( found !== -1 ) {
|
||||||
//console.log("Token " + auth + " is found at position " + found + " in valid tokens " + cert.auth.valid_tokens);
|
//console.log("Token " + auth + " is found at position " + found + " in valid tokens " + cert.auth.valid_tokens);
|
||||||
|
@ -81,5 +81,29 @@ suite('signed_maps', function() {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('can validate certificates', function(done) {
|
||||||
|
var smap = new SignedMaps(redis_pool);
|
||||||
|
assert.ok(smap);
|
||||||
|
Step(
|
||||||
|
function invalidVersion() {
|
||||||
|
var cert = { version: '-1' };
|
||||||
|
var err = smap.checkInvalidCertificate(cert);
|
||||||
|
assert.ok(err);
|
||||||
|
assert.equal(err.message, "Unsupported certificate version -1");
|
||||||
|
return null;
|
||||||
|
},
|
||||||
|
function invalidTokenAuth() {
|
||||||
|
var cert = { version: '0.0.1', auth: { method:'token', valid_token:[] } };
|
||||||
|
var err = smap.checkInvalidCertificate(cert);
|
||||||
|
assert.ok(err);
|
||||||
|
assert.equal(err.message, "Invalid 'token' authentication: missing valid_tokens");
|
||||||
|
return null;
|
||||||
|
},
|
||||||
|
function finish(err) {
|
||||||
|
done(err);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
});
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user