Skip to content

Commit bde624b

Browse files
committed
Only expose link to info endpoint in capabilties
Signed-off-by: Julius Härtl <[email protected]>
1 parent fb1b88a commit bde624b

File tree

6 files changed

+120
-42
lines changed

6 files changed

+120
-42
lines changed

apps/files/appinfo/routes.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,11 @@
9999
],
100100
],
101101
'ocs' => [
102+
[
103+
'name' => 'DirectEditing#info',
104+
'url' => '/api/v1/directEditing',
105+
'verb' => 'GET'
106+
],
102107
[
103108
'name' => 'DirectEditing#templates',
104109
'url' => '/api/v1/directEditing/templates/{editorId}/{creatorId}',

apps/files/composer/composer/autoload_classmap.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
'OCA\\Files\\Exception\\TransferOwnershipException' => $baseDir . '/../lib/Exception/TransferOwnershipException.php',
4141
'OCA\\Files\\Helper' => $baseDir . '/../lib/Helper.php',
4242
'OCA\\Files\\Listener\\LegacyLoadAdditionalScriptsAdapter' => $baseDir . '/../lib/Listener/LegacyLoadAdditionalScriptsAdapter.php',
43+
'OCA\\Files\\Service\\DirectEditingService' => $baseDir . '/../lib/Service/DirectEditingService.php',
4344
'OCA\\Files\\Service\\OwnershipTransferService' => $baseDir . '/../lib/Service/OwnershipTransferService.php',
4445
'OCA\\Files\\Service\\TagService' => $baseDir . '/../lib/Service/TagService.php',
4546
);

apps/files/composer/composer/autoload_static.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ class ComposerStaticInitFiles
5555
'OCA\\Files\\Exception\\TransferOwnershipException' => __DIR__ . '/..' . '/../lib/Exception/TransferOwnershipException.php',
5656
'OCA\\Files\\Helper' => __DIR__ . '/..' . '/../lib/Helper.php',
5757
'OCA\\Files\\Listener\\LegacyLoadAdditionalScriptsAdapter' => __DIR__ . '/..' . '/../lib/Listener/LegacyLoadAdditionalScriptsAdapter.php',
58+
'OCA\\Files\\Service\\DirectEditingService' => __DIR__ . '/..' . '/../lib/Service/DirectEditingService.php',
5859
'OCA\\Files\\Service\\OwnershipTransferService' => __DIR__ . '/..' . '/../lib/Service/OwnershipTransferService.php',
5960
'OCA\\Files\\Service\\TagService' => __DIR__ . '/..' . '/../lib/Service/TagService.php',
6061
);

apps/files/lib/Capabilities.php

Lines changed: 13 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,15 @@
2626
namespace OCA\Files;
2727

2828
use OC\DirectEditing\Manager;
29+
use OCA\Files\Service\DirectEditingService;
2930
use OCP\Capabilities\ICapability;
3031
use OCP\DirectEditing\ACreateEmpty;
3132
use OCP\DirectEditing\ACreateFromTemplate;
3233
use OCP\DirectEditing\IEditor;
3334
use OCP\DirectEditing\RegisterDirectEditorEvent;
3435
use OCP\EventDispatcher\IEventDispatcher;
3536
use OCP\IConfig;
37+
use OCP\IURLGenerator;
3638

3739
/**
3840
* Class Capabilities
@@ -44,21 +46,21 @@ class Capabilities implements ICapability {
4446
/** @var IConfig */
4547
protected $config;
4648

47-
/** @var Manager */
48-
protected $directEditingManager;
49+
/** @var DirectEditingService */
50+
protected $directEditingService;
4951

50-
/** @var IEventDispatcher */
51-
protected $eventDispatcher;
52+
/** @var IURLGenerator */
53+
private $urlGenerator;
5254

5355
/**
5456
* Capabilities constructor.
5557
*
5658
* @param IConfig $config
5759
*/
58-
public function __construct(IConfig $config, Manager $manager, IEventDispatcher $eventDispatcher) {
60+
public function __construct(IConfig $config, DirectEditingService $directEditingService, IURLGenerator $urlGenerator) {
5961
$this->config = $config;
60-
$this->directEditingManager = $manager;
61-
$this->eventDispatcher = $eventDispatcher;
62+
$this->directEditingService = $directEditingService;
63+
$this->urlGenerator = $urlGenerator;
6264
}
6365

6466
/**
@@ -71,43 +73,13 @@ public function getCapabilities() {
7173
'files' => [
7274
'bigfilechunking' => true,
7375
'blacklisted_files' => $this->config->getSystemValue('blacklisted_files', ['.htaccess']),
74-
'directEditing' => $this->getDirectEditingCapabilitites()
76+
'directEditing' => [
77+
'url' => $this->urlGenerator->linkToOCSRouteAbsolute('files.DirectEditing.info'),
78+
'etag' => $this->directEditingService->getDirectEditingETag()
79+
]
7580
],
7681
];
7782
}
7883

79-
private function getDirectEditingCapabilitites(): array {
80-
$this->eventDispatcher->dispatchTyped(new RegisterDirectEditorEvent($this->directEditingManager));
8184

82-
$capabilities = [
83-
'editors' => [],
84-
'creators' => []
85-
];
86-
87-
/**
88-
* @var string $id
89-
* @var IEditor $editor
90-
*/
91-
foreach ($this->directEditingManager->getEditors() as $id => $editor) {
92-
$capabilities['editors'][$id] = [
93-
'name' => $editor->getName(),
94-
'mimetypes' => $editor->getMimetypes(),
95-
'optionalMimetypes' => $editor->getMimetypesOptional(),
96-
'secure' => $editor->isSecure(),
97-
];
98-
/** @var ACreateEmpty|ACreateFromTemplate $creator */
99-
foreach ($editor->getCreators() as $creator) {
100-
$id = $creator->getId();
101-
$capabilities['creators'][$id] = [
102-
'id' => $id,
103-
'editor' => $editor->getId(),
104-
'name' => $creator->getName(),
105-
'extension' => $creator->getExtension(),
106-
'templates' => $creator instanceof ACreateFromTemplate,
107-
'mimetype' => $creator->getMimetype()
108-
];
109-
}
110-
}
111-
return $capabilities;
112-
}
11385
}

