From 67e019d70ff1fd6c386a663a43fda1c6bd2fc5c2 Mon Sep 17 00:00:00 2001 From: Raul Date: Wed, 25 May 2022 14:13:39 +0200 Subject: [PATCH 1/3] Encode file to UTF-8 on `fetch` call Signed-off-by: Raul --- lib/Service/ApiService.php | 3 +- lib/TextFile.php | 92 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 94 insertions(+), 1 deletion(-) create mode 100644 lib/TextFile.php diff --git a/lib/Service/ApiService.php b/lib/Service/ApiService.php index faa4c879e06..21a81807f71 100644 --- a/lib/Service/ApiService.php +++ b/lib/Service/ApiService.php @@ -30,6 +30,7 @@ use OC\Files\Node\File; use OCA\Text\DocumentHasUnsavedChangesException; use OCA\Text\DocumentSaveConflictException; +use OCA\Text\TextFile; use OCA\Text\VersionMismatchException; use OCP\AppFramework\Db\DoesNotExistException; use OCP\AppFramework\Http; @@ -111,7 +112,7 @@ public function fetch($documentId, $sessionId, $sessionToken) { if ($this->sessionService->isValidSession($documentId, $sessionId, $sessionToken)) { $this->sessionService->removeInactiveSessions($documentId); try { - $file = $this->documentService->getBaseFile($documentId); + $file = new TextFile($this->documentService->getBaseFile($documentId), $this->encodingService); } catch (NotFoundException $e) { return new NotFoundResponse(); } diff --git a/lib/TextFile.php b/lib/TextFile.php new file mode 100644 index 00000000000..639c6257550 --- /dev/null +++ b/lib/TextFile.php @@ -0,0 +1,92 @@ + + * + * @author Raul Ferreira Fuentes + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ + +namespace OCA\Text; + +use OCA\Text\Service\EncodingService; +use OCP\Files\NotFoundException; +use OCP\Files\SimpleFS\ISimpleFile; + +/** + * Wrapper around a ISimpleFile object to ensure that it is correctly encoded (UTF-8) for the text app. + */ +class TextFile implements ISimpleFile { + + /** @var ISimpleFile */ + private $file; + /** @var EncodingService */ + private $encodingService; + + public function __construct(ISimpleFile $file, EncodingService $encodingService) { + $this->file = $file; + $this->encodingService = $encodingService; + } + + public function getName() { + return $this->file->getName(); + } + + public function getSize() { + return $this->file->getSize(); + } + + public function getETag() { + return $this->file->getETag(); + } + + public function getMTime() { + return $this->file->getMTime(); + } + + public function getContent() { + $content = $this->encodingService->encodeToUtf8($this->file->getContent()); + if (!$content) { + throw new NotFoundException('File not compatible with text because it could not be encoded to UTF-8.'); + } + + return $content; + } + + public function putContent($data) { + return $this->file->putContent($data); + } + + public function delete() { + $this->file->delete(); + } + + public function getMimeType() { + return 'text/plain;encoding=utf-8'; + } + + public function read() { + return $this->file->read(); + } + + public function write() { + return $this->file->write(); + } +} From 6d3811b52e0f78a9eb54e65e8f18c8b91895c14f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julius=20H=C3=A4rtl?= Date: Thu, 9 Jun 2022 21:50:25 +0200 Subject: [PATCH 2/3] Add missing encoding service MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Julius Härtl --- lib/Service/ApiService.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/Service/ApiService.php b/lib/Service/ApiService.php index 21a81807f71..db432c43b99 100644 --- a/lib/Service/ApiService.php +++ b/lib/Service/ApiService.php @@ -48,12 +48,14 @@ class ApiService { protected $sessionService; protected $documentService; protected $logger; + private $encodingService; - public function __construct(IRequest $request, SessionService $sessionService, DocumentService $documentService, ILogger $logger) { + public function __construct(IRequest $request, SessionService $sessionService, DocumentService $documentService, ILogger $logger, EncodingService $encodingService) { $this->request = $request; $this->sessionService = $sessionService; $this->documentService = $documentService; $this->logger = $logger; + $this->encodingService = $encodingService; } public function create($fileId = null, $filePath = null, $token = null, $guestName = null, bool $forceRecreate = false): DataResponse { From fcb7ad185412dc5ea21c654869bb3300e5f792ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julius=20H=C3=A4rtl?= Date: Thu, 9 Jun 2022 21:56:31 +0200 Subject: [PATCH 3/3] Bump drone image to avoid composer issues with psr/container MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Julius Härtl --- .drone.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.drone.yml b/.drone.yml index 3ba75cc06dc..780a2f6d721 100644 --- a/.drone.yml +++ b/.drone.yml @@ -2,7 +2,7 @@ kind: pipeline name: compatibility steps: - name: compatibility - image: nextcloudci/php7.3:php7.3-5 + image: ghcr.io/nextcloud/continuous-integration-php7.4:php7.4-3 environment: APP_NAME: text CORE_BRANCH: stable23 @@ -25,7 +25,7 @@ kind: pipeline name: php-sqlite steps: - name: php7.3 - image: nextcloudci/php7.3:php7.3-5 + image: ghcr.io/nextcloud/continuous-integration-php7.4:php7.4-3 environment: APP_NAME: text CORE_BRANCH: stable23 @@ -36,7 +36,7 @@ steps: - composer install - phpunit -c tests/phpunit.xml --coverage-clover build/php-unit.coverage.xml - name: php7.4 - image: nextcloudci/php7.4:2 + image: ghcr.io/nextcloud/continuous-integration-php7.4:php7.4-3 environment: APP_NAME: text CORE_BRANCH: stable23 @@ -58,7 +58,7 @@ kind: pipeline name: php-mysql steps: - name: php7.3 - image: nextcloudci/php7.3:php7.3-5 + image: ghcr.io/nextcloud/continuous-integration-php7.4:php7.4-3 environment: APP_NAME: text CORE_BRANCH: stable23 @@ -89,7 +89,7 @@ kind: pipeline name: php-postgres steps: - name: php7.3 - image: nextcloudci/php7.3:php7.3-5 + image: ghcr.io/nextcloud/continuous-integration-php7.4:php7.4-3 environment: APP_NAME: text CORE_BRANCH: stable23