diff options
author | Julius Härtl <jus@bitgrid.net> | 2021-08-13 10:45:03 +0300 |
---|---|---|
committer | Julius Härtl <jus@bitgrid.net> | 2021-08-13 14:55:41 +0300 |
commit | 95985564d0113c380ae16e89bafb1c85ba87bf15 (patch) | |
tree | e916bab7391dc855cc8b9aa2fbcf5935a5c32d48 /lib/Controller | |
parent | 95a559512f53314ad8cc9d91683936e64ec8f921 (diff) |
Add API to set the guest name for an existing WOPI token
Signed-off-by: Julius Härtl <jus@bitgrid.net>
Diffstat (limited to 'lib/Controller')
-rw-r--r-- | lib/Controller/DocumentController.php | 8 | ||||
-rw-r--r-- | lib/Controller/OCSController.php | 47 | ||||
-rw-r--r-- | lib/Controller/WopiController.php | 2 |
3 files changed, 41 insertions, 16 deletions
diff --git a/lib/Controller/DocumentController.php b/lib/Controller/DocumentController.php index 664d17a3..bca32ffa 100644 --- a/lib/Controller/DocumentController.php +++ b/lib/Controller/DocumentController.php @@ -360,11 +360,9 @@ class DocumentController extends Controller { 'userId' => $this->uid, ]; - if ($this->uid !== null || ($share->getPermissions() & \OCP\Constants::PERMISSION_UPDATE) === 0 || $this->helper->getGuestName() !== null) { - list($urlSrc, $token) = $this->tokenManager->getToken($item->getId(), $shareToken, $this->uid); - $params['token'] = $token; - $params['urlsrc'] = $urlSrc; - } + list($urlSrc, $token) = $this->tokenManager->getToken($item->getId(), $shareToken, $this->uid); + $params['token'] = $token; + $params['urlsrc'] = $urlSrc; $response = new TemplateResponse('richdocuments', 'documents', $params, 'base'); $this->setupPolicy($response); diff --git a/lib/Controller/OCSController.php b/lib/Controller/OCSController.php index d1eb7181..52bcaa88 100644 --- a/lib/Controller/OCSController.php +++ b/lib/Controller/OCSController.php @@ -24,9 +24,12 @@ namespace OCA\Richdocuments\Controller; use OCA\Richdocuments\Db\DirectMapper; +use OCA\Richdocuments\Db\Wopi; +use OCA\Richdocuments\Helper; use OCA\Richdocuments\Service\FederationService; use OCA\Richdocuments\TemplateManager; use OCA\Richdocuments\TokenManager; +use OCP\AppFramework\Db\DoesNotExistException; use OCP\AppFramework\Http; use OCP\AppFramework\Http\DataResponse; use OCP\AppFramework\OCS\OCSBadRequestException; @@ -150,16 +153,22 @@ class OCSController extends \OCP\AppFramework\OCSController { $wopi = $this->tokenManager->newInitiatorToken($host, null, $shareToken, true, $this->userId); $client = \OC::$server->getHTTPClientService()->newClient(); - $response = $client->post(rtrim($host, '/') . '/ocs/v2.php/apps/richdocuments/api/v1/direct/share/initiator?format=json', [ - 'body' => [ - 'initiatorServer' => \OC::$server->getURLGenerator()->getAbsoluteURL(''), - 'initiatorToken' => $wopi->getToken(), - 'shareToken' => $shareToken, - 'path' => $path, - 'password' => $password - ], - 'timeout' => 30 - ]); + try { + $response = $client->post(rtrim($host, '/') . '/ocs/v2.php/apps/richdocuments/api/v1/direct/share/initiator?format=json', [ + 'body' => [ + 'initiatorServer' => \OC::$server->getURLGenerator()->getAbsoluteURL(''), + 'initiatorToken' => $wopi->getToken(), + 'shareToken' => $shareToken, + 'path' => $path, + 'password' => $password + ], + 'timeout' => 30 + ]); + } catch (\Exception $e) { + $response = new DataResponse([], HTTP::STATUS_FORBIDDEN); + $response->throttle(); + return $response; + } $url = \json_decode($response->getBody(), true)['ocs']['data']['url']; return new DataResponse([ @@ -246,6 +255,24 @@ class OCSController extends \OCP\AppFramework\OCSController { } /** + * Generate a direct editing link for a file in a public share to open with the current user + * + * @NoAdminRequired + * @BruteForceProtection(action=richdocumentsCreatePublic) + * @PublicPage + */ + public function updateGuestName(string $access_token, string $guestName): DataResponse { + try { + $this->tokenManager->updateGuestName($access_token, $guestName); + return new DataResponse([], Http::STATUS_OK); + } catch (DoesNotExistException $e) { + $response = new DataResponse([], Http::STATUS_FORBIDDEN); + $response->throttle(); + return $response; + } + } + + /** * @NoAdminRequired * * @param string $type The template type diff --git a/lib/Controller/WopiController.php b/lib/Controller/WopiController.php index 20cec6d9..d01db98f 100644 --- a/lib/Controller/WopiController.php +++ b/lib/Controller/WopiController.php @@ -271,7 +271,7 @@ class WopiController extends Controller { return $response; } - $response['UserFriendlyName'] = $initiator->getGuestDisplayname() . ' (Guest)'; + $response['UserFriendlyName'] = $this->tokenManager->prepareGuestName($initiator->getGuestDisplayname()); if ($initiator->hasTemplateId()) { $templateUrl = $wopi->getRemoteServer() . '/index.php/apps/richdocuments/wopi/template/' . $initiator->getTemplateId() . '?access_token=' . $initiator->getToken(); $response['TemplateSource'] = $templateUrl; |