X-Git-Url: http://git.shiar.net/minimedit.git/blobdiff_plain/5b94cc8fb8d15c44eb5223f262d091b0fe286944..HEAD:/auth.inc.php diff --git a/auth.inc.php b/auth.inc.php index 7ece635..34c83db 100644 --- a/auth.inc.php +++ b/auth.inc.php @@ -3,13 +3,18 @@ date_default_timezone_set('Europe/Amsterdam'); class User { - function __construct($dir, $existing = TRUE) + public $dir, $login; + + function __construct($dir = NULL, $existing = TRUE) { + if (empty($dir)) { + return; + } if (!file_exists($dir) and $existing) { throw new Exception("Gebruiker niet gevonden in $dir"); } $this->dir = $dir; - $this->login = basename($dir); + $this->login = preg_replace('{.*/}', '', $dir); } function __get($col) @@ -29,7 +34,11 @@ class User function html() { - return $this->name ?: $this->login; + $name = htmlspecialchars($this->login); + if ($this->name and $this->name != $name) { + $name = "{$this->name} @$name"; + } + return $name; } function email() @@ -43,13 +52,15 @@ class User if (!$this->admin) { return FALSE; # empty results } - @list ($rootlevel, $sublevel) = explode(' ', $permission); - if ($sublevel and isset($this->admin[$rootlevel])) { - return TRUE; # root match + preg_match_all('{[ /]}', $permission, $parts, PREG_OFFSET_CAPTURE); + foreach ($parts[0] as $part) { + if (isset($this->admin[substr($permission, 0, $part[1])])) { + return TRUE; # partial match + } } return isset($this->admin[$permission]); # check level } - if (!@file_exists("{$this->dir}/.admin")) { + if (!$this->dir or !@file_exists("{$this->dir}/.admin")) { return FALSE; # not an admin } return array_fill_keys(explode("\n", file_get_contents("{$this->dir}/.admin")), TRUE); @@ -116,8 +127,11 @@ function login($inuser, $inpass = NULL) return $user; } +global $User; if (isset($_COOKIE['login'])) { - global $User; $User = login($_COOKIE['login']); } +if (!$User) { + $User = new User; +}