Completed
Push — master ( 1c7e4a...7523c3 )
by Daniel
54:40 queued 13:52
created
apps/comments/lib/Collaboration/CommentersSorter.php 2 patches
Spacing   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -60,11 +60,11 @@
 block discarded – undo
60 60
 			// at least on PHP 5.6 usort turned out to be not stable. So we add
61 61
 			// the current index to the value and compare it on a draw
62 62
 			$i = 0;
63
-			$workArray = array_map(function ($element) use (&$i) {
63
+			$workArray = array_map(function($element) use (&$i) {
64 64
 				return [$i++, $element];
65 65
 			}, $byType);
66 66
 
67
-			usort($workArray, function ($a, $b) use ($commenters, $type) {
67
+			usort($workArray, function($a, $b) use ($commenters, $type) {
68 68
 				$r = $this->compare($a[1], $b[1], $commenters[$type]);
69 69
 				if ($r === 0) {
70 70
 					$r = $a[0] - $b[0];
Please login to merge, or discard this patch.
Indentation   +68 added lines, -68 removed lines patch added patch discarded remove patch
@@ -9,83 +9,83 @@
 block discarded – undo
9 9
 use OCP\Comments\ICommentsManager;
10 10
 
11 11
 class CommentersSorter implements ISorter {
12
-	public function __construct(
13
-		private ICommentsManager $commentsManager,
14
-	) {
15
-	}
12
+    public function __construct(
13
+        private ICommentsManager $commentsManager,
14
+    ) {
15
+    }
16 16
 
17
-	public function getId(): string {
18
-		return 'commenters';
19
-	}
17
+    public function getId(): string {
18
+        return 'commenters';
19
+    }
20 20
 
21
-	/**
22
-	 * Sorts people who commented on the given item atop (descelating) of the
23
-	 * others
24
-	 *
25
-	 * @param array &$sortArray
26
-	 * @param array $context
27
-	 */
28
-	public function sort(array &$sortArray, array $context): void {
29
-		$commenters = $this->retrieveCommentsInformation($context['itemType'], $context['itemId']);
30
-		if (count($commenters) === 0) {
31
-			return;
32
-		}
21
+    /**
22
+     * Sorts people who commented on the given item atop (descelating) of the
23
+     * others
24
+     *
25
+     * @param array &$sortArray
26
+     * @param array $context
27
+     */
28
+    public function sort(array &$sortArray, array $context): void {
29
+        $commenters = $this->retrieveCommentsInformation($context['itemType'], $context['itemId']);
30
+        if (count($commenters) === 0) {
31
+            return;
32
+        }
33 33
 
34
-		foreach ($sortArray as $type => &$byType) {
35
-			if (!isset($commenters[$type])) {
36
-				continue;
37
-			}
34
+        foreach ($sortArray as $type => &$byType) {
35
+            if (!isset($commenters[$type])) {
36
+                continue;
37
+            }
38 38
 
39
-			// at least on PHP 5.6 usort turned out to be not stable. So we add
40
-			// the current index to the value and compare it on a draw
41
-			$i = 0;
42
-			$workArray = array_map(function ($element) use (&$i) {
43
-				return [$i++, $element];
44
-			}, $byType);
39
+            // at least on PHP 5.6 usort turned out to be not stable. So we add
40
+            // the current index to the value and compare it on a draw
41
+            $i = 0;
42
+            $workArray = array_map(function ($element) use (&$i) {
43
+                return [$i++, $element];
44
+            }, $byType);
45 45
 
46
-			usort($workArray, function ($a, $b) use ($commenters, $type) {
47
-				$r = $this->compare($a[1], $b[1], $commenters[$type]);
48
-				if ($r === 0) {
49
-					$r = $a[0] - $b[0];
50
-				}
51
-				return $r;
52
-			});
46
+            usort($workArray, function ($a, $b) use ($commenters, $type) {
47
+                $r = $this->compare($a[1], $b[1], $commenters[$type]);
48
+                if ($r === 0) {
49
+                    $r = $a[0] - $b[0];
50
+                }
51
+                return $r;
52
+            });
53 53
 
54
-			// and remove the index values again
55
-			$byType = array_column($workArray, 1);
56
-		}
57
-	}
54
+            // and remove the index values again
55
+            $byType = array_column($workArray, 1);
56
+        }
57
+    }
58 58
 
59
-	/**
60
-	 * @return array<string, array<string, int>>
61
-	 */
62
-	protected function retrieveCommentsInformation(string $type, string $id): array {
63
-		$comments = $this->commentsManager->getForObject($type, $id);
64
-		if (count($comments) === 0) {
65
-			return [];
66
-		}
59
+    /**
60
+     * @return array<string, array<string, int>>
61
+     */
62
+    protected function retrieveCommentsInformation(string $type, string $id): array {
63
+        $comments = $this->commentsManager->getForObject($type, $id);
64
+        if (count($comments) === 0) {
65
+            return [];
66
+        }
67 67
 
68
-		$actors = [];
69
-		foreach ($comments as $comment) {
70
-			if (!isset($actors[$comment->getActorType()])) {
71
-				$actors[$comment->getActorType()] = [];
72
-			}
73
-			if (!isset($actors[$comment->getActorType()][$comment->getActorId()])) {
74
-				$actors[$comment->getActorType()][$comment->getActorId()] = 1;
75
-			} else {
76
-				$actors[$comment->getActorType()][$comment->getActorId()]++;
77
-			}
78
-		}
79
-		return $actors;
80
-	}
68
+        $actors = [];
69
+        foreach ($comments as $comment) {
70
+            if (!isset($actors[$comment->getActorType()])) {
71
+                $actors[$comment->getActorType()] = [];
72
+            }
73
+            if (!isset($actors[$comment->getActorType()][$comment->getActorId()])) {
74
+                $actors[$comment->getActorType()][$comment->getActorId()] = 1;
75
+            } else {
76
+                $actors[$comment->getActorType()][$comment->getActorId()]++;
77
+            }
78
+        }
79
+        return $actors;
80
+    }
81 81
 
82
-	protected function compare(array $a, array $b, array $commenters): int {
83
-		$a = $a['value']['shareWith'];
84
-		$b = $b['value']['shareWith'];
82
+    protected function compare(array $a, array $b, array $commenters): int {
83
+        $a = $a['value']['shareWith'];
84
+        $b = $b['value']['shareWith'];
85 85
 
86
-		$valueA = $commenters[$a] ?? 0;
87
-		$valueB = $commenters[$b] ?? 0;
86
+        $valueA = $commenters[$a] ?? 0;
87
+        $valueB = $commenters[$b] ?? 0;
88 88
 
89
-		return $valueB - $valueA;
90
-	}
89
+        return $valueB - $valueA;
90
+    }
91 91
 }
Please login to merge, or discard this patch.
core/templates/404.php 3 patches
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -7,7 +7,7 @@
 block discarded – undo
7 7
 	require_once '../../lib/base.php';
8 8
 
9 9
 	$urlGenerator = \OC::$server->getURLGenerator();
10
-	header('Location: ' . $urlGenerator->getAbsoluteURL('/'));
10
+	header('Location: '.$urlGenerator->getAbsoluteURL('/'));
11 11
 	exit;
12 12
 }
13 13
 // @codeCoverageIgnoreEnd
Please login to merge, or discard this patch.
Indentation   +4 added lines, -4 removed lines patch added patch discarded remove patch
@@ -4,11 +4,11 @@
 block discarded – undo
4 4
 /** @var \OCP\Defaults $theme */
5 5
 // @codeCoverageIgnoreStart
6 6
 if (!isset($_)) {//standalone  page is not supported anymore - redirect to /
7
-	require_once '../../lib/base.php';
7
+    require_once '../../lib/base.php';
8 8
 
9
-	$urlGenerator = \OC::$server->getURLGenerator();
10
-	header('Location: ' . $urlGenerator->getAbsoluteURL('/'));
11
-	exit;
9
+    $urlGenerator = \OC::$server->getURLGenerator();
10
+    header('Location: ' . $urlGenerator->getAbsoluteURL('/'));
11
+    exit;
12 12
 }
13 13
 // @codeCoverageIgnoreEnd
14 14
 ?>
Please login to merge, or discard this patch.
Braces   +5 added lines, -2 removed lines patch added patch discarded remove patch
@@ -14,10 +14,13 @@
 block discarded – undo
14 14
 ?>
15 15
 <?php if (isset($_['content'])): ?>
16 16
 	<?php print_unescaped($_['content']) ?>
17
-<?php else: ?>
17
+<?php else {
18
+    : ?>
18 19
 	<div class="body-login-container update">
19 20
 		<div class="icon-big icon-search"></div>
20
-		<h2><?php p($l->t('Page not found')); ?></h2>
21
+		<h2><?php p($l->t('Page not found'));
22
+}
23
+?></h2>
21 24
 		<p class="infogroup"><?php p($l->t('The page could not be found on the server or you may not be allowed to view it.')); ?></p>
22 25
 		<p><a class="button primary" href="<?php p(\OC::$server->getURLGenerator()->linkTo('', 'index.php')) ?>">
23 26
 			<?php p($l->t('Back to %s', [$theme->getName()])); ?>
Please login to merge, or discard this patch.
core/templates/loginflow/authpicker.php 2 patches
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -30,7 +30,7 @@
 block discarded – undo
30 30
 	<h2><?php p($l->t('Connect to your account')) ?></h2>
31 31
 	<p class="info">
32 32
 		<?php print_unescaped($l->t('Please log in before granting %1$s access to your %2$s account.', [
33
-			'<strong>' . \OCP\Util::sanitizeHTML($_['client']) . '</strong>',
33
+			'<strong>'.\OCP\Util::sanitizeHTML($_['client']).'</strong>',
34 34
 			\OCP\Util::sanitizeHTML($_['instanceName'])
35 35
 		])) ?>
36 36
 	</p>
Please login to merge, or discard this patch.
Indentation   +3 added lines, -3 removed lines patch added patch discarded remove patch
@@ -31,9 +31,9 @@
 block discarded – undo
31 31
 	<h2><?php p($l->t('Connect to your account')) ?></h2>
32 32
 	<p class="info">
33 33
 		<?php print_unescaped($l->t('Please log in before granting %1$s access to your %2$s account.', [
34
-			'<strong>' . \OCP\Util::sanitizeHTML($_['client']) . '</strong>',
35
-			\OCP\Util::sanitizeHTML($_['instanceName'])
36
-		])) ?>
34
+            '<strong>' . \OCP\Util::sanitizeHTML($_['client']) . '</strong>',
35
+            \OCP\Util::sanitizeHTML($_['instanceName'])
36
+        ])) ?>
37 37
 	</p>
38 38
 
39 39
 	<div class="notecard warning">
Please login to merge, or discard this patch.
core/templates/error.php 1 patch
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -6,7 +6,7 @@
 block discarded – undo
6 6
 			<p><?php p($error['error']) ?></p>
7 7
 			<?php if (isset($error['hint']) && $error['hint']): ?>
8 8
 				<p class='hint'><?php p($error['hint']) ?></p>
9
-			<?php endif;?>
9
+			<?php endif; ?>
10 10
 		</li>
11 11
 	<?php endforeach ?>
12 12
 	</ul>
Please login to merge, or discard this patch.
core/templates/twofactorselectchallenge.php 2 patches
Braces   +13 added lines, -5 removed lines patch added patch discarded remove patch
@@ -27,11 +27,15 @@  discard block
 block discarded – undo
27 27
 					<?php p($l->t('Set up two-factor authentication')) ?>
28 28
 				</a>
29 29
 			<?php } ?>
30
-		<?php else: ?>
30
+		<?php else {
31
+    : ?>
31 32
 			<strong><?php p($l->t('Two-factor authentication is enforced but has not been configured on your account. Use one of your backup codes to log in or contact your admin for assistance.')) ?></strong>
32
-		<?php endif; ?>
33
+		<?php endif;
34
+}
35
+?>
33 36
 	</p>
34
-	<?php else: ?>
37
+	<?php else {
38
+    : ?>
35 39
 	<ul>
36 40
 	<?php foreach ($_['providers'] as $provider): ?>
37 41
 		<li>
@@ -45,6 +49,7 @@  discard block
 block discarded – undo
45 49
 				<?php
46 50
 				if ($provider instanceof \OCP\Authentication\TwoFactorAuth\IProvidesIcons) {
47 51
 					$icon = $provider->getLightIcon();
52
+}
48 53
 				} else {
49 54
 					$icon = image_path('core', 'actions/password-white.svg');
50 55
 				}
@@ -61,7 +66,8 @@  discard block
 block discarded – undo
61 66
 	<?php endif ?>
62 67
 	<?php if (!is_null($_['backupProvider'])): ?>
63 68
 	<p>
64
-		<a class="<?php if ($noProviders): ?>button primary two-factor-primary<?php else: ?>two-factor-secondary<?php endif ?>" href="<?php p(\OC::$server->getURLGenerator()->linkToRoute('core.TwoFactorChallenge.showChallenge',
69
+		<a class="<?php if ($noProviders): ?>button primary two-factor-primary<?php else {
70
+    : ?>two-factor-secondary<?php endif ?>" href="<?php p(\OC::$server->getURLGenerator()->linkToRoute('core.TwoFactorChallenge.showChallenge',
65 71
 			[
66 72
 				'challengeProviderId' => $_['backupProvider']->getId(),
67 73
 				'redirect_url' => $_['redirect_url'],
@@ -70,7 +76,9 @@  discard block
 block discarded – undo
70 76
 			<?php p($l->t('Use backup code')) ?>
71 77
 		</a>
72 78
 	</p>
73
-	<?php endif; ?>
79
+	<?php endif;
80
+}
81
+?>
74 82
 	<p><a class="two-factor-secondary" href="<?php print_unescaped($_['logout_url']); ?>">
75 83
 		<?php p($l->t('Cancel login')) ?>
76 84
 	</a></p>
Please login to merge, or discard this patch.
Indentation   +20 added lines, -20 removed lines patch added patch discarded remove patch
@@ -20,10 +20,10 @@  discard block
 block discarded – undo
20 20
 			<?php } else { ?>
21 21
 				<strong><?php p($l->t('Two-factor authentication is enforced but has not been configured on your account. Please continue to setup two-factor authentication.')) ?></strong>
22 22
 				<a class="button primary two-factor-primary" href="<?php p(\OC::$server->getURLGenerator()->linkToRoute('core.TwoFactorChallenge.setupProviders',
23
-					[
24
-						'redirect_url' => $_['redirect_url'],
25
-					]
26
-				)) ?>">
23
+                    [
24
+                        'redirect_url' => $_['redirect_url'],
25
+                    ]
26
+                )) ?>">
27 27
 					<?php p($l->t('Set up two-factor authentication')) ?>
