Enhance WHMCS integration with mTLS support and product mapping features. Added mTLS configuration options, updated API endpoints for mTLS status and fingerprint registration, and implemented product validation API. Updated database schema and documentation accordingly.
This commit is contained in:
67
apps/api/test/whmcs-mtls-mapping.test.js
Normal file
67
apps/api/test/whmcs-mtls-mapping.test.js
Normal file
@@ -0,0 +1,67 @@
|
||||
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;
|
||||
}
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user