87 lines
1.6 KiB
PHP
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);
|
|
}
|
|
}
|