registerRefreshTokenHandler(UserManager::getRefreshTokenHandler()); $dispatcher->registerSessionTokenHandler(UserManager::getSessionTokenHandler()); } else if ($_SERVER['PATH_INFO'] === '/executor-nodes.json') { $stmt = Database::get()->prepare('SELECT `public_ip` AS `publicIp` FROM `node` ORDER BY `nodeid` ASC'); $stmt->execute(); $ipAddresses = []; while ($entry = $stmt->fetch(PDO::FETCH_OBJ)) { if (!empty($entry->publicIp)) { $ipAddresses[] = $entry->publicIp; } } header('HTTP/1.1 200 OK'); header('Content-Type: application/json'); echo json_encode((object)[ 'ipAddresses' => $ipAddresses ]); exit(); } else { require_once('./lib/RESTDispatcher.php'); $dispatcher = new RESTDispatcher(); $dispatcher->registerURI('GET', '/jobs', 'GetJobs'); $dispatcher->registerURI('PUT', '/jobs', 'CreateJob'); $dispatcher->registerURI('GET', '/jobs/(?[0-9]+)', 'GetJobDetails'); $dispatcher->registerURI(['GET', 'HEAD'], '/jobs/(?[0-9]+)/(?[a-f0-9]+)/status-(?[a-f0-9]+).svg', 'GetJobStatusBadge'); $dispatcher->registerURI('PATCH', '/jobs/(?[0-9]+)', 'PatchJob'); $dispatcher->registerURI('DELETE', '/jobs/(?[0-9]+)', 'DeleteJob'); $dispatcher->registerURI('GET', '/jobs/(?[0-9]+)/history', 'GetJobHistory'); $dispatcher->registerURI('GET', '/jobs/(?[0-9]+)/history/(?[0-9-]+)', 'GetJobHistoryDetails'); $dispatcher->registerURI('GET', '/folders', 'GetFolders'); $dispatcher->registerURI('PUT', '/folders', 'CreateFolder'); $dispatcher->registerURI('GET', '/folders/(?[0-9]+)', 'GetFolderDetails'); $dispatcher->registerURI('PATCH', '/folders/(?[0-9]+)', 'UpdateFolder'); $dispatcher->registerURI('DELETE', '/folders/(?[0-9]+)', 'DeleteFolder'); } $dispatcher->registerDirectory('./apimethods/'); $dispatcher->dispatch(); } catch (Exception $ex) { error_log('Unhandled top level API exception: ' . (string)$ex); header('HTTP/1.1 500 Internal Server Error'); exit(); }