Passed
Push — master ( eb9faa...c3969d )
by Morris
11:38 queued 11s
created
lib/public/Files/Storage/IStorage.php 1 patch
Indentation   +411 added lines, -411 removed lines patch added patch discarded remove patch
@@ -44,415 +44,415 @@
 block discarded – undo
44 44
  * @since 9.0.0
45 45
  */
46 46
 interface IStorage {
47
-	/**
48
-	 * $parameters is a free form array with the configuration options needed to construct the storage
49
-	 *
50
-	 * @param array $parameters
51
-	 * @since 9.0.0
52
-	 */
53
-	public function __construct($parameters);
54
-
55
-	/**
56
-	 * Get the identifier for the storage,
57
-	 * the returned id should be the same for every storage object that is created with the same parameters
58
-	 * and two storage objects with the same id should refer to two storages that display the same files.
59
-	 *
60
-	 * @return string
61
-	 * @since 9.0.0
62
-	 */
63
-	public function getId();
64
-
65
-	/**
66
-	 * see http://php.net/manual/en/function.mkdir.php
67
-	 * implementations need to implement a recursive mkdir
68
-	 *
69
-	 * @param string $path
70
-	 * @return bool
71
-	 * @since 9.0.0
72
-	 */
73
-	public function mkdir($path);
74
-
75
-	/**
76
-	 * see http://php.net/manual/en/function.rmdir.php
77
-	 *
78
-	 * @param string $path
79
-	 * @return bool
80
-	 * @since 9.0.0
81
-	 */
82
-	public function rmdir($path);
83
-
84
-	/**
85
-	 * see http://php.net/manual/en/function.opendir.php
86
-	 *
87
-	 * @param string $path
88
-	 * @return resource|false
89
-	 * @since 9.0.0
90
-	 */
91
-	public function opendir($path);
92
-
93
-	/**
94
-	 * see http://php.net/manual/en/function.is-dir.php
95
-	 *
96
-	 * @param string $path
97
-	 * @return bool
98
-	 * @since 9.0.0
99
-	 */
100
-	public function is_dir($path);
101
-
102
-	/**
103
-	 * see http://php.net/manual/en/function.is-file.php
104
-	 *
105
-	 * @param string $path
106
-	 * @return bool
107
-	 * @since 9.0.0
108
-	 */
109
-	public function is_file($path);
110
-
111
-	/**
112
-	 * see http://php.net/manual/en/function.stat.php
113
-	 * only the following keys are required in the result: size and mtime
114
-	 *
115
-	 * @param string $path
116
-	 * @return array|false
117
-	 * @since 9.0.0
118
-	 */
119
-	public function stat($path);
120
-
121
-	/**
122
-	 * see http://php.net/manual/en/function.filetype.php
123
-	 *
124
-	 * @param string $path
125
-	 * @return string|false
126
-	 * @since 9.0.0
127
-	 */
128
-	public function filetype($path);
129
-
130
-	/**
131
-	 * see http://php.net/manual/en/function.filesize.php
132
-	 * The result for filesize when called on a folder is required to be 0
133
-	 *
134
-	 * @param string $path
135
-	 * @return int|false
136
-	 * @since 9.0.0
137
-	 */
138
-	public function filesize($path);
139
-
140
-	/**
141
-	 * check if a file can be created in $path
142
-	 *
143
-	 * @param string $path
144
-	 * @return bool
145
-	 * @since 9.0.0
146
-	 */
147
-	public function isCreatable($path);
148
-
149
-	/**
150
-	 * check if a file can be read
151
-	 *
152
-	 * @param string $path
153
-	 * @return bool
154
-	 * @since 9.0.0
155
-	 */
156
-	public function isReadable($path);
157
-
158
-	/**
159
-	 * check if a file can be written to
160
-	 *
161
-	 * @param string $path
162
-	 * @return bool
163
-	 * @since 9.0.0
164
-	 */
165
-	public function isUpdatable($path);
166
-
167
-	/**
168
-	 * check if a file can be deleted
169
-	 *
170
-	 * @param string $path
171
-	 * @return bool
172
-	 * @since 9.0.0
173
-	 */
174
-	public function isDeletable($path);
175
-
176
-	/**
177
-	 * check if a file can be shared
178
-	 *
179
-	 * @param string $path
180
-	 * @return bool
181
-	 * @since 9.0.0
182
-	 */
183
-	public function isSharable($path);
184
-
185
-	/**
186
-	 * get the full permissions of a path.
187
-	 * Should return a combination of the PERMISSION_ constants defined in lib/public/constants.php
188
-	 *
189
-	 * @param string $path
190
-	 * @return int
191
-	 * @since 9.0.0
192
-	 */
193
-	public function getPermissions($path);
194
-
195
-	/**
196
-	 * see http://php.net/manual/en/function.file_exists.php
197
-	 *
198
-	 * @param string $path
199
-	 * @return bool
200
-	 * @since 9.0.0
201
-	 */
202
-	public function file_exists($path);
203
-
204
-	/**
205
-	 * see http://php.net/manual/en/function.filemtime.php
206
-	 *
207
-	 * @param string $path
208
-	 * @return int|false
209
-	 * @since 9.0.0
210
-	 */
211
-	public function filemtime($path);
212
-
213
-	/**
214
-	 * see http://php.net/manual/en/function.file_get_contents.php
215
-	 *
216
-	 * @param string $path
217
-	 * @return string|false
218
-	 * @since 9.0.0
219
-	 */
220
-	public function file_get_contents($path);
221
-
222
-	/**
223
-	 * see http://php.net/manual/en/function.file_put_contents.php
224
-	 *
225
-	 * @param string $path
226
-	 * @param string $data
227
-	 * @return bool
228
-	 * @since 9.0.0
229
-	 */
230
-	public function file_put_contents($path, $data);
231
-
232
-	/**
233
-	 * see http://php.net/manual/en/function.unlink.php
234
-	 *
235
-	 * @param string $path
236
-	 * @return bool
237
-	 * @since 9.0.0
238
-	 */
239
-	public function unlink($path);
240
-
241
-	/**
242
-	 * see http://php.net/manual/en/function.rename.php
243
-	 *
244
-	 * @param string $path1
245
-	 * @param string $path2
246
-	 * @return bool
247
-	 * @since 9.0.0
248
-	 */
249
-	public function rename($path1, $path2);
250
-
251
-	/**
252
-	 * see http://php.net/manual/en/function.copy.php
253
-	 *
254
-	 * @param string $path1
255
-	 * @param string $path2
256
-	 * @return bool
257
-	 * @since 9.0.0
258
-	 */
259
-	public function copy($path1, $path2);
260
-
261
-	/**
262
-	 * see http://php.net/manual/en/function.fopen.php
263
-	 *
264
-	 * @param string $path
265
-	 * @param string $mode
266
-	 * @return resource|false
267
-	 * @since 9.0.0
268
-	 */
269
-	public function fopen($path, $mode);
270
-
271
-	/**
272
-	 * get the mimetype for a file or folder
273
-	 * The mimetype for a folder is required to be "httpd/unix-directory"
274
-	 *
275
-	 * @param string $path
276
-	 * @return string|false
277
-	 * @since 9.0.0
278
-	 */
279
-	public function getMimeType($path);
280
-
281
-	/**
282
-	 * see http://php.net/manual/en/function.hash-file.php
283
-	 *
284
-	 * @param string $type
285
-	 * @param string $path
286
-	 * @param bool $raw
287
-	 * @return string|false
288
-	 * @since 9.0.0
289
-	 */
290
-	public function hash($type, $path, $raw = false);
291
-
292
-	/**
293
-	 * see http://php.net/manual/en/function.free_space.php
294
-	 *
295
-	 * @param string $path
296
-	 * @return int|false
297
-	 * @since 9.0.0
298
-	 */
299
-	public function free_space($path);
300
-
301
-	/**
302
-	 * see http://php.net/manual/en/function.touch.php
303
-	 * If the backend does not support the operation, false should be returned
304
-	 *
305
-	 * @param string $path
306
-	 * @param int $mtime
307
-	 * @return bool
308
-	 * @since 9.0.0
309
-	 */
310
-	public function touch($path, $mtime = null);
311
-
312
-	/**
313
-	 * get the path to a local version of the file.
314
-	 * The local version of the file can be temporary and doesn't have to be persistent across requests
315
-	 *
316
-	 * @param string $path
317
-	 * @return string|false
318
-	 * @since 9.0.0
319
-	 */
320
-	public function getLocalFile($path);
321
-
322
-	/**
323
-	 * check if a file or folder has been updated since $time
324
-	 *
325
-	 * @param string $path
326
-	 * @param int $time
327
-	 * @return bool
328
-	 * @since 9.0.0
329
-	 *
330
-	 * hasUpdated for folders should return at least true if a file inside the folder is add, removed or renamed.
331
-	 * returning true for other changes in the folder is optional
332
-	 */
333
-	public function hasUpdated($path, $time);
334
-
335
-	/**
336
-	 * get the ETag for a file or folder
337
-	 *
338
-	 * @param string $path
339
-	 * @return string|false
340
-	 * @since 9.0.0
341
-	 */
342
-	public function getETag($path);
343
-
344
-	/**
345
-	 * Returns whether the storage is local, which means that files
346
-	 * are stored on the local filesystem instead of remotely.
347
-	 * Calling getLocalFile() for local storages should always
348
-	 * return the local files, whereas for non-local storages
349
-	 * it might return a temporary file.
350
-	 *
351
-	 * @return bool true if the files are stored locally, false otherwise
352
-	 * @since 9.0.0
353
-	 */
354
-	public function isLocal();
355
-
356
-	/**
357
-	 * Check if the storage is an instance of $class or is a wrapper for a storage that is an instance of $class
358
-	 *
359
-	 * @param string $class
360
-	 * @return bool
361
-	 * @since 9.0.0
362
-	 */
363
-	public function instanceOfStorage($class);
364
-
365
-	/**
366
-	 * A custom storage implementation can return an url for direct download of a give file.
367
-	 *
368
-	 * For now the returned array can hold the parameter url - in future more attributes might follow.
369
-	 *
370
-	 * @param string $path
371
-	 * @return array|false
372
-	 * @since 9.0.0
373
-	 */
374
-	public function getDirectDownload($path);
375
-
376
-	/**
377
-	 * @param string $path the path of the target folder
378
-	 * @param string $fileName the name of the file itself
379
-	 * @return void
380
-	 * @throws InvalidPathException
381
-	 * @since 9.0.0
382
-	 */
383
-	public function verifyPath($path, $fileName);
384
-
385
-	/**
386
-	 * @param IStorage $sourceStorage
387
-	 * @param string $sourceInternalPath
388
-	 * @param string $targetInternalPath
389
-	 * @return bool
390
-	 * @since 9.0.0
391
-	 */
392
-	public function copyFromStorage(IStorage $sourceStorage, $sourceInternalPath, $targetInternalPath);
393
-
394
-	/**
395
-	 * @param IStorage $sourceStorage
396
-	 * @param string $sourceInternalPath
397
-	 * @param string $targetInternalPath
398
-	 * @return bool
399
-	 * @since 9.0.0
400
-	 */
401
-	public function moveFromStorage(IStorage $sourceStorage, $sourceInternalPath, $targetInternalPath);
402
-
403
-	/**
404
-	 * Test a storage for availability
405
-	 *
406
-	 * @since 9.0.0
407
-	 * @return bool
408
-	 */
409
-	public function test();
410
-
411
-	/**
412
-	 * @since 9.0.0
413
-	 * @return array [ available, last_checked ]
414
-	 */
415
-	public function getAvailability();
416
-
417
-	/**
418
-	 * @since 9.0.0
419
-	 * @param bool $isAvailable
420
-	 */
421
-	public function setAvailability($isAvailable);
422
-
423
-	/**
424
-	 * @param string $path path for which to retrieve the owner
425
-	 * @since 9.0.0
426
-	 */
427
-	public function getOwner($path);
428
-
429
-	/**
430
-	 * @return ICache
431
-	 * @since 9.0.0
432
-	 */
433
-	public function getCache();
434
-
435
-	/**
436
-	 * @return IPropagator
437
-	 * @since 9.0.0
438
-	 */
439
-	public function getPropagator();
440
-
441
-	/**
442
-	 * @return IScanner
443
-	 * @since 9.0.0
444
-	 */
445
-	public function getScanner();
446
-
447
-	/**
448
-	 * @return IUpdater
449
-	 * @since 9.0.0
450
-	 */
451
-	public function getUpdater();
452
-
453
-	/**
454
-	 * @return IWatcher
455
-	 * @since 9.0.0
456
-	 */
457
-	public function getWatcher();
47
+    /**
48
+     * $parameters is a free form array with the configuration options needed to construct the storage
49
+     *
50
+     * @param array $parameters
51
+     * @since 9.0.0
52
+     */
53
+    public function __construct($parameters);
54
+
55
+    /**
56
+     * Get the identifier for the storage,
57
+     * the returned id should be the same for every storage object that is created with the same parameters
58
+     * and two storage objects with the same id should refer to two storages that display the same files.
59
+     *
60
+     * @return string
61
+     * @since 9.0.0
62
+     */
63
+    public function getId();
64
+
65
+    /**
66
+     * see http://php.net/manual/en/function.mkdir.php
67
+     * implementations need to implement a recursive mkdir
68
+     *
69
+     * @param string $path
70
+     * @return bool
71
+     * @since 9.0.0
72
+     */
73
+    public function mkdir($path);
74
+
75
+    /**
76
+     * see http://php.net/manual/en/function.rmdir.php
77
+     *
78
+     * @param string $path
79
+     * @return bool
80
+     * @since 9.0.0
81
+     */
82
+    public function rmdir($path);
83
+
84
+    /**
85
+     * see http://php.net/manual/en/function.opendir.php
86
+     *
87
+     * @param string $path
88
+     * @return resource|false
89
+     * @since 9.0.0
90
+     */
91
+    public function opendir($path);
92
+
93
+    /**
94
+     * see http://php.net/manual/en/function.is-dir.php
95
+     *
96
+     * @param string $path
97
+     * @return bool
98
+     * @since 9.0.0
99
+     */
100
+    public function is_dir($path);
101
+
102
+    /**
103
+     * see http://php.net/manual/en/function.is-file.php
104
+     *
105
+     * @param string $path
106
+     * @return bool
107
+     * @since 9.0.0
108
+     */
109
+    public function is_file($path);
110
+
111
+    /**
112
+     * see http://php.net/manual/en/function.stat.php
113
+     * only the following keys are required in the result: size and mtime
114
+     *
115
+     * @param string $path
116
+     * @return array|false
117
+     * @since 9.0.0
118
+     */
119
+    public function stat($path);
120
+
121
+    /**
122
+     * see http://php.net/manual/en/function.filetype.php
123
+     *
124
+     * @param string $path
125
+     * @return string|false
126
+     * @since 9.0.0
127
+     */
128
+    public function filetype($path);
129
+
130
+    /**
131
+     * see http://php.net/manual/en/function.filesize.php
132
+     * The result for filesize when called on a folder is required to be 0
133
+     *
134
+     * @param string $path
135
+     * @return int|false
136
+     * @since 9.0.0
137
+     */
138
+    public function filesize($path);
139
+
140
+    /**
141
+     * check if a file can be created in $path
142
+     *
143
+     * @param string $path
144
+     * @return bool
145
+     * @since 9.0.0
146
+     */
147
+    public function isCreatable($path);
148
+
149
+    /**
150
+     * check if a file can be read
151
+     *
152
+     * @param string $path
153
+     * @return bool
154
+     * @since 9.0.0
155
+     */
156
+    public function isReadable($path);
157
+
158
+    /**
159
+     * check if a file can be written to
160
+     *
161
+     * @param string $path
162
+     * @return bool
163
+     * @since 9.0.0
164
+     */
165
+    public function isUpdatable($path);
166
+
167
+    /**
168
+     * check if a file can be deleted
169
+     *
170
+     * @param string $path
171
+     * @return bool
172
+     * @since 9.0.0
173
+     */
174
+    public function isDeletable($path);
175
+
176
+    /**
177
+     * check if a file can be shared
178
+     *
179
+     * @param string $path
180
+     * @return bool
181
+     * @since 9.0.0
182
+     */
183
+    public function isSharable($path);
184
+
185
+    /**
186
+     * get the full permissions of a path.
187
+     * Should return a combination of the PERMISSION_ constants defined in lib/public/constants.php
188
+     *
189
+     * @param string $path
190
+     * @return int
191
+     * @since 9.0.0
192
+     */
193
+    public function getPermissions($path);
194
+
195
+    /**
196
+     * see http://php.net/manual/en/function.file_exists.php
197
+     *
198
+     * @param string $path
199
+     * @return bool
200
+     * @since 9.0.0
201
+     */
202
+    public function file_exists($path);
203
+
204
+    /**
205
+     * see http://php.net/manual/en/function.filemtime.php
206
+     *
207
+     * @param string $path
208
+     * @return int|false
209
+     * @since 9.0.0
210
+     */
211
+    public function filemtime($path);
212
+
213
+    /**
214
+     * see http://php.net/manual/en/function.file_get_contents.php
215
+     *
216
+     * @param string $path
217
+     * @return string|false
218
+     * @since 9.0.0
219
+     */
220
+    public function file_get_contents($path);
221
+
222
+    /**
223
+     * see http://php.net/manual/en/function.file_put_contents.php
224
+     *
225
+     * @param string $path
226
+     * @param string $data
227
+     * @return bool
228
+     * @since 9.0.0
229
+     */
230
+    public function file_put_contents($path, $data);
231
+
232
+    /**
233
+     * see http://php.net/manual/en/function.unlink.php
234
+     *
235
+     * @param string $path
236
+     * @return bool
237
+     * @since 9.0.0
238
+     */
239
+    public function unlink($path);
240
+
241
+    /**
242
+     * see http://php.net/manual/en/function.rename.php
243
+     *
244
+     * @param string $path1
245
+     * @param string $path2
246
+     * @return bool
247
+     * @since 9.0.0
248
+     */
249
+    public function rename($path1, $path2);
250
+
251
+    /**
252
+     * see http://php.net/manual/en/function.copy.php
253
+     *
254
+     * @param string $path1
255
+     * @param string $path2
256
+     * @return bool
257
+     * @since 9.0.0
258
+     */
259
+    public function copy($path1, $path2);
260
+
261
+    /**
262
+     * see http://php.net/manual/en/function.fopen.php
263
+     *
264
+     * @param string $path
265
+     * @param string $mode
266
+     * @return resource|false
267
+     * @since 9.0.0
268
+     */
269
+    public function fopen($path, $mode);
270
+
271
+    /**
272
+     * get the mimetype for a file or folder
273
+     * The mimetype for a folder is required to be "httpd/unix-directory"
274
+     *
275
+     * @param string $path
276
+     * @return string|false
277
+     * @since 9.0.0
278
+     */
279
+    public function getMimeType($path);
280
+
281
+    /**
282
+     * see http://php.net/manual/en/function.hash-file.php
283
+     *
284
+     * @param string $type
285
+     * @param string $path
286
+     * @param bool $raw
287
+     * @return string|false
288
+     * @since 9.0.0
289
+     */
290
+    public function hash($type, $path, $raw = false);
291
+
292
+    /**
293
+     * see http://php.net/manual/en/function.free_space.php
294
+     *
295
+     * @param string $path
296
+     * @return int|false
297
+     * @since 9.0.0
298
+     */
299
+    public function free_space($path);
300
+
301
+    /**
302
+     * see http://php.net/manual/en/function.touch.php
303
+     * If the backend does not support the operation, false should be returned
304
+     *
305
+     * @param string $path
306
+     * @param int $mtime
307
+     * @return bool
308
+     * @since 9.0.0
309
+     */
310
+    public function touch($path, $mtime = null);
311
+
312
+    /**
313
+     * get the path to a local version of the file.
314
+     * The local version of the file can be temporary and doesn't have to be persistent across requests
315
+     *
316
+     * @param string $path
317
+     * @return string|false
318
+     * @since 9.0.0
319
+     */
320
+    public function getLocalFile($path);
321
+
322
+    /**
323
+     * check if a file or folder has been updated since $time
324
+     *
325
+     * @param string $path
326
+     * @param int $time
327
+     * @return bool
328
+     * @since 9.0.0
329
+     *
330
+     * hasUpdated for folders should return at least true if a file inside the folder is add, removed or renamed.
331
+     * returning true for other changes in the folder is optional
332
+     */
333
+    public function hasUpdated($path, $time);
334
+
335
+    /**
336
+     * get the ETag for a file or folder
337
+     *
338
+     * @param string $path
339
+     * @return string|false
340
+     * @since 9.0.0
341
+     */
342
+    public function getETag($path);
343
+
344
+    /**
345
+     * Returns whether the storage is local, which means that files
346
+     * are stored on the local filesystem instead of remotely.
347
+     * Calling getLocalFile() for local storages should always
348
+     * return the local files, whereas for non-local storages
349
+     * it might return a temporary file.
350
+     *
351
+     * @return bool true if the files are stored locally, false otherwise
352
+     * @since 9.0.0
353
+     */
354
+    public function isLocal();
355
+
356
+    /**
357
+     * Check if the storage is an instance of $class or is a wrapper for a storage that is an instance of $class
358
+     *
359
+     * @param string $class
360
+     * @return bool
361
+     * @since 9.0.0
362
+     */
363
+    public function instanceOfStorage($class);
364
+
365
+    /**
366
+     * A custom storage implementation can return an url for direct download of a give file.
367
+     *
368
+     * For now the returned array can hold the parameter url - in future more attributes might follow.
369
+     *
370
+     * @param string $path
371
+     * @return array|false
372
+     * @since 9.0.0
373
+     */
374
+    public function getDirectDownload($path);
375
+
376
+    /**
377
+     * @param string $path the path of the target folder
378
+     * @param string $fileName the name of the file itself
379
+     * @return void
380
+     * @throws InvalidPathException
381
+     * @since 9.0.0
382
+     */
383
+    public function verifyPath($path, $fileName);
384
+
385
+    /**
386
+     * @param IStorage $sourceStorage
387
+     * @param string $sourceInternalPath
388
+     * @param string $targetInternalPath
389
+     * @return bool
390
+     * @since 9.0.0
391
+     */
392
+    public function copyFromStorage(IStorage $sourceStorage, $sourceInternalPath, $targetInternalPath);
393
+
394
+    /**
395
+     * @param IStorage $sourceStorage
396
+     * @param string $sourceInternalPath
397
+     * @param string $targetInternalPath
398
+     * @return bool
399
+     * @since 9.0.0
400
+     */
401
+    public function moveFromStorage(IStorage $sourceStorage, $sourceInternalPath, $targetInternalPath);
402
+
403
+    /**
404
+     * Test a storage for availability
405
+     *
406
+     * @since 9.0.0
407
+     * @return bool
408
+     */
409
+    public function test();
410
+
411
+    /**
412
+     * @since 9.0.0
413
+     * @return array [ available, last_checked ]
414
+     */
415
+    public function getAvailability();
416
+
417
+    /**
418
+     * @since 9.0.0
419
+     * @param bool $isAvailable
420
+     */
421
+    public function setAvailability($isAvailable);
422
+
423
+    /**
424
+     * @param string $path path for which to retrieve the owner
425
+     * @since 9.0.0
426
+     */
427
+    public function getOwner($path);
428
+
429
+    /**
430
+     * @return ICache
431
+     * @since 9.0.0
432
+     */
433
+    public function getCache();
434
+
435
+    /**
436
+     * @return IPropagator
437
+     * @since 9.0.0
438
+     */
439
+    public function getPropagator();
440
+
441
+    /**
442
+     * @return IScanner
443
+     * @since 9.0.0
444
+     */
445
+    public function getScanner();
446
+
447
+    /**
448
+     * @return IUpdater
449
+     * @since 9.0.0
450
+     */
451
+    public function getUpdater();
452
+
453
+    /**
454
+     * @return IWatcher
455
+     * @since 9.0.0
456
+     */
457
+    public function getWatcher();
458 458
 }
