1<?php
2require_once __DIR__ . '/../includes/bootstrap.php';
3if ($USER) go('/');
4
5$err = '';
6$next = get('next', u('/'));
7
8if ($_SERVER['REQUEST_METHOD'] === 'POST') {
9 if (!csrf_ok()) { $err = 'Invalid request. Please try again.'; }
10 else {
11 $login = post('login');
12 $pass = post('password');
13 $row = DB::row('SELECT * FROM users WHERE username=? OR email=?', [$login, $login]);
14 if (!$row || !password_verify($pass, $row['password'])) {
15 $err = 'Incorrect username or password.';
16 } elseif ($row['suspended']) {
17 $err = 'This account has been suspended.';
18 } else {
19 login_user((int)$row['id']);
20 go(ltrim(str_replace(BASE, '', $next), '/') ?: '/');
21 }
22 }
23}
24?>
25<!DOCTYPE html>
26<html lang="en">
27<head>
28 <meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1">
29 <title>Log In — <?= e(cfg('site_name','Nexus Forum')) ?></title>
30 <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
31 <link rel="stylesheet" href="<?= asset('css/main.css') ?>">
32</head>
33<body class="auth-body">
34<div class="auth-page">
35 <div class="auth-card">
36 <a href="<?= u('/') ?>" class="auth-logo">
37 <div class="logo-mark"><?= e(substr(cfg('site_name','N'),0,1)) ?></div>
38 <span><?= e(cfg('site_name','Nexus Forum')) ?></span>
39 </a>
40 <h1>Welcome back</h1>
41 <p class="auth-sub">Sign in to your account</p>
42 <?php if ($err): ?><div class="alert err"><?= e($err) ?></div><?php endif; ?>
43 <form method="POST">
44 <?= csrf_input() ?>
45 <input type="hidden" name="next" value="<?= e($next) ?>">
46 <div class="fg">
47 <label for="login">Username or Email</label>
48 <input type="text" id="login" name="login" class="fi" required autofocus
49 value="<?= e($_POST['login'] ?? '') ?>" placeholder="your_username">
50 </div>
51 <div class="fg">
52 <label for="password">Password</label>
53 <div class="pw-row">
54 <input type="password" id="password" name="password" class="fi" required placeholder="••••••••">
55 <button type="button" class="pw-eye" onclick="togglePwd('password')">👁</button>
56 </div>
57 </div>
58 <button type="submit" class="btn-primary btn-block">Sign In</button>
59 </form>
60 <p class="auth-foot">No account? <a href="<?= u('auth/register.php') ?>">Sign up →</a></p>
61 </div>
62 <p class="auth-back"><a href="<?= u('/') ?>">← Back to forum</a></p>
63</div>
64<script>function togglePwd(id){var e=document.getElementById(id);e.type=e.type==='password'?'text':'password';}</script>
65</body></html>