144 lines
5.1 KiB
PHP
Executable File
144 lines
5.1 KiB
PHP
Executable File
<?php
|
|
|
|
require dirname(__DIR__) . '/vendor/autoload.php';
|
|
|
|
use Din9xtrCloud\App;
|
|
use Din9xtrCloud\Container\Container;
|
|
use Din9xtrCloud\Controllers\AuthController;
|
|
use Din9xtrCloud\Controllers\DashboardController;
|
|
use Din9xtrCloud\Controllers\LicenseController;
|
|
use Din9xtrCloud\Controllers\StorageController;
|
|
use Din9xtrCloud\Controllers\StorageTusController;
|
|
use Din9xtrCloud\Middlewares\AuthMiddleware;
|
|
use Din9xtrCloud\Middlewares\CsrfMiddleware;
|
|
use Din9xtrCloud\Router;
|
|
use Din9xtrCloud\Storage\Drivers\LocalStorageDriver;
|
|
use Din9xtrCloud\Storage\Drivers\StorageDriverInterface;
|
|
use Din9xtrCloud\Storage\UserStorageInitializer;
|
|
use Din9xtrCloud\ViewModels\BaseViewModel;
|
|
use Din9xtrCloud\ViewModels\LayoutConfig;
|
|
use FastRoute\RouteCollector;
|
|
use Monolog\Handler\StreamHandler;
|
|
use Monolog\Logger;
|
|
use Monolog\Processor\PsrLogMessageProcessor;
|
|
use Nyholm\Psr7\Factory\Psr17Factory;
|
|
use Monolog\Level;
|
|
use Nyholm\Psr7Server\ServerRequestCreator;
|
|
use Psr\Http\Message\ServerRequestInterface;
|
|
use Psr\Log\LoggerInterface;
|
|
|
|
// ---------------------------------------------------------------------
|
|
// PHP runtime
|
|
// ---------------------------------------------------------------------
|
|
error_reporting(E_ALL);
|
|
|
|
session_start();
|
|
|
|
// ---------------------------------------------------------------------
|
|
// ENV
|
|
// ---------------------------------------------------------------------
|
|
$storageBasePath = dirname(__DIR__) . '/' . ($_ENV['STORAGE_PATH'] ?? 'storage');
|
|
$userLimitBytes = (int)($_ENV['STORAGE_USER_LIMIT_GB'] ?? 70) * 1024 * 1024 * 1024;
|
|
// ---------------------------------------------------------------------
|
|
// Container
|
|
// ---------------------------------------------------------------------
|
|
$container = new Container();
|
|
|
|
$logPath = dirname(__DIR__) . '/logs/cloud.log';
|
|
if (!is_dir(dirname($logPath))) mkdir(dirname($logPath), 0755, true);
|
|
|
|
$container->singleton(StorageDriverInterface::class, function () use ($storageBasePath, $userLimitBytes) {
|
|
return new LocalStorageDriver(
|
|
basePath: $storageBasePath,
|
|
defaultLimitBytes: $userLimitBytes
|
|
);
|
|
});
|
|
$container->singleton(UserStorageInitializer::class, function () use ($storageBasePath) {
|
|
return new UserStorageInitializer($storageBasePath);
|
|
});
|
|
$container->singleton(LoggerInterface::class, function () use ($logPath) {
|
|
$logger = new Logger('cloud');
|
|
$logger->pushHandler(new StreamHandler($logPath, Level::Debug));
|
|
$logger->pushProcessor(new PsrLogMessageProcessor());
|
|
return $logger;
|
|
});
|
|
$container->singleton(PDO::class, function () {
|
|
return new PDO(
|
|
'sqlite:/var/db/database.sqlite',
|
|
null,
|
|
null,
|
|
[
|
|
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
|
|
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
|
|
]
|
|
);
|
|
});
|
|
$container->singleton(Psr17Factory::class, fn() => new Psr17Factory());
|
|
|
|
$container->request(
|
|
ServerRequestInterface::class,
|
|
fn(Container $c) => new ServerRequestCreator(
|
|
$c->get(Psr17Factory::class),
|
|
$c->get(Psr17Factory::class),
|
|
$c->get(Psr17Factory::class),
|
|
$c->get(Psr17Factory::class),
|
|
)->fromGlobals()
|
|
);
|
|
|
|
// ---------------------------------------------------------------------
|
|
// Routes
|
|
// ---------------------------------------------------------------------
|
|
$routes = static function (RouteCollector $r): void {
|
|
|
|
$r->get('/', [DashboardController::class, 'index']);
|
|
$r->get('/license', [LicenseController::class, 'license']);
|
|
|
|
$r->get('/login', [AuthController::class, 'loginForm']);
|
|
$r->post('/login', [AuthController::class, 'loginSubmit']);
|
|
$r->post('/logout', [AuthController::class, 'logout']);
|
|
|
|
$r->post('/storage/folders', [StorageController::class, 'createFolder']);
|
|
$r->post('/storage/files', [StorageController::class, 'uploadFile']);
|
|
|
|
$r->get('/folders/{folder}', [StorageController::class, 'showFolder']);
|
|
|
|
$r->post('/storage/folders/{folder}/delete', [StorageController::class, 'deleteFolder']);
|
|
|
|
$r->addRoute(['POST', 'OPTIONS'], '/storage/tus', [
|
|
StorageTusController::class,
|
|
'handle',
|
|
]);
|
|
$r->patch('/storage/tus/{id:[a-f0-9]+}', [StorageTusController::class, 'patch']);
|
|
$r->head('/storage/tus/{id:[a-f0-9]+}', [StorageTusController::class, 'head']);
|
|
|
|
$r->get('/storage/files/download', [StorageController::class, 'downloadFile']);
|
|
$r->post('/storage/files/delete', [StorageController::class, 'deleteFile']);
|
|
|
|
$r->get('/storage/files/download/multiple', [StorageController::class, 'downloadMultiple']);
|
|
$r->post('/storage/files/delete/multiple', [StorageController::class, 'deleteMultiple']);
|
|
};
|
|
|
|
|
|
// route,middlewares
|
|
$router = new Router($routes, $container);
|
|
//$router->middlewareFor('/', AuthMiddleware::class);
|
|
//$router->middlewareFor('/login', AuthMiddleware::class);
|
|
|
|
|
|
$app = new App($container);
|
|
|
|
//global,middlewares
|
|
$app->middleware(
|
|
CsrfMiddleware::class,
|
|
AuthMiddleware::class
|
|
);
|
|
$app->router($router);
|
|
|
|
try {
|
|
$container->beginRequest();
|
|
$app->dispatch();
|
|
} catch (Throwable $e) {
|
|
http_response_code(500);
|
|
header('Content-Type: text/plain; charset=utf-8');
|
|
echo 'Internal Server Error';
|
|
} |