| Current Path : /home/seto/indexator.pm/ |
| Current File : /home/seto/indexator.pm/router.php |
<?php
// PHP built-in server: serve static files from public/
// NOTE: returning false only works when the file is under the doc root (project root).
// We manually serve from public/ to keep assets in a subdirectory.
if (php_sapi_name() === 'cli-server') {
$uriPath = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
$file = __DIR__ . '/public' . $uriPath;
if (is_file($file)) {
$ext = strtolower(pathinfo($file, PATHINFO_EXTENSION));
$mime = match($ext) {
'css' => 'text/css',
'js' => 'application/javascript',
'png' => 'image/png',
'jpg',
'jpeg' => 'image/jpeg',
'svg' => 'image/svg+xml',
'ico' => 'image/x-icon',
'woff' => 'font/woff',
'woff2'=> 'font/woff2',
default => 'application/octet-stream',
};
header('Content-Type: ' . $mime);
readfile($file);
exit;
}
}
require __DIR__ . '/bootstrap.php';
use App\Core\Request;
use App\Core\Router;
use App\Core\Response;
use App\Core\CsrfGuard;
use App\Controllers\AuthController;
use App\Controllers\ProjectController;
use App\Controllers\ExportController;
use App\Controllers\ApiController;
use App\Controllers\SettingsController;
use App\Controllers\BulkImportController;
use App\Controllers\IndexingController;
use App\Controllers\StatsController;
use App\Controllers\ExternalApiController;
$request = new Request();
$router = new Router();
// Auth routes
$router->get('/login', [AuthController::class, 'showLogin']);
$router->post('/login', [AuthController::class, 'processLogin']);
$router->get('/logout', [AuthController::class, 'logout']);
// Projects
$router->get('/', [ProjectController::class, 'index']);
$router->get('/projects', [ProjectController::class, 'index']);
$router->get('/projects/create', [ProjectController::class, 'create']);
$router->post('/projects', [ProjectController::class, 'store']);
$router->get('/projects/{id}', [ProjectController::class, 'show']);
$router->post('/projects/{id}/delete', [ProjectController::class, 'delete']);
$router->post('/projects/{id}/check', [ProjectController::class, 'startCheck']);
$router->post('/projects/{id}/recheck', [ProjectController::class, 'recheck']);
// Export
$router->get('/export/all', [ExportController::class, 'exportAll']);
$router->get('/projects/{id}/export', [ExportController::class, 'export']);
// API (JSON)
$router->post('/api/worker/run', [ApiController::class, 'runWorker']);
$router->post('/api/projects/recheck-all', [ApiController::class, 'recheckAll']);
$router->post('/api/projects/{id}/recheck', [ApiController::class, 'recheck']);
$router->post('/api/projects/stop-all', [ApiController::class, 'stopAll']);
$router->get('/api/projects/{id}/progress', [ApiController::class, 'progress']);
$router->post('/api/projects/{id}/stop', [ApiController::class, 'stop']);
$router->post('/api/projects/{id}/reset-jobs', [ApiController::class, 'resetJobs']);
$router->get('/stats', [StatsController::class, 'index']);
$router->get('/settings', [SettingsController::class, 'show']);
$router->post('/settings', [SettingsController::class, 'update']);
// Bulk import
$router->post('/api/bulk-import/start', [BulkImportController::class, 'start']);
$router->get('/api/bulk-import/{jobId}/status', [BulkImportController::class, 'status']);
$router->post('/api/projects/{id}/submit-indexing', [IndexingController::class, 'submit']);
$router->get('/api/projects/{id}/indexing', [IndexingController::class, 'history']);
$router->post('/api/indexing/{submissionId}/refresh', [IndexingController::class, 'refresh']);
$router->get('/api/indexing/balance', [IndexingController::class, 'balance']);
$router->post('/api/external/projects', [ExternalApiController::class, 'createProject']);
$router->post('/api/external/projects/{id}/recheck', [ExternalApiController::class, 'recheck']);
$router->get('/api/external/projects/{id}', [ExternalApiController::class, 'progress']);
$router->get('/api/external/projects/{id}/urls', [ExternalApiController::class, 'urlStatuses']);
$router->post('/api/external/projects/{id}/delete', [ExternalApiController::class, 'deleteProject']);
$router->dispatch($request);