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