login/pass: separate include to parse user input
[minimedit.git] / login / pass.inc.php
diff --git a/login/pass.inc.php b/login/pass.inc.php
new file mode 100644 (file)
index 0000000..2b4665c
--- /dev/null
@@ -0,0 +1,46 @@
+<?php
+function passform($user, $input = [])
+{
+       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($input['oldpass'])) {
+                       return "Als extra beveiliging tegen ongewenste aanpassingen moet het bestaande wachtwoord worden ingevoerd.";
+               }
+
+               if (!login_password_verify($input['oldpass'], $user['pass'])) {
+                       return "Het bestaande wachtwoord is onjuist ingevoerd; niet aangepast.";
+               }
+       }
+
+       if (empty($input['newpass'])) {
+               return "Geef een nieuw wachtwoord op.";
+       }
+
+       if (strlen($input['newpass']) < 4) {
+               return "Zo'n kort wachtwoord is een slecht idee.";
+       }
+
+       if ($input['newpass'] == $user['name']) {
+               return "De loginnaam is wel heel makkelijk raadbaar als wachtwoord.";
+       }
+
+       if (!file_put_contents($pwfile, $input['newpass'])) {
+               return "Het nieuwe wachtwoord kon niet worden opgeslagen. Het oude wachtwoord is behouden.";
+       }
+
+       @unlink("{$user['dir']}/.token"); # invalidate reset token
+
+       $authhash = md5($input['newpass']);
+       $user['auth'] = "{$user['name']}:$authhash";
+       login_setcookie();
+       return;
+}
+