Skip to content

Commit 5200124

Browse files
authored
Merge pull request #4290 from nextcloud/chore/noid/middleware-rest
2 parents 70f1f2e + 84dd2d3 commit 5200124

24 files changed

+314
-363
lines changed

appinfo/routes.php

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,35 +25,57 @@
2525

2626
namespace OCA\Text\AppInfo;
2727

28+
use OCA\Text\Controller;
29+
2830
return [
2931
'routes' => [
32+
/** @see Controller\AttachmentController::insertAttachmentFile() */
3033
['name' => 'Attachment#insertAttachmentFile', 'url' => '/attachment/filepath', 'verb' => 'POST'],
34+
/** @see Controller\AttachmentController::uploadAttachment() */
3135
['name' => 'Attachment#uploadAttachment', 'url' => '/attachment/upload', 'verb' => 'POST'],
36+
/** @see Controller\AttachmentController::getImageFile() */
3237
['name' => 'Attachment#getImageFile', 'url' => '/image', 'verb' => 'GET'],
38+
/** @see Controller\AttachmentController::getMediaFile() */
3339
['name' => 'Attachment#getMediaFile', 'url' => '/media', 'verb' => 'GET'],
40+
/** @see Controller\AttachmentController::getMediaFilePreview() */
3441
['name' => 'Attachment#getMediaFilePreview', 'url' => '/mediaPreview', 'verb' => 'GET'],
42+
/** @see Controller\AttachmentController::getMediaFileMetadata() */
3543
['name' => 'Attachment#getMediaFileMetadata', 'url' => '/mediaMetadata', 'verb' => 'GET'],
3644

45+
/** @see Controller\SessionController::create() */
3746
['name' => 'Session#create', 'url' => '/session/create', 'verb' => 'PUT'],
47+
/** @see Controller\SessionController::sync() */
3848
['name' => 'Session#sync', 'url' => '/session/sync', 'verb' => 'POST'],
49+
/** @see Controller\SessionController::push() */
3950
['name' => 'Session#push', 'url' => '/session/push', 'verb' => 'POST'],
51+
/** @see Controller\SessionController::close() */
4052
['name' => 'Session#close', 'url' => '/session/close', 'verb' => 'POST'],
53+
/** @see Controller\SessionController::mention() */
4154
['name' => 'Session#mention', 'url' => '/session/mention', 'verb' => 'PUT'],
4255

56+
/** @see Controller\PublicSessionController::create() */
4357
['name' => 'PublicSession#create', 'url' => '/public/session/create', 'verb' => 'PUT'],
58+
/** @see Controller\PublicSessionController::updateSession() */
4459
['name' => 'PublicSession#updateSession', 'url' => '/public/session', 'verb' => 'POST'],
60+
/** @see Controller\PublicSessionController::sync() */
4561
['name' => 'PublicSession#sync', 'url' => '/public/session/sync', 'verb' => 'POST'],
62+
/** @see Controller\PublicSessionController::push() */
4663
['name' => 'PublicSession#push', 'url' => '/public/session/push', 'verb' => 'POST'],
47-
64+
/** @see Controller\PublicSessionController::close() */
4865
['name' => 'PublicSession#close', 'url' => '/public/session/close', 'verb' => 'POST'],
4966

67+
/** @see Controller\SettingsController::updateConfig() */
5068
['name' => 'Settings#updateConfig', 'url' => '/settings', 'verb' => 'POST'],
5169

70+
/** @see Controller\UserApiController::index() */
5271
['name' => 'UserApi#index', 'url' => '/api/v1/users', 'verb' => 'POST'],
5372
],
5473
'ocs' => [
74+
/** @see Controller\WorkspaceController::folder() */
5575
['name' => 'Workspace#folder', 'url' => '/workspace', 'verb' => 'GET'],
76+
/** @see Controller\WorkspaceController::publicFolder() */
5677
['name' => 'Workspace#publicFolder', 'url' => '/public/workspace', 'verb' => 'GET'],
78+
/** @see Controller\WorkspaceController::direct() */
5779
['name' => 'Workspace#direct', 'url' => '/workspace/direct', 'verb' => 'POST'],
5880
]
5981
];

composer/composer/autoload_classmap.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,13 @@
99
'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php',
1010
'OCA\\Text\\AppInfo\\Application' => $baseDir . '/../lib/AppInfo/Application.php',
1111
'OCA\\Text\\Command\\ResetDocument' => $baseDir . '/../lib/Command/ResetDocument.php',
12-
'OCA\\Text\\Controller\\ASessionAwareController' => $baseDir . '/../lib/Controller/ASessionAwareController.php',
1312
'OCA\\Text\\Controller\\AttachmentController' => $baseDir . '/../lib/Controller/AttachmentController.php',
13+
'OCA\\Text\\Controller\\ISessionAwareController' => $baseDir . '/../lib/Controller/ISessionAwareController.php',
1414
'OCA\\Text\\Controller\\NavigationController' => $baseDir . '/../lib/Controller/NavigationController.php',
1515
'OCA\\Text\\Controller\\PublicSessionController' => $baseDir . '/../lib/Controller/PublicSessionController.php',
1616
'OCA\\Text\\Controller\\SessionController' => $baseDir . '/../lib/Controller/SessionController.php',
1717
'OCA\\Text\\Controller\\SettingsController' => $baseDir . '/../lib/Controller/SettingsController.php',
18+
'OCA\\Text\\Controller\\TSessionAwareController' => $baseDir . '/../lib/Controller/TSessionAwareController.php',
1819
'OCA\\Text\\Controller\\UserApiController' => $baseDir . '/../lib/Controller/UserApiController.php',
1920
'OCA\\Text\\Controller\\WorkspaceController' => $baseDir . '/../lib/Controller/WorkspaceController.php',
2021
'OCA\\Text\\Cron\\Cleanup' => $baseDir . '/../lib/Cron/Cleanup.php',

