aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore3
-rw-r--r--apps/dav/lib/connector/sabre/checksumlist.php71
-rw-r--r--apps/dav/lib/connector/sabre/filesplugin.php12
-rw-r--r--apps/federatedfilesharing/lib/federatedshareprovider.php6
-rw-r--r--core/ajax/share.php86
-rw-r--r--lib/private/files/storage/wrapper/encryption.php8
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;
}