Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
100.00% |
1 / 1 |
|
100.00% |
9 / 9 |
CRAP | |
100.00% |
61 / 61 |
| PageController | |
100.00% |
1 / 1 |
|
100.00% |
9 / 9 |
12 | |
100.00% |
61 / 61 |
| __construct | |
100.00% |
1 / 1 |
1 | |
100.00% |
5 / 5 |
|||
| index | |
100.00% |
1 / 1 |
1 | |
100.00% |
5 / 5 |
|||
| publicIndex | |
100.00% |
1 / 1 |
2 | |
100.00% |
9 / 9 |
|||
| errorPage | |
100.00% |
1 / 1 |
1 | |
100.00% |
9 / 9 |
|||
| addContentSecurityToResponse | |
100.00% |
1 / 1 |
1 | |
100.00% |
4 / 4 |
|||
| slideshow | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
| getIndexParameters | |
100.00% |
1 / 1 |
1 | |
100.00% |
10 / 10 |
|||
| showPublicPage | |
100.00% |
1 / 1 |
1 | |
100.00% |
12 / 12 |
|||
| getServer2ServerProperties | |
100.00% |
1 / 1 |
3 | |
100.00% |
6 / 6 |
|||
| <?php | |
| /** | |
| * Gallery | |
| * | |
| * This file is licensed under the Affero General Public License version 3 or | |
| * later. See the COPYING file. | |
| * | |
| * @author Robin Appelman <robin@icewind.nl> | |
| * @author Olivier Paroz <galleryapps@oparoz.com> | |
| * | |
| * @copyright Robin Appelman 2012-2015 | |
| * @copyright Olivier Paroz 2014-2016 | |
| */ | |
| namespace OCA\Gallery\Controller; | |
| use OCP\IURLGenerator; | |
| use OCP\IRequest; | |
| use OCP\IConfig; | |
| use OCP\AppFramework\Controller; | |
| use OCP\AppFramework\Http; | |
| use OCP\AppFramework\Http\TemplateResponse; | |
| use OCP\AppFramework\Http\RedirectResponse; | |
| use OCA\Gallery\Environment\Environment; | |
| use OCA\Gallery\Http\ImageResponse; | |
| /** | |
| * Generates templates for the landing page from within ownCloud, the public | |
| * gallery and error pages | |
| * | |
| * @package OCA\Gallery\Controller | |
| */ | |
| class PageController extends Controller { | |
| /** @var Environment */ | |
| private $environment; | |
| /** @var IURLGenerator */ | |
| private $urlGenerator; | |
| /** @var IConfig */ | |
| private $appConfig; | |
| /** | |
| * Constructor | |
| * | |
| * @param string $appName | |
| * @param IRequest $request | |
| * @param Environment $environment | |
| * @param IURLGenerator $urlGenerator | |
| * @param IConfig $appConfig | |
| */ | |
| public function __construct( | |
| $appName, | |
| IRequest $request, | |
| Environment $environment, | |
| IURLGenerator $urlGenerator, | |
| IConfig $appConfig | |
| ) { | |
| parent::__construct($appName, $request); | |
| $this->environment = $environment; | |
| $this->urlGenerator = $urlGenerator; | |
| $this->appConfig = $appConfig; | |
| } | |
| /** | |
| * @NoAdminRequired | |
| * @NoCSRFRequired | |
| * | |
| * Shows the albums and pictures at the root folder or a message if | |
| * there are no pictures. | |
| * | |
| * This is the entry page for logged-in users accessing the app from | |
| * within ownCloud. | |
| * A TemplateResponse response uses a template from the templates folder | |
| * and parameters provided here to build the page users will see | |
| * | |
| * @return TemplateResponse | |
| */ | |
| public function index() { | |
| $appName = $this->appName; | |
| // Parameters sent to the template | |
| $params = $this->getIndexParameters($appName); | |
| // Will render the page using the template found in templates/index.php | |
| $response = new TemplateResponse($appName, 'index', $params); | |
| $this->addContentSecurityToResponse($response); | |
| return $response; | |
| } | |
| /** | |
| * @PublicPage | |
| * @NoCSRFRequired | |
| * | |
| * Shows the albums and pictures or redirects to the download location the token gives access to | |
| * | |
| * @param string $token | |
| * @param null|string $filename | |
| * | |
| * @return TemplateResponse|ImageResponse|RedirectResponse | |
| */ | |
| public function publicIndex($token, $filename) { | |
| $node = $this->environment->getSharedNode(); | |
| if ($node->getType() === 'dir') { | |
| return $this->showPublicPage($token); | |
| } else { | |
| $url = $this->urlGenerator->linkToRoute( | |
| $this->appName . '.files_public.download', | |
| [ | |
| 'token' => $token, | |
| 'fileId' => $node->getId(), | |
| 'filename' => $filename | |
| ] | |
| ); | |
| return new RedirectResponse($url); | |
| } | |
| } | |
| /** | |
| * @PublicPage | |
| * @NoCSRFRequired | |
| * @Guest | |
| * | |
| * Generates an error page based on the error code | |
| * | |
| * @param int $code | |
| * | |
| * @return TemplateResponse | |
| */ | |
| public function errorPage($code) { | |
| $appName = $this->appName; | |
| $message = $this->request->getCookie('galleryErrorMessage'); | |
| $params = [ | |
| 'appName' => $appName, | |
| 'message' => $message, | |
| 'code' => $code, | |
| ]; | |
| $errorTemplate = new TemplateResponse($appName, 'index', $params, 'guest'); | |
| $errorTemplate->setStatus($code); | |
| $errorTemplate->invalidateCookie('galleryErrorMessage'); | |
| return $errorTemplate; | |
| } | |
| /** | |
| * Adds the domain "data:" to the allowed image domains | |
| * this function is called by reference | |
| * | |
| * @param TemplateResponse $response | |
| */ | |
| private function addContentSecurityToResponse($response) { | |
| $csp = new Http\ContentSecurityPolicy(); | |
| $csp->addAllowedFontDomain("data:"); | |
| $response->setContentSecurityPolicy($csp); | |
| } | |
| /** | |
| * @PublicPage | |
| * @NoCSRFRequired | |
| * @Guest | |
| * | |
| * Returns the slideshow template | |
| * | |
| * @return TemplateResponse | |
| */ | |
| public function slideshow() { | |
| return new TemplateResponse($this->appName, 'slideshow', [], 'blank'); | |
| } | |
| /** | |
| * Returns the parameters to be used in the index function | |
| * | |
| * @param $appName | |
| * | |
| * @return array<string,string> | |
| */ | |
| private function getIndexParameters($appName) { | |
| // Parameters sent to the index function | |
| $params = [ | |
| 'appName' => $appName, | |
| 'uploadUrl' => $this->urlGenerator->linkTo( | |
| 'files', 'ajax/upload.php' | |
| ), | |
| 'publicUploadEnabled' => $this->appConfig->getAppValue( | |
| 'core', 'shareapi_allow_public_upload', 'yes' | |
| ), | |
| 'mailNotificationEnabled' => $this->appConfig->getAppValue( | |
| 'core', 'shareapi_allow_mail_notification', 'no' | |
| ), | |
| 'mailPublicNotificationEnabled' => $this->appConfig->getAppValue( | |
| 'core', 'shareapi_allow_public_notification', 'no' | |
| ) | |
| ]; | |
| return $params; | |
| } | |
| /** | |
| * Shows the albums and pictures the token gives access to | |
| * | |
| * @param $token | |
| * | |
| * @return TemplateResponse | |
| */ | |
| private function showPublicPage($token) { | |
| $albumName = $this->environment->getSharedFolderName(); | |
| list($server2ServerSharing, $protected) = $this->getServer2ServerProperties(); | |
| // Parameters sent to the template | |
| $params = [ | |
| 'appName' => $this->appName, | |
| 'token' => $token, | |
| 'displayName' => $this->environment->getDisplayName(), | |
| 'albumName' => $albumName, | |
| 'server2ServerSharing' => $server2ServerSharing, | |
| 'protected' => $protected, | |
| 'filename' => $albumName | |
| ]; | |
| // Will render the page using the template found in templates/public.php | |
| $response = new TemplateResponse($this->appName, 'public', $params, 'public'); | |
| $this->addContentSecurityToResponse($response); | |
| return $response; | |
| } | |
| /** | |
| * Determines if we can add external shared to this instance | |
| * | |
| * @return array<bool,string> | |
| */ | |
| private function getServer2ServerProperties() { | |
| $server2ServerSharing = $this->appConfig->getAppValue( | |
| 'files_sharing', 'outgoing_server2server_share_enabled', 'yes' | |
| ); | |
| $server2ServerSharing = ($server2ServerSharing === 'yes') ? true : false; | |
| $password = $this->environment->getSharePassword(); | |
| $passwordProtected = ($password) ? 'true' : 'false'; | |
| return [$server2ServerSharing, $passwordProtected]; | |
| } | |
| } |