--- /dev/null
+<?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;
+}
+