<th class="modified">timestamp</th> </tr> EOS; foreach ($handle->type as $idx => $type) { if (strpos($type, 'HS_') === 0) { continue; } echo '<tr><td class="idx">' . $idx . '</td><td class="type">' . htmlspecialchars($type, ENT_COMPAT, 'UTF-8') . '</td><td class="data">'; if ($type == 'URL' && REST::isValidURI($handle->data[$idx])) { echo '<a href="' . $handle->data[$idx] . '">' . htmlspecialchars($handle->data[$idx]) . '</a>'; } elseif ($type == 'EMAIL') { echo '<a href="mailto:' . $handle->data[$idx] . '">' . htmlspecialchars($handle->data[$idx]) . '</a>'; } else { echo $handle->data[$idx] === mb_convert_encoding(mb_convert_encoding($handle->data[$idx], 'UTF-32', 'UTF-8'), 'UTF-8', 'UTF-32') ? htmlspecialchars($handle->data[$idx], ENT_COMPAT, 'ISO-8859-1') : '<pre>' . htmlspecialchars(addcslashes($handle->data[$idx], "\\..\t\v....ÿ"), ENT_COMPAT, 'ISO-8859-1') . '</pre>'; } echo '</td><td class="refs">' . htmlspecialchars($handle->refs[$idx]) . '</td><td class="modified">' . REST::http_date($handle->timestamp[$idx]) . "</td></tr>\n"; } echo '</tbody></table>' . REST::html_end(); } elseif ($content_type == 'application/json') { $json = array(); foreach ($handle->type as $idx => $type) { if (strpos($type, 'HS_') !== 0) { // Was: $type != 'HS_ADMIN' $json[$idx] = array('type' => (string) $type, 'data' => (string) $handle->data[$idx], 'timestamp' => (int) $handle->timestamp[$idx], 'refs' => (string) $handle->refs[$idx]); } } echo json_encode($json); exit; } elseif ($content_type == 'application/x-www-form-urlencoded') { $pairs = array(); foreach ($handle->type as $idx => $type) {
$tmpfilename = tempnam('/tmp', 'portal_'); $tmpfile = fopen($tmpfilename, 'w'); while (($block = fread(REST::inputhandle(), 8192)) !== "") { fwrite($tmpfile, $block); } fclose(REST::inputhandle()); fclose($tmpfile); if (isset($_SERVER['CONTENT_LENGTH']) && $_SERVER['CONTENT_LENGTH'] != filesize($tmpfilename)) { unlink($tmpfilename); REST::fatal(REST::HTTP_BAD_REQUEST, "Content-Length header doesn't match actual content length."); } if (!rename($tmpfilename, Portal::JOBRESULTS_DIR . $jobid)) { unlink($tmpfilename); REST::fatal(REST::HTTP_INTERNAL_SERVER_ERROR, "Couldn't store uploaded file."); } chmod(Portal::JOBRESULTS_DIR . $jobid, 0660); REST::header(array('status' => REST::HTTP_NO_CONTENT)); exit; } // The user tries to get information about his jobs if (file_exists($fullfilename = Portal::JOBRESULTS_DIR . $jobid)) { // The job has finished and we have a result $filename = basename($fullfilename); $fileinfo = @stat($fullfilename); REST::header(array('Content-Type' => 'application/x-compressed-tar', 'Content-Disposition' => "attachment; filename=\"{$filename}.tgz\"", 'Last-Modified' => REST::http_date($fileinfo['mtime']), 'Content-Length' => $fileinfo['size'])); if ($_SERVER['REQUEST_METHOD'] == 'GET') { readfile($fullfilename); } exit; } REST::fatal(REST::HTTP_NOT_FOUND);
REST::fatal(REST::HTTP_NOT_FOUND); } } REST::require_method('HEAD', 'GET'); if (!empty($_SERVER['HTTP_IF_MODIFIED_SINCE'])) { REST::fatal(REST::HTTP_NOT_MODIFIED); } $query = <<<EOS SELECT `tokenValue`, `tokenType`, `tokenCreated`, `tokenName`, IF(`tokenLockTimeout` > UNIX_TIMESTAMP(),`tokenLockUUID`,NULL) FROM `Pools` NATURAL JOIN `Tokens` NATURAL JOIN `TokenValues` WHERE `poolName` = {$escPool} AND `tokenId` = {$TOPOS_TOKEN}; EOS; $result = Topos::query($query); if (!($row = $result->fetch_row())) { REST::fatal(REST::HTTP_NOT_FOUND); } $headers = array('Content-Type' => $row[1], 'Content-Length' => strlen($row[0]), 'Last-Modified' => REST::http_date($row[2])); if (!empty($row[3])) { $headers['Content-Disposition'] = 'inline; filename="' . $row[3] . '"'; } if ($row[4]) { $headers['X-Topos-OpaqueLockToken'] = "opaquelocktoken:{$row[4]}"; $headers['X-Topos-LockURL'] = Topos::urlbase() . 'pools/' . REST::urlencode($TOPOS_POOL) . '/locks/' . $row[4]; } REST::header($headers); if ($_SERVER['REQUEST_METHOD'] === 'HEAD') { exit; } echo $row[0];
$result = Topos::query(<<<EOS SELECT `tokenLength`, `tokenType`, `tokenCreated`, `tokenName`, IF(`tokenLockTimeout` > UNIX_TIMESTAMP(), `tokenLockUUID`, NULL) AS 'tokenLockUUID', `tokenLeases` FROM `Tokens` WHERE `tokenId` = {$TOPOS_TOKEN} AND `poolId` = {$poolId}; EOS ); if (!($row = $result->fetch_array())) { REST::fatal(REST::HTTP_NOT_FOUND); } $result = Topos::query(<<<EOS SELECT `tokenValue` FROM `TokenValues` WHERE `tokenId` = {$TOPOS_TOKEN} EOS ); $tokenValue = $result->fetch_row(); $tokenValue = $tokenValue[0]; $headers = array('Content-Type' => $row['tokenType'], 'Content-Length' => $row['tokenLength'], 'Last-Modified' => REST::http_date($row['tokenCreated']), 'X-Number-Of-Leases' => $row['tokenLeases']); if (!empty($row['tokenName'])) { $headers['Content-Disposition'] = 'inline; filename="' . $row['tokenName'] . '"'; } if (array_key_exists('tokenLockUUID', $row)) { $headers['X-Topos-OpaqueLockToken'] = "opaquelocktoken:{$row['tokenLockUUID']}"; $headers['X-Topos-LockURL'] = Topos::urlbase() . 'pools/' . REST::urlencode($TOPOS_POOL) . '/locks/' . $row['tokenLockUUID']; } REST::header($headers); if ($_SERVER['REQUEST_METHOD'] === 'HEAD') { exit; } echo $tokenValue;
} REST::require_method('GET', 'HEAD'); $path_info = Portal::path_info(); if (count($path_info) != 3) { REST::fatal(REST::HTTP_NOT_FOUND); } $file = explode('.', $path_info[2], 2); if (!($database_id = (int) $file[0])) { REST::fatal(REST::HTTP_NOT_FOUND); } $user_id = Portal_User::current()->user_id(); $result = Portal_MySQL::query(<<<EOS SELECT `d`.`name`, `d`.`version`, `d`.`type`, `d`.`checksum`, `u`.`user_name` FROM `Database` AS d LEFT JOIN `User` AS u USING(`user_id`) WHERE `d`.`database_id` = {$database_id} AND (`d`.`user_id` = {$user_id} OR `d`.`is_shared` = 1); EOS ); if (!($row = $result->fetch_row())) { REST::fatal(REST::HTTP_NOT_FOUND); } $fileinfo = @stat($realfilepath); $filename = "{$row[0]}-{$row[1]}." . Portal_DB::databaseTypeExtension($row[2]); REST::header(array('Content-Type' => Portal_DB::databaseTypeContentType($row[2]), 'Content-Encoding' => 'identity', 'Content-Disposition' => "attachment; filename=\"{$filename}\"", 'Last-Modified' => REST::http_date($fileinfo['mtime']), 'ETag' => "\"{$row[3]}\"", 'X-Creator-Name' => $row[4], 'Content-Length' => $fileinfo['size'])); if ($_SERVER['REQUEST_METHOD'] == 'GET') { readfile($realfilepath); }