28 28
 				</a>
29 29
 			<?php } ?>
@@ -37,18 +37,18 @@  discard block
 block discarded – undo
37 37
 		<li>
38 38
 			<a class="two-factor-provider"
39 39
 			   href="<?php p(\OC::$server->getURLGenerator()->linkToRoute('core.TwoFactorChallenge.showChallenge',
40
-			   	[
41
-			   		'challengeProviderId' => $provider->getId(),
42
-			   		'redirect_url' => $_['redirect_url'],
43
-			   	]
44
-			   )) ?>">
40
+                    [
41
+                        'challengeProviderId' => $provider->getId(),
42
+                        'redirect_url' => $_['redirect_url'],
43
+                    ]
44
+                )) ?>">
45 45
 				<?php
46
-				if ($provider instanceof \OCP\Authentication\TwoFactorAuth\IProvidesIcons) {
47
-					$icon = $provider->getLightIcon();
48
-				} else {
49
-					$icon = image_path('core', 'actions/password-white.svg');
50
-				}
51
-		?>
46
+                if ($provider instanceof \OCP\Authentication\TwoFactorAuth\IProvidesIcons) {
47
+                    $icon = $provider->getLightIcon();
48
+                } else {
49
+                    $icon = image_path('core', 'actions/password-white.svg');
50
+                }
51
+        ?>
52 52
 				<img src="<?php p($icon) ?>" alt="" />
