Files
mirivlad e7732f5cee Итерация 1: каркас Slim 4 приложения
- Slim 4 + php-di контейнер с маршрутизацией
- Docker Compose: app (PHP 8.3-FPM) + web (nginx) + db (MariaDB)
- Phinx миграция: таблица users (uuid, username, password_hash)
- Auth: login/logout с сессиями
- Setup: создание первого пользователя
- Dashboard с layout (Bootstrap 5.3)
- CLI: bin/console, bin/run-scan-worker.php
- Smoke test: scripts/check.sh
- README.md, PLAN.md
2026-05-26 07:26:55 +08:00

58 lines
1.5 KiB
Plaintext
Executable File

<?php
declare(strict_types=1);
require dirname(__DIR__) . '/vendor/autoload.php';
use Domovoy\Services\AuthService;
use Domovoy\Repositories\UserRepository;
$dotenv = \Dotenv\Dotenv::createImmutable(dirname(__DIR__));
$dotenv->safeLoad();
$pdo = new PDO(
sprintf(
'mysql:host=%s;port=%d;dbname=%s;charset=utf8mb4',
getenv('DB_HOST') ?: 'db',
getenv('DB_PORT') ?: 3306,
getenv('DB_DATABASE') ?: 'domovoy'
),
getenv('DB_USERNAME') ?: 'domovoy',
getenv('DB_PASSWORD') ?: 'domovoy',
[
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
]
);
$authService = new AuthService(new UserRepository($pdo));
$command = $argv[1] ?? 'help';
switch ($command) {
case 'setup:user':
if ($argv[2] ?? false) {
// CLI mode: bin/console setup:user username password
$username = $argv[2];
$password = $argv[3] ?? 'password123';
} else {
// Interactive mode
echo "Username: ";
$username = trim(fgets(STDIN));
echo "Password: ";
$password = trim(fgets(STDIN));
}
$user = $authService->createUser($username, $password);
echo "User '{$user->username}' created successfully.\n";
break;
case 'help':
default:
echo "Domovoy CLI\n\n";
echo "Commands:\n";
echo " setup:user [username] [password] Create first admin user\n";
echo " help Show this help\n";
break;
}