52 lines
1.7 KiB
PHP
52 lines
1.7 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
use App\Repositories\AdminRepository;
|
|
|
|
require_once dirname(__DIR__, 2) . '/app/bootstrap.php';
|
|
|
|
$repository = new AdminRepository();
|
|
$isLocal = app_env('APP_ENV', 'production') === 'local';
|
|
$expectedToken = (string) app_env('INSTALL_TOKEN', '');
|
|
$actualToken = (string) ($_GET['token'] ?? $_POST['token'] ?? '');
|
|
$canRun = $isLocal && $expectedToken !== '' && hash_equals($expectedToken, $actualToken);
|
|
$hasAdmin = $repository->activeCount() > 0;
|
|
$message = null;
|
|
$error = null;
|
|
|
|
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
|
if (!$canRun || $hasAdmin) {
|
|
http_response_code(403);
|
|
$error = 'Создание администратора недоступно.';
|
|
} else {
|
|
try {
|
|
$repository->createOwner(
|
|
(string) ($_POST['name'] ?? ''),
|
|
(string) ($_POST['email'] ?? ''),
|
|
(string) ($_POST['password'] ?? '')
|
|
);
|
|
$message = 'Администратор создан. Теперь можно войти.';
|
|
$hasAdmin = true;
|
|
} catch (Throwable $exception) {
|
|
$error = app_env('APP_DEBUG', 'false') === 'true'
|
|
? $exception->getMessage()
|
|
: 'Не удалось создать администратора.';
|
|
}
|
|
}
|
|
}
|
|
|
|
view('admin/setup', [
|
|
'title' => 'Создание администратора - Рыбсток',
|
|
'breadcrumbs' => [
|
|
['title' => 'Главная', 'url' => '/'],
|
|
['title' => 'Админка', 'url' => '/admin/'],
|
|
['title' => 'Создание администратора'],
|
|
],
|
|
'canRun' => $canRun,
|
|
'hasAdmin' => $hasAdmin,
|
|
'token' => $actualToken,
|
|
'message' => $message,
|
|
'error' => $error,
|
|
]);
|