53 53
 				<div>
54 54
 					<h3><?php p($provider->getDisplayName()) ?></h3>
@@ -62,11 +62,11 @@  discard block
 block discarded – undo
62 62
 	<?php if (!is_null($_['backupProvider'])): ?>
63 63
 	<p>
64 64
 		<a class="<?php if ($noProviders): ?>button primary two-factor-primary<?php else: ?>two-factor-secondary<?php endif ?>" href="<?php p(\OC::$server->getURLGenerator()->linkToRoute('core.TwoFactorChallenge.showChallenge',
65
-			[
66
-				'challengeProviderId' => $_['backupProvider']->getId(),
67
-				'redirect_url' => $_['redirect_url'],
68
-			]
69
-		)) ?>">
65
+            [
66
+                'challengeProviderId' => $_['backupProvider']->getId(),
67
+                'redirect_url' => $_['redirect_url'],
68
+            ]
69
+        )) ?>">
70 70
 			<?php p($l->t('Use backup code')) ?>
71 71
 		</a>
72 72
 	</p>
Please login to merge, or discard this patch.
core/Command/Encryption/ChangeKeyStorageRoot.php 2 patches
Spacing   +8 added lines, -8 removed lines patch added patch discarded remove patch
@@ -142,7 +142,7 @@  discard block
 block discarded – undo
142 142
 		}
143 143
 
144 144
 		$result = $this->rootView->file_put_contents(
145
-			$newRoot . '/' . Storage::KEY_STORAGE_MARKER,
145
+			$newRoot.'/'.Storage::KEY_STORAGE_MARKER,
146 146
 			'Nextcloud will detect this folder as key storage root only if this file exists'
147 147
 		);
148 148
 
@@ -160,10 +160,10 @@  discard block
 block discarded – undo
160 160
 	 */
161 161
 	protected function moveSystemKeys($oldRoot, $newRoot) {
162 162
 		if (
163
-			$this->rootView->is_dir($oldRoot . '/files_encryption') &&
164
-			$this->targetExists($newRoot . '/files_encryption') === false
163
+			$this->rootView->is_dir($oldRoot.'/files_encryption') &&
164
+			$this->targetExists($newRoot.'/files_encryption') === false
165 165
 		) {
166
-			$this->rootView->rename($oldRoot . '/files_encryption', $newRoot . '/files_encryption');
166
+			$this->rootView->rename($oldRoot.'/files_encryption', $newRoot.'/files_encryption');
167 167
 		}
168 168
 	}
