1 <?php 2 require_once __DIR__ . '/../includes/bootstrap.php'; 3 if ($USER) go('/'); 4 5 $err = ''; 6 $next = get('next', u('/')); 7 8 if ($_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>