Completed
Pull Request — master (#10031)
by Blizzz
18:14 queued 01:24
created
lib/private/Encryption/Exceptions/ModuleAlreadyExistsException.php 2 patches
Indentation   +7 added lines, -7 removed lines patch added patch discarded remove patch
@@ -27,12 +27,12 @@
 block discarded – undo
27 27
 
28 28
 class ModuleAlreadyExistsException extends GenericEncryptionException {
29 29
 
30
-	/**
31
-	 * @param string $id
32
-	 * @param string $name
33
-	 */
34
-	public function __construct($id, $name) {
35
-		parent::__construct('Id "' . $id . '" already used by encryption module "' . $name . '"');
36
-	}
30
+    /**
31
+     * @param string $id
32
+     * @param string $name
33
+     */
34
+    public function __construct($id, $name) {
35
+        parent::__construct('Id "' . $id . '" already used by encryption module "' . $name . '"');
36
+    }
37 37
 
38 38
 }
Please login to merge, or discard this patch.
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -32,7 +32,7 @@
 block discarded – undo
32 32
 	 * @param string $name
33 33
 	 */
34 34
 	public function __construct($id, $name) {
35
-		parent::__construct('Id "' . $id . '" already used by encryption module "' . $name . '"');
35
+		parent::__construct('Id "'.$id.'" already used by encryption module "'.$name.'"');
36 36
 	}
37 37
 
38 38
 }
Please login to merge, or discard this patch.
lib/private/Encryption/Exceptions/EncryptionHeaderToLargeException.php 1 patch
Indentation   +3 added lines, -3 removed lines patch added patch discarded remove patch
@@ -28,8 +28,8 @@
 block discarded – undo
28 28
 
29 29
 class EncryptionHeaderToLargeException extends GenericEncryptionException {
30 30
 
31
-	public function __construct() {
32
-		parent::__construct('max header size exceeded');
33
-	}
31
+    public function __construct() {
32
+        parent::__construct('max header size exceeded');
33
+    }
34 34
 
35 35
 }
Please login to merge, or discard this patch.
lib/private/Encryption/Exceptions/EncryptionHeaderKeyExistsException.php 2 patches
Indentation   +6 added lines, -6 removed lines patch added patch discarded remove patch
@@ -27,10 +27,10 @@
 block discarded – undo
27 27
 
28 28
 class EncryptionHeaderKeyExistsException extends GenericEncryptionException {
29 29
 
30
-	/**
31
-	 * @param string $key
32
-	 */
33
-	public function __construct($key) {
34
-		parent::__construct('header key "'. $key . '" already reserved by ownCloud');
35
-	}
30
+    /**
31
+     * @param string $key
32
+     */
33
+    public function __construct($key) {
34
+        parent::__construct('header key "'. $key . '" already reserved by ownCloud');
35
+    }
36 36
 }
Please login to merge, or discard this patch.
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -31,6 +31,6 @@
 block discarded – undo
31 31
 	 * @param string $key
32 32
 	 */
33 33
 	public function __construct($key) {
34
-		parent::__construct('header key "'. $key . '" already reserved by ownCloud');
34
+		parent::__construct('header key "'.$key.'" already reserved by ownCloud');
35 35
 	}
36 36
 }
Please login to merge, or discard this patch.
lib/private/Encryption/Exceptions/EncryptionFailedException.php 1 patch
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -26,6 +26,6 @@
 block discarded – undo
26 26
 
27 27
 use OCP\Encryption\Exceptions\GenericEncryptionException;
28 28
 