Please login to merge, or discard this patch.
lib/public/Files/ForbiddenException.php 1 patch
Indentation   +19 added lines, -19 removed lines patch added patch discarded remove patch
@@ -32,25 +32,25 @@
 block discarded – undo
32 32
  */
33 33
 class ForbiddenException extends \Exception {
34 34
 
35
-	/** @var bool */
36
-	private $retry;
35
+    /** @var bool */
36
+    private $retry;
37 37
 
38
-	/**
39
-	 * @param string $message
40
-	 * @param bool $retry
41
-	 * @param \Exception|null $previous previous exception for cascading
42
-	 * @since 9.0.0
43
-	 */
44
-	public function __construct($message, $retry, \Exception $previous = null) {
45
-		parent::__construct($message, 0, $previous);
46
-		$this->retry = $retry;
47
-	}
38
+    /**
39
+     * @param string $message
40
+     * @param bool $retry
41
+     * @param \Exception|null $previous previous exception for cascading
42
+     * @since 9.0.0
43
+     */
44
+    public function __construct($message, $retry, \Exception $previous = null) {
45
+        parent::__construct($message, 0, $previous);
46
+        $this->retry = $retry;
47
+    }
48 48
 
49
-	/**
50
-	 * @return bool
51
-	 * @since 9.0.0
52
-	 */
53
-	public function getRetry() {
54
-		return (bool) $this->retry;
55
-	}
49
+    /**
50
+     * @return bool
51
+     * @since 9.0.0
52
+     */
53
+    public function getRetry() {
54
+        return (bool) $this->retry;
55
+    }
56 56
 }
