mirror of https://github.com/certd/certd
176 lines
3.7 KiB
JavaScript
176 lines
3.7 KiB
JavaScript
/**
|
|
* Assertions
|
|
*/
|
|
|
|
const { assert } = require('chai');
|
|
|
|
const spec = {};
|
|
module.exports = spec;
|
|
|
|
/**
|
|
* ACME
|
|
*/
|
|
|
|
spec.rfc8555 = {};
|
|
|
|
spec.rfc8555.account = (obj) => {
|
|
assert.isObject(obj);
|
|
|
|
assert.isString(obj.status);
|
|
assert.include(['valid', 'deactivated', 'revoked'], obj.status);
|
|
|
|
assert.isString(obj.orders);
|
|
|
|
if ('contact' in obj) {
|
|
assert.isArray(obj.contact);
|
|
obj.contact.forEach((c) => assert.isString(c));
|
|
}
|
|
|
|
if ('termsOfServiceAgreed' in obj) {
|
|
assert.isBoolean(obj.termsOfServiceAgreed);
|
|
}
|
|
|
|
if ('externalAccountBinding' in obj) {
|
|
assert.isObject(obj.externalAccountBinding);
|
|
}
|
|
};
|
|
|
|
spec.rfc8555.order = (obj) => {
|
|
assert.isObject(obj);
|
|
|
|
assert.isString(obj.status);
|
|
assert.include(['pending', 'ready', 'processing', 'valid', 'invalid'], obj.status);
|
|
|
|
assert.isArray(obj.identifiers);
|
|
obj.identifiers.forEach((i) => spec.rfc8555.identifier(i));
|
|
|
|
assert.isArray(obj.authorizations);
|
|
obj.authorizations.forEach((a) => assert.isString(a));
|
|
|
|
assert.isString(obj.finalize);
|
|
|
|
if ('expires' in obj) {
|
|
assert.isString(obj.expires);
|
|
}
|
|
|
|
if ('notBefore' in obj) {
|
|
assert.isString(obj.notBefore);
|
|
}
|
|
|
|
if ('notAfter' in obj) {
|
|
assert.isString(obj.notAfter);
|
|
}
|
|
|
|
if ('error' in obj) {
|
|
assert.isObject(obj.error);
|
|
}
|
|
|
|
if ('certificate' in obj) {
|
|
assert.isString(obj.certificate);
|
|
}
|
|
|
|
/* Augmentations */
|
|
assert.isString(obj.url);
|
|
};
|
|
|
|
spec.rfc8555.authorization = (obj) => {
|
|
assert.isObject(obj);
|
|
|
|
spec.rfc8555.identifier(obj.identifier);
|
|
|
|
assert.isString(obj.status);
|
|
assert.include(['pending', 'valid', 'invalid', 'deactivated', 'expires', 'revoked'], obj.status);
|
|
|
|
assert.isArray(obj.challenges);
|
|
obj.challenges.forEach((c) => spec.rfc8555.challenge(c));
|
|
|
|
if ('expires' in obj) {
|
|
assert.isString(obj.expires);
|
|
}
|
|
|
|
if ('wildcard' in obj) {
|
|
assert.isBoolean(obj.wildcard);
|
|
}
|
|
|
|
/* Augmentations */
|
|
assert.isString(obj.url);
|
|
};
|
|
|
|
spec.rfc8555.identifier = (obj) => {
|
|
assert.isObject(obj);
|
|
assert.isString(obj.type);
|
|
assert.isString(obj.value);
|
|
};
|
|
|
|
spec.rfc8555.challenge = (obj) => {
|
|
assert.isObject(obj);
|
|
assert.isString(obj.type);
|
|
assert.isString(obj.url);
|
|
|
|
assert.isString(obj.status);
|
|
assert.include(['pending', 'processing', 'valid', 'invalid'], obj.status);
|
|
|
|
if ('validated' in obj) {
|
|
assert.isString(obj.validated);
|
|
}
|
|
|
|
if ('error' in obj) {
|
|
assert.isObject(obj.error);
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Crypto
|
|
*/
|
|
|
|
spec.crypto = {};
|
|
|
|
spec.crypto.csrDomains = (obj) => {
|
|
assert.isObject(obj);
|
|
|
|
assert.isDefined(obj.commonName);
|
|
assert.isArray(obj.altNames);
|
|
obj.altNames.forEach((a) => assert.isString(a));
|
|
};
|
|
|
|
spec.crypto.certificateInfo = (obj) => {
|
|
assert.isObject(obj);
|
|
|
|
assert.isObject(obj.issuer);
|
|
assert.isDefined(obj.issuer.commonName);
|
|
|
|
assert.isObject(obj.domains);
|
|
assert.isDefined(obj.domains.commonName);
|
|
assert.isArray(obj.domains.altNames);
|
|
obj.domains.altNames.forEach((a) => assert.isString(a));
|
|
|
|
assert.strictEqual(Object.prototype.toString.call(obj.notBefore), '[object Date]');
|
|
assert.strictEqual(Object.prototype.toString.call(obj.notAfter), '[object Date]');
|
|
};
|
|
|
|
/**
|
|
* JWK
|
|
*/
|
|
|
|
spec.jwk = {};
|
|
|
|
spec.jwk.rsa = (obj) => {
|
|
assert.isObject(obj);
|
|
assert.isString(obj.e);
|
|
assert.isString(obj.kty);
|
|
assert.isString(obj.n);
|
|
|
|
assert.strictEqual(obj.e, 'AQAB');
|
|
assert.strictEqual(obj.kty, 'RSA');
|
|
};
|
|
|
|
spec.jwk.ecdsa = (obj) => {
|
|
assert.isObject(obj);
|
|
assert.isString(obj.crv);
|
|
assert.isString(obj.kty);
|
|
assert.isString(obj.x);
|
|
assert.isString(obj.y);
|
|
|
|
assert.strictEqual(obj.kty, 'EC');
|
|
};
|