29
-class EncryptionFailedException extends GenericEncryptionException{
29
+class EncryptionFailedException extends GenericEncryptionException {
30 30
 
31 31
 }
Please login to merge, or discard this patch.
lib/private/Encryption/Exceptions/EmptyEncryptionDataException.php 1 patch
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -26,6 +26,6 @@
 block discarded – undo
26 26
 
27 27
 use OCP\Encryption\Exceptions\GenericEncryptionException;
28 28
 
29
-class EmptyEncryptionDataException extends GenericEncryptionException{
29
+class EmptyEncryptionDataException extends GenericEncryptionException {
30 30
 
31 31
 }
Please login to merge, or discard this patch.
lib/private/Encryption/DecryptAll.php 2 patches
Indentation   +250 added lines, -250 removed lines patch added patch discarded remove patch
@@ -36,255 +36,255 @@
 block discarded – undo
36 36
 
37 37
 class DecryptAll {
38 38
 
39
-	/** @var  OutputInterface */
40
-	protected $output;
41
-
42
-	/** @var  InputInterface */
43
-	protected $input;
44
-
45
-	/** @var  Manager */
46
-	protected $encryptionManager;
47
-
48
-	/** @var IUserManager */
49
-	protected $userManager;
50
-
51
-	/** @var View */
52
-	protected $rootView;
53
-
54
-	/** @var  array files which couldn't be decrypted */
55
-	protected $failed;
56
-
57
-	/**
58
-	 * @param Manager $encryptionManager
59
-	 * @param IUserManager $userManager
60
-	 * @param View $rootView
61
-	 */
62
-	public function __construct(
63
-		Manager $encryptionManager,
64
-		IUserManager $userManager,
65
-		View $rootView
66
-	) {
67
-		$this->encryptionManager = $encryptionManager;
68
-		$this->userManager = $userManager;
69
-		$this->rootView = $rootView;
70
-		$this->failed = [];
71
-	}
72
-
73
-	/**
74
-	 * start to decrypt all files
75
-	 *
76
-	 * @param InputInterface $input
77
-	 * @param OutputInterface $output
78
-	 * @param string $user which users data folder should be decrypted, default = all users
79
-	 * @return bool
80
-	 * @throws \Exception
81
-	 */
82
-	public function decryptAll(InputInterface $input, OutputInterface $output, $user = '') {
83
-
84
-		$this->input = $input;
85
-		$this->output = $output;
86
-
87
-		if ($user !== '' && $this->userManager->userExists($user) === false) {
88
-			$this->output->writeln('User "' . $user . '" does not exist. Please check the username and try again');
89
-			return false;
90
-		}
91
-
92
-		$this->output->writeln('prepare encryption modules...');
93
-		if ($this->prepareEncryptionModules($user) === false) {
94
-			return false;
95
-		}
96
-		$this->output->writeln(' done.');
97
-
98
-		$this->decryptAllUsersFiles($user);
99
-
100
-		if (empty($this->failed)) {
101
-			$this->output->writeln('all files could be decrypted successfully!');
102
-		} else {
103
-			$this->output->writeln('Files for following users couldn\'t be decrypted, ');
104
-			$this->output->writeln('maybe the user is not set up in a way that supports this operation: ');
105
-			foreach ($this->failed as $uid => $paths) {
106
-				$this->output->writeln('    ' . $uid);
107
-			}
108
-			$this->output->writeln('');
109
-		}
110
-
111
-		return true;
112
-	}
113
-
114
-	/**
115
-	 * prepare encryption modules to perform the decrypt all function
116
-	 *
117
-	 * @param $user
118
-	 * @return bool
119
-	 */
120
-	protected function prepareEncryptionModules($user) {
121
-		// prepare all encryption modules for decrypt all
122
-		$encryptionModules = $this->encryptionManager->getEncryptionModules();
123
-		foreach ($encryptionModules as $moduleDesc) {
124
-			/** @var IEncryptionModule $module */
125
-			$module = call_user_func($moduleDesc['callback']);
126
-			$this->output->writeln('');
127
-			$this->output->writeln('Prepare "' . $module->getDisplayName() . '"');
128
-			$this->output->writeln('');
129
-			if ($module->prepareDecryptAll($this->input, $this->output, $user) === false) {
130
-				$this->output->writeln('Module "' . $moduleDesc['displayName'] . '" does not support the functionality to decrypt all files again or the initialization of the module failed!');
131
-				return false;
132
-			}
133
-		}
134
-
135
-		return true;
136
-	}
137
-
138
-	/**
139
-	 * iterate over all user and encrypt their files
140
-	 *
141
-	 * @param string $user which users files should be decrypted, default = all users
142
-	 */
143
-	protected function decryptAllUsersFiles($user = '') {
144
-
145
-		$this->output->writeln("\n");
146
-
147
-		$userList = [];
148
-		if ($user === '') {
149
-
150
-			$fetchUsersProgress = new ProgressBar($this->output);
151
-			$fetchUsersProgress->setFormat(" %message% \n [%bar%]");
152
-			$fetchUsersProgress->start();
153
-			$fetchUsersProgress->setMessage("Fetch list of users...");
154
-			$fetchUsersProgress->advance();
155
-
156
-			foreach ($this->userManager->getBackends() as $backend) {
157
-				$limit = 500;
158
-				$offset = 0;
159
-				do {
160
-					$users = $backend->getUsers('', $limit, $offset);
161
-					foreach ($users as $user) {
162
-						$userList[] = $user;
163
-					}
164
-					$offset += $limit;
165
-					$fetchUsersProgress->advance();
166
-				} while (count($users) >= $limit);
167
-				$fetchUsersProgress->setMessage("Fetch list of users... finished");
168
-				$fetchUsersProgress->finish();
169
-			}
170
-		} else {
171
-			$userList[] = $user;
172
-		}
173
-
174
-		$this->output->writeln("\n\n");
175
-
176
-		$progress = new ProgressBar($this->output);
177
-		$progress->setFormat(" %message% \n [%bar%]");
178
-		$progress->start();
179
-		$progress->setMessage("starting to decrypt files...");
180
-		$progress->advance();
181
-
182
-		$numberOfUsers = count($userList);
183
-		$userNo = 1;
184
-		foreach ($userList as $uid) {
185
-			$userCount = "$uid ($userNo of $numberOfUsers)";
186
-			$this->decryptUsersFiles($uid, $progress, $userCount);
187
-			$userNo++;
188
-		}
189
-
190
-		$progress->setMessage("starting to decrypt files... finished");
191
-		$progress->finish();
192
-
193
-		$this->output->writeln("\n\n");
194
-
195
-	}
196
-
197
-	/**
198
-	 * encrypt files from the given user
199
-	 *
200
-	 * @param string $uid
201
-	 * @param ProgressBar $progress
202
-	 * @param string $userCount
203
-	 */
204
-	protected function decryptUsersFiles($uid, ProgressBar $progress, $userCount) {
205
-
206
-		$this->setupUserFS($uid);
207
-		$directories = array();
208
-		$directories[] = '/' . $uid . '/files';
209
-
210
-		while ($root = array_pop($directories)) {
211
-			$content = $this->rootView->getDirectoryContent($root);
212
-			foreach ($content as $file) {
213
-				// only decrypt files owned by the user
214
-				if($file->getStorage()->instanceOfStorage('OCA\Files_Sharing\SharedStorage')) {
215
-					continue;
216
-				}
217
-				$path = $root . '/' . $file['name'];
218
-				if ($this->rootView->is_dir($path)) {
219
-					$directories[] = $path;
220
-					continue;
221
-				} else {
222
-					try {
223
-						$progress->setMessage("decrypt files for user $userCount: $path");
224
-						$progress->advance();
225
-						if ($file->isEncrypted() === false) {
226
-							$progress->setMessage("decrypt files for user $userCount: $path (already decrypted)");
227
-							$progress->advance();
228
-						} else {
229
-							if ($this->decryptFile($path) === false) {
230
-								$progress->setMessage("decrypt files for user $userCount: $path (already decrypted)");
231
-								$progress->advance();
232
-							}
233
-						}
234
-					} catch (\Exception $e) {
235
-						if (isset($this->failed[$uid])) {
236
-							$this->failed[$uid][] = $path;
237
-						} else {
238
-							$this->failed[$uid] = [$path];
239
-						}
240
-					}
241
-				}
242
-			}
243
-		}
244
-	}
245
-
246
-	/**
247
-	 * encrypt file
248
-	 *
249
-	 * @param string $path
250
-	 * @return bool
251
-	 */
252
-	protected function decryptFile($path) {
253
-
254
-		$source = $path;
255
-		$target = $path . '.decrypted.' . $this->getTimestamp();
256
-
257
-		try {
258
-			$this->rootView->copy($source, $target);
259
-			$this->rootView->rename($target, $source);
260
-		} catch (DecryptionFailedException $e) {
261
-			if ($this->rootView->file_exists($target)) {
262
-				$this->rootView->unlink($target);
263
-			}
264
-			return false;
265
-		}
266
-
267
-		return true;
268
-	}
269
-
270
-	/**
271
-	 * get current timestamp
272
-	 *
273
-	 * @return int
274
-	 */
275
-	protected function getTimestamp() {
276
-		return time();
277
-	}
278
-
279
-
280
-	/**
281
-	 * setup user file system
282
-	 *
283
-	 * @param string $uid
284
-	 */
285
-	protected function setupUserFS($uid) {
286
-		\OC_Util::tearDownFS();
287
-		\OC_Util::setupFS($uid);
288
-	}
39
+    /** @var  OutputInterface */
40
+    protected $output;
41
+
42
+    /** @var  InputInterface */
43
+    protected $input;
44
+
45
+    /** @var  Manager */
46
+    protected $encryptionManager;
47
+
48
+    /** @var IUserManager */
49
+    protected $userManager;
50
+
51
+    /** @var View */
52
+    protected $rootView;
53
+
54
+    /** @var  array files which couldn't be decrypted */
55
+    protected $failed;
56
+
57
+    /**
58
+     * @param Manager $encryptionManager
59
+     * @param IUserManager $userManager
60
+     * @param View $rootView
61
+     */
62
+    public function __construct(
63
+        Manager $encryptionManager,
64
+        IUserManager $userManager,
65
+        View $rootView
66
+    ) {
67
+        $this->encryptionManager = $encryptionManager;
68
+        $this->userManager = $userManager;
69
+        $this->rootView = $rootView;
70
+        $this->failed = [];
71
+    }
72
+
73
+    /**
74
+     * start to decrypt all files
75
+     *
76
+     * @param InputInterface $input
77
+     * @param OutputInterface $output
78
+     * @param string $user which users data folder should be decrypted, default = all users
79
+     * @return bool
80
+     * @throws \Exception
81
+     */
82
+    public function decryptAll(InputInterface $input, OutputInterface $output, $user = '') {
83
+
84
+        $this->input = $input;
85
+        $this->output = $output;
86
+
87
+        if ($user !== '' && $this->userManager->userExists($user) === false) {
88
+            $this->output->writeln('User "' . $user . '" does not exist. Please check the username and try again');
89
+            return false;
90
+        }
91
+
92
+        $this->output->writeln('prepare encryption modules...');
93
+        if ($this->prepareEncryptionModules($user) === false) {
94
+            return false;
95
+        }
96
+        $this->output->writeln(' done.');
97
+
98
+        $this->decryptAllUsersFiles($user);
99
+
100
+        if (empty($this->failed)) {
101
+            $this->output->writeln('all files could be decrypted successfully!');
102
+        } else {
103
+            $this->output->writeln('Files for following users couldn\'t be decrypted, ');
104
+            $this->output->writeln('maybe the user is not set up in a way that supports this operation: ');
105
+            foreach ($this->failed as $uid => $paths) {
106
+                $this->output->writeln('    ' . $uid);
107
+            }
108
+            $this->output->writeln('');
109
+        }
110
+
111
+        return true;
112
+    }
113
+
114
+    /**
115
+     * prepare encryption modules to perform the decrypt all function
116
+     *
117
+     * @param $user
118
+     * @return bool
119
+     */
120
+    protected function prepareEncryptionModules($user) {
121
+        // prepare all encryption modules for decrypt all
122
+        $encryptionModules = $this->encryptionManager->getEncryptionModules();
123
+        foreach ($encryptionModules as $moduleDesc) {
124
+            /** @var IEncryptionModule $module */
125
+            $module = call_user_func($moduleDesc['callback']);
126
+            $this->output->writeln('');
127
+            $this->output->writeln('Prepare "' . $module->getDisplayName() . '"');
128
+            $this->output->writeln('');
129
+            if ($module->prepareDecryptAll($this->input, $this->output, $user) === false) {
130
+                $this->output->writeln('Module "' . $moduleDesc['displayName'] . '" does not support the functionality to decrypt all files again or the initialization of the module failed!');
131
+                return false;
132
+            }
133
+        }
134
+
135
+        return true;
136
+    }
137
+
138
+    /**
139
+     * iterate over all user and encrypt their files
140
+     *
141
+     * @param string $user which users files should be decrypted, default = all users
142
+     */
143
+    protected function decryptAllUsersFiles($user = '') {
144
+
145
+        $this->output->writeln("\n");
146
+
147
+        $userList = [];
148
+        if ($user === '') {
149
+
150
+            $fetchUsersProgress = new ProgressBar($this->output);
151
+            $fetchUsersProgress->setFormat(" %message% \n [%bar%]");
152
+            $fetchUsersProgress->start();
153
+            $fetchUsersProgress->setMessage("Fetch list of users...");
154
+            $fetchUsersProgress->advance();
155
+
156
+            foreach ($this->userManager->getBackends() as $backend) {
157
+                $limit = 500;
158
+                $offset = 0;
159
+                do {
160
+                    $users = $backend->getUsers('', $limit, $offset);
161
+                    foreach ($users as $user) {
162
+                        $userList[] = $user;
163
+                    }
164
+                    $offset += $limit;
165
+                    $fetchUsersProgress->advance();
166
+                } while (count($users) >= $limit);
167
+                $fetchUsersProgress->setMessage("Fetch list of users... finished");
168
+                $fetchUsersProgress->finish();
169
+            }
170
+        } else {
171
+            $userList[] = $user;
172
+        }
173
+
174
+        $this->output->writeln("\n\n");
175
+
176
+        $progress = new ProgressBar($this->output);
177
+        $progress->setFormat(" %message% \n [%bar%]");
178
+        $progress->start();
179
+        $progress->setMessage("starting to decrypt files...");
180
+        $progress->advance();
181
+
182
+        $numberOfUsers = count($userList);
183
+        $userNo = 1;
184
+        foreach ($userList as $uid) {
185
+            $userCount = "$uid ($userNo of $numberOfUsers)";
186
+            $this->decryptUsersFiles($uid, $progress, $userCount);
187
+            $userNo++;
188
+        }
189
+
190
+        $progress->setMessage("starting to decrypt files... finished");
191
+        $progress->finish();
192
+
193
+        $this->output->writeln("\n\n");
194
+
195
+    }
196
+
197
+    /**
198
+     * encrypt files from the given user
199
+     *
200
+     * @param string $uid
201
+     * @param ProgressBar $progress
202
+     * @param string $userCount
203
+     */
204
+    protected function decryptUsersFiles($uid, ProgressBar $progress, $userCount) {
205
+
206
+        $this->setupUserFS($uid);
207
+        $directories = array();
208
+        $directories[] = '/' . $uid . '/files';
209
+
210
+        while ($root = array_pop($directories)) {
211
+            $content = $this->rootView->getDirectoryContent($root);
212
+            foreach ($content as $file) {
213
+                // only decrypt files owned by the user
214
+                if($file->getStorage()->instanceOfStorage('OCA\Files_Sharing\SharedStorage')) {
215
+                    continue;
216
+                }
217
+                $path = $root . '/' . $file['name'];
218
+                if ($this->rootView->is_dir($path)) {
219
+                    $directories[] = $path;
220
+                    continue;
221
+                } else {
222
+                    try {
223
+                        $progress->setMessage("decrypt files for user $userCount: $path");
224
+                        $progress->advance();
225
+                        if ($file->isEncrypted() === false) {
226
+                            $progress->setMessage("decrypt files for user $userCount: $path (already decrypted)");
227
+                            $progress->advance();
228
+                        } else {
229
+                            if ($this->decryptFile($path) === false) {
230
+                                $progress->setMessage("decrypt files for user $userCount: $path (already decrypted)");
231
+                                $progress->advance();
232
+                            }
233
+                        }
234
+                    } catch (\Exception $e) {
235
+                        if (isset($this->failed[$uid])) {
236
+                            $this->failed[$uid][] = $path;
237
+                        } else {
238
+                            $this->failed[$uid] = [$path];
239
+                        }
240
+                    }
241
+                }
242
+            }
243
+        }
244
+    }
245
+
246
+    /**
247
+     * encrypt file
248
+     *
249
+     * @param string $path
250
+     * @return bool
251
+     */
252
+    protected function decryptFile($path) {
253
+
254
+        $source = $path;
255
+        $target = $path . '.decrypted.' . $this->getTimestamp();
256
+
257
+        try {
258
+            $this->rootView->copy($source, $target);
259
+            $this->rootView->rename($target, $source);
260
+        } catch (DecryptionFailedException $e) {
261
+            if ($this->rootView->file_exists($target)) {
262
+                $this->rootView->unlink($target);
263
+            }
264
+            return false;
265
+        }
266
+
267
+        return true;
268
+    }
269
+
270
+    /**
271
+     * get current timestamp
272
+     *
273
+     * @return int
274
+     */
275
+    protected function getTimestamp() {
276
+        return time();
277
+    }
278
+
279
+
280
+    /**
281
+     * setup user file system
282
+     *
283
+     * @param string $uid
284
+     */
285
+    protected function setupUserFS($uid) {
286
+        \OC_Util::tearDownFS();
287
+        \OC_Util::setupFS($uid);
288
+    }
289 289
 
290 290
 }
Please login to merge, or discard this patch.
Spacing   +8 added lines, -8 removed lines patch added patch discarded remove patch
@@ -85,7 +85,7 @@  discard block
 block discarded – undo
85 85
 		$this->output = $output;
86 86
 
87 87
 		if ($user !== '' && $this->userManager->userExists($user) === false) {
88
-			$this->output->writeln('User "' . $user . '" does not exist. Please check the username and try again');
88
+			$this->output->writeln('User "'.$user.'" does not exist. Please check the username and try again');
89 89
 			return false;
90 90
 		}
91 91
 
@@ -103,7 +103,7 @@  discard block
 block discarded – undo
103 103
 			$this->output->writeln('Files for following users couldn\'t be decrypted, ');
104 104
 			$this->output->writeln('maybe the user is not set up in a way that supports this operation: ');
105 105
 			foreach ($this->failed as $uid => $paths) {
106
-				$this->output->writeln('    ' . $uid);
106
+				$this->output->writeln('    '.$uid);
107 107
 			}
108 108
 			$this->output->writeln('');
109 109
 		}
@@ -124,10 +124,10 @@  discard block
 block discarded – undo
124 124
 			/** @var IEncryptionModule $module */
125 125
 			$module = call_user_func($moduleDesc['callback']);
126 126
 			$this->output->writeln('');
127
-			$this->output->writeln('Prepare "' . $module->getDisplayName() . '"');
127
+			$this->output->writeln('Prepare "'.$module->getDisplayName().'"');
128 128
 			$this->output->writeln('');
129 129
 			if ($module->prepareDecryptAll($this->input, $this->output, $user) === false) {
130
-				$this->output->writeln('Module "' . $moduleDesc['displayName'] . '" does not support the functionality to decrypt all files again or the initialization of the module failed!');
130
+				$this->output->writeln('Module "'.$moduleDesc['displayName'].'" does not support the functionality to decrypt all files again or the initialization of the module failed!');
131 131
 				return false;
132 132
 			}
133 133
 		}
