Viewing File: /usr/local/cpanel/whostmgr/docroot/cgi/ncssl/source/src/Service/Whm/WhmApi.php
<?php
namespace App\Service\Whm;
use Symfony\Component\Process\Process;
class WhmApi implements WhmApiInterface
{
const WHM_API_NAME = 'whmapi1';
const WHM_COMMAND_CREATE_TOKEN = 'api_token_create';
const WHM_COMMAND_DELETE_TOKEN = 'api_token_revoke';
const WHM_COMMAND_LIST_TOKEN = 'api_token_list';
const DEFAULT_TOKEN_NAME = 'acl_api_token_ssl';
const DEFAULT_EXPIRES_AT = 0; // The API token will not expire.
const DEFAULT_USER = 'wh';
const SUCCESS_RESPONSE = 'OK';
/**
* @return mixed
* @throws WhmApiException
*/
public function createToken(): string
{
$consoleCommand = [
self::WHM_API_NAME,
self::WHM_COMMAND_CREATE_TOKEN,
'--output=jsonpretty',
sprintf('token_name=%s', self::DEFAULT_TOKEN_NAME),
sprintf('expires_at=%s', self::DEFAULT_EXPIRES_AT),
sprintf('--user=%s', self::DEFAULT_USER),
'acl-1=create-user-session',
'acl-2=ssl',
'acl-3=ssl-info'
];
$process = new Process($consoleCommand);
$process->run();
$response = $this->getResponse($process);
return $response['token'];
}
/**
* @return array
* @throws WhmApiException
*/
public function deleteToken(): array
{
$consoleCommand = [
self::WHM_API_NAME,
self::WHM_COMMAND_DELETE_TOKEN,
'--output=jsonpretty',
sprintf('--user=%s', self::DEFAULT_USER),
sprintf('token_name=%s', self::DEFAULT_TOKEN_NAME)
];
$process = new Process($consoleCommand);
$process->run();
return $this->getResponse($process);
}
/**
* @return array
* @throws WhmApiException
*/
public function listToken(): array
{
$consoleCommand = [
self::WHM_API_NAME,
self::WHM_COMMAND_LIST_TOKEN,
'--output=jsonpretty',
sprintf('--user=%s', self::DEFAULT_USER)
];
$process = new Process($consoleCommand);
$process->run();
$response = $this->getResponse($process);
return $response['tokens'] ?? [];
}
/**
* @param Process $process
* @return array
* @throws WhmApiException
*/
protected function getResponse(Process $process): array
{
if (!$process->isSuccessful()) {
throw new WhmApiException($process->getOutput());
}
$response = json_decode($process->getOutput(), true);
$this->checkResponse($response);
return $response['data'] ?? [];
}
/**
* @param array $data
* @throws WhmApiException
*/
protected function checkResponse(array $data = []): void
{
if (!isset($data['metadata']) || !isset($data['metadata']['reason'])) {
throw new WhmApiException('Wrong whm response');
}
if ($data['metadata']['reason'] !== self::SUCCESS_RESPONSE) {
throw new WhmApiException($data['metadata']['reason']);
}
}
}
Back to Directory
File Manager