diff options
-rw-r--r-- | .gitignore | 3 | ||||
-rw-r--r-- | apps/dav/lib/connector/sabre/checksumlist.php | 71 | ||||
-rw-r--r-- | apps/dav/lib/connector/sabre/filesplugin.php | 12 | ||||
-rw-r--r-- | apps/federatedfilesharing/lib/federatedshareprovider.php | 6 | ||||
-rw-r--r-- | core/ajax/share.php | 86 | ||||
-rw-r--r-- | lib/private/files/storage/wrapper/encryption.php | 8 |
6 files changed, 91 insertions, 95 deletions
diff --git a/.gitignore b/.gitignore index d8c57c25180..a2fb67ef429 100644 --- a/.gitignore +++ b/.gitignore @@ -80,6 +80,9 @@ nbproject # vim ex mode .vimrc + +# ack(-grep) +.ackrc # Mac OS .DS_Store diff --git a/apps/dav/lib/connector/sabre/checksumlist.php b/apps/dav/lib/connector/sabre/checksumlist.php new file mode 100644 index 00000000000..f137222acca --- /dev/null +++ b/apps/dav/lib/connector/sabre/checksumlist.php @@ -0,0 +1,71 @@ +<?php +/** + * @author Roeland Jago Douma <rullzer@owncloud.com> + * + * @copyright Copyright (c) 2016, ownCloud, Inc. + * @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\Connector\Sabre; + +use Sabre\Xml\XmlSerializable; +use Sabre\Xml\Element; +use Sabre\Xml\Writer; + +/** + * Checksumlist property + * + * This property contains multiple "checksum" elements, each containing a + * checksum name. + */ +class ChecksumList implements XmlSerializable { + const NS_OWNCLOUD = 'http://owncloud.org/ns'; + + /** @var string[] of TYPE:CHECKSUM */ + private $checksums; + + /** + * @param string $checksum + */ + public function __construct($checksum) { + $this->checksums = explode(',', $checksum); + } + + /** + * The xmlSerialize metod is called during xml writing. + * + * Use the $writer argument to write its own xml serialization. + * + * An important note: do _not_ create a parent element. Any element + * implementing XmlSerializble should only ever write what's considered + * its 'inner xml'. + * + * The parent of the current element is responsible for writing a + * containing element. + * + * This allows serializers to be re-used for different element names. + * + * If you are opening new elements, you must also close them again. + * + * @param Writer $writer + * @return void + */ + function xmlSerialize(Writer $writer) { + + foreach ($this->checksums as $checksum) { + $writer->writeElement('{' . self::NS_OWNCLOUD . '}checksum', $checksum); + } + } +} diff --git a/apps/dav/lib/connector/sabre/filesplugin.php b/apps/dav/lib/connector/sabre/filesplugin.php index 82d00014905..2e913ee1077 100644 --- a/apps/dav/lib/connector/sabre/filesplugin.php +++ b/apps/dav/lib/connector/sabre/filesplugin.php @@ -47,7 +47,7 @@ class FilesPlugin extends \Sabre\DAV\ServerPlugin { const LASTMODIFIED_PROPERTYNAME = '{DAV:}lastmodified'; const OWNER_ID_PROPERTYNAME = '{http://owncloud.org/ns}owner-id'; const OWNER_DISPLAY_NAME_PROPERTYNAME = '{http://owncloud.org/ns}owner-display-name'; - const CHECKSUM_PROPERTYNAME = '{http://owncloud.org/ns}checksum'; + const CHECKSUMS_PROPERTYNAME = '{http://owncloud.org/ns}checksums'; /** * Reference to main server object @@ -108,7 +108,7 @@ class FilesPlugin extends \Sabre\DAV\ServerPlugin { $server->protectedProperties[] = self::DOWNLOADURL_PROPERTYNAME; $server->protectedProperties[] = self::OWNER_ID_PROPERTYNAME; $server->protectedProperties[] = self::OWNER_DISPLAY_NAME_PROPERTYNAME; - $server->protectedProperties[] = self::CHECKSUM_PROPERTYNAME; + $server->protectedProperties[] = self::CHECKSUMS_PROPERTYNAME; // normally these cannot be changed (RFC4918), but we want them modifiable through PROPPATCH $allowedProperties = ['{DAV:}getetag']; @@ -248,13 +248,9 @@ class FilesPlugin extends \Sabre\DAV\ServerPlugin { return false; }); - $propFind->handle(self::CHECKSUM_PROPERTYNAME, function() use ($node) { + $propFind->handle(self::CHECKSUMS_PROPERTYNAME, function() use ($node) { $checksum = $node->getChecksum(); - - if ($checksum === null) { - return ''; - } - return $checksum; + return new ChecksumList($checksum); }); } diff --git a/apps/federatedfilesharing/lib/federatedshareprovider.php b/apps/federatedfilesharing/lib/federatedshareprovider.php index 05a9432a32f..0825a0e69bc 100644 --- a/apps/federatedfilesharing/lib/federatedshareprovider.php +++ b/apps/federatedfilesharing/lib/federatedshareprovider.php @@ -194,6 +194,12 @@ class FederatedShareProvider implements IShareProvider { ->setValue('token', $qb->createNamedParameter($token)) ->setValue('stime', $qb->createNamedParameter(time())); + /* + * Added to fix https://github.com/owncloud/core/issues/22215 + * Can be removed once we get rid of ajax/share.php + */ + $qb->setValue('file_target', $qb->createNamedParameter('')); + $qb->execute(); $id = $qb->getLastInsertId(); diff --git a/core/ajax/share.php b/core/ajax/share.php index cd4144bc6a7..987b637cc97 100644 --- a/core/ajax/share.php +++ b/core/ajax/share.php @@ -43,92 +43,6 @@ $defaults = new \OCP\Defaults(); if (isset($_POST['action']) && isset($_POST['itemType']) && isset($_POST['itemSource'])) { switch ($_POST['action']) { - case 'share': - if (isset($_POST['shareType']) && isset($_POST['shareWith']) && isset($_POST['permissions'])) { - try { - $shareType = (int)$_POST['shareType']; - $shareWith = $_POST['shareWith']; - $itemSourceName = isset($_POST['itemSourceName']) ? (string)$_POST['itemSourceName'] : null; - - /* - * Nasty nasty fix for https://github.com/owncloud/core/issues/19950 - */ - $passwordChanged = null; - if (is_array($shareWith)) { - $passwordChanged = ($shareWith['passwordChanged'] === 'true'); - if ($shareType === OCP\Share::SHARE_TYPE_LINK && $shareWith['password'] === '') { - $shareWith = null; - } else { - $shareWith = $shareWith['password']; - } - } else { - /* - * We need this branch since the calendar and contacts also use this - * endpoint - */ - if ($shareType === OCP\Share::SHARE_TYPE_LINK && $shareWith === '') { - $shareWith = null; - } - } - - $itemSourceName=(isset($_POST['itemSourceName'])) ? (string)$_POST['itemSourceName']:''; - - $token = OCP\Share::shareItem( - $_POST['itemType'], - $_POST['itemSource'], - $shareType, - $shareWith, - $_POST['permissions'], - $itemSourceName, - (!empty($_POST['expirationDate']) ? new \DateTime((string)$_POST['expirationDate']) : null), - $passwordChanged - ); - - if (is_string($token)) { - OC_JSON::success(array('data' => array('token' => $token))); - } else { - OC_JSON::success(); - } - } catch (\OC\HintException $exception) { - OC_JSON::error(array('data' => array('message' => $exception->getHint()))); - } catch (Exception $exception) { - OC_JSON::error(array('data' => array('message' => $exception->getMessage()))); - } - } - break; - case 'unshare': - if (isset($_POST['shareType']) && isset($_POST['shareWith'])) { - if ((int)$_POST['shareType'] === OCP\Share::SHARE_TYPE_LINK && $_POST['shareWith'] == '') { - $shareWith = null; - } else { - $shareWith = (string)$_POST['shareWith']; - } - $return = OCP\Share::unshare((string)$_POST['itemType'],(string) $_POST['itemSource'], (int)$_POST['shareType'], $shareWith); - ($return) ? OC_JSON::success() : OC_JSON::error(); - } - break; - case 'setPermissions': - if (isset($_POST['shareType']) && isset($_POST['shareWith']) && isset($_POST['permissions'])) { - $return = OCP\Share::setPermissions( - (string)$_POST['itemType'], - (string)$_POST['itemSource'], - (int)$_POST['shareType'], - (string)$_POST['shareWith'], - (int)$_POST['permissions'] - ); - ($return) ? OC_JSON::success() : OC_JSON::error(); - } - break; - case 'setExpirationDate': - if (isset($_POST['date'])) { - try { - $return = OCP\Share::setExpirationDate((string)$_POST['itemType'], (string)$_POST['itemSource'], (string)$_POST['date']); - ($return) ? OC_JSON::success() : OC_JSON::error(); - } catch (\Exception $e) { - OC_JSON::error(array('data' => array('message' => $e->getMessage()))); - } - } - break; case 'informRecipients': $l = \OC::$server->getL10N('core'); $shareType = (int) $_POST['shareType']; diff --git a/lib/private/files/storage/wrapper/encryption.php b/lib/private/files/storage/wrapper/encryption.php index 69438ef0c7c..f358bd59239 100644 --- a/lib/private/files/storage/wrapper/encryption.php +++ b/lib/private/files/storage/wrapper/encryption.php @@ -129,9 +129,15 @@ class Encryption extends Wrapper { if (isset($this->unencryptedSize[$fullPath])) { $size = $this->unencryptedSize[$fullPath]; // update file cache + if ($info) { + $info = $info->getData(); + } else { + $info = []; + } + $info['encrypted'] = true; $info['size'] = $size; - $this->getCache()->put($path, $info->getData()); + $this->getCache()->put($path, $info); return $size; } |