function execute($par) { $request = $this->getRequest(); $output = $this->getOutput(); $this->setHeaders(); if (!$this->userCanExecute($this->getUser())) { $this->displayRestrictionError(); return; } global $virtualFactoryURL; global $virtualFactoryUser; global $virtualFactoryPass; global $virtualFactoryImages; if ($par === "token") { $token = $request->getText('id'); $success = 0; $context = stream_context_create(array('http' => array('header' => array("Authorization: Basic " . base64_encode("{$virtualFactoryUser}:{$virtualFactoryPass}"), "Content-type: application/x-www-form-urlencoded"), 'method' => 'POST', 'content' => http_build_query(array('token' => $token))))); $response = file_get_contents("{$virtualFactoryURL}/0.1/query", false, $context); $data = json_decode($response)->data; $success = $data->status; if (!$success) { $redirect = SkinTemplate::makeSpecialUrlSubpage('DockerAccess', "token", "id={$token}"); $this->getOutput()->redirect($redirect); } else { if (isset($_SERVER['HTTPS'])) { $encrypted = 1; $port = $data->host_ssl_port; } else { $encrypted = 0; $port = $data->host_port; } $host = $data->host_name; $password = $data->instance_password; $path = $data->instance_path; $url = "/extensions/DockerAccess/noVNC/vnc.html?resize=scale&autoconnect=1&host=" . $host . "&port=" . $port . "&password="******"&path=" . $path . "&encrypted=" . $encrypted; $this->getOutput()->redirect($url); } } if (!($par === "launch")) { $wikitext = "Please select an image to launch from the follwing list:\n"; foreach ($virtualFactoryImages as $image => $readableName) { $wikitext .= "* <span class=\"plainlinks\">[{{fullurl:{{FULLPAGENAME}}}}/launch?image={$image} {$readableName}]<span>\n"; } $output->addWikiText($wikitext); return; } # Check Image Parameter $imageID = $request->getText('image'); if ($imageID === "") { $wikitext = "No image specified"; $output->addWikiText($wikitext); return; } $userID = $this->getUser()->getId(); if (!array_key_exists($imageID, $virtualFactoryImages)) { $wikitext = "Image {$imageID} is not in the list of authorized images. Please see [[Special:DockerAccess]]"; $output->addWikiText($wikitext); return; } $data = array("user" => $userID, "image" => $imageID, "enable_cuda" => 1); $context = stream_context_create(array('http' => array('header' => array("Authorization: Basic " . base64_encode("{$virtualFactoryUser}:{$virtualFactoryPass}"), "Content-type: application/x-www-form-urlencoded"), 'method' => 'POST', 'content' => http_build_query($data)))); $response = file_get_contents("{$virtualFactoryURL}/0.1/create", false, $context); $token = json_decode($response)->data->token; $success = 0; $data = 0; $redirect = SkinTemplate::makeSpecialUrlSubpage('DockerAccess', 'token', "id={$token}"); $this->getOutput()->redirect($redirect); // $success_text = "/vnc.html"; // # If $response starts with $success_text... // if (substr($response, 0, strlen($success_text)) === $success_text) { // $wikitext = "Your VNC virtual instance is ready. To access it, [".$virtualFactoryURL.$response.' please click here].'; // } else { // $wikitext = "'''Internal Error!'''\n\nServer replied:\n ".$response."\nIf you believe it is a bug, please report it to [mailto:sysadmin@wikitolearn.org sysadmin@wikitolearn.org]."; // } // // $output->addWikiText( $wikitext ); }