Please login to merge, or discard this patch.
lib/public/Files/StorageTimeoutException.php 1 patch
Indentation   +11 added lines, -11 removed lines patch added patch discarded remove patch
@@ -27,15 +27,15 @@
 block discarded – undo
27 27
  */
28 28
 class StorageTimeoutException extends StorageNotAvailableException {
29 29
 
30
-	/**
31
-	 * StorageTimeoutException constructor.
32
-	 *
33
-	 * @param string $message
34
-	 * @param \Exception|null $previous
35
-	 * @since 9.0.0
36
-	 */
37
-	public function __construct($message = '', \Exception $previous = null) {
38
-		$l = \OC::$server->getL10N('core');
39
-		parent::__construct($l->t('Storage connection timeout. %s', [$message]), self::STATUS_TIMEOUT, $previous);
40
-	}
30
+    /**
31
+     * StorageTimeoutException constructor.
32
+     *
33
+     * @param string $message
34
+     * @param \Exception|null $previous
35
+     * @since 9.0.0
36
+     */
37
+    public function __construct($message = '', \Exception $previous = null) {
38
+        $l = \OC::$server->getL10N('core');
39
+        parent::__construct($l->t('Storage connection timeout. %s', [$message]), self::STATUS_TIMEOUT, $previous);
40
+    }
41 41
 }