composer/composer/autoload_static.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,13 @@ class ComposerStaticInitText
2424
'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php',
2525
'OCA\\Text\\AppInfo\\Application' => __DIR__ . '/..' . '/../lib/AppInfo/Application.php',
2626
'OCA\\Text\\Command\\ResetDocument' => __DIR__ . '/..' . '/../lib/Command/ResetDocument.php',
27-
'OCA\\Text\\Controller\\ASessionAwareController' => __DIR__ . '/..' . '/../lib/Controller/ASessionAwareController.php',
2827
'OCA\\Text\\Controller\\AttachmentController' => __DIR__ . '/..' . '/../lib/Controller/AttachmentController.php',
28+
'OCA\\Text\\Controller\\ISessionAwareController' => __DIR__ . '/..' . '/../lib/Controller/ISessionAwareController.php',
2929
'OCA\\Text\\Controller\\NavigationController' => __DIR__ . '/..' . '/../lib/Controller/NavigationController.php',
3030
'OCA\\Text\\Controller\\PublicSessionController' => __DIR__ . '/..' . '/../lib/Controller/PublicSessionController.php',
3131
'OCA\\Text\\Controller\\SessionController' => __DIR__ . '/..' . '/../lib/Controller/SessionController.php',
3232
'OCA\\Text\\Controller\\SettingsController' => __DIR__ . '/..' . '/../lib/Controller/SettingsController.php',
33+
'OCA\\Text\\Controller\\TSessionAwareController' => __DIR__ . '/..' . '/../lib/Controller/TSessionAwareController.php',
3334
'OCA\\Text\\Controller\\UserApiController' => __DIR__ . '/..' . '/../lib/Controller/UserApiController.php',
3435
'OCA\\Text\\Controller\\WorkspaceController' => __DIR__ . '/..' . '/../lib/Controller/WorkspaceController.php',
3536
'OCA\\Text\\Cron\\Cleanup' => __DIR__ . '/..' . '/../lib/Cron/Cleanup.php',

