78 lines
1.7 KiB
PHP
78 lines
1.7 KiB
PHP
<?php
|
|
|
|
function load_env($path)
|
|
{
|
|
$vars = [];
|
|
if (!file_exists($path)) {
|
|
return $vars;
|
|
}
|
|
|
|
$lines = file($path, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
|
|
foreach ($lines as $line) {
|
|
if (strpos(trim($line), '#') === 0) {
|
|
continue;
|
|
}
|
|
|
|
list($name, $value) = explode('=', $line, 2);
|
|
$name = trim($name);
|
|
$value = trim($value);
|
|
|
|
$vars[$name] = $value;
|
|
}
|
|
return $vars;
|
|
}
|
|
|
|
function login(string $username, string $password): bool
|
|
{
|
|
$pdo = db();
|
|
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = ?");
|
|
$stmt->execute([$username]);
|
|
$user = $stmt->fetch();
|
|
|
|
if ($user && password_verify($password, $user['password'])) {
|
|
$_SESSION['user_id'] = $user['id'];
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
function logout(): void
|
|
{
|
|
$_SESSION = [];
|
|
session_destroy();
|
|
}
|
|
|
|
function is_logged_in(): bool
|
|
{
|
|
return isset($_SESSION['user_id']);
|
|
}
|
|
|
|
function require_login(): void
|
|
{
|
|
if (!is_logged_in()) {
|
|
header('Location: /admin/login.php');
|
|
exit;
|
|
}
|
|
}
|
|
|
|
function register(string $name, string $username, string $email, string $password): int|false
|
|
{
|
|
$pdo = db();
|
|
$hashed_password = password_hash($password, PASSWORD_DEFAULT);
|
|
|
|
$stmt = $pdo->prepare("INSERT INTO users (name, username, email, password) VALUES (?, ?, ?, ?)");
|
|
try {
|
|
$stmt->execute([$name, $username, $email, $hashed_password]);
|
|
return (int)$pdo->lastInsertId();
|
|
} catch (PDOException $e) {
|
|
// 1062 is the error code for duplicate entry
|
|
if ($e->errorInfo[1] == 1062) {
|
|
return false;
|
|
}
|
|
throw $e;
|
|
}
|
|
}
|
|
|
|
|