nieuws: blockquote containers around replies
[minimedit.git] / auth.inc.php
1 <?php
2 date_default_timezone_set('Europe/Amsterdam');
3
4 class User
5 {
6         function __construct($dir)
7         {
8                 if (!file_exists($dir)) {
9                         throw new Exception("Gebruiker niet gevonden in $dir");
10                 }
11                 $this->dir = $dir;
12                 $this->login = basename($dir);
13         }
14
15         function __get($col)
16         {
17                 return $this->$col = $this->$col();  # run method and cache
18         }
19
20         function rawname()
21         {
22                 return rtrim(@file_get_contents("{$this->dir}/name.txt"));
23         }
24
25         function name()
26         {
27                 return htmlspecialchars(implode(' & ', explode("\n", $this->rawname)));
28         }
29
30         function admin()
31         {
32                 return @file_exists("{$this->dir}/.admin");
33         }
34
35         function seen()
36         {
37                 return @filemtime("{$this->dir}/last.log");
38         }
39 }
40
41 function login_password_verify($input, $test)
42 {
43         if (substr($test, 0, 1) != '$') {
44                 # plaintext match for uncrypted passwords
45                 return $input === $test;
46         }
47         return password_verify($input, $test);
48 }
49
50 function login_setcookie()
51 {
52         global $User;
53         return setcookie('login', $User['auth'], 0, '/');
54 }
55
56 function login($inuser, $inpass = NULL)
57 {
58         if (empty($inuser)) return;
59         if (!isset($inpass)) {
60                 @list ($inuser, $inauth) = explode(':', $inuser, 2);
61         }
62
63         # find password data by user name
64         $userdir = 'profile/'.preg_replace('/[^a-z0-9]+/', '-', strtolower($inuser));
65         $pwfile = "$userdir/.passwd";
66         if (!file_exists($pwfile)) return;
67         $usertest = trim(file_get_contents($pwfile));
68         if (!$usertest) return;
69
70         # verify password
71         $authhash = md5($usertest);
72         if (isset($inpass)) {
73                 if (!login_password_verify($inpass, $usertest)) return;
74         }
75         else {
76                 if ($inauth !== $authhash) return;
77         }
78
79         if (function_exists('apache_note')) apache_note('user', $inuser);
80
81         if ($log = @fopen("$userdir/last.log", 'w')) {
82                 fwrite($log, "{$_SERVER['REMOTE_ADDR']} {$_SERVER['HTTP_USER_AGENT']}\n");
83         }
84
85         return [
86                 'name'  => $inuser,
87                 'dir'   => $userdir,
88                 'admin' => file_exists("$userdir/.admin"),
89                 'pass'  => $usertest,
90                 'auth'  => "$inuser:$authhash",
91         ];
92 }
93
94 if (isset($_COOKIE['login'])) {
95         global $User;
96         $User = login($_COOKIE['login']);
97 }
98