X-Git-Url: http://git.shiar.net/minimedit.git/blobdiff_plain/28b42031be26e959ff042fdf6fc58ca0c66ccb40..1f8560a20d5d1aa8886688bd7553b8a8fd704fff:/auth.inc.php diff --git a/auth.inc.php b/auth.inc.php index ef80ecd..a2db9f3 100644 --- a/auth.inc.php +++ b/auth.inc.php @@ -1,4 +1,58 @@ dir = $dir; + $this->login = basename($dir); + } + + function __get($col) + { + return $this->$col = $this->$col(); # run method and cache + } + + function rawname() + { + return @file_get_contents("{$this->dir}/name.txt"); + } + + function name() + { + return htmlspecialchars(implode(' & ', explode("\n", $this->rawname))); + } + + function admin() + { + return @file_exists("{$this->dir}/.admin"); + } + + function seen() + { + return @filemtime("{$this->dir}/last.log"); + } +} + +function login_password_verify($input, $test) +{ + if (substr($test, 0, 1) != '$') { + # plaintext match for uncrypted passwords + return $input === $test; + } + return password_verify($input, $test); +} + +function login_setcookie() +{ + global $User; + return setcookie('login', $User['auth'], 0, '/'); +} + function login($inuser, $inpass = NULL) { if (empty($inuser)) return; @@ -7,7 +61,8 @@ function login($inuser, $inpass = NULL) } # find password data by user name - $pwfile = sprintf('login/%s/.passwd', strtolower($inuser)); + $userdir = 'profile/'.preg_replace('/[^a-z0-9]+/', '-', strtolower($inuser)); + $pwfile = "$userdir/.passwd"; if (!file_exists($pwfile)) return; $usertest = trim(file_get_contents($pwfile)); if (!$usertest) return; @@ -15,7 +70,7 @@ function login($inuser, $inpass = NULL) # verify password $authhash = md5($usertest); if (isset($inpass)) { - if (!password_verify($inpass, $usertest)) return; + if (!login_password_verify($inpass, $usertest)) return; } else { if ($inauth !== $authhash) return; @@ -23,9 +78,15 @@ function login($inuser, $inpass = NULL) if (function_exists('apache_note')) apache_note('user', $inuser); + if ($log = @fopen("$userdir/last.log", 'w')) { + fwrite($log, "{$_SERVER['REMOTE_ADDR']} {$_SERVER['HTTP_USER_AGENT']}\n"); + } + return [ 'name' => $inuser, - 'admin' => !empty($inuser) && strtolower($inuser) != 'lid', + 'dir' => $userdir, + 'admin' => file_exists("$userdir/.admin"), + 'pass' => $usertest, 'auth' => "$inuser:$authhash", ]; }