コード例 #1
0
ファイル: status.php プロジェクト: jmealo/Gatekeeper
<?php

Gatekeeper\Gatekeeper::authorizeTestApiAccess();
$code = !empty($_REQUEST['statusCode']) && is_numeric($_REQUEST['statusCode']) ? $_REQUEST['statusCode'] : 200;
$message = !empty($_REQUEST['statusMessage']) && preg_match('/^[a-zA-Z0-9 \\-]+$/', $_REQUEST['statusMessage']) ? $_REQUEST['statusMessage'] : 'OK';
header("HTTP/1.1 {$code} {$message}");
JSON::respond(array('success' => $code < 300, 'code' => $code, 'message' => $message));
コード例 #2
0
Site::$autoPull = true;
$succeeded = array();
$failed = array();
foreach ($requestData['nodes'] as $updateData) {
    $Node = Site::resolvePath($updateData['path']);
    if ($Node->Collection->Site == 'Local') {
        $failed[] = array('path' => $updateData['path'], 'error' => 'CURRENT_IS_LOCAL', 'message' => 'Current node is local and blocks any remote updates');
        continue;
    }
    if ($Node->SHA1 != $updateData['localSHA1']) {
        $failed[] = array('path' => $updateData['path'], 'error' => 'LOCAL_SHA1_MISMATCH', 'message' => 'Current node\'s SHA1 hash does not match that which this update was requested for');
        continue;
    }
    if (empty($updateData['remoteSHA1'])) {
        $Node->delete();
    } else {
        $NewNode = Emergence::resolveFileFromParent($Node->Collection, $Node->Handle, true);
        if (!$NewNode) {
            $failed[] = array('path' => $updateData['path'], 'error' => 'DOWNLOAD_FAILED', 'message' => 'The remote file failed to download');
            continue;
        }
        if ($NewNode->SHA1 != $updateData['remoteSHA1']) {
            $NewNode->destroyRecord();
            $failed[] = array('path' => $updateData['path'], 'error' => 'REMOTE_SHA1_MISMATCH', 'message' => 'Downloaded node\'s SHA1 hash does not match that which this update was requested for');
            continue;
        }
    }
    $succeeded[] = $updateData['path'];
}
JSON::respond(array('succeeded' => $succeeded, 'failed' => $failed));
コード例 #3
0
 public static function searchRequest()
 {
     $GLOBALS['Session']->requireAccountLevel('Developer');
     set_time_limit(180);
     if (empty($_REQUEST['q'])) {
         return static::throwInvalidRequestError('q required');
     }
     $fileResults = DB::query('SELECT f.ID FROM (SELECT MAX(ID) AS ID FROM _e_files GROUP BY Handle, CollectionID) matches JOIN _e_files f USING(ID) WHERE f.Status = "Normal"');
     // open grep process
     $cmd = sprintf('xargs grep -nIP "%s" ', addslashes($_REQUEST['q']));
     $cwd = Site::$rootPath . '/data/';
     $grepProc = proc_open($cmd, array(0 => array('pipe', 'r'), 1 => array('pipe', 'w')), $pipes, $cwd);
     // pipe file list into xargs
     $filesCount = 0;
     while ($file = $fileResults->fetch_assoc()) {
         fwrite($pipes[0], $file['ID'] . PHP_EOL);
     }
     fclose($pipes[0]);
     // pipe results out
     $output = array();
     while (!feof($pipes[1])) {
         $line = trim($origLine = stream_get_line($pipes[1], 100000000, PHP_EOL));
         #            print "$origLine<hr>";
         $line = explode(':', $line, 3);
         if (count($line) === 3) {
             $file = SiteFile::getByID($line[0]);
             if (strlen($line[2]) > 255) {
                 $result = preg_match("/{$_REQUEST['q']}/", $line[2], $matches, PREG_OFFSET_CAPTURE);
                 $line[2] = substr(substr($line[2], max(0, $matches[0][1] - 50)), 0, 255);
             }
             if (!$file) {
                 Debug::dumpVar($line, true, 'no file');
             }
             $output[] = array('File' => $file ? $file->getData() : null, 'line' => $line[1], 'result' => trim($line[2]));
         }
     }
     fclose($pipes[1]);
     proc_close($grepProc);
     JSON::respond(array('success' => true, 'data' => $output));
 }
コード例 #4
0
ファイル: cachable.php プロジェクト: jmealo/Gatekeeper
<?php

Gatekeeper\Gatekeeper::authorizeTestApiAccess();
$cacheSecs = !empty($_GET['secs']) && ctype_digit($_GET['secs']) ? $_GET['secs'] : 30;
header('Expires: ' . gmdate('D, d M Y H:i:s \\G\\M\\T', time() + $cacheSecs));
header('Cache-Control: max-age=' . $cacheSecs);
header('Pragma: cache');
JSON::respond(array('success' => true, 'foo' => 'bar', 'time' => date('Y-m-d H:i:s')));
コード例 #5
0
ファイル: slow.php プロジェクト: jmealo/Gatekeeper
<?php

Gatekeeper\Gatekeeper::authorizeTestApiAccess();
$delay = !empty($_REQUEST['delay']) && is_numeric($_REQUEST['delay']) ? $_REQUEST['delay'] : 5;
sleep($delay);
JSON::respond(array('success' => 200, 'delay' => $delay));
コード例 #6
0
        if (in_array($validHour, $hours)) {
            $where[] = "Site{$validHour} = 1";
        }
    }
}
// add features filter
if (!empty($_GET['features'])) {
    $validFeatures = ['TransportationProvided'];
    $features = is_array($_GET['features']) ? $_GET['features'] : [$_GET['features']];
    foreach ($validFeatures as $validFeature) {
        if (in_array($validFeature, $features)) {
            $where[] = "Site{$validFeature} = 1";
        }
    }
}
// calculate limit params
if (!empty($_GET['limit']) && ctype_digit($_GET['limit'])) {
    $limit = (int) $_GET['limit'];
} else {
    $limit = 25;
}
if (!empty($_GET['offset']) && ctype_digit($_GET['offset'])) {
    $offset = (int) $_GET['offset'];
} else {
    $offset = 0;
}
// execute query and print JSON response
#Debug::dumpVar($_GET, false, 'get');
#Debug::dumpVar($where, true, '$where');
JSON::respond(['results' => DB::allRecords('SELECT SQL_CALC_FOUND_ROWS ' . implode(',', $selectFields) . ' FROM Site' . ' WHERE SiteApproved = 1 AND (' . (count($where) ? implode(') AND (', $where) : '1') . ')' . " ORDER BY {$order}" . " LIMIT {$offset}, {$limit}"), 'limit' => $limit, 'offset' => $offset, 'total' => (int) DB::foundRows()]);
コード例 #7
0
 public static function throwAPIUnauthorizedError($message = 'You do not have authorization to access this resource')
 {
     header('HTTP/1.0 403 Forbidden');
     switch (static::getResponseMode()) {
         case 'json':
         default:
             JSON::respond(['success' => false, 'message' => $message]);
     }
 }
コード例 #8
0
ファイル: cookies.php プロジェクト: jmealo/Gatekeeper
<?php

Gatekeeper\Gatekeeper::authorizeTestApiAccess();
JSON::respond($_COOKIE);