@@ -205,16 +205,16 @@  discard block
 block discarded – undo
205 205
 
206 206
 		$this->setupUserFS($uid);
207 207
 		$directories = array();
208
-		$directories[] = '/' . $uid . '/files';
208
+		$directories[] = '/'.$uid.'/files';
209 209
 
210 210
 		while ($root = array_pop($directories)) {
211 211
 			$content = $this->rootView->getDirectoryContent($root);
212 212
 			foreach ($content as $file) {
213 213
 				// only decrypt files owned by the user
214
-				if($file->getStorage()->instanceOfStorage('OCA\Files_Sharing\SharedStorage')) {
214
+				if ($file->getStorage()->instanceOfStorage('OCA\Files_Sharing\SharedStorage')) {
215 215
 					continue;
216 216
 				}
217
-				$path = $root . '/' . $file['name'];
217
+				$path = $root.'/'.$file['name'];
218 218
 				if ($this->rootView->is_dir($path)) {
219 219
 					$directories[] = $path;
220 220
 					continue;
@@ -252,7 +252,7 @@  discard block
 block discarded – undo
252 252
 	protected function decryptFile($path) {
253 253
 
254 254
 		$source = $path;
255
-		$target = $path . '.decrypted.' . $this->getTimestamp();
255
+		$target = $path.'.decrypted.'.$this->getTimestamp();
256 256
 
257 257
 		try {
258 258
 			$this->rootView->copy($source, $target);
Please login to merge, or discard this patch.
lib/private/Encryption/File.php 2 patches
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -58,7 +58,7 @@
 block discarded – undo
58 58
 		// always add owner to the list of users with access to the file
59 59
 		$userIds = array($owner);
60 60
 
61
-		if (!$this->util->isFile($owner . '/' . $ownerPath)) {
61
+		if (!$this->util->isFile($owner.'/'.$ownerPath)) {
62 62
 			return array('users' => $userIds, 'public' => false);
63 63
 		}
64 64
 
Please login to merge, or discard this patch.
Indentation   +90 added lines, -90 removed lines patch added patch discarded remove patch
@@ -31,95 +31,95 @@
 block discarded – undo
31 31
 
32 32
 class File implements \OCP\Encryption\IFile {
33 33
 
34
-	/** @var Util */
35
-	protected $util;
36
-
37
-	/** @var IRootFolder */
38
-	private $rootFolder;
39
-
40
-	/** @var IManager */
41
-	private $shareManager;
42
-
43
-	/**
44
-	 * cache results of already checked folders
45
-	 *
46
-	 * @var array
47
-	 */
48
-	protected $cache;
49
-
50
-	public function __construct(Util $util,
51
-								IRootFolder $rootFolder,
52
-								IManager $shareManager) {
53
-		$this->util = $util;
54
-		$this->cache = new CappedMemoryCache();
55
-		$this->rootFolder = $rootFolder;
56
-		$this->shareManager = $shareManager;
57
-	}
58
-
59
-
60
-	/**
61
-	 * get list of users with access to the file
62
-	 *
63
-	 * @param string $path to the file
64
-	 * @return array  ['users' => $uniqueUserIds, 'public' => $public]
65
-	 */
66
-	public function getAccessList($path) {
67
-
68
-		// Make sure that a share key is generated for the owner too
69
-		list($owner, $ownerPath) = $this->util->getUidAndFilename($path);
70
-
71
-		// always add owner to the list of users with access to the file
72
-		$userIds = array($owner);
73
-
74
-		if (!$this->util->isFile($owner . '/' . $ownerPath)) {
75
-			return array('users' => $userIds, 'public' => false);
76
-		}
77
-
78
-		$ownerPath = substr($ownerPath, strlen('/files'));
79
-		$userFolder = $this->rootFolder->getUserFolder($owner);
80
-		try {
81
-			$file = $userFolder->get($ownerPath);
82
-		} catch (NotFoundException $e) {
83
-			$file = null;
84
-		}
85
-		$ownerPath = $this->util->stripPartialFileExtension($ownerPath);
86
-
87
-		// first get the shares for the parent and cache the result so that we don't
88
-		// need to check all parents for every file
89
-		$parent = dirname($ownerPath);
90
-		$parentNode = $userFolder->get($parent);
91
-		if (isset($this->cache[$parent])) {
92
-			$resultForParents = $this->cache[$parent];
93
-		} else {
94
-			$resultForParents = $this->shareManager->getAccessList($parentNode);
95
-			$this->cache[$parent] = $resultForParents;
96
-		}
97
-		$userIds = array_merge($userIds, $resultForParents['users']);
98
-		$public = $resultForParents['public'] || $resultForParents['remote'];
99
-
100
-
101
-		// Find out who, if anyone, is sharing the file
102
-		if ($file !== null) {
103
-			$resultForFile = $this->shareManager->getAccessList($file, false);
104
-			$userIds = array_merge($userIds, $resultForFile['users']);
105
-			$public = $resultForFile['public'] || $resultForFile['remote'] || $public;
106
-		}
107
-
108
-		// check if it is a group mount
109
-		if (\OCP\App::isEnabled("files_external")) {
110
-			$mounts = \OC_Mount_Config::getSystemMountPoints();
111
-			foreach ($mounts as $mount) {
112
-				if ($mount['mountpoint'] == substr($ownerPath, 1, strlen($mount['mountpoint']))) {
113
-					$mountedFor = $this->util->getUserWithAccessToMountPoint($mount['applicable']['users'], $mount['applicable']['groups']);
114
-					$userIds = array_merge($userIds, $mountedFor);
115
-				}
116
-			}
117
-		}
118
-
119
-		// Remove duplicate UIDs
120
-		$uniqueUserIds = array_unique($userIds);
121
-
122
-		return array('users' => $uniqueUserIds, 'public' => $public);
123
-	}
34
+    /** @var Util */
35
+    protected $util;
36
+
37
+    /** @var IRootFolder */
38
+    private $rootFolder;
39
+
40
+    /** @var IManager */
41
+    private $shareManager;
42
+
43
+    /**
44
+     * cache results of already checked folders
45
+     *
46
+     * @var array
47
+     */
48
+    protected $cache;
49
+
50
+    public function __construct(Util $util,
51
+                                IRootFolder $rootFolder,
52
+                                IManager $shareManager) {
53
+        $this->util = $util;
54
+        $this->cache = new CappedMemoryCache();
55
+        $this->rootFolder = $rootFolder;
56
+        $this->shareManager = $shareManager;
57
+    }
58
+
59
+
60
+    /**
61
+     * get list of users with access to the file
62
+     *
63
+     * @param string $path to the file
64
+     * @return array  ['users' => $uniqueUserIds, 'public' => $public]
65
+     */
66
+    public function getAccessList($path) {
67
+
68
+        // Make sure that a share key is generated for the owner too
69
+        list($owner, $ownerPath) = $this->util->getUidAndFilename($path);
70
+
71
+        // always add owner to the list of users with access to the file
72
+        $userIds = array($owner);
73
+
74
+        if (!$this->util->isFile($owner . '/' . $ownerPath)) {
75
+            return array('users' => $userIds, 'public' => false);
76
+        }
77
+
78
+        $ownerPath = substr($ownerPath, strlen('/files'));
79
+        $userFolder = $this->rootFolder->getUserFolder($owner);
80
+        try {
81
+            $file = $userFolder->get($ownerPath);
82
+        } catch (NotFoundException $e) {
83
+            $file = null;
84
+        }
85
+        $ownerPath = $this->util->stripPartialFileExtension($ownerPath);
86
+
87
+        // first get the shares for the parent and cache the result so that we don't
88
+        // need to check all parents for every file
89
+        $parent = dirname($ownerPath);
90
+        $parentNode = $userFolder->get($parent);
91
+        if (isset($this->cache[$parent])) {
92
+            $resultForParents = $this->cache[$parent];
93
+        } else {
94
+            $resultForParents = $this->shareManager->getAccessList($parentNode);
95
+            $this->cache[$parent] = $resultForParents;
96
+        }
97
+        $userIds = array_merge($userIds, $resultForParents['users']);
98
+        $public = $resultForParents['public'] || $resultForParents['remote'];
99
+
100
+
101
+        // Find out who, if anyone, is sharing the file
102
+        if ($file !== null) {
103
+            $resultForFile = $this->shareManager->getAccessList($file, false);
104
+            $userIds = array_merge($userIds, $resultForFile['users']);
105
+            $public = $resultForFile['public'] || $resultForFile['remote'] || $public;
106
+        }
107
+
108
+        // check if it is a group mount
109
+        if (\OCP\App::isEnabled("files_external")) {
110
+            $mounts = \OC_Mount_Config::getSystemMountPoints();
111
+            foreach ($mounts as $mount) {
112
+                if ($mount['mountpoint'] == substr($ownerPath, 1, strlen($mount['mountpoint']))) {
113
+                    $mountedFor = $this->util->getUserWithAccessToMountPoint($mount['applicable']['users'], $mount['applicable']['groups']);
114
+                    $userIds = array_merge($userIds, $mountedFor);
115
+                }
116
+            }
117
+        }
118
+
119
+        // Remove duplicate UIDs
120
+        $uniqueUserIds = array_unique($userIds);
121
+
122
+        return array('users' => $uniqueUserIds, 'public' => $public);
123
+    }
124 124
 
125 125
 }
Please login to merge, or discard this patch.
lib/private/Encryption/EncryptionWrapper.php 1 patch
Indentation   +73 added lines, -73 removed lines patch added patch discarded remove patch
@@ -41,85 +41,85 @@
 block discarded – undo
41 41
  */
42 42
 class EncryptionWrapper {
43 43
 
44
-	/** @var ArrayCache  */
45
-	private $arrayCache;
44
+    /** @var ArrayCache  */
45
+    private $arrayCache;
46 46
 
47
-	/** @var  Manager */
48
-	private $manager;
47
+    /** @var  Manager */
48
+    private $manager;
49 49
 
50
-	/** @var  ILogger */
51
-	private $logger;
50
+    /** @var  ILogger */
51
+    private $logger;
52 52
 
53
-	/**
54
-	 * EncryptionWrapper constructor.
55
-	 *
56
-	 * @param ArrayCache $arrayCache
57
-	 * @param Manager $manager
58
-	 * @param ILogger $logger
59
-	 */
60
-	public function __construct(ArrayCache $arrayCache,
61
-								Manager $manager,
62
-								ILogger $logger
63
-	) {
64
-		$this->arrayCache = $arrayCache;
65
-		$this->manager = $manager;
66
-		$this->logger = $logger;
67
-	}
53
+    /**
54
+     * EncryptionWrapper constructor.
55
+     *
56
+     * @param ArrayCache $arrayCache
57
+     * @param Manager $manager
58
+     * @param ILogger $logger
59
+     */
60
+    public function __construct(ArrayCache $arrayCache,
61
+                                Manager $manager,
62
+                                ILogger $logger
63
+    ) {
64
+        $this->arrayCache = $arrayCache;
65
+        $this->manager = $manager;
66
+        $this->logger = $logger;
67
+    }
68 68
 
69
-	/**
70
-	 * Wraps the given storage when it is not a shared storage
71
-	 *
72
-	 * @param string $mountPoint
73
-	 * @param Storage $storage
74
-	 * @param IMountPoint $mount
75
-	 * @return Encryption|Storage
76
-	 */
77
-	public function wrapStorage($mountPoint, Storage $storage, IMountPoint $mount) {
78
-		$parameters = [
79
-			'storage' => $storage,
80
-			'mountPoint' => $mountPoint,
81
-			'mount' => $mount
82
-		];
69
+    /**
70
+     * Wraps the given storage when it is not a shared storage
71
+     *
72
+     * @param string $mountPoint
73
+     * @param Storage $storage
74
+     * @param IMountPoint $mount
75
+     * @return Encryption|Storage
76
+     */
77
+    public function wrapStorage($mountPoint, Storage $storage, IMountPoint $mount) {
78
+        $parameters = [
79
+            'storage' => $storage,
80
+            'mountPoint' => $mountPoint,
81
+            'mount' => $mount
82
+        ];
83 83
 
84
-		if (!$storage->instanceOfStorage('OCA\Files_Sharing\SharedStorage')
85
-			&& !$storage->instanceOfStorage('OCA\Files_Sharing\External\Storage')
86
-			&& !$storage->instanceOfStorage('OC\Files\Storage\OwnCloud')) {
84
+        if (!$storage->instanceOfStorage('OCA\Files_Sharing\SharedStorage')
85
+            && !$storage->instanceOfStorage('OCA\Files_Sharing\External\Storage')
86
+            && !$storage->instanceOfStorage('OC\Files\Storage\OwnCloud')) {
87 87
 
88
-			$user = \OC::$server->getUserSession()->getUser();
89
-			$mountManager = Filesystem::getMountManager();
90
-			$uid = $user ? $user->getUID() : null;
91
-			$fileHelper = \OC::$server->getEncryptionFilesHelper();
92
-			$keyStorage = \OC::$server->getEncryptionKeyStorage();
88
+            $user = \OC::$server->getUserSession()->getUser();
89
+            $mountManager = Filesystem::getMountManager();
90
+            $uid = $user ? $user->getUID() : null;
91
+            $fileHelper = \OC::$server->getEncryptionFilesHelper();
92
+            $keyStorage = \OC::$server->getEncryptionKeyStorage();
93 93
 
94
-			$util = new Util(
95
-				new View(),
96
-				\OC::$server->getUserManager(),
97
-				\OC::$server->getGroupManager(),
98
-				\OC::$server->getConfig()
99
-			);
100
-			$update = new Update(
101
-				new View(),
102
-				$util,
103
-				Filesystem::getMountManager(),
104
-				$this->manager,
105
-				$fileHelper,
106
-				$uid
107
-			);
108
-			return new Encryption(
109
-				$parameters,
110
-				$this->manager,
111
-				$util,
112
-				$this->logger,
113
-				$fileHelper,
114
-				$uid,
115
-				$keyStorage,
116
-				$update,
117
-				$mountManager,
118
-				$this->arrayCache
119
-			);
120
-		} else {
121
-			return $storage;
122
-		}
123
-	}
94
+            $util = new Util(
95
+                new View(),
96
+                \OC::$server->getUserManager(),
97
+                \OC::$server->getGroupManager(),
98
+                \OC::$server->getConfig()
99
+            );
100
+            $update = new Update(
101
+                new View(),
102
+                $util,
103
+                Filesystem::getMountManager(),
104
+                $this->manager,
105
+                $fileHelper,
106
+                $uid
107
+            );
108
+            return new Encryption(
109
+                $parameters,
110
+                $this->manager,
111
+                $util,
112
+                $this->logger,
113
+                $fileHelper,
114
+                $uid,
115
+                $keyStorage,
116
+                $update,
117
+                $mountManager,
118
+                $this->arrayCache
119
+            );
120
+        } else {
121
+            return $storage;
122
+        }
123
+    }
124 124
 
125 125
 }
Please login to merge, or discard this patch.
lib/private/Encryption/Keys/Storage.php 2 patches
Spacing   +19 added lines, -19 removed lines patch added patch discarded remove patch
@@ -66,8 +66,8 @@  discard block
 block discarded – undo
66 66
 		$this->util = $util;
67 67
 
68 68
 		$this->encryption_base_dir = '/files_encryption';
69
-		$this->keys_base_dir = $this->encryption_base_dir .'/keys';
70
-		$this->backup_base_dir = $this->encryption_base_dir .'/backup';
69
+		$this->keys_base_dir = $this->encryption_base_dir.'/keys';
70
+		$this->backup_base_dir = $this->encryption_base_dir.'/backup';
71 71
 		$this->root_dir = $this->util->getKeyStorageRoot();
72 72
 	}
73 73
 
@@ -85,14 +85,14 @@  discard block
 block discarded – undo
85 85
 	public function getFileKey($path, $keyId, $encryptionModuleId) {
86 86
 		$realFile = $this->util->stripPartialFileExtension($path);
87 87
 		$keyDir = $this->getFileKeyDir($encryptionModuleId, $realFile);
88
-		$key = $this->getKey($keyDir . $keyId);
88
+		$key = $this->getKey($keyDir.$keyId);
89 89
 
90 90
 		if ($key === '' && $realFile !== $path) {
91 91
 			// Check if the part file has keys and use them, if no normal keys
92 92
 			// exist. This is required to fix copyBetweenStorage() when we
93 93
 			// rename a .part file over storage borders.
94 94
 			$keyDir = $this->getFileKeyDir($encryptionModuleId, $path);
95
-			$key = $this->getKey($keyDir . $keyId);
95
+			$key = $this->getKey($keyDir.$keyId);
96 96
 		}
97 97
 
98 98
 		return $key;
@@ -119,7 +119,7 @@  discard block
 block discarded – undo
119 119
 	 */
120 120
 	public function setFileKey($path, $keyId, $key, $encryptionModuleId) {
121 121
 		$keyDir = $this->getFileKeyDir($encryptionModuleId, $path);
122
-		return $this->setKey($keyDir . $keyId, $key);
122
+		return $this->setKey($keyDir.$keyId, $key);
123 123
 	}
124 124
 
125 125
 	/**
@@ -143,7 +143,7 @@  discard block
 block discarded – undo
143 143
 	 */
144 144
 	public function deleteFileKey($path, $keyId, $encryptionModuleId) {
145 145
 		$keyDir = $this->getFileKeyDir($encryptionModuleId, $path);
146
-		return !$this->view->file_exists($keyDir . $keyId) || $this->view->unlink($keyDir . $keyId);
146
+		return !$this->view->file_exists($keyDir.$keyId) || $this->view->unlink($keyDir.$keyId);
147 147
 	}
148 148
 
149 149
 	/**
@@ -173,10 +173,10 @@  discard block
 block discarded – undo
173 173
 	protected function constructUserKeyPath($encryptionModuleId, $keyId, $uid) {
174 174
 
175 175
 		if ($uid === null) {
176
-			$path = $this->root_dir . '/' . $this->encryption_base_dir . '/' . $encryptionModuleId . '/' . $keyId;
176
+			$path = $this->root_dir.'/'.$this->encryption_base_dir.'/'.$encryptionModuleId.'/'.$keyId;
177 177
 		} else {
178
-			$path = $this->root_dir . '/' . $uid . $this->encryption_base_dir . '/'
179
-				. $encryptionModuleId . '/' . $uid . '.' . $keyId;
178
+			$path = $this->root_dir.'/'.$uid.$this->encryption_base_dir.'/'
179
+				. $encryptionModuleId.'/'.$uid.'.'.$keyId;
180 180
 		}
181 181
 
182 182
 		return \OC\Files\Filesystem::normalizePath($path);
@@ -194,7 +194,7 @@  discard block
 block discarded – undo
194 194
 
195 195
 		if ($this->view->file_exists($path)) {
196 196
 			if (isset($this->keyCache[$path])) {
197
-				$key =  $this->keyCache[$path];
197
+				$key = $this->keyCache[$path];
198 198
 			} else {
199 199
 				$key = $this->view->file_get_contents($path);
200 200
 				$this->keyCache[$path] = $key;
@@ -238,12 +238,12 @@  discard block
 block discarded – undo
238 238
 
239 239
 		// in case of system wide mount points the keys are stored directly in the data directory
240 240
 		if ($this->util->isSystemWideMountPoint($filename, $owner)) {
241
-			$keyPath = $this->root_dir . '/' . $this->keys_base_dir . $filename . '/';
241
+			$keyPath = $this->root_dir.'/'.$this->keys_base_dir.$filename.'/';
242 242
 		} else {
243
-			$keyPath = $this->root_dir . '/' . $owner . $this->keys_base_dir . $filename . '/';
243
+			$keyPath = $this->root_dir.'/'.$owner.$this->keys_base_dir.$filename.'/';
244 244
 		}
245 245
 
246
-		return Filesystem::normalizePath($keyPath . $encryptionModuleId . '/', false);
246
+		return Filesystem::normalizePath($keyPath.$encryptionModuleId.'/', false);
247 247
 	}
248 248
 
249 249
 	/**
@@ -300,13 +300,13 @@  discard block
 block discarded – undo
300 300
 	 * @since 12.0.0
301 301
 	 */
302 302
 	public function backupUserKeys($encryptionModuleId, $purpose, $uid) {
303
-		$source = $uid . $this->encryption_base_dir . '/' . $encryptionModuleId;
304
-		$backupDir = $uid . $this->backup_base_dir;
303
+		$source = $uid.$this->encryption_base_dir.'/'.$encryptionModuleId;
304
+		$backupDir = $uid.$this->backup_base_dir;
305 305
 		if (!$this->view->file_exists($backupDir)) {
306 306
 			$this->view->mkdir($backupDir);
307 307
 		}
308 308
 
309
-		$backupDir = $backupDir . '/' . $purpose . '.' . $encryptionModuleId . '.' . $this->getTimestamp();
309
+		$backupDir = $backupDir.'/'.$purpose.'.'.$encryptionModuleId.'.'.$this->getTimestamp();
310 310
 		$this->view->mkdir($backupDir);
311 311
 
312 312
 		return $this->view->copy($source, $backupDir);
@@ -332,9 +332,9 @@  discard block
 block discarded – undo
332 332
 		$systemWideMountPoint = $this->util->isSystemWideMountPoint($relativePath, $owner);
333 333
 
334 334
 		if ($systemWideMountPoint) {
335
-			$systemPath = $this->root_dir . '/' . $this->keys_base_dir . $relativePath . '/';
335
+			$systemPath = $this->root_dir.'/'.$this->keys_base_dir.$relativePath.'/';
336 336
 		} else {
337
-			$systemPath = $this->root_dir . '/' . $owner . $this->keys_base_dir . $relativePath . '/';
337
+			$systemPath = $this->root_dir.'/'.$owner.$this->keys_base_dir.$relativePath.'/';
338 338
 		}
339 339
 
340 340
 		return  Filesystem::normalizePath($systemPath, false);
@@ -351,7 +351,7 @@  discard block
 block discarded – undo
351 351
 			$sub_dirs = explode('/', ltrim($path, '/'));
352 352
 			$dir = '';
353 353
 			foreach ($sub_dirs as $sub_dir) {
354
-				$dir .= '/' . $sub_dir;
354
+				$dir .= '/'.$sub_dir;
355 355
 				if (!$this->view->is_dir($dir)) {
356 356
 					$this->view->mkdir($dir);
357 357
 				}
Please login to merge, or discard this patch.
Indentation   +340 added lines, -340 removed lines patch added patch discarded remove patch
@@ -32,345 +32,345 @@
 block discarded – undo
32 32
 
33 33
 class Storage implements IStorage {
34 34
 
35
-	// hidden file which indicate that the folder is a valid key storage
36
-	const KEY_STORAGE_MARKER = '.oc_key_storage';
37
-
38
-	/** @var View */
39
-	private $view;
40
-
41
-	/** @var Util */
42
-	private $util;
43
-
44
-	// base dir where all the file related keys are stored
45
-	/** @var string */
46
-	private $keys_base_dir;
47
-
48
-	// root of the key storage default is empty which means that we use the data folder
49
-	/** @var string */
50
-	private $root_dir;
51
-
52
-	/** @var string */
53
-	private $encryption_base_dir;
54
-
55
-	/** @var string */
56
-	private $backup_base_dir;
57
-
58
-	/** @var array */
59
-	private $keyCache = [];
60
-
61
-	/**
62
-	 * @param View $view
63
-	 * @param Util $util
64
-	 */
65
-	public function __construct(View $view, Util $util) {
66
-		$this->view = $view;
67
-		$this->util = $util;
68
-
69
-		$this->encryption_base_dir = '/files_encryption';
70
-		$this->keys_base_dir = $this->encryption_base_dir .'/keys';
71
-		$this->backup_base_dir = $this->encryption_base_dir .'/backup';
72
-		$this->root_dir = $this->util->getKeyStorageRoot();
73
-	}
74
-
75
-	/**
76
-	 * @inheritdoc
77
-	 */
78
-	public function getUserKey($uid, $keyId, $encryptionModuleId) {
79
-		$path = $this->constructUserKeyPath($encryptionModuleId, $keyId, $uid);
80
-		return $this->getKey($path);
81
-	}
82
-
83
-	/**
84
-	 * @inheritdoc
85
-	 */
86
-	public function getFileKey($path, $keyId, $encryptionModuleId) {
87
-		$realFile = $this->util->stripPartialFileExtension($path);
88
-		$keyDir = $this->getFileKeyDir($encryptionModuleId, $realFile);
89
-		$key = $this->getKey($keyDir . $keyId);
90
-
91
-		if ($key === '' && $realFile !== $path) {
92
-			// Check if the part file has keys and use them, if no normal keys
93
-			// exist. This is required to fix copyBetweenStorage() when we
94
-			// rename a .part file over storage borders.
95
-			$keyDir = $this->getFileKeyDir($encryptionModuleId, $path);
96
-			$key = $this->getKey($keyDir . $keyId);
97
-		}
98
-
99
-		return $key;
100
-	}
101
-
102
-	/**
103
-	 * @inheritdoc
104
-	 */
105
-	public function getSystemUserKey($keyId, $encryptionModuleId) {
106
-		$path = $this->constructUserKeyPath($encryptionModuleId, $keyId, null);
107
-		return $this->getKey($path);
108
-	}
109
-
110
-	/**
111
-	 * @inheritdoc
112
-	 */
113
-	public function setUserKey($uid, $keyId, $key, $encryptionModuleId) {
114
-		$path = $this->constructUserKeyPath($encryptionModuleId, $keyId, $uid);
115
-		return $this->setKey($path, $key);
116
-	}
117
-
118
-	/**
119
-	 * @inheritdoc
120
-	 */
121
-	public function setFileKey($path, $keyId, $key, $encryptionModuleId) {
122
-		$keyDir = $this->getFileKeyDir($encryptionModuleId, $path);
123
-		return $this->setKey($keyDir . $keyId, $key);
124
-	}
125
-
126
-	/**
127
-	 * @inheritdoc
128
-	 */
129
-	public function setSystemUserKey($keyId, $key, $encryptionModuleId) {
130
-		$path = $this->constructUserKeyPath($encryptionModuleId, $keyId, null);
131
-		return $this->setKey($path, $key);
132
-	}
133
-
134
-	/**
135
-	 * @inheritdoc
136
-	 */
137
-	public function deleteUserKey($uid, $keyId, $encryptionModuleId) {
138
-		try {
139
-			$path = $this->constructUserKeyPath($encryptionModuleId, $keyId, $uid);
140
-			return !$this->view->file_exists($path) || $this->view->unlink($path);
141
-		} catch (NoUserException $e) {
142
-			// this exception can come from initMountPoints() from setupUserMounts()
143
-			// for a deleted user.
144
-			//
145
-			// It means, that:
146
-			// - we are not running in alternative storage mode because we don't call
147
-			// initMountPoints() in that mode
148
-			// - the keys were in the user's home but since the user was deleted, the
149
-			// user's home is gone and so are the keys
150
-			//
151
-			// So there is nothing to do, just ignore.
152
-		}
153
-	}
154
-
155
-	/**
156
-	 * @inheritdoc
157
-	 */
158
-	public function deleteFileKey($path, $keyId, $encryptionModuleId) {
159
-		$keyDir = $this->getFileKeyDir($encryptionModuleId, $path);
160
-		return !$this->view->file_exists($keyDir . $keyId) || $this->view->unlink($keyDir . $keyId);
161
-	}
162
-
163
-	/**
164
-	 * @inheritdoc
165
-	 */
166
-	public function deleteAllFileKeys($path) {
167
-		$keyDir = $this->getFileKeyDir('', $path);
168
-		return !$this->view->file_exists($keyDir) || $this->view->deleteAll($keyDir);
169
-	}
170
-
171
-	/**
172
-	 * @inheritdoc
173
-	 */
174
-	public function deleteSystemUserKey($keyId, $encryptionModuleId) {
175
-		$path = $this->constructUserKeyPath($encryptionModuleId, $keyId, null);
176
-		return !$this->view->file_exists($path) || $this->view->unlink($path);
177
-	}
178
-
179
-	/**
180
-	 * construct path to users key
181
-	 *
182
-	 * @param string $encryptionModuleId
183
-	 * @param string $keyId
184
-	 * @param string $uid
185
-	 * @return string
186
-	 */
187
-	protected function constructUserKeyPath($encryptionModuleId, $keyId, $uid) {
188
-
189
-		if ($uid === null) {
190
-			$path = $this->root_dir . '/' . $this->encryption_base_dir . '/' . $encryptionModuleId . '/' . $keyId;
191
-		} else {
192
-			$path = $this->root_dir . '/' . $uid . $this->encryption_base_dir . '/'
193
-				. $encryptionModuleId . '/' . $uid . '.' . $keyId;
194
-		}
195
-
196
-		return \OC\Files\Filesystem::normalizePath($path);
197
-	}
198
-
199
-	/**
200
-	 * read key from hard disk
201
-	 *
202
-	 * @param string $path to key
203
-	 * @return string
204
-	 */
205
-	private function getKey($path) {
206
-
207
-		$key = '';
208
-
209
-		if ($this->view->file_exists($path)) {
210
-			if (isset($this->keyCache[$path])) {
211
-				$key =  $this->keyCache[$path];
212
-			} else {
213
-				$key = $this->view->file_get_contents($path);
214
-				$this->keyCache[$path] = $key;
215
-			}
216
-		}
217
-
218
-		return $key;
219
-	}
220
-
221
-	/**
222
-	 * write key to disk
223
-	 *
224
-	 *
225
-	 * @param string $path path to key directory
226
-	 * @param string $key key
227
-	 * @return bool
228
-	 */
229
-	private function setKey($path, $key) {
230
-		$this->keySetPreparation(dirname($path));
231
-
232
-		$result = $this->view->file_put_contents($path, $key);
233
-
234
-		if (is_int($result) && $result > 0) {
235
-			$this->keyCache[$path] = $key;
236
-			return true;
237
-		}
238
-
239
-		return false;
240
-	}
241
-
242
-	/**
243
-	 * get path to key folder for a given file
244
-	 *
245
-	 * @param string $encryptionModuleId
246
-	 * @param string $path path to the file, relative to data/
247
-	 * @return string
248
-	 */
249
-	private function getFileKeyDir($encryptionModuleId, $path) {
250
-
251
-		list($owner, $filename) = $this->util->getUidAndFilename($path);
252
-
253
-		// in case of system wide mount points the keys are stored directly in the data directory
254
-		if ($this->util->isSystemWideMountPoint($filename, $owner)) {
255
-			$keyPath = $this->root_dir . '/' . $this->keys_base_dir . $filename . '/';
256
-		} else {
257
-			$keyPath = $this->root_dir . '/' . $owner . $this->keys_base_dir . $filename . '/';
258
-		}
259
-
260
-		return Filesystem::normalizePath($keyPath . $encryptionModuleId . '/', false);
261
-	}
262
-
263
-	/**
264
-	 * move keys if a file was renamed
265
-	 *
266
-	 * @param string $source
267
-	 * @param string $target
268
-	 * @return boolean
269
-	 */
270
-	public function renameKeys($source, $target) {
271
-
272
-		$sourcePath = $this->getPathToKeys($source);
273
-		$targetPath = $this->getPathToKeys($target);
274
-
275
-		if ($this->view->file_exists($sourcePath)) {
276
-			$this->keySetPreparation(dirname($targetPath));
277
-			$this->view->rename($sourcePath, $targetPath);
278
-
279
-			return true;
280
-		}
281
-
282
-		return false;
283
-	}
284
-
285
-
286
-	/**
287
-	 * copy keys if a file was renamed
288
-	 *
289
-	 * @param string $source
290
-	 * @param string $target
291
-	 * @return boolean
292
-	 */
293
-	public function copyKeys($source, $target) {
294
-
295
-		$sourcePath = $this->getPathToKeys($source);
296
-		$targetPath = $this->getPathToKeys($target);
297
-
298
-		if ($this->view->file_exists($sourcePath)) {
299
-			$this->keySetPreparation(dirname($targetPath));
300
-			$this->view->copy($sourcePath, $targetPath);
301
-			return true;
302
-		}
303
-
304
-		return false;
305
-	}
306
-
307
-	/**
308
-	 * backup keys of a given encryption module
309
-	 *
310
-	 * @param string $encryptionModuleId
311
-	 * @param string $purpose
312
-	 * @param string $uid
313
-	 * @return bool
314
-	 * @since 12.0.0
315
-	 */
316
-	public function backupUserKeys($encryptionModuleId, $purpose, $uid) {
317
-		$source = $uid . $this->encryption_base_dir . '/' . $encryptionModuleId;
318
-		$backupDir = $uid . $this->backup_base_dir;
319
-		if (!$this->view->file_exists($backupDir)) {
320
-			$this->view->mkdir($backupDir);
321
-		}
322
-
323
-		$backupDir = $backupDir . '/' . $purpose . '.' . $encryptionModuleId . '.' . $this->getTimestamp();
324
-		$this->view->mkdir($backupDir);
325
-
326
-		return $this->view->copy($source, $backupDir);
327
-	}
328
-
329
-	/**
330
-	 * get the current timestamp
331
-	 *
332
-	 * @return int
333
-	 */
334
-	protected function getTimestamp() {
335
-		return time();
336
-	}
337
-
338
-	/**
339
-	 * get system wide path and detect mount points
340
-	 *
341
-	 * @param string $path
342
-	 * @return string
343
-	 */
344
-	protected function getPathToKeys($path) {
345
-		list($owner, $relativePath) = $this->util->getUidAndFilename($path);
346
-		$systemWideMountPoint = $this->util->isSystemWideMountPoint($relativePath, $owner);
347
-
348
-		if ($systemWideMountPoint) {
349
-			$systemPath = $this->root_dir . '/' . $this->keys_base_dir . $relativePath . '/';
350
-		} else {
351
-			$systemPath = $this->root_dir . '/' . $owner . $this->keys_base_dir . $relativePath . '/';
352
-		}
353
-
354
-		return  Filesystem::normalizePath($systemPath, false);
355
-	}
356
-
357
-	/**
358
-	 * Make preparations to filesystem for saving a key file
359
-	 *
360
-	 * @param string $path relative to the views root
361
-	 */
362
-	protected function keySetPreparation($path) {
363
-		// If the file resides within a subdirectory, create it
364
-		if (!$this->view->file_exists($path)) {
365
-			$sub_dirs = explode('/', ltrim($path, '/'));
366
-			$dir = '';
367
-			foreach ($sub_dirs as $sub_dir) {
368
-				$dir .= '/' . $sub_dir;
369
-				if (!$this->view->is_dir($dir)) {
370
-					$this->view->mkdir($dir);
371
-				}
372
-			}
373
-		}
374
-	}
35
+    // hidden file which indicate that the folder is a valid key storage
36
+    const KEY_STORAGE_MARKER = '.oc_key_storage';
37
+
38
+    /** @var View */
39
+    private $view;
40
+
41
+    /** @var Util */
42
+    private $util;
43
+
44
+    // base dir where all the file related keys are stored
45
+    /** @var string */
46
+    private $keys_base_dir;
47
+
48
+    // root of the key storage default is empty which means that we use the data folder
49
+    /** @var string */
50
+    private $root_dir;
51
+
52
+    /** @var string */
53
+    private $encryption_base_dir;
54
+
55
+    /** @var string */
56
+    private $backup_base_dir;
57
+
58
+    /** @var array */
59
+    private $keyCache = [];
60
+
61
+    /**
62
+     * @param View $view
63
+     * @param Util $util
64
+     */
65
+    public function __construct(View $view, Util $util) {
66
+        $this->view = $view;
67
+        $this->util = $util;
68
+
69
+        $this->encryption_base_dir = '/files_encryption';
70
+        $this->keys_base_dir = $this->encryption_base_dir .'/keys';
71
+        $this->backup_base_dir = $this->encryption_base_dir .'/backup';
72
+        $this->root_dir = $this->util->getKeyStorageRoot();
73
+    }
74
+
75
+    /**
76
+     * @inheritdoc
77
+     */
78
+    public function getUserKey($uid, $keyId, $encryptionModuleId) {
79
+        $path = $this->constructUserKeyPath($encryptionModuleId, $keyId, $uid);
80
+        return $this->getKey($path);
81
+    }
82
+
83
+    /**
84
+     * @inheritdoc
85
+     */
86
+    public function getFileKey($path, $keyId, $encryptionModuleId) {
87
+        $realFile = $this->util->stripPartialFileExtension($path);
88
+        $keyDir = $this->getFileKeyDir($encryptionModuleId, $realFile);
89
+        $key = $this->getKey($keyDir . $keyId);
90
+
91
+        if ($key === '' && $realFile !== $path) {
92
+            // Check if the part file has keys and use them, if no normal keys
93
+            // exist. This is required to fix copyBetweenStorage() when we
94
+            // rename a .part file over storage borders.
95
+            $keyDir = $this->getFileKeyDir($encryptionModuleId, $path);
96
+            $key = $this->getKey($keyDir . $keyId);
97
+        }
98
+
99
+        return $key;
100
+    }
101
+
102
+    /**
103
+     * @inheritdoc
104
+     */
105
+    public function getSystemUserKey($keyId, $encryptionModuleId) {
106
+        $path = $this->constructUserKeyPath($encryptionModuleId, $keyId, null);
107
+        return $this->getKey($path);
108
+    }
109
+
110
+    /**
111
+     * @inheritdoc
112
+     */
113
+    public function setUserKey($uid, $keyId, $key, $encryptionModuleId) {
114
+        $path = $this->constructUserKeyPath($encryptionModuleId, $keyId, $uid);
115
+        return $this->setKey($path, $key);
116
+    }
117
+
118
+    /**
119
+     * @inheritdoc
120
+     */
121
+    public function setFileKey($path, $keyId, $key, $encryptionModuleId) {
122
+        $keyDir = $this->getFileKeyDir($encryptionModuleId, $path);
123
+        return $this->setKey($keyDir . $keyId, $key);
124
+    }
125
+
126
+    /**
127
+     * @inheritdoc
128
+     */
129
+    public function setSystemUserKey($keyId, $key, $encryptionModuleId) {
130
+        $path = $this->constructUserKeyPath($encryptionModuleId, $keyId, null);
131
+        return $this->setKey($path, $key);
132
+    }
133
+
134
+    /**
135
+     * @inheritdoc
136
+     */
137
+    public function deleteUserKey($uid, $keyId, $encryptionModuleId) {
138
+        try {
139
+            $path = $this->constructUserKeyPath($encryptionModuleId, $keyId, $uid);
140
+            return !$this->view->file_exists($path) || $this->view->unlink($path);
141
+        } catch (NoUserException $e) {
142
+            // this exception can come from initMountPoints() from setupUserMounts()
143
+            // for a deleted user.
144
+            //
145
+            // It means, that:
146
+            // - we are not running in alternative storage mode because we don't call
147
+            // initMountPoints() in that mode
148
+            // - the keys were in the user's home but since the user was deleted, the
149
+            // user's home is gone and so are the keys
150
+            //
151
+            // So there is nothing to do, just ignore.
152
+        }
153
+    }
154
+
155
+    /**
156
+     * @inheritdoc
157
+     */
158
+    public function deleteFileKey($path, $keyId, $encryptionModuleId) {
159
+        $keyDir = $this->getFileKeyDir($encryptionModuleId, $path);
160
+        return !$this->view->file_exists($keyDir . $keyId) || $this->view->unlink($keyDir . $keyId);
161
+    }
162
+
163
+    /**
164
+     * @inheritdoc
165
+     */
166
+    public function deleteAllFileKeys($path) {
167
+        $keyDir = $this->getFileKeyDir('', $path);
168
+        return !$this->view->file_exists($keyDir) || $this->view->deleteAll($keyDir);
169
+    }
170
+
171
+    /**
172
+     * @inheritdoc
173
+     */
174
+    public function deleteSystemUserKey($keyId, $encryptionModuleId) {
175
+        $path = $this->constructUserKeyPath($encryptionModuleId, $keyId, null);
176
+        return !$this->view->file_exists($path) || $this->view->unlink($path);
177
+    }
178
+
179
+    /**
180
+     * construct path to users key
181
+     *
182
+     * @param string $encryptionModuleId
183
+     * @param string $keyId
184
+     * @param string $uid
185
+     * @return string
186
+     */
187
+    protected function constructUserKeyPath($encryptionModuleId, $keyId, $uid) {
188
+
189
+        if ($uid === null) {
190
+            $path = $this->root_dir . '/' . $this->encryption_base_dir . '/' . $encryptionModuleId . '/' . $keyId;
191
+        } else {
192
+            $path = $this->root_dir . '/' . $uid . $this->encryption_base_dir . '/'
193
+                . $encryptionModuleId . '/' . $uid . '.' . $keyId;
194
+        }
195
+
196
+        return \OC\Files\Filesystem::normalizePath($path);
197
+    }
198
+
199
+    /**
200
+     * read key from hard disk
201
+     *
202
+     * @param string $path to key
203
+     * @return string
204
+     */
205
+    private function getKey($path) {
206
+
207
+        $key = '';
208
+
209
+        if ($this->view->file_exists($path)) {
210
+            if (isset($this->keyCache[$path])) {
211
+                $key =  $this->keyCache[$path];
212
+            } else {
213
+                $key = $this->view->file_get_contents($path);
214
+                $this->keyCache[$path] = $key;
215
+            }
216
+        }
217
+
218
+        return $key;
219
+    }
220
+
221
+    /**
222
+     * write key to disk
223
+     *
224
+     *
225
+     * @param string $path path to key directory
226
+     * @param string $key key
227
+     * @return bool
228
+     */
229
+    private function setKey($path, $key) {
230
+        $this->keySetPreparation(dirname($path));
231
+
232
+        $result = $this->view->file_put_contents($path, $key);
233
+
234
+        if (is_int($result) && $result > 0) {
235
+            $this->keyCache[$path] = $key;
236
+            return true;
237
+        }
238
+
239
+        return false;
240
+    }
241
+
242
+    /**
243
+     * get path to key folder for a given file
244
+     *
245
+     * @param string $encryptionModuleId
246
+     * @param string $path path to the file, relative to data/
247
+     * @return string
248
+     */
249
+    private function getFileKeyDir($encryptionModuleId, $path) {
250
+
251
+        list($owner, $filename) = $this->util->getUidAndFilename($path);
252
+
253
+        // in case of system wide mount points the keys are stored directly in the data directory
254
+        if ($this->util->isSystemWideMountPoint($filename, $owner)) {
255
+            $keyPath = $this->root_dir . '/' . $this->keys_base_dir . $filename . '/';
256
+        } else {
257
+            $keyPath = $this->root_dir . '/' . $owner . $this->keys_base_dir . $filename . '/';
258
+        }
259
+
260
+        return Filesystem::normalizePath($keyPath . $encryptionModuleId . '/', false);
261
+    }
262
+
263
+    /**
264
+     * move keys if a file was renamed
265
+     *
266
+     * @param string $source
267
+     * @param string $target
268
+     * @return boolean
269
+     */
270
+    public function renameKeys($source, $target) {
271
+
272
+        $sourcePath = $this->getPathToKeys($source);
273
+        $targetPath = $this->getPathToKeys($target);
274
+
275
+        if ($this->view->file_exists($sourcePath)) {
276
+            $this->keySetPreparation(dirname($targetPath));
277
+            $this->view->rename($sourcePath, $targetPath);
278
+
279
+            return true;
280
+        }
281
+
282
+        return false;
283
+    }
284
+
285
+
286
+    /**
287
+     * copy keys if a file was renamed
288
+     *
289
+     * @param string $source
290
+     * @param string $target
291
+     * @return boolean
292
+     */
293
+    public function copyKeys($source, $target) {
294
+
295
+        $sourcePath = $this->getPathToKeys($source);
296
+        $targetPath = $this->getPathToKeys($target);
297
+
298
+        if ($this->view->file_exists($sourcePath)) {
299
+            $this->keySetPreparation(dirname($targetPath));
300
+            $this->view->copy($sourcePath, $targetPath);
301
+            return true;
302
+        }
303
+
304
+        return false;
305
+    }
306
+
307
+    /**
308
+     * backup keys of a given encryption module
309
+     *
310
+     * @param string $encryptionModuleId
311
+     * @param string $purpose
312
+     * @param string $uid
313
+     * @return bool
314
+     * @since 12.0.0
315
+     */
316
+    public function backupUserKeys($encryptionModuleId, $purpose, $uid) {
317
+        $source = $uid . $this->encryption_base_dir . '/' . $encryptionModuleId;
318
+        $backupDir = $uid . $this->backup_base_dir;
319
+        if (!$this->view->file_exists($backupDir)) {
320
+            $this->view->mkdir($backupDir);
321
+        }
322
+
323
+        $backupDir = $backupDir . '/' . $purpose . '.' . $encryptionModuleId . '.' . $this->getTimestamp();
324
+        $this->view->mkdir($backupDir);
325
+
326
+        return $this->view->copy($source, $backupDir);
327
+    }
328
+
329
+    /**
330
+     * get the current timestamp
331
+     *
332
+     * @return int
333
+     */
334
+    protected function getTimestamp() {
335
+        return time();
336
+    }
337
+
338
+    /**
339
+     * get system wide path and detect mount points
340
+     *
341
+     * @param string $path
342
+     * @return string
343
+     */
344
+    protected function getPathToKeys($path) {
345
+        list($owner, $relativePath) = $this->util->getUidAndFilename($path);
346
+        $systemWideMountPoint = $this->util->isSystemWideMountPoint($relativePath, $owner);
347
+
348
+        if ($systemWideMountPoint) {
349
+            $systemPath = $this->root_dir . '/' . $this->keys_base_dir . $relativePath . '/';
350
+        } else {
351
+            $systemPath = $this->root_dir . '/' . $owner . $this->keys_base_dir . $relativePath . '/';
352
+        }
353
+
354
+        return  Filesystem::normalizePath($systemPath, false);
355
+    }
356
+
357
+    /**
358
+     * Make preparations to filesystem for saving a key file
359
+     *
360
+     * @param string $path relative to the views root
361
+     */
362
+    protected function keySetPreparation($path) {
363
+        // If the file resides within a subdirectory, create it
364
+        if (!$this->view->file_exists($path)) {
365
+            $sub_dirs = explode('/', ltrim($path, '/'));
366
+            $dir = '';
367
+            foreach ($sub_dirs as $sub_dir) {
368
+                $dir .= '/' . $sub_dir;
369
+                if (!$this->view->is_dir($dir)) {
370
+                    $this->view->mkdir($dir);
371
+                }
372
+            }
373
+        }
374
+    }
375 375
 
376 376
 }
Please login to merge, or discard this patch.