Phase D
Some checks failed
CI / Node — lint, typecheck, test, build (push) Failing after 9s
CI / Go — node-agent tests (push) Failing after 8s
CI / Go — edge-gateway build (push) Successful in 17s

This commit is contained in:
smueller
2026-06-26 14:03:57 +02:00
parent ed8334328e
commit 333ad1cc7d
31 changed files with 964 additions and 15 deletions

View File

@@ -54,6 +54,8 @@ Handles global configuration:
**Phase 9 (WHMCS Phase AB + production DNS)** — implemented.
**Phase D (SSO)** — implemented. See [docs/integrations/whmcs/sso.md](../../docs/integrations/whmcs/sso.md).
- Server module: `integrations/whmcs/modules/servers/hexagamecloud/`
- Addon module: planned for global mappings and reconciliation UI

View File

@@ -110,6 +110,16 @@ function hexagamecloud_ChangePackage(array $params): string
}
}
function hexagamecloud_ServiceSingleSignOn(array $params)
{
return hexagamecloud_requestSso($params, 'service');
}
function hexagamecloud_AdminSingleSignOn(array $params)
{
return hexagamecloud_requestSso($params, 'admin');
}
function hexagamecloud_TestConnection(array $params): array
{
try {
@@ -142,3 +152,31 @@ function hexagamecloud_lifecycleAction(array $params, string $action, array $bod
return $exception->getMessage();
}
}
function hexagamecloud_requestSso(array $params, string $kind)
{
try {
$client = new HexaGameCloudApiClient($params);
$externalServiceId = (string) $params['serviceid'];
$externalClientId = (string) ($params['clientsdetails']['userid'] ?? $params['userid'] ?? '');
$externalUserId = (string) ($params['clientsdetails']['userid'] ?? $params['adminid'] ?? $externalClientId);
$response = $client->createServiceSso($externalServiceId, [
'externalClientId' => $externalClientId,
'externalUserId' => $externalUserId,
'role' => $kind === 'admin' ? 'admin' : 'owner',
'kind' => $kind,
]);
return [
'success' => true,
'redirectTo' => $response['redirectUrl'],
];
} catch (Throwable $exception) {
logModuleCall('hexagamecloud', 'sso:' . $kind, $params, $exception->getMessage());
return [
'success' => false,
'error' => $exception->getMessage(),
];
}
}

View File

@@ -85,6 +85,16 @@ final class HexaGameCloudApiClient
);
}
public function createServiceSso(string $externalServiceId, array $payload): array
{
return $this->request(
'POST',
'/api/v1/integrations/whmcs/services/' . rawurlencode($externalServiceId) . '/sso',
$payload,
'service:sso:' . $externalServiceId . ':' . ($payload['kind'] ?? 'service')
);
}
private function request(string $method, string $path, array $body = [], ?string $idempotencySuffix = null): array
{
$bodyJson = $body === [] ? '' : json_encode($body, JSON_THROW_ON_ERROR);