parent
4821c00ea8
commit
23aab05bda
@ -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; |
||||
} |
||||
|
||||
|
||||
} |
||||
@ -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(); |
||||
} |
||||
} |
||||
@ -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'; |
||||
} |
||||
|
||||
} |
||||
Loading…
Reference in new issue