Please login to merge, or discard this patch.
lib/public/Files/StorageConnectionException.php 1 patch
Indentation   +11 added lines, -11 removed lines patch added patch discarded remove patch
@@ -27,15 +27,15 @@
 block discarded – undo
27 27
  */
28 28
 class StorageConnectionException extends StorageNotAvailableException {
29 29
 
30
-	/**
31
-	 * StorageConnectionException constructor.
32
-	 *
33
-	 * @param string $message
34
-	 * @param \Exception|null $previous
35
-	 * @since 9.0.0
36
-	 */
37
-	public function __construct($message = '', \Exception $previous = null) {
38
-		$l = \OC::$server->getL10N('core');
39
-		parent::__construct($l->t('Storage connection error. %s', [$message]), self::STATUS_NETWORK_ERROR, $previous);
40
-	}
30
+    /**
31
+     * StorageConnectionException constructor.
32
+     *
33
+     * @param string $message
34
+     * @param \Exception|null $previous
35
+     * @since 9.0.0
36
+     */
37
+    public function __construct($message = '', \Exception $previous = null) {
38
+        $l = \OC::$server->getL10N('core');
39
+        parent::__construct($l->t('Storage connection error. %s', [$message]), self::STATUS_NETWORK_ERROR, $previous);
40
+    }
41 41
 }
