-
-
Notifications
You must be signed in to change notification settings - Fork 4.7k
feat(federation): auto-accept shares from trusted servers #49973
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from 1 commit
Commits
Show all changes
7 commits
Select commit
Hold shift + click to select a range
f753d2f
fix(federation): comply to `sharing.federation.allowSelfSignedCertifi…
skjnldsv 771584f
fix(files_sharing): external share parsing
skjnldsv 5c359e4
feat(federatedfilesharing): auto-accept shares from trusted servers
skjnldsv f6f66d7
fix(federation): settings layout and error handling
skjnldsv b434750
chore(federation): add trusted server auto accept integration tests
skjnldsv e7f6e16
feat(federatedfilesharing): improve admin docs and settings
skjnldsv 669e6ca
chore(federation): cleanup SettingsController and legacy AddServerMid…
skjnldsv File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
chore(federation): add trusted server auto accept integration tests
Signed-off-by: skjnldsv <[email protected]>
- Loading branch information
commit b434750cb28adec0ca5f96880b80cc0e84681905
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
skjnldsv marked this conversation as resolved.
Show resolved
Hide resolved
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
|
|
@@ -11,10 +11,8 @@ | |||||
| use OCA\Federation\TrustedServers; | ||||||
| use OCP\AppFramework\Http; | ||||||
| use OCP\AppFramework\Http\Attribute\AuthorizedAdminSetting; | ||||||
| use OCP\AppFramework\Http\DataResponse; | ||||||
| use OCP\AppFramework\Http\JSONResponse; | ||||||
| use OCP\AppFramework\OCSController; | ||||||
| use OCP\HintException; | ||||||
| use OCP\IL10N; | ||||||
| use OCP\IRequest; | ||||||
|
|
||||||
|
|
@@ -30,26 +28,26 @@ public function __construct( | |||||
|
|
||||||
|
|
||||||
| /** | ||||||
| * Add server to the list of trusted Nextclouds. | ||||||
| * Add server to the list of trusted Nextcloud servers | ||||||
| * | ||||||
| * @param string $url The URL of the server to add | ||||||
| * @return JSONResponse<Http::STATUS_OK, array{data: array{id: int, message: string, url: string}, status: 'ok'}, array{}>|JSONResponse<Http::STATUS_NOT_FOUND|Http::STATUS_CONFLICT, array{data: array{hint: string, message: string}, status: 'error'}, array{}> | ||||||
| * | ||||||
| * 200: Server added successfully | ||||||
| * 404: Server not found at the given URL | ||||||
| * 409: Server is already in the list of trusted servers | ||||||
| */ | ||||||
| #[AuthorizedAdminSetting(settings: Admin::class)] | ||||||
| public function addServer(string $url): JSONResponse { | ||||||
| try { | ||||||
| $this->checkServer(trim($url)); | ||||||
| } catch (HintException $e) { | ||||||
| return new JSONResponse([ | ||||||
| 'message' => 'error', | ||||||
| 'data' => [ | ||||||
| 'message' => $e->getMessage(), | ||||||
| 'hint' => $e->getHint(), | ||||||
| ], | ||||||
| ], $e->getCode()); | ||||||
| $check = $this->checkServer(trim($url)); | ||||||
| if ($check instanceof JSONResponse) { | ||||||
| return $check; | ||||||
| } | ||||||
|
|
||||||
| // Add the server to the list of trusted servers, all is well | ||||||
| $id = $this->trustedServers->addServer(trim($url)); | ||||||
skjnldsv marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
| return new JSONResponse([ | ||||||
| 'message' => 'ok', | ||||||
| 'status' => 'ok', | ||||||
skjnldsv marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||||||
| 'data' => [ | ||||||
| 'url' => $url, | ||||||
| 'id' => $id, | ||||||
|
|
@@ -59,36 +57,94 @@ public function addServer(string $url): JSONResponse { | |||||
| } | ||||||
|
|
||||||
| /** | ||||||
| * Add server to the list of trusted Nextclouds. | ||||||
| * Add server to the list of trusted Nextcloud servers | ||||||
| * | ||||||
| * @param int $id The ID of the trusted server to remove | ||||||
| * @return JSONResponse<Http::STATUS_OK, array{data: array{id: int}, status: 'ok'}, array{}>|JSONResponse<Http::STATUS_NOT_FOUND, array{data: array{message: string}, status: 'error'}, array{}> | ||||||
| * | ||||||
| * 200: Server removed successfully | ||||||
| * 404: Server not found at the given ID | ||||||
| */ | ||||||
| #[AuthorizedAdminSetting(settings: Admin::class)] | ||||||
| public function removeServer(int $id): JSONResponse { | ||||||
| $this->trustedServers->removeServer($id); | ||||||
| try { | ||||||
| $this->trustedServers->removeServer($id); | ||||||
| return new JSONResponse([ | ||||||
| 'status' => 'ok', | ||||||
| 'data' => ['id' => $id], | ||||||
| ]); | ||||||
| } catch (\Exception $e) { | ||||||
| return new JSONResponse([ | ||||||
| 'status' => 'error', | ||||||
| 'data' => [ | ||||||
| 'message' => $e->getMessage(), | ||||||
| ], | ||||||
| ], Http::STATUS_NOT_FOUND); | ||||||
| } | ||||||
skjnldsv marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
| } | ||||||
|
|
||||||
| /** | ||||||
| * List all trusted servers | ||||||
| * | ||||||
| * @return JSONResponse<Http::STATUS_OK, array{data: list<array{id: int, status: int, url: string}>, status: 'ok'}, array{}> | ||||||
| * | ||||||
| * 200: List of trusted servers | ||||||
| */ | ||||||
| #[AuthorizedAdminSetting(settings: Admin::class)] | ||||||
| public function getServers(): JSONResponse { | ||||||
| $servers = $this->trustedServers->getServers(); | ||||||
skjnldsv marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
|
|
||||||
| // obfuscate the shared secret | ||||||
| $servers = array_map(function ($server) { | ||||||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. nit: introduce a new variable instead of repurposing the old one.
Suggested change
|
||||||
| return [ | ||||||
| 'url' => $server['url'], | ||||||
| 'id' => $server['id'], | ||||||
| 'status' => $server['status'], | ||||||
| ]; | ||||||
| }, $servers); | ||||||
|
|
||||||
| // return the list of trusted servers | ||||||
| return new JSONResponse([ | ||||||
| 'message' => 'ok', | ||||||
| 'data' => ['id' => $id], | ||||||
| 'status' => 'ok', | ||||||
| 'data' => $servers, | ||||||
| ]); | ||||||
| } | ||||||
|
|
||||||
|
|
||||||
| /** | ||||||
| * Check if the server should be added to the list of trusted servers or not. | ||||||
| * | ||||||
| * @throws HintException | ||||||
| * @return JSONResponse<Http::STATUS_NOT_FOUND|Http::STATUS_CONFLICT, array{data: array{hint: string, message: string}, status: 'error'}, array{}>|null | ||||||
| * | ||||||
| * 404: Server not found at the given URL | ||||||
| * 409: Server is already in the list of trusted servers | ||||||
| */ | ||||||
| #[AuthorizedAdminSetting(settings: Admin::class)] | ||||||
| protected function checkServer(string $url): bool { | ||||||
| protected function checkServer(string $url): ?JSONResponse { | ||||||
| if ($this->trustedServers->isTrustedServer($url) === true) { | ||||||
| $message = 'Server is already in the list of trusted servers.'; | ||||||
| $hint = $this->l->t('Server is already in the list of trusted servers.'); | ||||||
| throw new HintException($message, $hint, Http::STATUS_CONFLICT); | ||||||
| return new JSONResponse([ | ||||||
skjnldsv marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||||||
| 'status' => 'error', | ||||||
| 'data' => [ | ||||||
| 'message' => $message, | ||||||
| 'hint' => $hint, | ||||||
| ], | ||||||
| ], Http::STATUS_CONFLICT); | ||||||
| } | ||||||
|
|
||||||
| if ($this->trustedServers->isNextcloudServer($url) === false) { | ||||||
| $message = 'No server to federate with found'; | ||||||
| $hint = $this->l->t('No server to federate with found'); | ||||||
| throw new HintException($message, $hint, Http::STATUS_NOT_FOUND); | ||||||
| return new JSONResponse([ | ||||||
| 'status' => 'error', | ||||||
| 'data' => [ | ||||||
| 'message' => $message, | ||||||
| 'hint' => $hint, | ||||||
| ], | ||||||
| ], Http::STATUS_NOT_FOUND); | ||||||
| } | ||||||
|
|
||||||
| return true; | ||||||
| return null; | ||||||
| } | ||||||
| } | ||||||
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.