login: store user data in /profile directory
[minimedit.git] / auth.inc.php
1 <?php
2 function login_password_verify($input, $test)
3 {
4         if (substr($test, 0, 1) != '$') {
5                 # plaintext match for uncrypted passwords
6                 return $input === $test;
7         }
8         return password_verify($input, $test);
9 }
10
11 function login_setcookie()
12 {
13         global $User;
14         return setcookie('login', $User['auth'], 0, '/');
15 }
16
17 function login($inuser, $inpass = NULL)
18 {
19         if (empty($inuser)) return;
20         if (!isset($inpass)) {
21                 @list ($inuser, $inauth) = explode(':', $inuser, 2);
22         }
23
24         # find password data by user name
25         $userdir = 'profile/'.strtolower($inuser);
26         $pwfile = "$userdir/.passwd";
27         if (!file_exists($pwfile)) return;
28         $usertest = trim(file_get_contents($pwfile));
29         if (!$usertest) return;
30
31         # verify password
32         $authhash = md5($usertest);
33         if (isset($inpass)) {
34                 if (!login_password_verify($inpass, $usertest)) return;
35         }
36         else {
37                 if ($inauth !== $authhash) return;
38         }
39
40         if (function_exists('apache_note')) apache_note('user', $inuser);
41
42         if ($log = @fopen("$userdir/last.log", 'w')) {
43                 fwrite($log, "{$_SERVER['REMOTE_ADDR']} {$_SERVER['HTTP_USER_AGENT']}\n");
44         }
45
46         return [
47                 'name'  => $inuser,
48                 'dir'   => $userdir,
49                 'admin' => file_exists("$userdir/.admin"),
50                 'pass'  => $usertest,
51                 'auth'  => "$inuser:$authhash",
52         ];
53 }
54
55 if (isset($_COOKIE['login'])) {
56         global $User;
57         $User = login($_COOKIE['login']);
58 }
59