auth: store global user metadata in User object
[minimedit.git] / login / pass / index.php
index 1494e37415057395692d9fa77d39e2764e3104d2..735770a791cb7aea185d287b1b4880301bbca7b3 100644 (file)
@@ -4,13 +4,11 @@ if (isset($_GET['token'])) {
        $userdir = strtolower("profile/$username");
        if ($verify = @file_get_contents("$userdir/.token")
        and $verify == $token) {
-               $User = [
-                       'name' => $username,
-                       'dir'  => $userdir,
-                       'pass' => NULL,
-               ];
+               $User = new User($userdir);
+               $User->pass = NULL;
        }
        else {
+               http_response_code(403);
                print "<p class=warn>Code onjuist, geen toestemming om wachtwoord in te stellen.</p>\n";
                return TRUE;
        }
@@ -23,68 +21,28 @@ elseif (!$User) {
 }
 
 if ($_POST) {
-       $error = passform($_POST);
+       require_once('login/pass.inc.php');
+       $error = passform($User, $_POST);
        if (empty($error)) {
-               print "<p>Het wachtwoord is aangepast. Voortaan met het nieuwe wachtwoord inloggen.</p>\n\n";
+               print "<p>Het wachtwoord is aangepast voor <em>{$User->login}</em>. Voortaan met het nieuwe wachtwoord inloggen.</p>\n\n";
                return;
        }
+       http_response_code(400);
        print "<p class=warn>$error</p>\n\n";
 }
 
-function passform($input = [])
-{
-       global $User;
-
-       if (empty($User)) {
-               return "Log eerst (opnieuw?) in.";
-       }
-
-       $pwfile = "{$User['dir']}/.passwd";
-       if (!is_writable($pwfile)) {
-               return "Het wachtwoord kan niet worden aangepast voor deze gebruiker.";
-       }
-
-       if (!empty($User['pass'])) {
-               if (empty($_POST['oldpass'])) {
-                       return "Als extra beveiliging tegen ongewenste aanpassingen moet het bestaande wachtwoord worden ingevoerd.";
-               }
-
-               if (!login_password_verify($_POST['oldpass'], $User['pass'])) {
-                       return "Het bestaande wachtwoord is onjuist ingevoerd; niet aangepast.";
-               }
-       }
-
-       if (empty($_POST['newpass'])) {
-               return "Geef een nieuw wachtwoord op.";
-       }
-
-       if (strlen($_POST['newpass']) < 4) {
-               return "Zo'n kort wachtwoord is een slecht idee.";
-       }
-
-       if ($_POST['newpass'] == $User['name']) {
-               return "De loginnaam is wel heel makkelijk raadbaar als wachtwoord.";
-       }
-
-       if (!file_put_contents($pwfile, $_POST['newpass'])) {
-               return "Het nieuwe wachtwoord kon niet worden opgeslagen. Het oude wachtwoord is behouden.";
-       }
-
-       @unlink("{$User['dir']}/.token"); # invalidate reset token
-
-       $authhash = md5($_POST['newpass']);
-       $User['auth'] = "{$User['name']}:$authhash";
-       login_setcookie();
-       return;
-}
-
 ?>
 <form method="post">
 <p>
-<?php if (!empty($User['pass'])) { ?>
+Hier kun je een nieuwe inlogcode instellen voor <em><?= htmlspecialchars($User->login) ?></em>.
+Dit zal de huidige code vervangen.
+</p>
+<p>
+<?php if ($User and strlen($User->pass)) { ?>
 <input type="password" name="oldpass" value="" placeholder="Huidig wachtwoord" />
 <?php } ?>
 <input type="password" name="newpass" value="" placeholder="Nieuw wachtwoord" />
+<input type="password" name="passconf" value="" placeholder="Nogmaals" />
 <input type="submit" value="Wijzig" />
 </p>
 </form>