68 lines
2.2 KiB
JavaScript
68 lines
2.2 KiB
JavaScript
import { describe, it } from 'node:test';
|
|
import assert from 'node:assert/strict';
|
|
import { readFileSync } from 'node:fs';
|
|
import { join } from 'node:path';
|
|
|
|
import {
|
|
isIntegrationMtlsEnabled,
|
|
normalizeCertificateFingerprint,
|
|
verifyClientCertificateFingerprint,
|
|
} from '@hexahost/integration-auth';
|
|
|
|
describe('integration mTLS utilities', () => {
|
|
it('normalizes fingerprint colons', () => {
|
|
const normalized = normalizeCertificateFingerprint('AB:CD:EF');
|
|
assert.equal(normalized, 'abcdef');
|
|
});
|
|
|
|
it('verifies matching fingerprints', () => {
|
|
assert.equal(
|
|
verifyClientCertificateFingerprint('ab:cd', 'abcd'),
|
|
true,
|
|
);
|
|
});
|
|
});
|
|
|
|
describe('whmcs mtls and product mapping contract', () => {
|
|
it('documents mTLS guard and API routes', () => {
|
|
const guard = readFileSync(
|
|
join(process.cwd(), 'src', 'integrations/whmcs/whmcs-integration.guard.ts'),
|
|
'utf8',
|
|
);
|
|
assert.ok(guard.includes('isIntegrationMtlsEnabled'));
|
|
assert.ok(guard.includes('assertIntegrationMtls'));
|
|
|
|
const controller = readFileSync(
|
|
join(process.cwd(), 'src', 'integrations/whmcs/whmcs-integration.controller.ts'),
|
|
'utf8',
|
|
);
|
|
assert.ok(controller.includes("'mtls/status'"));
|
|
assert.ok(controller.includes("'mtls/fingerprint'"));
|
|
assert.ok(controller.includes("'catalog/validate-plan'"));
|
|
});
|
|
|
|
it('documents addon product mapping and shared resolver', () => {
|
|
const addon = readFileSync(
|
|
join(process.cwd(), '..', '..', 'integrations/whmcs/modules/addons/hexagamecloud/hexagamecloud.php'),
|
|
'utf8',
|
|
);
|
|
assert.ok(addon.includes('hexagamecloud_page_mappings'));
|
|
assert.ok(addon.includes('ProductMappingStorage'));
|
|
|
|
const resolver = readFileSync(
|
|
join(process.cwd(), '..', '..', 'integrations/whmcs/lib/ProductMapping.php'),
|
|
'utf8',
|
|
);
|
|
assert.ok(resolver.includes('resolvePlanSlug'));
|
|
});
|
|
|
|
it('defaults mTLS disabled outside production flag', () => {
|
|
const previous = process.env['INTEGRATION_MTLS_ENABLED'];
|
|
delete process.env['INTEGRATION_MTLS_ENABLED'];
|
|
assert.equal(isIntegrationMtlsEnabled(), false);
|
|
if (previous !== undefined) {
|
|
process.env['INTEGRATION_MTLS_ENABLED'] = previous;
|
|
}
|
|
});
|
|
});
|