Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/text.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Controller/ImageController.php')
-rw-r--r--lib/Controller/ImageController.php130
1 files changed, 125 insertions, 5 deletions
diff --git a/lib/Controller/ImageController.php b/lib/Controller/ImageController.php
index 219fa7b68..36616e554 100644
--- a/lib/Controller/ImageController.php
+++ b/lib/Controller/ImageController.php
@@ -33,6 +33,7 @@ use OCA\Text\Service\ImageService;
use OCP\AppFramework\Controller;
use OCP\AppFramework\Http\DataDownloadResponse;
use OCP\AppFramework\Http\DataResponse;
+use OCP\AppFramework\Http\RedirectResponse;
use OCP\Files\IMimeTypeDetector;
use OCP\IL10N;
use OCP\IRequest;
@@ -121,9 +122,11 @@ class ImageController extends Controller {
try {
$file = $this->getUploadedFile('image');
if (isset($file['tmp_name'], $file['name'], $file['type'])) {
+ /*
if (!in_array($file['type'], self::IMAGE_MIME_TYPES, true)) {
return new DataResponse(['error' => 'Image type not supported'], Http::STATUS_BAD_REQUEST);
}
+ */
$newFileResource = fopen($file['tmp_name'], 'rb');
if ($newFileResource === false) {
throw new Exception('Could not read file');
@@ -179,7 +182,7 @@ class ImageController extends Controller {
* @NoCSRFRequired
* @PublicPage
*
- * Serve the images in the editor
+ * Serve the image files in the editor
* @param int $documentId
* @param int $sessionId
* @param string $sessionToken
@@ -187,17 +190,17 @@ class ImageController extends Controller {
* @param string|null $shareToken
* @return DataDownloadResponse|DataResponse
*/
- public function getImage(int $documentId, int $sessionId, string $sessionToken, string $imageFileName, ?string $shareToken = null) {
+ public function getImageFile(int $documentId, int $sessionId, string $sessionToken, string $imageFileName, ?string $shareToken = null) {
if (!$this->sessionService->isValidSession($documentId, $sessionId, $sessionToken)) {
return new DataResponse('', Http::STATUS_FORBIDDEN);
}
try {
if ($shareToken) {
- $imageFile = $this->imageService->getImagePublic($documentId, $imageFileName, $shareToken);
+ $imageFile = $this->imageService->getImageFilePublic($documentId, $imageFileName, $shareToken);
} else {
$userId = $this->getUserIdFromSession($documentId, $sessionId, $sessionToken);
- $imageFile = $this->imageService->getImage($documentId, $imageFileName, $userId);
+ $imageFile = $this->imageService->getImageFile($documentId, $imageFileName, $userId);
}
return $imageFile !== null
? new DataDownloadResponse(
@@ -207,7 +210,124 @@ class ImageController extends Controller {
)
: new DataResponse('', Http::STATUS_NOT_FOUND);
} catch (Exception $e) {
- $this->logger->error('getImage error', ['exception' => $e]);
+ $this->logger->error('getImageFile error', ['exception' => $e]);
+ return new DataResponse('', Http::STATUS_NOT_FOUND);
+ }
+ }
+
+ /**
+ * @NoAdminRequired
+ * @NoCSRFRequired
+ * @PublicPage
+ *
+ * Serve the media files in the editor
+ * @param int $documentId
+ * @param int $sessionId
+ * @param string $sessionToken
+ * @param string $mediaFileName
+ * @param string|null $shareToken
+ * @return DataDownloadResponse|DataResponse
+ */
+ public function getMediaFile(int $documentId, int $sessionId, string $sessionToken, string $mediaFileName, ?string $shareToken = null) {
+ if (!$this->sessionService->isValidSession($documentId, $sessionId, $sessionToken)) {
+ return new DataResponse('', Http::STATUS_FORBIDDEN);
+ }
+
+ try {
+ if ($shareToken) {
+ $mediaFile = $this->imageService->getMediaFilePublic($documentId, $mediaFileName, $shareToken);
+ } else {
+ $userId = $this->getUserIdFromSession($documentId, $sessionId, $sessionToken);
+ $mediaFile = $this->imageService->getMediaFile($documentId, $mediaFileName, $userId);
+ }
+ return $mediaFile !== null
+ ? new DataDownloadResponse(
+ $mediaFile->getContent(),
+ (string) Http::STATUS_OK,
+ $this->getSecureMimeType($mediaFile->getMimeType())
+ )
+ : new DataResponse('', Http::STATUS_NOT_FOUND);
+ } catch (Exception $e) {
+ $this->logger->error('getMediaFile error', ['exception' => $e]);
+ return new DataResponse('', Http::STATUS_NOT_FOUND);
+ }
+ }
+
+ /**
+ * @NoAdminRequired
+ * @NoCSRFRequired
+ * @PublicPage
+ *
+ * Serve the media files preview in the editor
+ * @param int $documentId
+ * @param int $sessionId
+ * @param string $sessionToken
+ * @param string $mediaFileName
+ * @param string|null $shareToken
+ * @return DataDownloadResponse|DataResponse|RedirectResponse
+ */
+ public function getMediaFilePreview(int $documentId, int $sessionId, string $sessionToken, string $mediaFileName, ?string $shareToken = null) {
+ if (!$this->sessionService->isValidSession($documentId, $sessionId, $sessionToken)) {
+ return new DataResponse('', Http::STATUS_FORBIDDEN);
+ }
+
+ try {
+ if ($shareToken) {
+ $preview = $this->imageService->getMediaFilePreviewPublic($documentId, $mediaFileName, $shareToken);
+ } else {
+ $userId = $this->getUserIdFromSession($documentId, $sessionId, $sessionToken);
+ $preview = $this->imageService->getMediaFilePreview($documentId, $mediaFileName, $userId);
+ }
+ if ($preview === null) {
+ return new DataResponse('', Http::STATUS_NOT_FOUND);
+ }
+ if ($preview['type'] === 'file') {
+ return new DataDownloadResponse(
+ $preview['file']->getContent(),
+ (string) Http::STATUS_OK,
+ $this->getSecureMimeType($preview['file']->getMimeType())
+ );
+ } elseif ($preview['type'] === 'icon') {
+ return new RedirectResponse($preview['iconUrl']);
+ }
+ } catch (Exception $e) {
+ $this->logger->error('getMediaFilePreview error', ['exception' => $e]);
+ return new DataResponse('', Http::STATUS_NOT_FOUND);
+ }
+ }
+
+ /**
+ * @NoAdminRequired
+ * @NoCSRFRequired
+ * @PublicPage
+ *
+ * Serve the media files metadata in the editor
+ * @param int $documentId
+ * @param int $sessionId
+ * @param string $sessionToken
+ * @param string $mediaFileName
+ * @param string|null $shareToken
+ * @return DataResponse
+ */
+ public function getMediaFileMetadata(int $documentId, int $sessionId, string $sessionToken,
+ string $mediaFileName, ?string $shareToken = null): DataResponse {
+ if (!$this->sessionService->isValidSession($documentId, $sessionId, $sessionToken)) {
+ return new DataResponse('', Http::STATUS_FORBIDDEN);
+ }
+
+ try {
+ if ($shareToken) {
+ $metadata = $this->imageService->getMediaFileMetadataPublic($documentId, $mediaFileName, $shareToken);
+ } else {
+ $userId = $this->getUserIdFromSession($documentId, $sessionId, $sessionToken);
+ $metadata = $this->imageService->getMediaFileMetadataPrivate($documentId, $mediaFileName, $userId);
+ }
+ if ($metadata === null) {
+ return new DataResponse('', Http::STATUS_NOT_FOUND);
+ }
+ return new DataResponse($metadata);
+ } catch (Exception $e) {
+ $this->logger->error('getMediaFileMetadata error', ['exception' => $e]);
return new DataResponse('', Http::STATUS_NOT_FOUND);
}
}