Please login to merge, or discard this patch.
core/Controller/ContactsMenuController.php 1 patch
Indentation   +37 added lines, -37 removed lines patch added patch discarded remove patch
@@ -33,46 +33,46 @@
 block discarded – undo
33 33
 
34 34
 class ContactsMenuController extends Controller {
35 35
 
36
-	/** @var Manager */
37
-	private $manager;
36
+    /** @var Manager */
37
+    private $manager;
38 38
 
39
-	/** @var IUserSession */
40
-	private $userSession;
39
+    /** @var IUserSession */
40
+    private $userSession;
41 41
 
42
-	/**
43
-	 * @param IRequest $request
44
-	 * @param IUserSession $userSession
45
-	 * @param Manager $manager
46
-	 */
47
-	public function __construct(IRequest $request, IUserSession $userSession, Manager $manager) {
48
-		parent::__construct('core', $request);
49
-		$this->userSession = $userSession;
50
-		$this->manager = $manager;
51
-	}
42
+    /**
43
+     * @param IRequest $request
44
+     * @param IUserSession $userSession
45
+     * @param Manager $manager
46
+     */
47
+    public function __construct(IRequest $request, IUserSession $userSession, Manager $manager) {
48
+        parent::__construct('core', $request);
49
+        $this->userSession = $userSession;
50
+        $this->manager = $manager;
51
+    }
52 52
 
53
-	/**
54
-	 * @NoAdminRequired
55
-	 *
56
-	 * @param string|null filter
57
-	 * @return \JsonSerializable[]
58
-	 */
59
-	public function index($filter = null) {
60
-		return $this->manager->getEntries($this->userSession->getUser(), $filter);
61
-	}
53
+    /**
54
+     * @NoAdminRequired
55
+     *
56
+     * @param string|null filter
57
+     * @return \JsonSerializable[]
58
+     */
59
+    public function index($filter = null) {
60
+        return $this->manager->getEntries($this->userSession->getUser(), $filter);
61
+    }
62 62
 
63
-	/**
64
-	 * @NoAdminRequired
65
-	 *
66
-	 * @param integer $shareType
67
-	 * @param string $shareWith
68
-	 * @return JSONResponse|\JsonSerializable
69
-	 */
70
-	public function findOne($shareType, $shareWith) {
71
-		$contact = $this->manager->findOne($this->userSession->getUser(), $shareType, $shareWith);
63
+    /**
64
+     * @NoAdminRequired
65
+     *
66
+     * @param integer $shareType
67
+     * @param string $shareWith
68
+     * @return JSONResponse|\JsonSerializable
69
+     */
70
+    public function findOne($shareType, $shareWith) {
71
+        $contact = $this->manager->findOne($this->userSession->getUser(), $shareType, $shareWith);
72 72
 
73
-		if ($contact) {
74
-			return $contact;
75
-		}
76
-		return new JSONResponse([], Http::STATUS_NOT_FOUND);
77
-	}
73
+        if ($contact) {
74
+            return $contact;
75
+        }
76
+        return new JSONResponse([], Http::STATUS_NOT_FOUND);
77
+    }
78 78
 }
Please login to merge, or discard this patch.
apps/comments/appinfo/routes.php 1 patch
Indentation   +3 added lines, -3 removed lines patch added patch discarded remove patch
@@ -21,7 +21,7 @@
 block discarded – undo
21 21
  */
22 22
 
23 23
 return [
24
-	'routes' => [
25
-		['name' => 'Notifications#view', 'url' => '/notifications/view/{id}', 'verb' => 'GET'],
26
-	]
24
+    'routes' => [
25
+        ['name' => 'Notifications#view', 'url' => '/notifications/view/{id}', 'verb' => 'GET'],
26
+    ]
27 27
 ];
Please login to merge, or discard this patch.
files_external/lib/Lib/InsufficientDataForMeaningfulAnswerException.php 1 patch
Indentation   +11 added lines, -11 removed lines patch added patch discarded remove patch
@@ -29,15 +29,15 @@
 block discarded – undo
29 29
  * Authentication mechanism or backend has insufficient data
30 30
  */
31 31
 class InsufficientDataForMeaningfulAnswerException extends StorageNotAvailableException {
32
-	/**
33
-	 * StorageNotAvailableException constructor.
34
-	 *
35
-	 * @param string $message
36
-	 * @param int $code
37
-	 * @param \Exception|null $previous
38
-	 * @since 6.0.0
39
-	 */
40
-	public function __construct($message = '', $code = self::STATUS_INDETERMINATE, \Exception $previous = null) {
41
-		parent::__construct($message, $code, $previous);
42
-	}
32
+    /**
33
+     * StorageNotAvailableException constructor.
34
+     *
35
+     * @param string $message
36
+     * @param int $code
37
+     * @param \Exception|null $previous
38
+     * @since 6.0.0
39
+     */
40
+    public function __construct($message = '', $code = self::STATUS_INDETERMINATE, \Exception $previous = null) {
41
+        parent::__construct($message, $code, $previous);
42
+    }
43 43
 }
Please login to merge, or discard this patch.
apps/files_external/lib/Lib/IdentifierTrait.php 1 patch
Indentation   +62 added lines, -62 removed lines patch added patch discarded remove patch
@@ -28,76 +28,76 @@
 block discarded – undo
28 28
  */
