added fileGetContents

This commit is contained in:
tracer 2022-10-08 10:53:31 +02:00
parent f66298842a
commit 2e1f1ac8b1
1 changed files with 130 additions and 98 deletions

View File

@ -7,108 +7,140 @@ use UnhandledMatchError;
error_reporting(error_level: E_ALL); error_reporting(error_level: E_ALL);
/** /**
* *
*/ */
class ApiController class ApiController
{ {
/** /**
* @param String $requestType * @param String $requestType
* @param String $serverName * @param String $serverName
* @param int $versionIP * @param int $versionIP
* @param String $apiKey * @param String $apiKey
* @param String $command * @param String $command
* @param String $serverType * @param String $serverType
* @param array $body * @param array $body
* *
* @return array * @return array
*/ */
function sendCommand(string $requestType, string $serverName, int $versionIP, string $apiKey, string $command, string $serverType, array $body = []): array function sendCommand(string $requestType, string $serverName, int $versionIP, string $apiKey, string $command, string $serverType, array $body = []): array
{ {
$error = false; $error = false;
$curl = curl_init(); $curl = curl_init();
try { try {
match ($serverType) { match ($serverType) {
'panel' => curl_setopt(handle: $curl, option: CURLOPT_URL, value: "https://$serverName/api/v2/" . $command), 'panel' => curl_setopt(handle: $curl, option: CURLOPT_URL, value: "https://$serverName/api/v2/" . $command),
'nameserver' => curl_setopt(handle: $curl, option: CURLOPT_URL, value: "https://$serverName/api/" . $command) 'nameserver' => curl_setopt(handle: $curl, option: CURLOPT_URL, value: "https://$serverName/api/" . $command)
}; };
} catch (UnhandledMatchError) { } catch (UnhandledMatchError) {
echo 'Unhandled match: ' . $serverType; echo 'Unhandled match: ' . $serverType;
} }
curl_setopt(handle: $curl, option: CURLOPT_RETURNTRANSFER, value: 1); curl_setopt(handle: $curl, option: CURLOPT_RETURNTRANSFER, value: 1);
curl_setopt(handle: $curl, option: CURLOPT_TIMEOUT_MS, value: 19999); curl_setopt(handle: $curl, option: CURLOPT_TIMEOUT_MS, value: 19999);
curl_setopt(handle: $curl, option: CURLOPT_HTTP_VERSION, value: CURL_HTTP_VERSION_2TLS); curl_setopt(handle: $curl, option: CURLOPT_HTTP_VERSION, value: CURL_HTTP_VERSION_2TLS);
if ($versionIP == 4) { if ($versionIP == 4) {
curl_setopt(handle: $curl, option: CURLOPT_IPRESOLVE, value: CURL_IPRESOLVE_V4); curl_setopt(handle: $curl, option: CURLOPT_IPRESOLVE, value: CURL_IPRESOLVE_V4);
} else { } else {
curl_setopt(handle: $curl, option: CURLOPT_IPRESOLVE, value: CURL_IPRESOLVE_V6); curl_setopt(handle: $curl, option: CURLOPT_IPRESOLVE, value: CURL_IPRESOLVE_V6);
} }
curl_setopt(handle: $curl, option: CURLOPT_HTTPHEADER, value: ["X-API-Key:$apiKey"]); curl_setopt(handle: $curl, option: CURLOPT_HTTPHEADER, value: ["X-API-Key:$apiKey"]);
if ($requestType == "POST") { if ($requestType == "POST") {
curl_setopt(handle: $curl, option: CURLOPT_POST, value: true); curl_setopt(handle: $curl, option: CURLOPT_POST, value: true);
curl_setopt(handle: $curl, option: CURLOPT_POSTFIELDS, value: $body); curl_setopt(handle: $curl, option: CURLOPT_POSTFIELDS, value: $body);
} }
if ($requestType == "PUT") { if ($requestType == "PUT") {
curl_setopt(handle: $curl, option: CURLOPT_CUSTOMREQUEST, value: 'PUT'); curl_setopt(handle: $curl, option: CURLOPT_CUSTOMREQUEST, value: 'PUT');
curl_setopt(handle: $curl, option: CURLOPT_POSTFIELDS, value: json_encode(value: $body)); curl_setopt(handle: $curl, option: CURLOPT_POSTFIELDS, value: json_encode(value: $body));
} }
curl_setopt(handle: $curl, option: CURLOPT_CUSTOMREQUEST, value: $requestType); curl_setopt(handle: $curl, option: CURLOPT_CUSTOMREQUEST, value: $requestType);
if ($resultJSON = curl_exec(handle: $curl)) { if ($resultJSON = curl_exec(handle: $curl)) {
$httpResponse = curl_getinfo(handle: $curl)['http_code']; $httpResponse = curl_getinfo(handle: $curl)['http_code'];
switch ($httpResponse) { switch ($httpResponse) {
case 200: case 200:
$apiResult = json_decode(json: $resultJSON); $apiResult = json_decode(json: $resultJSON);
if ($command == "ping") { if ($command == "ping") {
if ($apiResult->response == "pong") { if ($apiResult->response == "pong") {
$result = $apiResult->response; $result = $apiResult->response;
} else { } else {
$result = $apiResult; $result = $apiResult;
} }
} else { } else {
$result = $resultJSON; $result = $resultJSON;
} }
break; break;
case 400: case 400:
$result = $resultJSON; $result = $resultJSON;
break; break;
case 401: case 401:
$result = 'Missing or wrong API Key'; $result = 'Missing or wrong API Key';
$error = true; $error = true;
break; break;
case 404: case 404:
$result = '404 Not Found'; $result = '404 Not Found';
break; break;
case 500: case 500:
$result = 'server error'; $result = 'server error';
break; break;
default: default:
$result = 'Unhandled error: ' . $httpResponse; $result = 'Unhandled error: ' . $httpResponse;
} }
} else { } else {
$error = true; $error = true;
$result = curl_error(handle: $curl); $result = curl_error(handle: $curl);
} }
$info = curl_getinfo(handle: $curl); $info = curl_getinfo(handle: $curl);
$responseTime = $info['total_time']; $responseTime = $info['total_time'];
curl_close(handle: $curl); curl_close(handle: $curl);
return [ return [
'responseTime' => $responseTime, 'responseTime' => $responseTime,
'error' => $error, 'error' => $error,
'data' => $result, 'data' => $result,
'header' => $httpResponse ?? '' 'header' => $httpResponse ?? ''
]; ];
} }
function fileGetContents(string $url, int $versionIP): ?array
{
$curl = curl_init(url: $url);
$options = array(
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_ENCODING => "",
CURLOPT_AUTOREFERER => true,
CURLOPT_CONNECTTIMEOUT => 120,
CURLOPT_TIMEOUT => 120,
CURLOPT_MAXREDIRS => 10,
);
if ($versionIP == 4) {
curl_setopt(handle: $curl, option: CURLOPT_IPRESOLVE, value: CURL_IPRESOLVE_V4);
} else {
curl_setopt(handle: $curl, option: CURLOPT_IPRESOLVE, value: CURL_IPRESOLVE_V6);
}
curl_setopt_array(handle: $curl, options: $options);
$content = curl_exec(handle: $curl);
$error = curl_errno(handle: $curl);
$errorMessage = curl_error(handle: $curl);
$header = curl_getinfo(handle: $curl);
curl_close(handle: $curl);
$header['error'] = $error;
$header['errorMessage'] = $errorMessage;
$header['content'] = $content;
return $header;
}
} }