Кому-нибудь удалось получить доступ к api pritunl с помощью php?
Руководство, представленное на сайте, содержит только примеры Python.
http://pritunl.com/api.html
вот моя попытка, так как кажется, что API использует HTTP Authenticate Digest
но это вернется
не удалось открыть поток: HTTP-запрос не выполнен! HTTP / 1.1 401 НЕ РАЗРЕШЕНО
class pritunl {
public $BASE_URL = "https://localhost:9700";
public $API_TOKEN = "KDwGfVp5YfBDfozZMr6GOMHxIQard8Ej";
public $API_SECRET = "0VHyY0sI2bwvUHtewDSa64Q8n1Vqj8io";
public function __construct() {
$this->auth_timestamp = time();
$this->auth_nonce = $this->gen_uuid();
$this->auth_string = join("&",array($this->API_TOKEN,$this->auth_timestamp,$this->auth_nonce));
$this->auth_signature = base64_encode(hash_hmac('sha256',$this->API_SECRET,$this->auth_string));
}
public function connect($dir="") {
$options = array(
'http' => array(
'header' => ['Authorization: Digest','Content-Type: application/json','Auth-Token: '.$this->API_TOKEN,'Auth-Timestamp: '.$this->auth_timestamp,'Auth-Nonce: '.$this->auth_nonce,'Auth-Signature: '.$this->auth_signature],
'method' => 'GET',
'content' => '',
),
);
$context = stream_context_create($options);
$result = file_get_contents($this->BASE_URL.$dir, false, $context);
return $result;
}
private function gen_uuid() {
return sprintf( '%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
// 32 bits for "time_low"mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff ),
// 16 bits for "time_mid"mt_rand( 0, 0xffff ),
// 16 bits for "time_hi_and_version",
// four most significant bits holds version number 4
mt_rand( 0, 0x0fff ) | 0x4000,
// 16 bits, 8 bits for "clk_seq_hi_res",
// 8 bits for "clk_seq_low",
// two most significant bits holds zero and one for variant DCE1.1
mt_rand( 0, 0x3fff ) | 0x8000,
// 48 bits for "node"mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff )
);
}
}
<?php
$BASE_URL = "";
$API_TOKEN = "";
$API_SECRET = "";
function auth_request($method, $path, $data="") {
global $BASE_URL, $API_TOKEN, $API_SECRET;
$auth_timestamp = strval(time());
$auth_nonce = uniqid();
$auth_array = array(
$API_TOKEN,
$auth_timestamp,
$auth_nonce,
strtoupper($method),
$path,
);
if ($data) {
array_push($auth_array, $data);
}
$auth_string = join("&", $auth_array);
$auth_signature = base64_encode(hash_hmac(
"sha256", $auth_string, $API_SECRET, true));
$options = array(
"http" => array(
"header" => array(
'Content-Type: application/json',
'Auth-Token: '.$API_TOKEN,
'Auth-Timestamp: '.$auth_timestamp,
'Auth-Nonce: '.$auth_nonce,
'Auth-Signature: '.$auth_signature
),
"method" => $method,
"content" => $data,
),
);
$context = stream_context_create($options);
return file_get_contents($BASE_URL.$path, false, $context);
};
printf(auth_request("GET", "/status")."\n");
printf(auth_request("PUT", "/organization/6d18ab1855804e5e86121e24cd3ec0e5",
json_encode(array(
"name" => "test",
))
)."\n");
?>
Других решений пока нет …