* This file is part of Pydio.
*
* Pydio is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Pydio is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with Pydio. If not, see .
*
* The latest code can be found at .
*
* Re-run the diagnostic tests
*/
/**
* If you want to run the tests, first comment this line!
* It is disabled for security purpose
*/
use Pydio\Core\Utils\Reflection\DiagnosticRunner;
use Pydio\Core\Controller\HTMLWriter;
die("You are not allowed to see this page (comment first line of the file to access it!)");
require_once("base.conf.php");
require_once AJXP_BIN_FOLDER."/lib/HttpClient.php";
/**
* @param $baseData
* @param $url
* @param $parameters
* @param $private
* @return HttpClient
*/
function apiPost($baseData, $url, $parameters, $private){
$nonce = substr(md5(microtime()), 0, 6);
$url = $baseData["path"].$url;
$msg = "$url:$nonce:$private";
$hash = $nonce.":".hash_hmac("sha256", $msg, $parameters["auth_token"]);
$client = new HttpClient($baseData["host"]);
$parameters["auth_hash"] = $hash;
$client->post($url, $parameters);
return $client;
}
if(isSet($_GET["api"])){
if(isSet($_POST["ws-alias"])){
$ws = $_POST["ws-alias"];
$user = $_POST["user"];
$password = $_POST["password"];
$host = $_POST["host"];
$protocol = $_POST["protocol"];
$path = $_POST["path"];
if($path == "/") $path = "";
$urlBaseData = array("host" => $host, "protocol" => $protocol, "path" => $path);
echo "";
echo "Getting authentication token with user credentials
";
flush();
$tokens = file_get_contents("${protocol}://${user}:${password}@${host}${path}/api/pydio/keystore_generate_auth_token/php_client");
$data = json_decode($tokens, true);
if(is_array($data)){
echo "\n\nData is correctly decoded as JSON.";
var_dump($data);
}else{
echo "\n\nData returned is not JSON! There is something wrong with the API. Exiting.";
var_dump($data);
exit();
}
// Now use tokens
$token = $data["t"];
$private = $data["p"];
$tokens = array("auth_token" => $token);
flush();
echo "
Now checking workspace root listing. We expect XML result
";
flush();
$client = apiPost($urlBaseData, "/api/$ws/ls", array("auth_token" => $token), $private);
$crtListing = $client->getContent();
if(strpos($crtListing, 'getHeaders());
var_dump($crtListing);
exit();
}
echo ("");
flush();
echo "
Checking indexation output
";
flush();
$lastSeq = 0;
$client = apiPost($urlBaseData, "/api/$ws/changes/$lastSeq", array("auth_token" => $token, "flatten" => "true"), $private);
$headers = $client->getHeaders();
if($headers["content-type"] != "application/json; charset=UTF-8"){
echo "\n\n Seems like response header is not JSON. Did you correctly enable the Syncable feature on this workspace?";
var_dump($headers);
exit();
}
$data = json_decode($client->getContent(), true);
if(is_array($data)){
$lastSeq = $data["last_seq"];
echo "\n\nData is correctly decoded as JSON. Saving Last Seq Id to ".$lastSeq;
var_dump($data["last_seq"]);
}else{
echo "\n\nData not decoded as JSON, normal?";
var_dump($headers);
var_dump($data);
exit();
}
$nonce = substr(md5(microtime()), 0, 5);
$tmpFile = "test-pydio-".$nonce.".txt";
echo ("");
flush();
echo "
Creating a simple file inside workspace
";
flush();
if(strpos($crtListing, 'filename="/'.$tmpFile.'"') !== FALSE){
echo "\n\n Skipping this step, file already exists. Is it normal?\n\n";
}else{
$client = apiPost($urlBaseData, "/api/$ws/mkfile/" . $tmpFile, array("auth_token" => $token, "content" => "my file content"), $private);
$data = $client->getContent();
if(strpos($data, 'window.scrollTo(0, 100000);");
flush();
echo "
Checking indexation output
";
flush();
$client = apiPost($urlBaseData, "/api/$ws/changes/" . $lastSeq, array("auth_token" => $token), $private);
$headers = $client->getHeaders();
if($headers["content-type"] != "application/json; charset=UTF-8"){
echo "\n\n Seems like response header is not JSON";
var_dump($headers);
exit();
}
$data = json_decode($client->getContent(), true);
if(is_array($data)){
echo "\n\nData is correctly decoded as JSON. Looking for the new file in the last sequences";
$found = false;
foreach($data["changes"] as $change){
if($change["source"] == "NULL" && $change["target"] == "/".$tmpFile){
echo "
Found file creation event in recent changes:";
var_dump($change);
$found = true;
break;
}
}
if(!$found){
echo "\n\nNo change detected reflecting file creation, this is not normal, exiting.";
var_dump($data);
exit();
}
}else{
echo "\n\nData not decoded as JSON, normal?";
var_dump($data);
exit();
}
echo ("");
flush();
echo "
Deleting temporary file from the workspace
";
flush();
$client = apiPost($urlBaseData, "/api/$ws/delete", array("auth_token" => $token, "file" => "/$tmpFile"), $private);
$data = $client->getContent();
if(strpos($data, 'getHeaders());
var_dump($data);
exit();
}
echo ("");
flush();
echo "
Rechecking indexation output
";
flush();
$client = apiPost($urlBaseData, "/api/$ws/changes/" . $lastSeq, array("auth_token" => $token), $private);
$headers = $client->getHeaders();
if($headers["content-type"] != "application/json; charset=UTF-8"){
echo "\n\n Seems like response header is not JSON. Did you correctly enable the Syncable feature on this workspace?";
var_dump($headers);
exit();
}
$data = json_decode($client->getContent(), true);
if(is_array($data)){
echo "\n\nData is correctly decoded as JSON. Looking for the new file in the last sequences";
$found = false;
foreach($data["changes"] as $change){
if($change["source"] == "/".$tmpFile && $change["target"] == "NULL"){
echo "
Found file move to NULL in sequence!";
var_dump($change);
$found = true;
break;
}
}
if(!$found){
echo "\n\nNo change detected reflecting file deletion, this is not normal, exiting.";
var_dump($data);
exit();
}
}else{
echo "\n\nData not decoded as JSON, normal?";
var_dump($data);
exit();
}
echo ("");
//echo "";
}else{
$host = $_SERVER["HTTP_HOST"];
$protocol = $_SERVER["HTTPS"] === "on" ? "https" : "http";
$path = dirname($_SERVER["REQUEST_URI"]);
HTMLWriter::charsetHeader();
require(AJXP_TESTS_FOLDER."/api_test.phtml");
}
}else{
$outputArray = array();
$testedParams = array();
$passed = true;
$passed = DiagnosticRunner::runTests($outputArray, $testedParams);
DiagnosticRunner::testResultsToFile($outputArray, $testedParams);
echo DiagnosticRunner::testResultsToTable($outputArray, $testedParams, true);
}