login/pass: separate include to parse user input
authorMischa POSLAWSKY <perl@shiar.org>
Sat, 9 Jun 2018 06:35:51 +0000 (08:35 +0200)
committerMischa POSLAWSKY <perl@shiar.org>
Thu, 14 Jun 2018 12:45:18 +0000 (14:45 +0200)
Allow reuse with different form input.

login/pass.inc.php [new file with mode: 0644]
login/pass/index.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;
+}
+
index 1494e37415057395692d9fa77d39e2764e3104d2..ec87cf5dc4c98f516260f55ee79162e69dbadc55 100644 (file)
@@ -23,7 +23,8 @@ 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";
                return;
@@ -31,53 +32,6 @@ if ($_POST) {
        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>