summaryrefslogtreecommitdiffstats
path: root/apps/dav/lib/Avatars
diff options
context:
space:
mode:
authorThomas Müller <thomas.mueller@tmit.eu>2016-12-23 12:12:38 +0100
committerRoeland Jago Douma <roeland@famdouma.nl>2017-03-29 00:04:29 +0200
commit23aab05bdaaaff8310cad64ff028bc7a53656f5a (patch)
tree740ea5687fab84d77fe622ef236fcac2c9054483 /apps/dav/lib/Avatars
parent4821c00ea81797fcb5a99c31105ad42be598f113 (diff)
downloadnextcloud-server-23aab05bdaaaff8310cad64ff028bc7a53656f5a.tar.gz
nextcloud-server-23aab05bdaaaff8310cad64ff028bc7a53656f5a.zip
Adding dav resource for avatars
Signed-off-by: Morris Jobke <hey@morrisjobke.de>
Diffstat (limited to 'apps/dav/lib/Avatars')
-rw-r--r--apps/dav/lib/Avatars/AvatarHome.php107
-rw-r--r--apps/dav/lib/Avatars/AvatarNode.php93
-rw-r--r--apps/dav/lib/Avatars/RootCollection.php28
3 files changed, 228 insertions, 0 deletions
diff --git a/apps/dav/lib/Avatars/AvatarHome.php b/apps/dav/lib/Avatars/AvatarHome.php
new file mode 100644
index 00000000000..d3fb2b95f34
--- /dev/null
+++ b/apps/dav/lib/Avatars/AvatarHome.php
@@ -0,0 +1,107 @@
+<?php
+/**
+ * @author Thomas Müller <thomas.mueller@tmit.eu>
+ *
+ * @copyright Copyright (c) 2016, ownCloud GmbH
+ * @license AGPL-3.0
+ *
+ * This code is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License, version 3,
+ * along with this program. If not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+
+namespace OCA\DAV\Avatars;
+
+
+use Sabre\DAV\Exception\Forbidden;
+use Sabre\DAV\Exception\MethodNotAllowed;
+use Sabre\DAV\Exception\NotFound;
+use Sabre\DAV\ICollection;
+use Sabre\HTTP\URLUtil;
+
+class AvatarHome implements ICollection {
+ private $principalInfo;
+
+ /**
+ * AvatarHome constructor.
+ *
+ * @param array $principalInfo
+ */
+ public function __construct($principalInfo) {
+ $this->principalInfo = $principalInfo;
+ }
+
+ function createFile($name, $data = null) {
+ throw new Forbidden('Permission denied to create a file');
+ }
+
+ function createDirectory($name) {
+ throw new Forbidden('Permission denied to create a folder');
+ }
+
+ function getChild($name) {
+ $elements = pathinfo($name);
+ $ext = isset($elements['extension']) ? $elements['extension'] : '';
+ $size = intval(isset($elements['filename']) ? $elements['filename'] : '64');
+ if (!in_array($ext, ['jpeg', 'png'])) {
+ throw new MethodNotAllowed('File format not allowed');
+ }
+ if ($size <= 0 || $size > 1024) {
+ throw new MethodNotAllowed('Invalid image size');
+ }
+ $avatar = \OC::$server->getAvatarManager()->getAvatar($this->getName());
+ if (!$avatar->exists()) {
+ throw new NotFound();
+ }
+ return new AvatarNode($size, $ext, $avatar);
+ }
+
+ function getChildren() {
+ try {
+ return [
+ $this->getChild('96.jpeg')
+ ];
+ } catch(NotFound $exception) {
+ return [];
+ }
+ }
+
+ function childExists($name) {
+ $ret = $this->getChild($name);
+ return !is_null($ret);
+ }
+
+ function delete() {
+ throw new Forbidden('Permission denied to delete this folder');
+ }
+
+ function getName() {
+ list(,$name) = URLUtil::splitPath($this->principalInfo['uri']);
+ return $name;
+ }
+
+ function setName($name) {
+ throw new Forbidden('Permission denied to rename this folder');
+ }
+
+ /**
+ * Returns the last modification time, as a unix timestamp
+ *
+ * @return int
+ */
+ function getLastModified() {
+ return null;
+ }
+
+
+}
diff --git a/apps/dav/lib/Avatars/AvatarNode.php b/apps/dav/lib/Avatars/AvatarNode.php
new file mode 100644
index 00000000000..0f2bfe1da43
--- /dev/null
+++ b/apps/dav/lib/Avatars/AvatarNode.php
@@ -0,0 +1,93 @@
+<?php
+/**
+ * @author Thomas Müller <thomas.mueller@tmit.eu>
+ *
+ * @copyright Copyright (c) 2016, ownCloud GmbH
+ * @license AGPL-3.0
+ *
+ * This code is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License, version 3,
+ * along with this program. If not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+
+namespace OCA\DAV\Avatars;
+
+
+use OCA\DAV\IPublicNode;
+use OCP\IAvatar;
+use Sabre\DAV\File;
+
+class AvatarNode extends File {
+ private $ext;
+ private $size;
+ private $avatar;
+
+ /**
+ * AvatarNode constructor.
+ *
+ * @param integer $size
+ * @param string $ext
+ * @param IAvatar $avatar
+ */
+ public function __construct($size, $ext, $avatar) {
+ $this->size = $size;
+ $this->ext = $ext;
+ $this->avatar = $avatar;
+ }
+
+ /**
+ * Returns the name of the node.
+ *
+ * This is used to generate the url.
+ *
+ * @return string
+ */
+ function getName() {
+ return "$this->size.$this->ext";
+ }
+
+ function get() {
+ $image = $this->avatar->get($this->size);
+ $res = $image->resource();
+
+ ob_start();
+ if ($this->ext === 'png') {
+ imagepng($res);
+ }
+ imagejpeg($res);
+
+ return ob_get_clean();
+ }
+
+ /**
+ * Returns the mime-type for a file
+ *
+ * If null is returned, we'll assume application/octet-stream
+ *
+ * @return string|null
+ */
+ function getContentType() {
+ if ($this->ext === 'png') {
+ return 'image/png';
+ }
+ return 'image/jpeg';
+ }
+
+// function getSize() {
+// return $this->avatar->getFile($this->size)->getSize();
+// }
+
+ function getETag() {
+ return $this->avatar->getFile($this->size)->getEtag();
+ }
+}
diff --git a/apps/dav/lib/Avatars/RootCollection.php b/apps/dav/lib/Avatars/RootCollection.php
new file mode 100644
index 00000000000..8cad3d3721a
--- /dev/null
+++ b/apps/dav/lib/Avatars/RootCollection.php
@@ -0,0 +1,28 @@
+<?php
+
+namespace OCA\DAV\Avatars;
+
+use Sabre\DAVACL\AbstractPrincipalCollection;
+use Sabre\DAVACL\IPrincipal;
+
+class RootCollection extends AbstractPrincipalCollection {
+
+ /**
+ * This method returns a node for a principal.
+ *
+ * The passed array contains principal information, and is guaranteed to
+ * at least contain a uri item. Other properties may or may not be
+ * supplied by the authentication backend.
+ *
+ * @param array $principalInfo
+ * @return IPrincipal
+ */
+ function getChildForPrincipal(array $principalInfo) {
+ return new AvatarHome($principalInfo);
+ }
+
+ function getName() {
+ return 'avatars';
+ }
+
+}