apps/files/lib/Controller/DirectEditingController.php

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525

2626

2727
use Exception;
28+
use OCA\Files\Service\DirectEditingService;
2829
use OCP\AppFramework\Http;
2930
use OCP\AppFramework\Http\DataResponse;
3031
use OCP\AppFramework\OCSController;
@@ -52,16 +53,29 @@ class DirectEditingController extends OCSController {
5253
/** @var ILogger */
5354
private $logger;
5455

56+
/** @var DirectEditingService */
57+
private $directEditingService;
58+
5559
public function __construct($appName, IRequest $request, $corsMethods, $corsAllowedHeaders, $corsMaxAge,
56-
IEventDispatcher $eventDispatcher, IURLGenerator $urlGenerator, IManager $manager, ILogger $logger) {
60+
IEventDispatcher $eventDispatcher, IURLGenerator $urlGenerator, IManager $manager, DirectEditingService $directEditingService, ILogger $logger) {
5761
parent::__construct($appName, $request, $corsMethods, $corsAllowedHeaders, $corsMaxAge);
5862

5963
$this->eventDispatcher = $eventDispatcher;
6064
$this->directEditingManager = $manager;
65+
$this->directEditingService = $directEditingService;
6166
$this->logger = $logger;
6267
$this->urlGenerator = $urlGenerator;
6368
}
6469

70+
/**
71+
* @NoAdminRequired
72+
*/
73+
public function info(): DataResponse {
74+
$response = new DataResponse($this->directEditingService->getDirectEditingCapabilitites());
75+
$response->setETag($this->directEditingService->getDirectEditingETag());
76+
return $response;
77+
}
78+
6579
/**
6680
* @NoAdminRequired
6781
*/
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
<?php
2+
/**
3+
* @copyright Copyright (c) 2019 Julius Härtl <[email protected]>
4+
*
5+
* @author Julius Härtl <[email protected]>
6+
*
7+
* @license GNU AGPL version 3 or any later version
8+
*
9+
* This program is free software: you can redistribute it and/or modify
10+
* it under the terms of the GNU Affero General Public License as
11+
* published by the Free Software Foundation, either version 3 of the
12+
* License, or (at your option) any later version.
13+
*
14+
* This program is distributed in the hope that it will be useful,
15+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
16+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17+
* GNU Affero General Public License for more details.
18+
*
19+
* You should have received a copy of the GNU Affero General Public License
20+
* along with this program. If not, see <http://www.gnu.org/licenses/>.
21+
*
22+
*/
23+
24+
namespace OCA\Files\Service;
25+
26+
27+
use OCP\DirectEditing\ACreateEmpty;
28+
use OCP\DirectEditing\ACreateFromTemplate;
29+
use OCP\DirectEditing\IEditor;
30+
use OCP\DirectEditing\IManager;
31+
use OCP\DirectEditing\RegisterDirectEditorEvent;
32+
use OCP\EventDispatcher\IEventDispatcher;
33+
34+
class DirectEditingService {
35+
36+
/** @var IManager */
37+
private $directEditingManager;
38+
/** @var IEventDispatcher */
39+
private $eventDispatcher;
40+
41+
public function __construct(IEventDispatcher $eventDispatcher, IManager $directEditingManager) {
42+
$this->directEditingManager = $directEditingManager;
43+
$this->eventDispatcher = $eventDispatcher;
44+
}
45+
46+
public function getDirectEditingETag(): string {
47+
return \md5(\json_encode($this->getDirectEditingCapabilitites()));
48+
}
49+
50+
public function getDirectEditingCapabilitites(): array {
51+
$this->eventDispatcher->dispatchTyped(new RegisterDirectEditorEvent($this->directEditingManager));
52+
53+
$capabilities = [
54+
'editors' => [],
55+
'creators' => []
56+
];
57+
58+
/**
59+
* @var string $id
60+
* @var IEditor $editor
61+
*/
62+
foreach ($this->directEditingManager->getEditors() as $id => $editor) {
63+
$capabilities['editors'][$id] = [
64+
'name' => $editor->getName(),
65+
'mimetypes' => $editor->getMimetypes(),
66+
'optionalMimetypes' => $editor->getMimetypesOptional(),
67+
'secure' => $editor->isSecure(),
68+
];
69+
/** @var ACreateEmpty|ACreateFromTemplate $creator */
70+
foreach ($editor->getCreators() as $creator) {
71+
$id = $creator->getId();
72+
$capabilities['creators'][$id] = [
73+
'id' => $id,
74+
'editor' => $editor->getId(),
75+
'name' => $creator->getName(),
76+
'extension' => $creator->getExtension(),
77+
'templates' => $creator instanceof ACreateFromTemplate,
78+
'mimetype' => $creator->getMimetype()
79+
];
80+
}
81+
}
82+
return $capabilities;
83+
}
84+
85+
}

0 commit comments

Comments
 (0)