cypress/e2e/api/UsersApi.spec.js

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ describe('The user mention API', function() {
5555
cy.wrap(connection)
5656
.its('document.id')
5757
.should('equal', fileId)
58+
5859
const requestData = {
5960
method: 'POST',
6061
url: '/apps/text/api/v1/users',
@@ -66,43 +67,39 @@ describe('The user mention API', function() {
6667
},
6768
failOnStatusCode: false,
6869
}
70+
const invalidRequestData = { ...requestData }
6971

7072
cy.request(requestData).then(({ status }) => {
7173
expect(status).to.eq(200)
72-
})
7374

74-
const invalidRequestData = { ...requestData }
75-
cy.wrap(() => {
7675
invalidRequestData.body = {
7776
...requestData.body,
7877
sessionToken: 'invalid',
7978
}
8079
})
80+
8181
cy.request(invalidRequestData).then(({ status }) => {
8282
expect(status).to.eq(403)
83-
})
84-
85-
cy.wrap(() => {
8683
invalidRequestData.body = {
8784
...requestData.body,
8885
sessionId: 0,
8986
}
9087
})
88+
9189
cy.request(invalidRequestData).then(({ status }) => {
9290
expect(status).to.eq(403)
93-
})
9491

95-
cy.wrap(() => {
9692
invalidRequestData.body = {
9793
...requestData.body,
9894
documentId: 0,
9995
}
10096
})
97+
10198
cy.request(invalidRequestData).then(({ status }) => {
10299
expect(status).to.eq(403)
103100
})
104101

105-
cy.wrap(connection.close())
102+
cy.wrap(null).then(() => connection.close())
106103

107104
cy.request(requestData).then(({ status, body }) => {
108105
expect(status).to.eq(403)

lib/Controller/ASessionAwareController.php

Lines changed: 0 additions & 25 deletions
This file was deleted.

lib/Controller/AttachmentController.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
use OCA\Text\Exception\UploadException;
3030
use OCA\Text\Middleware\Attribute\RequireDocumentSession;
3131
use OCA\Text\Service\AttachmentService;
32+
use OCP\AppFramework\ApiController;
3233
use OCP\AppFramework\Http;
3334
use OCP\AppFramework\Http\Attribute\NoAdminRequired;
3435
use OCP\AppFramework\Http\Attribute\NoCSRFRequired;
@@ -42,7 +43,8 @@
4243
use OCP\Util;
4344
use Psr\Log\LoggerInterface;
4445

45-
class AttachmentController extends ASessionAwareController {
46+
class AttachmentController extends ApiController implements ISessionAwareController {
47+
use TSessionAwareController;
4648
public const IMAGE_MIME_TYPES = [
4749
'image/png',
4850
'image/jpeg',
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<?php
2+
3+
namespace OCA\Text\Controller;
4+
5+
use OCA\Text\Db\Document;
6+
use OCA\Text\Db\Session;
7+
8+
interface ISessionAwareController {
9+
public function getSession(): Session;
10+
public function setSession(Session $session): void;
11+
public function getDocument(): Document;
12+
public function setDocument(Document $document): void;
13+
}

lib/Controller/PublicSessionController.php

Lines changed: 31 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,10 @@
2525

2626
namespace OCA\Text\Controller;
2727

28+
use OCA\Text\Middleware\Attribute\RequireDocumentSession;
2829
use OCA\Text\Service\ApiService;
30+
use OCP\AppFramework\Http\Attribute\NoAdminRequired;
31+
use OCP\AppFramework\Http\Attribute\PublicPage;
2932
use OCP\AppFramework\Http\DataResponse;
3033
use OCP\AppFramework\PublicShareController;
3134
use OCP\IRequest;
@@ -34,15 +37,19 @@
3437
use OCP\Share\IManager as ShareManager;
3538
use OCP\Share\IShare;
3639

37-
class PublicSessionController extends PublicShareController {
38-
private ShareManager $shareManager;
39-
private ?IShare $share;
40-
private ApiService $apiService;
40+
class PublicSessionController extends PublicShareController implements ISessionAwareController {
41+
use TSessionAwareController;
4142

42-
public function __construct(string $appName, IRequest $request, ISession $session, ShareManager $shareManager, ApiService $apiService) {
43+
private IShare $share;
44+
45+
public function __construct(
46+
string $appName,
47+
IRequest $request,
48+
ISession $session,
49+
private ShareManager $shareManager,
50+
private ApiService $apiService
51+
) {
4352
parent::__construct($appName, $request, $session);
44-
$this->shareManager = $shareManager;
45-
$this->apiService = $apiService;
4653
}
4754

4855
protected function getPasswordHash(): string {
@@ -62,43 +69,36 @@ protected function isPasswordProtected(): bool {
6269
return $this->share->getPassword() !== null;
6370
}
6471

65-
/**
66-
* @NoAdminRequired
67-
* @PublicPage
68-
*/
72+
#[NoAdminRequired]
73+
#[PublicPage]
6974
public function create(string $token, string $file = null, $guestName = null): DataResponse {
7075
return $this->apiService->create(null, $file, $token, $guestName);
7176
}
7277

73-
/**
74-
* @NoAdminRequired
75-
* @PublicPage
76-
*/
78+
#[NoAdminRequired]
79+
#[PublicPage]
7780
public function close(int $documentId, int $sessionId, string $sessionToken): DataResponse {
7881
return $this->apiService->close($documentId, $sessionId, $sessionToken);
7982
}
8083

81-
/**
82-
* @NoAdminRequired
83-
* @PublicPage
84-
*/
84+
#[NoAdminRequired]
85+
#[PublicPage]
86+
#[RequireDocumentSession]
8587
public function push(int $documentId, int $sessionId, string $sessionToken, int $version, array $steps, string $awareness, string $token): DataResponse {
86-
return $this->apiService->push($documentId, $sessionId, $sessionToken, $version, $steps, $awareness, $token);
88+
return $this->apiService->push($this->getSession(), $this->getDocument(), $version, $steps, $awareness, $token);
8789
}
8890

89-
/**
90-
* @NoAdminRequired
91-
* @PublicPage
92-
*/
91+
#[NoAdminRequired]
92+
#[PublicPage]
93+
#[RequireDocumentSession]
9394
public function sync(string $token, int $documentId, int $sessionId, string $sessionToken, int $version = 0, string $autosaveContent = null, string $documentState = null, bool $force = false, bool $manualSave = false): DataResponse {
94-
return $this->apiService->sync($documentId, $sessionId, $sessionToken, $version, $autosaveContent, $documentState, $force, $manualSave, $token);
95+
return $this->apiService->sync($this->getSession(), $this->getDocument(), $version, $autosaveContent, $documentState, $force, $manualSave, $token);
9596
}
9697

97-
/**
98-
* @NoAdminRequired
99-
* @PublicPage
100-
*/
101-
public function updateSession(int $documentId, int $sessionId, string $sessionToken, string $guestName) {
102-
return $this->apiService->updateSession($documentId, $sessionId, $sessionToken, $guestName);
98+
#[NoAdminRequired]
99+
#[PublicPage]
100+
#[RequireDocumentSession]
101+
public function updateSession(string $guestName) {
102+
return $this->apiService->updateSession($this->getSession(), $guestName);
103103
}
104104
}

0 commit comments

Comments
 (0)