29 29
 trait IdentifierTrait {
30 30
 
31
-	/** @var string */
32
-	protected $identifier;
31
+    /** @var string */
32
+    protected $identifier;
33 33
 
34
-	/** @var string[] */
35
-	protected $identifierAliases = [];
34
+    /** @var string[] */
35
+    protected $identifierAliases = [];
36 36
 
37
-	/** @var IdentifierTrait */
38
-	protected $deprecateTo = null;
37
+    /** @var IdentifierTrait */
38
+    protected $deprecateTo = null;
39 39
 
40
-	/**
41
-	 * @return string
42
-	 */
43
-	public function getIdentifier() {
44
-		return $this->identifier;
45
-	}
40
+    /**
41
+     * @return string
42
+     */
43
+    public function getIdentifier() {
44
+        return $this->identifier;
45
+    }
46 46
 
47
-	/**
48
-	 * @param string $identifier
49
-	 * @return $this
50
-	 */
51
-	public function setIdentifier($identifier) {
52
-		$this->identifier = $identifier;
53
-		$this->identifierAliases[] = $identifier;
54
-		return $this;
55
-	}
47
+    /**
48
+     * @param string $identifier
49
+     * @return $this
50
+     */
51
+    public function setIdentifier($identifier) {
52
+        $this->identifier = $identifier;
53
+        $this->identifierAliases[] = $identifier;
54
+        return $this;
55
+    }
56 56
 
57
-	/**
58
-	 * @return string[]
59
-	 */
60
-	public function getIdentifierAliases() {
61
-		return $this->identifierAliases;
62
-	}
57
+    /**
58
+     * @return string[]
59
+     */
60
+    public function getIdentifierAliases() {
61
+        return $this->identifierAliases;
62
+    }
63 63
 
64
-	/**
65
-	 * @param string $alias
66
-	 * @return $this
67
-	 */
68
-	public function addIdentifierAlias($alias) {
69
-		$this->identifierAliases[] = $alias;
70
-		return $this;
71
-	}
64
+    /**
65
+     * @param string $alias
66
+     * @return $this
67
+     */
68
+    public function addIdentifierAlias($alias) {
69
+        $this->identifierAliases[] = $alias;
70
+        return $this;
71
+    }
72 72
 
73
-	/**
74
-	 * @return object|null
75
-	 */
76
-	public function getDeprecateTo() {
77
-		return $this->deprecateTo;
78
-	}
73
+    /**
74
+     * @return object|null
75
+     */
76
+    public function getDeprecateTo() {
77
+        return $this->deprecateTo;
78
+    }
79 79
 
80
-	/**
81
-	 * @param object $destinationObject
82
-	 * @return self
83
-	 */
84
-	public function deprecateTo($destinationObject) {
85
-		$this->deprecateTo = $destinationObject;
86
-		return $this;
87
-	}
80
+    /**
81
+     * @param object $destinationObject
82
+     * @return self
83
+     */
84
+    public function deprecateTo($destinationObject) {
85
+        $this->deprecateTo = $destinationObject;
86
+        return $this;
87
+    }
88 88
 
89
-	/**
90
-	 * @return array
91
-	 */
92
-	public function jsonSerializeIdentifier() {
93
-		$data = [
94
-			'identifier' => $this->identifier,
95
-			'identifierAliases' => $this->identifierAliases,
96
-		];
97
-		if ($this->deprecateTo) {
98
-			$data['deprecateTo'] = $this->deprecateTo->getIdentifier();
99
-		}
100
-		return $data;
101
-	}
89
+    /**
90
+     * @return array
91
+     */
92
+    public function jsonSerializeIdentifier() {
93
+        $data = [
94
+            'identifier' => $this->identifier,
95
+            'identifierAliases' => $this->identifierAliases,
96
+        ];
97
+        if ($this->deprecateTo) {
98
+            $data['deprecateTo'] = $this->deprecateTo->getIdentifier();
99
+        }
100
+        return $data;
101
+    }
102 102
 
103 103
 }
Please login to merge, or discard this patch.
apps/files_external/lib/Command/Create.php 2 patches
Spacing   +9 added lines, -9 removed lines patch added patch discarded remove patch
@@ -128,32 +128,32 @@  discard block
 block discarded – undo
128 128
 		$authBackend = $this->backendService->getAuthMechanism($authIdentifier);
129 129
 
130 130
 		if (!Filesystem::isValidPath($mountPoint)) {
131
-			$output->writeln('<error>Invalid mountpoint "' . $mountPoint . '"</error>');
131
+			$output->writeln('<error>Invalid mountpoint "'.$mountPoint.'"</error>');
132 132
 			return 1;
133 133
 		}
134 134
 		if (is_null($storageBackend)) {
135
-			$output->writeln('<error>Storage backend with identifier "' . $storageIdentifier . '" not found (see `occ files_external:backends` for possible values)</error>');
135
+			$output->writeln('<error>Storage backend with identifier "'.$storageIdentifier.'" not found (see `occ files_external:backends` for possible values)</error>');
136 136
 			return 404;
137 137
 		}
138 138
 		if (is_null($authBackend)) {
139
-			$output->writeln('<error>Authentication backend with identifier "' . $authIdentifier . '" not found (see `occ files_external:backends` for possible values)</error>');
139
+			$output->writeln('<error>Authentication backend with identifier "'.$authIdentifier.'" not found (see `occ files_external:backends` for possible values)</error>');
140 140
 			return 404;
141 141
 		}
142 142
 		$supportedSchemes = array_keys($storageBackend->getAuthSchemes());
143 143
 		if (!in_array($authBackend->getScheme(), $supportedSchemes)) {
144
-			$output->writeln('<error>Authentication backend "' . $authIdentifier . '" not valid for storage backend "' . $storageIdentifier . '" (see `occ files_external:backends storage ' . $storageIdentifier . '` for possible values)</error>');
144
+			$output->writeln('<error>Authentication backend "'.$authIdentifier.'" not valid for storage backend "'.$storageIdentifier.'" (see `occ files_external:backends storage '.$storageIdentifier.'` for possible values)</error>');
145 145
 			return 1;
146 146
 		}
147 147
 
148 148
 		$config = [];
