57 lines
1.4 KiB
PHP
57 lines
1.4 KiB
PHP
<?php
|
|
|
|
// login.php :: Handles logins and cookies.
|
|
|
|
require_once '../src/lib.php';
|
|
|
|
if (!file_exists('../.installed')) redirect('install.php');
|
|
|
|
match ($_GET['do'] ?? 'login') {
|
|
'login' => login(),
|
|
'logout' => logout()
|
|
};
|
|
|
|
function login()
|
|
{
|
|
if (checkcookies() !== false) redirect('index.php');
|
|
|
|
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
|
$form = validate($_POST, [
|
|
'username' => ['length:3-18', 'alpha-spaces'],
|
|
'password' => ['length:6-255'],
|
|
'remember' => ['bool']
|
|
]);
|
|
|
|
if (!$form['valid']) {
|
|
exit(ul_from_validate_errors($form['errors']));
|
|
}
|
|
|
|
$form = $form['data'];
|
|
|
|
$query = db()->query('SELECT id, username, password FROM users WHERE username = ? LIMIT 1;', [$form['username']]);
|
|
$row = $query->fetchArray(SQLITE3_ASSOC);
|
|
|
|
if ($row === false || !password_verify($_POST['password'] ?? '', $row['password']))
|
|
die("Invalid username or password. Please go back and try again.");
|
|
|
|
$expiretime = $form['remember'] ? time() + 31536000 : 0;
|
|
$rememberme = $form['remember'] ? 1 : 0;
|
|
$cookie = implode(' ', [$row['id'], $row['username'], $row['password'], $rememberme]);
|
|
|
|
set_cookie("dkgame", $cookie, $expiretime);
|
|
header("Location: index.php");
|
|
exit;
|
|
}
|
|
|
|
$page = gettemplate("login");
|
|
$title = "Log In";
|
|
display($page, $title, false, false, false, false);
|
|
}
|
|
|
|
|
|
function logout()
|
|
{
|
|
set_cookie("dkgame", "", -3600);
|
|
redirect('login.php?do=login');
|
|
}
|