169 169
 
@@ -217,13 +217,13 @@  discard block
 block discarded – undo
217 217
 	 */
218 218
 	protected function moveUserEncryptionFolder($user, $oldRoot, $newRoot) {
219 219
 		if ($this->userManager->userExists($user)) {
220
-			$source = $oldRoot . '/' . $user . '/files_encryption';
221
-			$target = $newRoot . '/' . $user . '/files_encryption';
220
+			$source = $oldRoot.'/'.$user.'/files_encryption';
221
+			$target = $newRoot.'/'.$user.'/files_encryption';
222 222
 			if (
223 223
 				$this->rootView->is_dir($source) &&
224 224
 				$this->targetExists($target) === false
225 225
 			) {
226
-				$this->prepareParentFolder($newRoot . '/' . $user);
226
+				$this->prepareParentFolder($newRoot.'/'.$user);
227 227
 				$this->rootView->rename($source, $target);
228 228
 			}
229 229
 		}
@@ -241,7 +241,7 @@  discard block
 block discarded – undo
241 241
 			$sub_dirs = explode('/', ltrim($path, '/'));
242 242
 			$dir = '';
243 243
 			foreach ($sub_dirs as $sub_dir) {
244
-				$dir .= '/' . $sub_dir;
244
+				$dir .= '/'.$sub_dir;
245 245
 				if ($this->rootView->file_exists($dir) === false) {
246 246
 					$this->rootView->mkdir($dir);
247 247
 				}
Please login to merge, or discard this patch.
Indentation   +204 added lines, -204 removed lines patch added patch discarded remove patch
@@ -22,208 +22,208 @@
 block discarded – undo
22 22
 use Symfony\Component\Console\Question\ConfirmationQuestion;
23 23
 
24 24
 class ChangeKeyStorageRoot extends Command {
25
-	public function __construct(
26
-		protected View $rootView,
27
-		protected IUserManager $userManager,
28
-		protected IConfig $config,
29
-		protected Util $util,
30
-		protected QuestionHelper $questionHelper,
31
-	) {
32
-		parent::__construct();
33
-	}
34
-
35
-	protected function configure() {
36
-		parent::configure();
37
-		$this
38
-			->setName('encryption:change-key-storage-root')
39
-			->setDescription('Change key storage root')
40
-			->addArgument(
41
-				'newRoot',
42
-				InputArgument::OPTIONAL,
43
-				'new root of the key storage relative to the data folder'
44
-			);
45
-	}
46
-
47
-	protected function execute(InputInterface $input, OutputInterface $output): int {
48
-		$oldRoot = $this->util->getKeyStorageRoot();
49
-		$newRoot = $input->getArgument('newRoot');
50
-
51
-		if ($newRoot === null) {
52
-			$question = new ConfirmationQuestion('No storage root given, do you want to reset the key storage root to the default location? (y/n) ', false);
53
-			if (!$this->questionHelper->ask($input, $output, $question)) {
54
-				return 1;
55
-			}
56
-			$newRoot = '';
57
-		}
58
-
59
-		$oldRootDescription = $oldRoot !== '' ? $oldRoot : 'default storage location';
60
-		$newRootDescription = $newRoot !== '' ? $newRoot : 'default storage location';
61
-		$output->writeln("Change key storage root from <info>$oldRootDescription</info> to <info>$newRootDescription</info>");
62
-		$success = $this->moveAllKeys($oldRoot, $newRoot, $output);
63
-		if ($success) {
64
-			$this->util->setKeyStorageRoot($newRoot);
65
-			$output->writeln('');
66
-			$output->writeln("Key storage root successfully changed to <info>$newRootDescription</info>");
67
-			return 0;
68
-		}
69
-		return 1;
70
-	}
71
-
72
-	/**
73
-	 * move keys to new key storage root
74
-	 *
75
-	 * @param string $oldRoot
76
-	 * @param string $newRoot
77
-	 * @param OutputInterface $output
78
-	 * @return bool
79
-	 * @throws \Exception
80
-	 */
81
-	protected function moveAllKeys($oldRoot, $newRoot, OutputInterface $output) {
82
-		$output->writeln('Start to move keys:');
83
-
84
-		if ($this->rootView->is_dir($oldRoot) === false) {
85
-			$output->writeln('No old keys found: Nothing needs to be moved');
86
-			return false;
87
-		}
88
-
89
-		$this->prepareNewRoot($newRoot);
90
-		$this->moveSystemKeys($oldRoot, $newRoot);
91
-		$this->moveUserKeys($oldRoot, $newRoot, $output);
92
-
93
-		return true;
94
-	}
95
-
96
-	/**
97
-	 * prepare new key storage
98
-	 *
99
-	 * @param string $newRoot
100
-	 * @throws \Exception
101
-	 */
102
-	protected function prepareNewRoot($newRoot) {
103
-		if ($this->rootView->is_dir($newRoot) === false) {
104
-			throw new \Exception("New root folder doesn't exist. Please create the folder or check the permissions and try again.");
105
-		}
106
-
107
-		$result = $this->rootView->file_put_contents(
108
-			$newRoot . '/' . Storage::KEY_STORAGE_MARKER,
109
-			'Nextcloud will detect this folder as key storage root only if this file exists'
110
-		);
111
-
112
-		if (!$result) {
113
-			throw new \Exception("Can't access the new root folder. Please check the permissions and make sure that the folder is in your data folder");
114
-		}
115
-	}
116
-
117
-
118
-	/**
119
-	 * move system key folder
120
-	 *
121
-	 * @param string $oldRoot
122
-	 * @param string $newRoot
123
-	 */
124
-	protected function moveSystemKeys($oldRoot, $newRoot) {
125
-		if (
126
-			$this->rootView->is_dir($oldRoot . '/files_encryption') &&
127
-			$this->targetExists($newRoot . '/files_encryption') === false
128
-		) {
129
-			$this->rootView->rename($oldRoot . '/files_encryption', $newRoot . '/files_encryption');
130
-		}
131
-	}
132
-
133
-
134
-	/**
135
-	 * setup file system for the given user
136
-	 *
137
-	 * @param string $uid
138
-	 */
139
-	protected function setupUserFS($uid) {
140
-		\OC_Util::tearDownFS();
141
-		\OC_Util::setupFS($uid);
142
-	}
143
-
144
-
145
-	/**
146
-	 * iterate over each user and move the keys to the new storage
147
-	 *
148
-	 * @param string $oldRoot
149
-	 * @param string $newRoot
150
-	 * @param OutputInterface $output
151
-	 */
152
-	protected function moveUserKeys($oldRoot, $newRoot, OutputInterface $output) {
153
-		$progress = new ProgressBar($output);
154
-		$progress->start();
155
-
156
-
157
-		foreach ($this->userManager->getBackends() as $backend) {
158
-			$limit = 500;
159
-			$offset = 0;
160
-			do {
161
-				$users = $backend->getUsers('', $limit, $offset);
162
-				foreach ($users as $user) {
163
-					$progress->advance();
164
-					$this->setupUserFS($user);
165
-					$this->moveUserEncryptionFolder($user, $oldRoot, $newRoot);
166
-				}
167
-				$offset += $limit;
168
-			} while (count($users) >= $limit);
169
-		}
170
-		$progress->finish();
171
-	}
172
-
173
-	/**
174
-	 * move user encryption folder to new root folder
175
-	 *
176
-	 * @param string $user
177
-	 * @param string $oldRoot
178
-	 * @param string $newRoot
179
-	 * @throws \Exception
180
-	 */
181
-	protected function moveUserEncryptionFolder($user, $oldRoot, $newRoot) {
182
-		if ($this->userManager->userExists($user)) {
183
-			$source = $oldRoot . '/' . $user . '/files_encryption';
184
-			$target = $newRoot . '/' . $user . '/files_encryption';
185
-			if (
186
-				$this->rootView->is_dir($source) &&
187
-				$this->targetExists($target) === false
188
-			) {
189
-				$this->prepareParentFolder($newRoot . '/' . $user);
190
-				$this->rootView->rename($source, $target);
191
-			}
192
-		}
193
-	}
194
-
195
-	/**
196
-	 * Make preparations to filesystem for saving a key file
197
-	 *
198
-	 * @param string $path relative to data/
199
-	 */
200
-	protected function prepareParentFolder($path) {
201
-		$path = Filesystem::normalizePath($path);
202
-		// If the file resides within a subdirectory, create it
203
-		if ($this->rootView->file_exists($path) === false) {
204
-			$sub_dirs = explode('/', ltrim($path, '/'));
205
-			$dir = '';
206
-			foreach ($sub_dirs as $sub_dir) {
207
-				$dir .= '/' . $sub_dir;
208
-				if ($this->rootView->file_exists($dir) === false) {
209
-					$this->rootView->mkdir($dir);
210
-				}
211
-			}
212
-		}
213
-	}
214
-
215
-	/**
216
-	 * check if target already exists
217
-	 *
218
-	 * @param $path
219
-	 * @return bool
220
-	 * @throws \Exception
221
-	 */
222
-	protected function targetExists($path) {
223
-		if ($this->rootView->file_exists($path)) {
224
-			throw new \Exception("new folder '$path' already exists");
225
-		}
226
-
227
-		return false;
228
-	}
25
+    public function __construct(
26
+        protected View $rootView,
27
+        protected IUserManager $userManager,
28
+        protected IConfig $config,
29
+        protected Util $util,
30
+        protected QuestionHelper $questionHelper,
31
+    ) {
32
+        parent::__construct();
33
+    }
34
+
35
+    protected function configure() {
36
+        parent::configure();
37
+        $this
38
+            ->setName('encryption:change-key-storage-root')
39
+            ->setDescription('Change key storage root')
40
+            ->addArgument(
41
+                'newRoot',
42
+                InputArgument::OPTIONAL,
43
+                'new root of the key storage relative to the data folder'
44
+            );
45
+    }
46
+
47
+    protected function execute(InputInterface $input, OutputInterface $output): int {
48
+        $oldRoot = $this->util->getKeyStorageRoot();
49
+        $newRoot = $input->getArgument('newRoot');
50
+
51
+        if ($newRoot === null) {
52
+            $question = new ConfirmationQuestion('No storage root given, do you want to reset the key storage root to the default location? (y/n) ', false);
53
+            if (!$this->questionHelper->ask($input, $output, $question)) {
54
+                return 1;
55
+            }
56
+            $newRoot = '';
57
+        }
58
+
59
+        $oldRootDescription = $oldRoot !== '' ? $oldRoot : 'default storage location';
60
+        $newRootDescription = $newRoot !== '' ? $newRoot : 'default storage location';
61
+        $output->writeln("Change key storage root from <info>$oldRootDescription</info> to <info>$newRootDescription</info>");
62
+        $success = $this->moveAllKeys($oldRoot, $newRoot, $output);
63
+        if ($success) {
64
+            $this->util->setKeyStorageRoot($newRoot);
65
+            $output->writeln('');
66
+            $output->writeln("Key storage root successfully changed to <info>$newRootDescription</info>");
67
+            return 0;
68
+        }
69
+        return 1;
70
+    }
71
+
72
+    /**
73
+     * move keys to new key storage root
74
+     *
75
+     * @param string $oldRoot
76
+     * @param string $newRoot
77
+     * @param OutputInterface $output
78
+     * @return bool
79
+     * @throws \Exception
80
+     */
81
+    protected function moveAllKeys($oldRoot, $newRoot, OutputInterface $output) {
82
+        $output->writeln('Start to move keys:');
83
+
84
+        if ($this->rootView->is_dir($oldRoot) === false) {
85
+            $output->writeln('No old keys found: Nothing needs to be moved');
86
+            return false;
87
+        }
88
+
89
+        $this->prepareNewRoot($newRoot);
90
+        $this->moveSystemKeys($oldRoot, $newRoot);
91
+        $this->moveUserKeys($oldRoot, $newRoot, $output);
92
+
93
+        return true;
94
+    }
95
+
96
+    /**
97
+     * prepare new key storage
98
+     *
99
+     * @param string $newRoot
100
+     * @throws \Exception
101
+     */
102
+    protected function prepareNewRoot($newRoot) {
103
+        if ($this->rootView->is_dir($newRoot) === false) {
104
+            throw new \Exception("New root folder doesn't exist. Please create the folder or check the permissions and try again.");
105
+        }
106
+
107
+        $result = $this->rootView->file_put_contents(
108
+            $newRoot . '/' . Storage::KEY_STORAGE_MARKER,
109
+            'Nextcloud will detect this folder as key storage root only if this file exists'
110
+        );
111
+
112
+        if (!$result) {
113
+            throw new \Exception("Can't access the new root folder. Please check the permissions and make sure that the folder is in your data folder");
114
+        }
115
+    }
116
+
117
+
118
+    /**
119
+     * move system key folder
120
+     *
121
+     * @param string $oldRoot
122
+     * @param string $newRoot
123
+     */
124
+    protected function moveSystemKeys($oldRoot, $newRoot) {
125
+        if (
126
+            $this->rootView->is_dir($oldRoot . '/files_encryption') &&
127
+            $this->targetExists($newRoot . '/files_encryption') === false
128
+        ) {
129
+            $this->rootView->rename($oldRoot . '/files_encryption', $newRoot . '/files_encryption');
130
+        }
131
+    }
132
+
133
+
134
+    /**
135
+     * setup file system for the given user
136
+     *
137
+     * @param string $uid
138
+     */
139
+    protected function setupUserFS($uid) {
140
+        \OC_Util::tearDownFS();
141
+        \OC_Util::setupFS($uid);
142
+    }
143
+
144
+
145
+    /**
146
+     * iterate over each user and move the keys to the new storage
147
+     *
148
+     * @param string $oldRoot
149
+     * @param string $newRoot
150
+     * @param OutputInterface $output
151
+     */
152
+    protected function moveUserKeys($oldRoot, $newRoot, OutputInterface $output) {
153
+        $progress = new ProgressBar($output);
154
+        $progress->start();
155
+
156
+
157
+        foreach ($this->userManager->getBackends() as $backend) {
158
+            $limit = 500;
159
+            $offset = 0;
160
+            do {
161
+                $users = $backend->getUsers('', $limit, $offset);
162
+                foreach ($users as $user) {
163
+                    $progress->advance();
164
+                    $this->setupUserFS($user);
165
+                    $this->moveUserEncryptionFolder($user, $oldRoot, $newRoot);
166
+                }
167
+                $offset += $limit;
168
+            } while (count($users) >= $limit);
169
+        }
170
+        $progress->finish();
171
+    }
172
+
173
+    /**
174
+     * move user encryption folder to new root folder
175
+     *
176
+     * @param string $user
177
+     * @param string $oldRoot
178
+     * @param string $newRoot
179
+     * @throws \Exception
180
+     */
181
+    protected function moveUserEncryptionFolder($user, $oldRoot, $newRoot) {
182
+        if ($this->userManager->userExists($user)) {
183
+            $source = $oldRoot . '/' . $user . '/files_encryption';
184
+            $target = $newRoot . '/' . $user . '/files_encryption';
185
+            if (
186
+                $this->rootView->is_dir($source) &&
187
+                $this->targetExists($target) === false
188
+            ) {
189
+                $this->prepareParentFolder($newRoot . '/' . $user);
190
+                $this->rootView->rename($source, $target);
191
+            }
192
+        }
193
+    }
194
+
195
+    /**
196
+     * Make preparations to filesystem for saving a key file
197
+     *
198
+     * @param string $path relative to data/
199
+     */
200
+    protected function prepareParentFolder($path) {
201
+        $path = Filesystem::normalizePath($path);
202
+        // If the file resides within a subdirectory, create it
203
+        if ($this->rootView->file_exists($path) === false) {
204
+            $sub_dirs = explode('/', ltrim($path, '/'));
205
+            $dir = '';
206
+            foreach ($sub_dirs as $sub_dir) {
207
+                $dir .= '/' . $sub_dir;
208
+                if ($this->rootView->file_exists($dir) === false) {
209
+                    $this->rootView->mkdir($dir);
210
+                }
211
+            }
212
+        }
213
+    }
214
+
215
+    /**
216
+     * check if target already exists
217
+     *
218
+     * @param $path
219
+     * @return bool
220
+     * @throws \Exception
221
+     */
222
+    protected function targetExists($path) {
223
+        if ($this->rootView->file_exists($path)) {
224
+            throw new \Exception("new folder '$path' already exists");
225
+        }
226
+
227
+        return false;
228
+    }
229 229
 }
Please login to merge, or discard this patch.
core/Command/Config/System/DeleteConfig.php 2 patches
Spacing   +5 added lines, -5 removed lines patch added patch discarded remove patch
@@ -67,7 +67,7 @@  discard block
 block discarded – undo
67 67
 
68 68
 		if (count($configNames) > 1) {
69 69
 			if ($input->hasParameterOption('--error-if-not-exists') && !in_array($configName, $this->systemConfig->getKeys())) {
70
-				$output->writeln('<error>System config ' . implode(' => ', $configNames) . ' could not be deleted because it did not exist</error>');
70
+				$output->writeln('<error>System config '.implode(' => ', $configNames).' could not be deleted because it did not exist</error>');
71 71
 				return 1;
72 72
 			}
73 73
 
@@ -76,21 +76,21 @@  discard block
 block discarded – undo
76 76
 			try {
77 77
 				$value = $this->removeSubValue(array_slice($configNames, 1), $value, $input->hasParameterOption('--error-if-not-exists'));
78 78
 			} catch (\UnexpectedValueException $e) {
79
-				$output->writeln('<error>System config ' . implode(' => ', $configNames) . ' could not be deleted because it did not exist</error>');
79
+				$output->writeln('<error>System config '.implode(' => ', $configNames).' could not be deleted because it did not exist</error>');
80 80
 				return 1;
81 81
 			}
82 82
 
83 83
 			$this->systemConfig->setValue($configName, $value);
84
-			$output->writeln('<info>System config value ' . implode(' => ', $configNames) . ' deleted</info>');
84
+			$output->writeln('<info>System config value '.implode(' => ', $configNames).' deleted</info>');
85 85
 			return 0;
86 86
 		} else {
87 87
 			if ($input->hasParameterOption('--error-if-not-exists') && !in_array($configName, $this->systemConfig->getKeys())) {
88
-				$output->writeln('<error>System config ' . $configName . ' could not be deleted because it did not exist</error>');
88
+				$output->writeln('<error>System config '.$configName.' could not be deleted because it did not exist</error>');
89 89
 				return 1;
90 90
 			}
91 91
 
92 92
 			$this->systemConfig->deleteValue($configName);
93
-			$output->writeln('<info>System config value ' . $configName . ' deleted</info>');
93
+			$output->writeln('<info>System config value '.$configName.' deleted</info>');
94 94
 			return 0;
95 95
 		}
96 96
 	}
Please login to merge, or discard this patch.
Indentation   +68 added lines, -68 removed lines patch added patch discarded remove patch
@@ -30,83 +30,83 @@
 block discarded – undo
30 30
 use Symfony\Component\Console\Output\OutputInterface;
31 31
 
32 32
 class DeleteConfig extends Base {
33
-	public function __construct(
34
-		SystemConfig $systemConfig,
35
-	) {
36
-		parent::__construct($systemConfig);
37
-	}
33
+    public function __construct(
34
+        SystemConfig $systemConfig,
35
+    ) {
36
+        parent::__construct($systemConfig);
37
+    }
38 38
 
39
-	protected function configure() {
40
-		parent::configure();
39
+    protected function configure() {
40
+        parent::configure();
41 41
 
42
-		$this
43
-			->setName('config:system:delete')
44
-			->setDescription('Delete a system config value')
45
-			->addArgument(
46
-				'name',
47
-				InputArgument::REQUIRED | InputArgument::IS_ARRAY,
48
-				'Name of the config to delete, specify multiple for array parameter'
49
-			)
50
-			->addOption(
51
-				'error-if-not-exists',
52
-				null,
53
-				InputOption::VALUE_NONE,
54
-				'Checks whether the config exists before deleting it'
55
-			)
56
-		;
57
-	}
42
+        $this
43
+            ->setName('config:system:delete')
44
+            ->setDescription('Delete a system config value')
45
+            ->addArgument(
46
+                'name',
47
+                InputArgument::REQUIRED | InputArgument::IS_ARRAY,
48
+                'Name of the config to delete, specify multiple for array parameter'
49
+            )
50
+            ->addOption(
51
+                'error-if-not-exists',
52
+                null,
53
+                InputOption::VALUE_NONE,
54
+                'Checks whether the config exists before deleting it'
55
+            )
56
+        ;
57
+    }
58 58
 
59
-	protected function execute(InputInterface $input, OutputInterface $output): int {
60
-		$configNames = $input->getArgument('name');
61
-		$configName = $configNames[0];
59
+    protected function execute(InputInterface $input, OutputInterface $output): int {
60
+        $configNames = $input->getArgument('name');
61
+        $configName = $configNames[0];
62 62
 
63
-		if (count($configNames) > 1) {
64
-			if ($input->hasParameterOption('--error-if-not-exists') && !in_array($configName, $this->systemConfig->getKeys())) {
65
-				$output->writeln('<error>System config ' . implode(' => ', $configNames) . ' could not be deleted because it did not exist</error>');
66
-				return 1;
67
-			}
63
+        if (count($configNames) > 1) {
64
+            if ($input->hasParameterOption('--error-if-not-exists') && !in_array($configName, $this->systemConfig->getKeys())) {
65
+                $output->writeln('<error>System config ' . implode(' => ', $configNames) . ' could not be deleted because it did not exist</error>');
66
+                return 1;
67
+            }
68 68
 
69
-			$value = $this->systemConfig->getValue($configName);
69
+            $value = $this->systemConfig->getValue($configName);
70 70
 
71
-			try {
72
-				$value = $this->removeSubValue(array_slice($configNames, 1), $value, $input->hasParameterOption('--error-if-not-exists'));
73
-			} catch (\UnexpectedValueException $e) {
74
-				$output->writeln('<error>System config ' . implode(' => ', $configNames) . ' could not be deleted because it did not exist</error>');
75
-				return 1;
76
-			}
71
+            try {
72
+                $value = $this->removeSubValue(array_slice($configNames, 1), $value, $input->hasParameterOption('--error-if-not-exists'));
73
+            } catch (\UnexpectedValueException $e) {
74
+                $output->writeln('<error>System config ' . implode(' => ', $configNames) . ' could not be deleted because it did not exist</error>');
75
+                return 1;
76
+            }
77 77
 
78
-			$this->systemConfig->setValue($configName, $value);
79
-			$output->writeln('<info>System config value ' . implode(' => ', $configNames) . ' deleted</info>');
80
-			return 0;
81
-		} else {
82
-			if ($input->hasParameterOption('--error-if-not-exists') && !in_array($configName, $this->systemConfig->getKeys())) {
83
-				$output->writeln('<error>System config ' . $configName . ' could not be deleted because it did not exist</error>');
84
-				return 1;
85
-			}
78
+            $this->systemConfig->setValue($configName, $value);
79
+            $output->writeln('<info>System config value ' . implode(' => ', $configNames) . ' deleted</info>');
80
+            return 0;
81
+        } else {
82
+            if ($input->hasParameterOption('--error-if-not-exists') && !in_array($configName, $this->systemConfig->getKeys())) {
83
+                $output->writeln('<error>System config ' . $configName . ' could not be deleted because it did not exist</error>');
84
+                return 1;
85
+            }
86 86
 
87
-			$this->systemConfig->deleteValue($configName);
88
-			$output->writeln('<info>System config value ' . $configName . ' deleted</info>');
89
-			return 0;
90
-		}
91
-	}
87
+            $this->systemConfig->deleteValue($configName);
88
+            $output->writeln('<info>System config value ' . $configName . ' deleted</info>');
89
+            return 0;
90
+        }
91
+    }
92 92
 
93
-	protected function removeSubValue($keys, $currentValue, $throwError) {
94
-		$nextKey = array_shift($keys);
93
+    protected function removeSubValue($keys, $currentValue, $throwError) {
94
+        $nextKey = array_shift($keys);
95 95
 
96
-		if (is_array($currentValue)) {
97
-			if (isset($currentValue[$nextKey])) {
98
-				if (empty($keys)) {
99
-					unset($currentValue[$nextKey]);
100
-				} else {
101
-					$currentValue[$nextKey] = $this->removeSubValue($keys, $currentValue[$nextKey], $throwError);
102
-				}
103
-			} elseif ($throwError) {
104
-				throw new \UnexpectedValueException('Config parameter does not exist');
105
-			}
106
-		} elseif ($throwError) {
107
-			throw new \UnexpectedValueException('Config parameter does not exist');
108
-		}
96
+        if (is_array($currentValue)) {
97
+            if (isset($currentValue[$nextKey])) {
98
+                if (empty($keys)) {
99
+                    unset($currentValue[$nextKey]);
100
+                } else {
101
+                    $currentValue[$nextKey] = $this->removeSubValue($keys, $currentValue[$nextKey], $throwError);
102
+                }
103
+            } elseif ($throwError) {
104
+                throw new \UnexpectedValueException('Config parameter does not exist');
105
+            }
106
+        } elseif ($throwError) {
107
+            throw new \UnexpectedValueException('Config parameter does not exist');
108
+        }
109 109
 
110
-		return $currentValue;
111
-	}
110
+        return $currentValue;
111
+    }
112 112
 }
Please login to merge, or discard this patch.
core/Migrations/Version14000Date20180626223656.php 1 patch
Indentation   +37 added lines, -37 removed lines patch added patch discarded remove patch
@@ -28,42 +28,42 @@
 block discarded – undo
28 28
 use OCP\Migration\SimpleMigrationStep;
29 29
 
30 30
 class Version14000Date20180626223656 extends SimpleMigrationStep {
31
-	public function changeSchema(\OCP\Migration\IOutput $output, \Closure $schemaClosure, array $options) {
32
-		/** @var ISchemaWrapper $schema */
33
-		$schema = $schemaClosure();
34
-		if (!$schema->hasTable('whats_new')) {
35
-			$table = $schema->createTable('whats_new');
36
-			$table->addColumn('id', 'integer', [
37
-				'autoincrement' => true,
38
-				'notnull' => true,
39
-				'length' => 4,
40
-				'unsigned' => true,
41
-			]);
42
-			$table->addColumn('version', 'string', [
43
-				'notnull' => true,
44
-				'length' => 64,
45
-				'default' => '11',
46
-			]);
47
-			$table->addColumn('etag', 'string', [
48
-				'notnull' => true,
49
-				'length' => 64,
50
-				'default' => '',
51
-			]);
52
-			$table->addColumn('last_check', 'integer', [
53
-				'notnull' => true,
54
-				'length' => 4,
55
-				'unsigned' => true,
56
-				'default' => 0,
57
-			]);
58
-			$table->addColumn('data', 'text', [
59
-				'notnull' => true,
60
-				'default' => '',
61
-			]);
62
-			$table->setPrimaryKey(['id']);
63
-			$table->addUniqueIndex(['version'], 'version');
64
-			$table->addIndex(['version', 'etag'], 'version_etag_idx');
65
-		}
31
+    public function changeSchema(\OCP\Migration\IOutput $output, \Closure $schemaClosure, array $options) {
32
+        /** @var ISchemaWrapper $schema */
33
+        $schema = $schemaClosure();
34
+        if (!$schema->hasTable('whats_new')) {
35
+            $table = $schema->createTable('whats_new');
36
+            $table->addColumn('id', 'integer', [
37
+                'autoincrement' => true,
38
+                'notnull' => true,
39
+                'length' => 4,
40
+                'unsigned' => true,
41
+            ]);
42
+            $table->addColumn('version', 'string', [
43
+                'notnull' => true,
44
+                'length' => 64,
45
+                'default' => '11',
46
+            ]);
47
+            $table->addColumn('etag', 'string', [
48
+                'notnull' => true,
49
+                'length' => 64,
50
+                'default' => '',
51
+            ]);
52
+            $table->addColumn('last_check', 'integer', [
53
+                'notnull' => true,
54
+                'length' => 4,
55
+                'unsigned' => true,
56
+                'default' => 0,
57
+            ]);
58
+            $table->addColumn('data', 'text', [
59
+                'notnull' => true,
60
+                'default' => '',
61
+            ]);
62
+            $table->setPrimaryKey(['id']);
63
+            $table->addUniqueIndex(['version'], 'version');
64
+            $table->addIndex(['version', 'etag'], 'version_etag_idx');
65
+        }
66 66
 
67
-		return $schema;
68
-	}
67
+        return $schema;
68
+    }
69 69
 }
Please login to merge, or discard this patch.
core/templates/403.php 2 patches
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -7,7 +7,7 @@
 block discarded – undo
7 7
 	require_once '../../lib/base.php';
8 8
 
9 9
 	$urlGenerator = \OC::$server->getURLGenerator();
10
-	header('Location: ' . $urlGenerator->getAbsoluteURL('/'));
10
+	header('Location: '.$urlGenerator->getAbsoluteURL('/'));
11 11
 	exit;
12 12
 }
