diff --git a/apps/dav/composer/composer/autoload_classmap.php b/apps/dav/composer/composer/autoload_classmap.php index c010a3e98d6..69ba145f2a1 100644 --- a/apps/dav/composer/composer/autoload_classmap.php +++ b/apps/dav/composer/composer/autoload_classmap.php @@ -96,6 +96,8 @@ return array( 'OCA\\DAV\\CalDAV\\Outbox' => $baseDir . '/../lib/CalDAV/Outbox.php', 'OCA\\DAV\\CalDAV\\Plugin' => $baseDir . '/../lib/CalDAV/Plugin.php', 'OCA\\DAV\\CalDAV\\Principal\\Collection' => $baseDir . '/../lib/CalDAV/Principal/Collection.php', + 'OCA\\DAV\\CalDAV\\Principal\\ProxyRead' => $baseDir . '/../lib/CalDAV/Principal/ProxyRead.php', + 'OCA\\DAV\\CalDAV\\Principal\\ProxyWrite' => $baseDir . '/../lib/CalDAV/Principal/ProxyWrite.php', 'OCA\\DAV\\CalDAV\\Principal\\User' => $baseDir . '/../lib/CalDAV/Principal/User.php', 'OCA\\DAV\\CalDAV\\Proxy\\Proxy' => $baseDir . '/../lib/CalDAV/Proxy/Proxy.php', 'OCA\\DAV\\CalDAV\\Proxy\\ProxyMapper' => $baseDir . '/../lib/CalDAV/Proxy/ProxyMapper.php', diff --git a/apps/dav/composer/composer/autoload_static.php b/apps/dav/composer/composer/autoload_static.php index bdb965aab3e..7d406455c06 100644 --- a/apps/dav/composer/composer/autoload_static.php +++ b/apps/dav/composer/composer/autoload_static.php @@ -111,6 +111,8 @@ class ComposerStaticInitDAV 'OCA\\DAV\\CalDAV\\Outbox' => __DIR__ . '/..' . '/../lib/CalDAV/Outbox.php', 'OCA\\DAV\\CalDAV\\Plugin' => __DIR__ . '/..' . '/../lib/CalDAV/Plugin.php', 'OCA\\DAV\\CalDAV\\Principal\\Collection' => __DIR__ . '/..' . '/../lib/CalDAV/Principal/Collection.php', + 'OCA\\DAV\\CalDAV\\Principal\\ProxyRead' => __DIR__ . '/..' . '/../lib/CalDAV/Principal/ProxyRead.php', + 'OCA\\DAV\\CalDAV\\Principal\\ProxyWrite' => __DIR__ . '/..' . '/../lib/CalDAV/Principal/ProxyWrite.php', 'OCA\\DAV\\CalDAV\\Principal\\User' => __DIR__ . '/..' . '/../lib/CalDAV/Principal/User.php', 'OCA\\DAV\\CalDAV\\Proxy\\Proxy' => __DIR__ . '/..' . '/../lib/CalDAV/Proxy/Proxy.php', 'OCA\\DAV\\CalDAV\\Proxy\\ProxyMapper' => __DIR__ . '/..' . '/../lib/CalDAV/Proxy/ProxyMapper.php', diff --git a/apps/dav/lib/CalDAV/Principal/User.php b/apps/dav/lib/CalDAV/Principal/User.php index 047d83827ed..44231be2244 100644 --- a/apps/dav/lib/CalDAV/Principal/User.php +++ b/apps/dav/lib/CalDAV/Principal/User.php @@ -34,4 +34,44 @@ class User extends \Sabre\CalDAV\Principal\User { ]; return $acl; } + + /** + * Returns a specific child node, referenced by its name. + * + * @param string $name + * + * @return \Sabre\DAV\INode + */ + public function getChild($name) { + $principal = $this->principalBackend->getPrincipalByPath($this->getPrincipalURL() . '/' . $name); + if (!$principal) { + throw new \Sabre\DAV\Exception\NotFound("Node with name $name was not found"); + } + if ($name === 'calendar-proxy-read') { + return new ProxyRead($this->principalBackend, $this->principalProperties); + } + + if ($name === 'calendar-proxy-write') { + return new ProxyWrite($this->principalBackend, $this->principalProperties); + } + + throw new \Sabre\DAV\Exception\NotFound("Node with name $name was not found"); + } + + /** + * Returns an array with all the child nodes. + * + * @return \Sabre\DAV\INode[] + */ + public function getChildren() { + $r = []; + if ($this->principalBackend->getPrincipalByPath($this->getPrincipalURL() . '/calendar-proxy-read')) { + $r[] = new ProxyRead($this->principalBackend, $this->principalProperties); + } + if ($this->principalBackend->getPrincipalByPath($this->getPrincipalURL() . '/calendar-proxy-write')) { + $r[] = new ProxyWrite($this->principalBackend, $this->principalProperties); + } + + return $r; + } } diff --git a/apps/text/lib/Middleware/SessionMiddleware.php b/apps/text/lib/Middleware/SessionMiddleware.php index b291d9a66..a5d555f4a 100644 --- a/apps/text/lib/Middleware/SessionMiddleware.php +++ b/apps/text/lib/Middleware/SessionMiddleware.php @@ -122,15 +122,9 @@ class SessionMiddleware extends Middleware { */ private function assertUserOrShareToken(ISessionAwareController $controller): void { $documentId = (int)$this->request->getParam('documentId'); - if (null !== $userId = $this->userSession->getUser()?->getUID()) { - if ($this->rootFolder->getUserFolder($userId)->getFirstNodeById($documentId) !== null) { - $controller->setUserId($userId); - $controller->setDocumentId($documentId); - return; - } - } + $shareToken = (string)$this->request->getParam('shareToken'); - if ('' !== $shareToken = (string)$this->request->getParam('shareToken')) { + if ($shareToken !== '') { try { $share = $this->shareManager->getShareByToken($shareToken); } catch (ShareNotFound) { @@ -164,6 +158,14 @@ class SessionMiddleware extends Middleware { return; } + if (null !== $userId = $this->userSession->getUser()?->getUID()) { + if ($this->rootFolder->getUserFolder($userId)->getFirstNodeById($documentId) !== null) { + $controller->setUserId($userId); + $controller->setDocumentId($documentId); + return; + } + } + throw new InvalidSessionException(); }