prepare("SELECT * FROM users WHERE username = ? AND status = 'active'"); $stmt->execute([$username]); $user = $stmt->fetch(); if ($user && password_verify($password, $user['password'])) { // Regeneruj ID sesji dla bezpieczeństwa session_regenerate_id(true); $_SESSION['user_id'] = $user['id']; $_SESSION['username'] = $user['username']; $_SESSION['role'] = $user['role']; $_SESSION['logged_in'] = true; $_SESSION['last_activity'] = time(); // Aktualizuj ostatnie logowanie $updateStmt = $db->prepare("UPDATE users SET last_login = NOW() WHERE id = ?"); $updateStmt->execute([$user['id']]); logActivity('login'); return ['success' => true, 'user' => $user]; } return ['success' => false, 'message' => 'Nieprawidłowa nazwa użytkownika lub hasło']; } // Wylogowanie użytkownika function logout() { logActivity('logout'); $_SESSION = []; if (isset($_COOKIE[session_name()])) { setcookie(session_name(), '', time() - 3600, '/'); } session_destroy(); } // Sprawdzenie czy użytkownik jest zalogowany function isLoggedIn() { if (!isset($_SESSION['logged_in']) || $_SESSION['logged_in'] !== true) { return false; } // Sprawdź timeout sesji if (isset($_SESSION['last_activity']) && (time() - $_SESSION['last_activity'] > SESSION_LIFETIME)) { logout(); return false; } $_SESSION['last_activity'] = time(); return true; } // Sprawdzenie roli użytkownika function hasRole($role) { if (!isLoggedIn()) { return false; } $roles = ['user' => 1, 'editor' => 2, 'admin' => 3]; $userRole = $_SESSION['role'] ?? 'user'; return $roles[$userRole] >= $roles[$role]; } // Wymuszenie logowania function requireLogin() { if (!isLoggedIn()) { header('Location: ' . ADMIN_URL . '/login.php'); exit; } } // Wymuszenie roli function requireRole($role) { requireLogin(); if (!hasRole($role)) { http_response_code(403); die('Brak uprawnień do tej strony'); } } // Rejestracja nowego użytkownika function register($username, $email, $password) { $db = getDB(); // Sprawdź czy rejestracja jest włączona if (!getSetting('allow_registration', '0')) { return ['success' => false, 'message' => 'Rejestracja jest wyłączona']; } // Walidacja if (strlen($username) < 3) { return ['success' => false, 'message' => 'Nazwa użytkownika musi mieć co najmniej 3 znaki']; } if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { return ['success' => false, 'message' => 'Nieprawidłowy adres email']; } if (strlen($password) < 6) { return ['success' => false, 'message' => 'Hasło musi mieć co najmniej 6 znaków']; } // Sprawdź czy użytkownik już istnieje $stmt = $db->prepare("SELECT id FROM users WHERE username = ? OR email = ?"); $stmt->execute([$username, $email]); if ($stmt->fetch()) { return ['success' => false, 'message' => 'Użytkownik o tej nazwie lub emailu już istnieje']; } // Hashuj hasło $hashedPassword = password_hash($password, HASH_ALGO); // Dodaj użytkownika $stmt = $db->prepare(" INSERT INTO users (username, email, password, role) VALUES (?, ?, ?, 'user') "); if ($stmt->execute([$username, $email, $hashedPassword])) { logActivity('user_registered', 'user', $db->lastInsertId()); return ['success' => true, 'message' => 'Rejestracja zakończona pomyślnie']; } return ['success' => false, 'message' => 'Wystąpił błąd podczas rejestracji']; } // Zmiana hasła function changePassword($userId, $oldPassword, $newPassword) { $db = getDB(); $stmt = $db->prepare("SELECT password FROM users WHERE id = ?"); $stmt->execute([$userId]); $user = $stmt->fetch(); if (!$user || !password_verify($oldPassword, $user['password'])) { return ['success' => false, 'message' => 'Nieprawidłowe aktualne hasło']; } if (strlen($newPassword) < 6) { return ['success' => false, 'message' => 'Nowe hasło musi mieć co najmniej 6 znaków']; } $hashedPassword = password_hash($newPassword, HASH_ALGO); $stmt = $db->prepare("UPDATE users SET password = ? WHERE id = ?"); if ($stmt->execute([$hashedPassword, $userId])) { logActivity('password_changed'); return ['success' => true, 'message' => 'Hasło zostało zmienione']; } return ['success' => false, 'message' => 'Nie udało się zmienić hasła']; } // Pobierz aktualnego użytkownika function getCurrentUser() { if (!isLoggedIn()) { return null; } $db = getDB(); $stmt = $db->prepare("SELECT * FROM users WHERE id = ?"); $stmt->execute([$_SESSION['user_id']]); return $stmt->fetch(); } // CSRF Token function generateCSRFToken() { if (!isset($_SESSION['csrf_token'])) { $_SESSION['csrf_token'] = bin2hex(random_bytes(32)); } return $_SESSION['csrf_token']; } function validateCSRFToken($token) { return isset($_SESSION['csrf_token']) && hash_equals($_SESSION['csrf_token'], $token); } ?>