karadav/lib/KaraDAV/NextCloud.php
2022-09-30 01:39:24 +02:00

87 lines
1.6 KiB
PHP

<?php
namespace KaraDAV;
use KD2\WebDAV\NextCloud as WebDAV_NextCloud;
class NextCloud extends WebDAV_NextCloud
{
protected Users $users;
public function __construct(Users $users)
{
$this->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);
}
}