13 13
 // @codeCoverageIgnoreEnd
Please login to merge, or discard this patch.
Indentation   +6 added lines, -6 removed lines patch added patch discarded remove patch
@@ -6,17 +6,17 @@
 block discarded – undo
6 6
  */
7 7
 // @codeCoverageIgnoreStart
8 8
 if (!isset($_)) {//standalone  page is not supported anymore - redirect to /
9
-	require_once '../../lib/base.php';
9
+    require_once '../../lib/base.php';
10 10
 
11
-	$urlGenerator = \OC::$server->getURLGenerator();
12
-	header('Location: ' . $urlGenerator->getAbsoluteURL('/'));
13
-	exit;
11
+    $urlGenerator = \OC::$server->getURLGenerator();
12
+    header('Location: ' . $urlGenerator->getAbsoluteURL('/'));
13
+    exit;
14 14
 }
15 15
 // @codeCoverageIgnoreEnd
16 16
 ?>
17 17
 <div class="guest-box">
18 18
 	<h2><?php p($l->t('Access forbidden')); ?></h2>
19 19
 		<p class='hint'><?php if (isset($_['message'])) {
20
-			p($_['message']);
21
-		}?></p>
20
+            p($_['message']);
21
+        }?></p>
22 22
 </ul>
Please login to merge, or discard this patch.