Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
100.00% |
1 / 1 |
|
100.00% |
3 / 3 |
CRAP | |
100.00% |
22 / 22 |
FilesApiController | |
100.00% |
1 / 1 |
|
100.00% |
3 / 3 |
6 | |
100.00% |
22 / 22 |
__construct | |
100.00% |
1 / 1 |
1 | |
100.00% |
8 / 8 |
|||
getList | |
100.00% |
1 / 1 |
2 | |
100.00% |
5 / 5 |
|||
download | |
100.00% |
1 / 1 |
3 | |
100.00% |
9 / 9 |
<?php | |
/** | |
* Gallery | |
* | |
* This file is licensed under the Affero General Public License version 3 or | |
* later. See the COPYING file. | |
* | |
* @author Olivier Paroz <galleryapps@oparoz.com> | |
* | |
* @copyright Olivier Paroz 2014-2016 | |
*/ | |
namespace OCA\Gallery\Controller; | |
use OCP\IRequest; | |
use OCP\IURLGenerator; | |
use OCP\ILogger; | |
use OCP\AppFramework\ApiController; | |
use OCP\AppFramework\Http; | |
use OCP\AppFramework\Http\RedirectResponse; | |
use OCA\Gallery\Http\ImageResponse; | |
use OCA\Gallery\Service\SearchFolderService; | |
use OCA\Gallery\Service\ConfigService; | |
use OCA\Gallery\Service\SearchMediaService; | |
use OCA\Gallery\Service\DownloadService; | |
use OCA\Gallery\Service\ServiceException; | |
/** | |
* Class FilesApiController | |
* | |
* @package OCA\Gallery\Controller | |
*/ | |
class FilesApiController extends ApiController { | |
use Files; | |
use HttpError; | |
/** @var IURLGenerator */ | |
private $urlGenerator; | |
/** | |
* Constructor | |
* | |
* @param string $appName | |
* @param IRequest $request | |
* @param IURLGenerator $urlGenerator | |
* @param SearchFolderService $searchFolderService | |
* @param ConfigService $configService | |
* @param SearchMediaService $searchMediaService | |
* @param DownloadService $downloadService | |
* @param ILogger $logger | |
*/ | |
public function __construct( | |
$appName, | |
IRequest $request, | |
IURLGenerator $urlGenerator, | |
SearchFolderService $searchFolderService, | |
ConfigService $configService, | |
SearchMediaService $searchMediaService, | |
DownloadService $downloadService, | |
ILogger $logger | |
) { | |
parent::__construct($appName, $request); | |
$this->urlGenerator = $urlGenerator; | |
$this->searchFolderService = $searchFolderService; | |
$this->configService = $configService; | |
$this->searchMediaService = $searchMediaService; | |
$this->downloadService = $downloadService; | |
$this->logger = $logger; | |
} | |
/** | |
* @NoAdminRequired | |
* @NoCSRFRequired | |
* @CORS | |
* | |
* Returns a list of all media files available to the authenticated user | |
* | |
* @see FilesController::getList() | |
* | |
* @param string $location a path representing the current album in the app | |
* @param string $features the list of supported features | |
* @param string $etag the last known etag in the client | |
* @param string $mediatypes the list of supported media types | |
* | |
* @return array <string,array<string,string|int>>|Http\JSONResponse | |
*/ | |
public function getList($location, $features, $etag, $mediatypes) { | |
$featuresArray = explode(';', $features); | |
$mediaTypesArray = explode(';', $mediatypes); | |
try { | |
return $this->getFilesAndAlbums($location, $featuresArray, $etag, $mediaTypesArray); | |
} catch (\Exception $exception) { | |
return $this->jsonError($exception); | |
} | |
} | |
/** | |
* @NoAdminRequired | |
* @NoCSRFRequired | |
* @CORS | |
* | |
* Sends the file matching the fileId | |
* | |
* In case of error we send an HTML error page | |
* We need to keep the session open in order to be able to send the error message to the error | |
* page | |
* | |
* @param int $fileId the ID of the file we want to download | |
* @param string|null $filename | |
* | |
* @return ImageResponse | |
*/ | |
public function download($fileId, $filename = null) { | |
try { | |
$download = $this->getDownload($fileId, $filename); | |
} catch (ServiceException $exception) { | |
$code = $this->getHttpStatusCode($exception); | |
$url = $this->urlGenerator->linkToRoute( | |
$this->appName . '.page.error_page', ['code' => $code] | |
); | |
// Don't set a cookie for the error message, we don't want it in the API | |
return new RedirectResponse($url); | |
} | |
// That's the only exception out of all the image media types | |
if ($download['mimetype'] === 'image/svg+xml') { | |
$download['mimetype'] = 'text/plain'; | |
} | |
return new ImageResponse($download); | |
} | |
} |