149 149
 		foreach ($configInput as $configOption) {
150 150
 			if (!strpos($configOption, '=')) {
151
-				$output->writeln('<error>Invalid mount configuration option "' . $configOption . '"</error>');
151
+				$output->writeln('<error>Invalid mount configuration option "'.$configOption.'"</error>');
152 152
 				return 1;
153 153
 			}
154 154
 			list($key, $value) = explode('=', $configOption, 2);
155 155
 			if (!$this->validateParam($key, $value, $storageBackend, $authBackend)) {
156
-				$output->writeln('<error>Unknown configuration for backends "' . $key . '"</error>');
156
+				$output->writeln('<error>Unknown configuration for backends "'.$key.'"</error>');
157 157
 				return 1;
158 158
 			}
159 159
 			$config[$key] = $value;
@@ -167,7 +167,7 @@  discard block
 block discarded – undo
167 167
 
168 168
 		if ($user) {
169 169
 			if (!$this->userManager->userExists($user)) {
170
-				$output->writeln('<error>User "' . $user . '" not found</error>');
170
+				$output->writeln('<error>User "'.$user.'" not found</error>');
171 171
 				return 1;
172 172
 			}
173 173
 			$mount->setApplicableUsers([$user]);
@@ -178,9 +178,9 @@  discard block
 block discarded – undo
178 178
 		} else {
179 179
 			$this->getStorageService($user)->addStorage($mount);
180 180
 			if ($input->getOption('output') === self::OUTPUT_FORMAT_PLAIN) {
181
-				$output->writeln('<info>Storage created with id ' . $mount->getId() . '</info>');
181
+				$output->writeln('<info>Storage created with id '.$mount->getId().'</info>');
182 182
 			} else {
183
-				$output->writeln((string)$mount->getId());
183
+				$output->writeln((string) $mount->getId());
184 184
 			}
185 185
 		}
186 186
 		return 0;
Please login to merge, or discard this patch.
Indentation   +178 added lines, -178 removed lines patch added patch discarded remove patch
@@ -44,182 +44,182 @@
 block discarded – undo
44 44
 use Symfony\Component\Console\Output\OutputInterface;
45 45
 
46 46
 class Create extends Base {
47
-	/**
48
-	 * @var GlobalStoragesService
49
-	 */
50
-	private $globalService;
51
-
52
-	/**
53
-	 * @var UserStoragesService
54
-	 */
55
-	private $userService;
56
-
57
-	/**
58
-	 * @var IUserManager
59
-	 */
60
-	private $userManager;
61
-
62
-	/** @var BackendService */
63
-	private $backendService;
64
-
65
-	/** @var IUserSession */
66
-	private $userSession;
67
-
68
-	public function __construct(GlobalStoragesService $globalService,
69
-						 UserStoragesService $userService,
70
-						 IUserManager $userManager,
71
-						 IUserSession $userSession,
72
-						 BackendService $backendService
73
-	) {
74
-		parent::__construct();
75
-		$this->globalService = $globalService;
76
-		$this->userService = $userService;
77
-		$this->userManager = $userManager;
78
-		$this->userSession = $userSession;
79
-		$this->backendService = $backendService;
80
-	}
81
-
82
-	protected function configure() {
83
-		$this
84
-			->setName('files_external:create')
85
-			->setDescription('Create a new mount configuration')
86
-			->addOption(
87
-				'user',
88
-				'',
89
-				InputOption::VALUE_OPTIONAL,
90
-				'user to add the mount configuration for, if not set the mount will be added as system mount'
91
-			)
92
-			->addArgument(
93
-				'mount_point',
94
-				InputArgument::REQUIRED,
95
-				'mount point for the new mount'
96
-			)
97
-			->addArgument(
98
-				'storage_backend',
99
-				InputArgument::REQUIRED,
100
-				'storage backend identifier for the new mount, see `occ files_external:backends` for possible values'
101
-			)
102
-			->addArgument(
103
-				'authentication_backend',
104
-				InputArgument::REQUIRED,
105
-				'authentication backend identifier for the new mount, see `occ files_external:backends` for possible values'
106
-			)
107
-			->addOption(
108
-				'config',
109
-				'c',
110
-				InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY,
111
-				'Mount configuration option in key=value format'
112
-			)
113
-			->addOption(
114
-				'dry',
115
-				'',
116
-				InputOption::VALUE_NONE,
117
-				'Don\'t save the created mount, only list the new mount'
118
-			);
119
-		parent::configure();
120
-	}
121
-
122
-	protected function execute(InputInterface $input, OutputInterface $output): int {
123
-		$user = $input->getOption('user');
124
-		$mountPoint = $input->getArgument('mount_point');
125
-		$storageIdentifier = $input->getArgument('storage_backend');
126
-		$authIdentifier = $input->getArgument('authentication_backend');
127
-		$configInput = $input->getOption('config');
128
-
129
-		$storageBackend = $this->backendService->getBackend($storageIdentifier);
130
-		$authBackend = $this->backendService->getAuthMechanism($authIdentifier);
131
-
132
-		if (!Filesystem::isValidPath($mountPoint)) {
133
-			$output->writeln('<error>Invalid mountpoint "' . $mountPoint . '"</error>');
134
-			return 1;
135
-		}
136
-		if (is_null($storageBackend)) {
137
-			$output->writeln('<error>Storage backend with identifier "' . $storageIdentifier . '" not found (see `occ files_external:backends` for possible values)</error>');
138
-			return 404;
139
-		}
140
-		if (is_null($authBackend)) {
141
-			$output->writeln('<error>Authentication backend with identifier "' . $authIdentifier . '" not found (see `occ files_external:backends` for possible values)</error>');
142
-			return 404;
143
-		}
144
-		$supportedSchemes = array_keys($storageBackend->getAuthSchemes());
145
-		if (!in_array($authBackend->getScheme(), $supportedSchemes)) {
146
-			$output->writeln('<error>Authentication backend "' . $authIdentifier . '" not valid for storage backend "' . $storageIdentifier . '" (see `occ files_external:backends storage ' . $storageIdentifier . '` for possible values)</error>');
147
-			return 1;
148
-		}
149
-
150
-		$config = [];
151
-		foreach ($configInput as $configOption) {
152
-			if (!strpos($configOption, '=')) {
153
-				$output->writeln('<error>Invalid mount configuration option "' . $configOption . '"</error>');
154
-				return 1;
155
-			}
156
-			list($key, $value) = explode('=', $configOption, 2);
157
-			if (!$this->validateParam($key, $value, $storageBackend, $authBackend)) {
158
-				$output->writeln('<error>Unknown configuration for backends "' . $key . '"</error>');
159
-				return 1;
160
-			}
161
-			$config[$key] = $value;
162
-		}
163
-
164
-		$mount = new StorageConfig();
165
-		$mount->setMountPoint($mountPoint);
166
-		$mount->setBackend($storageBackend);
167
-		$mount->setAuthMechanism($authBackend);
168
-		$mount->setBackendOptions($config);
169
-
170
-		if ($user) {
171
-			if (!$this->userManager->userExists($user)) {
172
-				$output->writeln('<error>User "' . $user . '" not found</error>');
173
-				return 1;
174
-			}
175
-			$mount->setApplicableUsers([$user]);
176
-		}
177
-
178
-		if ($input->getOption('dry')) {
179
-			$this->showMount($user, $mount, $input, $output);
180
-		} else {
181
-			$this->getStorageService($user)->addStorage($mount);
182
-			if ($input->getOption('output') === self::OUTPUT_FORMAT_PLAIN) {
183
-				$output->writeln('<info>Storage created with id ' . $mount->getId() . '</info>');
184
-			} else {
185
-				$output->writeln((string)$mount->getId());
186
-			}
187
-		}
188
-		return 0;
189
-	}
190
-
191
-	private function validateParam($key, &$value, Backend $storageBackend, AuthMechanism $authBackend) {
192
-		$params = array_merge($storageBackend->getParameters(), $authBackend->getParameters());
193
-		foreach ($params as $param) {
194
-			/** @var DefinitionParameter $param */
195
-			if ($param->getName() === $key) {
196
-				if ($param->getType() === DefinitionParameter::VALUE_BOOLEAN) {
197
-					$value = ($value === 'true');
198
-				}
199
-				return true;
200
-			}
201
-		}
202
-		return false;
203
-	}
204
-
205
-	private function showMount($user, StorageConfig $mount, InputInterface $input, OutputInterface $output) {
206
-		$listCommand = new ListCommand($this->globalService, $this->userService, $this->userSession, $this->userManager);
207
-		$listInput = new ArrayInput([], $listCommand->getDefinition());
208
-		$listInput->setOption('output', $input->getOption('output'));
209
-		$listInput->setOption('show-password', true);
210
-		$listCommand->listMounts($user, [$mount], $listInput, $output);
211
-	}
212
-
213
-	protected function getStorageService($userId) {
214
-		if (!empty($userId)) {
215
-			$user = $this->userManager->get($userId);
216
-			if (is_null($user)) {
217
-				throw new NoUserException("user $userId not found");
218
-			}
219
-			$this->userSession->setUser($user);
220
-			return $this->userService;
221
-		} else {
222
-			return $this->globalService;
223
-		}
224
-	}
47
+    /**
48
+     * @var GlobalStoragesService
49
+     */
50
+    private $globalService;
51
+
52
+    /**
53
+     * @var UserStoragesService
54
+     */
55
+    private $userService;
56
+
57
+    /**
58
+     * @var IUserManager
59
+     */
60
+    private $userManager;
61
+
62
+    /** @var BackendService */
63
+    private $backendService;
64
+
65
+    /** @var IUserSession */
66
+    private $userSession;
67
+
68
+    public function __construct(GlobalStoragesService $globalService,
69
+                            UserStoragesService $userService,
70
+                            IUserManager $userManager,
71
+                            IUserSession $userSession,
72
+                            BackendService $backendService
73
+    ) {
74
+        parent::__construct();
75
+        $this->globalService = $globalService;
76
+        $this->userService = $userService;
77
+        $this->userManager = $userManager;
78
+        $this->userSession = $userSession;
79
+        $this->backendService = $backendService;
80
+    }
81
+
82
+    protected function configure() {
83
+        $this
84
+            ->setName('files_external:create')
85
+            ->setDescription('Create a new mount configuration')
86
+            ->addOption(
87
+                'user',
88
+                '',
89
+                InputOption::VALUE_OPTIONAL,
90
+                'user to add the mount configuration for, if not set the mount will be added as system mount'
91
+            )
92
+            ->addArgument(
93
+                'mount_point',
94
+                InputArgument::REQUIRED,
95
+                'mount point for the new mount'
96
+            )
97
+            ->addArgument(
98
+                'storage_backend',
99
+                InputArgument::REQUIRED,
100
+                'storage backend identifier for the new mount, see `occ files_external:backends` for possible values'
101
+            )
102
+            ->addArgument(
103
+                'authentication_backend',
104
+                InputArgument::REQUIRED,
105
+                'authentication backend identifier for the new mount, see `occ files_external:backends` for possible values'
106
+            )
107
+            ->addOption(
108
+                'config',
109
+                'c',
110
+                InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY,
111
+                'Mount configuration option in key=value format'
112
+            )
113
+            ->addOption(
114
+                'dry',
115
+                '',
116
+                InputOption::VALUE_NONE,
117
+                'Don\'t save the created mount, only list the new mount'
118
+            );
119
+        parent::configure();
120
+    }
121
+
122
+    protected function execute(InputInterface $input, OutputInterface $output): int {
123
+        $user = $input->getOption('user');
124
+        $mountPoint = $input->getArgument('mount_point');
125
+        $storageIdentifier = $input->getArgument('storage_backend');
126
+        $authIdentifier = $input->getArgument('authentication_backend');
127
+        $configInput = $input->getOption('config');
128
+
129
+        $storageBackend = $this->backendService->getBackend($storageIdentifier);
130
+        $authBackend = $this->backendService->getAuthMechanism($authIdentifier);
131
+
132
+        if (!Filesystem::isValidPath($mountPoint)) {
133
+            $output->writeln('<error>Invalid mountpoint "' . $mountPoint . '"</error>');
134
+            return 1;
135
+        }
136
+        if (is_null($storageBackend)) {
137
+            $output->writeln('<error>Storage backend with identifier "' . $storageIdentifier . '" not found (see `occ files_external:backends` for possible values)</error>');
138
+            return 404;
139
+        }
140
+        if (is_null($authBackend)) {
141
+            $output->writeln('<error>Authentication backend with identifier "' . $authIdentifier . '" not found (see `occ files_external:backends` for possible values)</error>');
142
+            return 404;
143
+        }
144
+        $supportedSchemes = array_keys($storageBackend->getAuthSchemes());
145
+        if (!in_array($authBackend->getScheme(), $supportedSchemes)) {
146
+            $output->writeln('<error>Authentication backend "' . $authIdentifier . '" not valid for storage backend "' . $storageIdentifier . '" (see `occ files_external:backends storage ' . $storageIdentifier . '` for possible values)</error>');
147
+            return 1;
148
+        }
149
+
150
+        $config = [];
151
+        foreach ($configInput as $configOption) {
152
+            if (!strpos($configOption, '=')) {
153
+                $output->writeln('<error>Invalid mount configuration option "' . $configOption . '"</error>');
154
+                return 1;
155
+            }
156
+            list($key, $value) = explode('=', $configOption, 2);
157
+            if (!$this->validateParam($key, $value, $storageBackend, $authBackend)) {
158
+                $output->writeln('<error>Unknown configuration for backends "' . $key . '"</error>');
159
+                return 1;
160
+            }
161
+            $config[$key] = $value;
162
+        }
163
+
164
+        $mount = new StorageConfig();
165
+        $mount->setMountPoint($mountPoint);
166
+        $mount->setBackend($storageBackend);
167
+        $mount->setAuthMechanism($authBackend);
168
+        $mount->setBackendOptions($config);
169
+
170
+        if ($user) {
171
+            if (!$this->userManager->userExists($user)) {
172
+                $output->writeln('<error>User "' . $user . '" not found</error>');
173
+                return 1;
174
+            }
175
+            $mount->setApplicableUsers([$user]);
176
+        }
177
+
178
+        if ($input->getOption('dry')) {
179
+            $this->showMount($user, $mount, $input, $output);
180
+        } else {
181
+            $this->getStorageService($user)->addStorage($mount);
182
+            if ($input->getOption('output') === self::OUTPUT_FORMAT_PLAIN) {
183
+                $output->writeln('<info>Storage created with id ' . $mount->getId() . '</info>');
184
+            } else {
185
+                $output->writeln((string)$mount->getId());
186
+            }
187
+        }
188
+        return 0;
189
+    }
190
+
191
+    private function validateParam($key, &$value, Backend $storageBackend, AuthMechanism $authBackend) {
192
+        $params = array_merge($storageBackend->getParameters(), $authBackend->getParameters());
193
+        foreach ($params as $param) {
194
+            /** @var DefinitionParameter $param */
195
+            if ($param->getName() === $key) {
196
+                if ($param->getType() === DefinitionParameter::VALUE_BOOLEAN) {
197
+                    $value = ($value === 'true');
198
+                }
199
+                return true;
200
+            }
201
+        }
202
+        return false;
203
+    }
204
+
205
+    private function showMount($user, StorageConfig $mount, InputInterface $input, OutputInterface $output) {
206
+        $listCommand = new ListCommand($this->globalService, $this->userService, $this->userSession, $this->userManager);
207
+        $listInput = new ArrayInput([], $listCommand->getDefinition());
208
+        $listInput->setOption('output', $input->getOption('output'));
209
+        $listInput->setOption('show-password', true);
210
+        $listCommand->listMounts($user, [$mount], $listInput, $output);
211
+    }
212
+
213
+    protected function getStorageService($userId) {
214
+        if (!empty($userId)) {
215
+            $user = $this->userManager->get($userId);
216
+            if (is_null($user)) {
217
+                throw new NoUserException("user $userId not found");
218
+            }
219
+            $this->userSession->setUser($user);
220
+            return $this->userService;
221
+        } else {
222
+            return $this->globalService;
223
+        }
224
+    }
225 225
 }
Please login to merge, or discard this patch.