Your IP : 216.73.217.78


Current Path : /home/seto/indexator.pm/
Upload File :
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);