mirror of
https://github.com/nextcloud/server.git
synced 2025-02-06 01:20:16 +00:00
381077028a
Signed-off-by: provokateurin <kate@provokateurin.de>
89 lines
2.2 KiB
PHP
89 lines
2.2 KiB
PHP
<?php
|
|
|
|
/**
|
|
* SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors
|
|
* SPDX-FileCopyrightText: 2016 ownCloud, Inc.
|
|
* SPDX-License-Identifier: AGPL-3.0-only
|
|
*/
|
|
namespace OCA\DAV\Upload;
|
|
|
|
use OC\Files\Filesystem;
|
|
use OC\Files\View;
|
|
use OCA\DAV\Connector\Sabre\Directory;
|
|
use Sabre\DAV\Exception\Forbidden;
|
|
use Sabre\DAV\ICollection;
|
|
|
|
class UploadHome implements ICollection {
|
|
public function __construct(
|
|
private array $principalInfo,
|
|
private CleanupService $cleanupService,
|
|
) {
|
|
}
|
|
|
|
public function createFile($name, $data = null) {
|
|
throw new Forbidden('Permission denied to create file (filename ' . $name . ')');
|
|
}
|
|
|
|
public function createDirectory($name) {
|
|
$this->impl()->createDirectory($name);
|
|
|
|
// Add a cleanup job
|
|
$this->cleanupService->addJob($name);
|
|
}
|
|
|
|
public function getChild($name): UploadFolder {
|
|
return new UploadFolder($this->impl()->getChild($name), $this->cleanupService, $this->getStorage());
|
|
}
|
|
|
|
public function getChildren(): array {
|
|
return array_map(function ($node) {
|
|
return new UploadFolder($node, $this->cleanupService, $this->getStorage());
|
|
}, $this->impl()->getChildren());
|
|
}
|
|
|
|
public function childExists($name): bool {
|
|
return !is_null($this->getChild($name));
|
|
}
|
|
|
|
public function delete() {
|
|
$this->impl()->delete();
|
|
}
|
|
|
|
public function getName() {
|
|
[,$name] = \Sabre\Uri\split($this->principalInfo['uri']);
|
|
return $name;
|
|
}
|
|
|
|
public function setName($name) {
|
|
throw new Forbidden('Permission denied to rename this folder');
|
|
}
|
|
|
|
public function getLastModified() {
|
|
return $this->impl()->getLastModified();
|
|
}
|
|
|
|
/**
|
|
* @return Directory
|
|
*/
|
|
private function impl() {
|
|
$view = $this->getView();
|
|
$rootInfo = $view->getFileInfo('');
|
|
return new Directory($view, $rootInfo);
|
|
}
|
|
|
|
private function getView() {
|
|
$rootView = new View();
|
|
$user = \OC::$server->getUserSession()->getUser();
|
|
Filesystem::initMountPoints($user->getUID());
|
|
if (!$rootView->file_exists('/' . $user->getUID() . '/uploads')) {
|
|
$rootView->mkdir('/' . $user->getUID() . '/uploads');
|
|
}
|
|
return new View('/' . $user->getUID() . '/uploads');
|
|
}
|
|
|
|
private function getStorage() {
|
|
$view = $this->getView();
|
|
$storage = $view->getFileInfo('')->getStorage();
|
|
return $storage;
|
|
}
|
|
}
|