page: include controllers from index.php
[minimedit.git] / login / pass / index.php
diff --git a/login/pass/index.php b/login/pass/index.php
new file mode 100644 (file)
index 0000000..1494e37
--- /dev/null
@@ -0,0 +1,90 @@
+<?php
+if (isset($_GET['token'])) {
+       @list ($username, $token) = explode(':', $_GET['token']);
+       $userdir = strtolower("profile/$username");
+       if ($verify = @file_get_contents("$userdir/.token")
+       and $verify == $token) {
+               $User = [
+                       'name' => $username,
+                       'dir'  => $userdir,
+                       'pass' => NULL,
+               ];
+       }
+       else {
+               print "<p class=warn>Code onjuist, geen toestemming om wachtwoord in te stellen.</p>\n";
+               return TRUE;
+       }
+}
+elseif (!$User) {
+       http_response_code(303);
+       $target = urlencode($_SERVER['REQUEST_URI']);
+       header("Location: /login?goto=$target");
+       exit;
+}
+
+if ($_POST) {
+       $error = passform($_POST);
+       if (empty($error)) {
+               print "<p>Het wachtwoord is aangepast. Voortaan met het nieuwe wachtwoord inloggen.</p>\n\n";
+               return;
+       }
+       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'])) { ?>
+<input type="password" name="oldpass" value="" placeholder="Huidig wachtwoord" />
+<?php } ?>
+<input type="password" name="newpass" value="" placeholder="Nieuw wachtwoord" />
+<input type="submit" value="Wijzig" />
+</p>
+</form>