auth: store global user metadata in User object
[minimedit.git] / login / pass.inc.php
1 <?php
2 function passform(&$user, $input = [])
3 {
4         if (empty($user)) {
5                 return "Log eerst (opnieuw?) in.";
6         }
7
8         $pwfile = "{$user->dir}/.passwd";
9         if (file_exists($pwfile) and !is_writable($pwfile)) {
10                 return "Het wachtwoord kan niet worden aangepast voor deze gebruiker.";
11         }
12
13         if (!empty($user->pass)) {
14                 if (empty($input['oldpass'])) {
15                         return "Als extra beveiliging tegen ongewenste aanpassingen moet het bestaande wachtwoord worden ingevoerd.";
16                 }
17
18                 if (!login_password_verify($input['oldpass'], $user->pass)) {
19                         return "Het bestaande wachtwoord is onjuist ingevoerd; niet aangepast.";
20                 }
21         }
22
23         if (empty($input['newpass'])) {
24                 return "Geef een nieuw wachtwoord op.";
25         }
26
27         if (strlen($input['newpass']) < 4) {
28                 return "Zo'n kort wachtwoord is een slecht idee.";
29         }
30
31         if ($input['newpass'] == $user->login) {
32                 return "De loginnaam is wel heel makkelijk raadbaar als wachtwoord.";
33         }
34
35         if ($input['newpass'] != $input['passconf']) {
36                 return "Zorg dat bij de bevestiging precies het zelfde wachtwoord staat.";
37         }
38
39         $passstore = password_hash($input['newpass'], PASSWORD_DEFAULT);
40         if (empty($passstore) or !file_put_contents($pwfile, $passstore)) {
41                 return "Het nieuwe wachtwoord kon niet worden opgeslagen. Het oude wachtwoord is behouden.";
42         }
43
44         @unlink("{$user->dir}/.token"); # invalidate reset token
45
46         $authhash = md5($passstore);
47         $user->auth = "{$user->login}:$authhash";
48         if ($GLOBALS['User'] === $user) {
49                 login_setcookie();
50         }
51         return;
52 }
53