Initial commit - SOGOMS v1.0.0
- sogoctl: supervisor avec health checks et restart auto - sogoway: gateway HTTP, auth JWT, routing par hostname - sogoms-db: microservice MariaDB avec pool par application - Protocol IPC Unix socket JSON length-prefixed - Config YAML multi-application (prokov) - Deploy script pour container Alpine gw3 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
154
clients/prokov/api/controllers/AuthController.php
Normal file
154
clients/prokov/api/controllers/AuthController.php
Normal file
@@ -0,0 +1,154 @@
|
||||
<?php
|
||||
/**
|
||||
* Contrôleur d'authentification
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
class AuthController extends Controller
|
||||
{
|
||||
/**
|
||||
* POST /auth/register
|
||||
*/
|
||||
public function register(): void
|
||||
{
|
||||
$data = $this->validate([
|
||||
'email' => 'required|email|max:255',
|
||||
'password' => 'required|min:6|max:255',
|
||||
'name' => 'required|min:2|max:100',
|
||||
]);
|
||||
|
||||
$db = Database::getInstance();
|
||||
|
||||
// Vérifier si l'email existe déjà
|
||||
$stmt = $db->prepare('SELECT id FROM users WHERE email = :email');
|
||||
$stmt->execute(['email' => $data['email']]);
|
||||
|
||||
if ($stmt->fetch()) {
|
||||
Response::error('Cet email est déjà utilisé', 409);
|
||||
}
|
||||
|
||||
// Créer l'utilisateur
|
||||
$hashedPassword = password_hash($data['password'], PASSWORD_DEFAULT);
|
||||
|
||||
$stmt = $db->prepare('
|
||||
INSERT INTO users (email, password, name)
|
||||
VALUES (:email, :password, :name)
|
||||
');
|
||||
|
||||
$stmt->execute([
|
||||
'email' => $data['email'],
|
||||
'password' => $hashedPassword,
|
||||
'name' => $data['name'],
|
||||
]);
|
||||
|
||||
$userId = (int) $db->lastInsertId();
|
||||
|
||||
// Créer les statuts par défaut pour ce nouvel utilisateur
|
||||
$this->createDefaultStatuses($userId);
|
||||
|
||||
// Créer une session
|
||||
$sessionId = Session::create($userId);
|
||||
|
||||
Response::success([
|
||||
'session_id' => $sessionId,
|
||||
'user' => [
|
||||
'id' => $userId,
|
||||
'email' => $data['email'],
|
||||
'name' => $data['name'],
|
||||
],
|
||||
], 'Inscription réussie', 201);
|
||||
}
|
||||
|
||||
/**
|
||||
* POST /auth/login
|
||||
*/
|
||||
public function login(): void
|
||||
{
|
||||
$data = $this->validate([
|
||||
'email' => 'required|email',
|
||||
'password' => 'required',
|
||||
]);
|
||||
|
||||
$db = Database::getInstance();
|
||||
|
||||
$stmt = $db->prepare('SELECT id, email, name, password FROM users WHERE email = :email');
|
||||
$stmt->execute(['email' => $data['email']]);
|
||||
$user = $stmt->fetch();
|
||||
|
||||
if (!$user || !password_verify($data['password'], $user['password'])) {
|
||||
Response::error('Email ou mot de passe incorrect', 401);
|
||||
}
|
||||
|
||||
// Créer une session
|
||||
$sessionId = Session::create($user['id']);
|
||||
|
||||
Response::success([
|
||||
'session_id' => $sessionId,
|
||||
'user' => [
|
||||
'id' => $user['id'],
|
||||
'email' => $user['email'],
|
||||
'name' => $user['name'],
|
||||
],
|
||||
], 'Connexion réussie');
|
||||
}
|
||||
|
||||
/**
|
||||
* POST /auth/logout
|
||||
*/
|
||||
public function logout(): void
|
||||
{
|
||||
$sessionId = $this->request->getSessionId();
|
||||
|
||||
if ($sessionId) {
|
||||
Session::destroy($sessionId);
|
||||
}
|
||||
|
||||
Response::success(null, 'Déconnexion réussie');
|
||||
}
|
||||
|
||||
/**
|
||||
* GET /auth/me
|
||||
*/
|
||||
public function me(): void
|
||||
{
|
||||
$this->requireAuth();
|
||||
|
||||
Response::success([
|
||||
'user' => $this->user,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Créer les statuts par défaut pour un nouvel utilisateur
|
||||
*/
|
||||
private function createDefaultStatuses(int $userId): void
|
||||
{
|
||||
$db = Database::getInstance();
|
||||
|
||||
$defaultStatuses = [
|
||||
['code' => 10, 'name' => 'Backlog', 'color' => '#6B7280', 'position' => 10],
|
||||
['code' => 20, 'name' => 'À faire', 'color' => '#3B82F6', 'position' => 20],
|
||||
['code' => 30, 'name' => 'En cours', 'color' => '#F59E0B', 'position' => 30],
|
||||
['code' => 40, 'name' => 'À tester', 'color' => '#8B5CF6', 'position' => 40],
|
||||
['code' => 50, 'name' => 'Livré', 'color' => '#10B981', 'position' => 50],
|
||||
['code' => 60, 'name' => 'Terminé', 'color' => '#059669', 'position' => 60],
|
||||
['code' => 70, 'name' => 'Archivé', 'color' => '#9CA3AF', 'position' => 70],
|
||||
];
|
||||
|
||||
$stmt = $db->prepare('
|
||||
INSERT INTO statuses (user_id, project_id, code, name, color, position)
|
||||
VALUES (:user_id, NULL, :code, :name, :color, :position)
|
||||
');
|
||||
|
||||
foreach ($defaultStatuses as $status) {
|
||||
$stmt->execute([
|
||||
'user_id' => $userId,
|
||||
'code' => $status['code'],
|
||||
'name' => $status['name'],
|
||||
'color' => $status['color'],
|
||||
'position' => $status['position'],
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user