users = $users; } public function auth(?string $login, ?string $password): bool { $user = $this->users->appSessionLogin($login, $password); if (!$user) { return false; } $this->user = $user; return true; } public function getUserName(): ?string { return $this->users->current()->login ?? null; } public function setUserName(string $login): bool { $ok = $this->users->setCurrent($login); if ($ok) { $this->user = $this->users->current(); } return $ok; } public function getUserQuota(): array { return (array) $this->users->quota($this->users->current()); } public function generateToken(): string { return sha1(random_bytes(16)); } public function validateToken(string $token): ?array { $session = $this->users->appSessionValidateToken($token); if (!$session) { return null; } return ['login' => $session->user, 'password' => $session->password]; } public function getLoginURL(?string $token): string { if ($token) { return sprintf('%slogin.php?nc=%s', WWW_URL, $token); } else { return sprintf('%slogin.php?nc=redirect', WWW_URL); } } public function getDirectDownloadSecret(string $uri, string $login): string { $user = $this->users->get($login); if (!$user) { throw new WebDAV_Exception('No user with that name', 401); } return hash('sha256', $uri . $user->login . $user->password); } }