diff options
author | Vincent Petry <pvince81@owncloud.com> | 2015-09-17 16:01:11 +0200 |
---|---|---|
committer | Joas Schilling <nickvergessen@owncloud.com> | 2015-10-01 08:27:12 +0200 |
commit | 6e104bc933036b77b2967334a99922eb26c40dbc (patch) | |
tree | cd4d0447836a92f94ae147d32068f0f28491759b /lib/repair | |
parent | 50874de1cae27907ec17f481dd5e1117cc3bdc78 (diff) | |
download | nextcloud-server-6e104bc933036b77b2967334a99922eb26c40dbc.tar.gz nextcloud-server-6e104bc933036b77b2967334a99922eb26c40dbc.zip |
Repair step to remove bogus expiration dates from non-link shares
Diffstat (limited to 'lib/repair')
-rw-r--r-- | lib/repair/repairinvalidshares.php | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/lib/repair/repairinvalidshares.php b/lib/repair/repairinvalidshares.php new file mode 100644 index 00000000000..f754c17939a --- /dev/null +++ b/lib/repair/repairinvalidshares.php @@ -0,0 +1,79 @@ +<?php +/** + * @author Vincent Petry <pvince81@owncloud.com> + * + * @copyright Copyright (c) 2015, 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 OC\Repair; + +use OC\Hooks\BasicEmitter; + +/** + * Repairs shares with invalid data + */ +class RepairInvalidShares extends BasicEmitter implements \OC\RepairStep { + + /** + * @var \OCP\IConfig + */ + protected $config; + + /** + * @var \OCP\IDBConnection + */ + protected $connection; + + /** + * @param \OCP\IConfig $config + * @param \OCP\IDBConnection $connection + */ + public function __construct($config, $connection) { + $this->connection = $connection; + $this->config = $config; + } + + public function getName() { + return 'Repair invalid shares'; + } + + /** + * Past bugs would make it possible to set an expiration date on user shares even + * though it is not supported. This functions removes the expiration date from such entries. + */ + private function removeExpirationDateFromNonLinkShares() { + $builder = $this->connection->getQueryBuilder(); + $builder + ->update('share') + ->set('expiration', 'null') + ->where($builder->expr()->isNotNull('expiration')) + ->andWhere($builder->expr()->neq('share_type', $builder->expr()->literal(\OC\Share\Constants::SHARE_TYPE_LINK))); + + $updatedEntries = $builder->execute(); + if ($updatedEntries > 0) { + $this->emit('\OC\Repair', 'info', array('Removed invalid expiration date from ' . $updatedEntries . ' shares')); + } + } + + public function run() { + $ocVersionFromBeforeUpdate = $this->config->getSystemValue('version', '0.0.0'); + if (version_compare($ocVersionFromBeforeUpdate, '8.2.0', '<')) { + // this situation was only possible before 8.2 + $this->removeExpirationDateFromNonLinkShares(); + } + } +} |