diff --git a/apps/files_sharing/lib/AppInfo/Application.php b/apps/files_sharing/lib/AppInfo/Application.php index 5558ffbdfc..357860e8fa 100644 --- a/apps/files_sharing/lib/AppInfo/Application.php +++ b/apps/files_sharing/lib/AppInfo/Application.php @@ -37,12 +37,14 @@ use OCA\Files_Sharing\Controllers\ExternalSharesController; use OCA\Files_Sharing\Controllers\ShareController; use OCA\Files_Sharing\Middleware\SharingCheckMiddleware; use \OCP\IContainer; +use OCP\IServerContainer; class Application extends App { public function __construct(array $urlParams = array()) { parent::__construct('files_sharing', $urlParams); $container = $this->getContainer(); + /** @var IServerContainer $server */ $server = $container->getServer(); /** @@ -63,7 +65,9 @@ class Application extends App { $server->getPreviewManager(), $server->getRootFolder(), $federatedSharingApp->getFederatedShareProvider(), - $server->getEventDispatcher() + $server->getEventDispatcher(), + $server->getL10N($c->query('AppName')), + $server->getThemingDefaults() ); }); $container->registerService('ExternalSharesController', function (SimpleContainer $c) { @@ -133,7 +137,7 @@ class Application extends App { }); // Execute middlewares - $container->registerMiddleware('SharingCheckMiddleware'); + $container->registerMiddleWare('SharingCheckMiddleware'); $container->registerMiddleWare('OCSShareAPIMiddleware'); $container->registerService('MountProvider', function (IContainer $c) { diff --git a/apps/files_sharing/lib/Controllers/ShareController.php b/apps/files_sharing/lib/Controllers/ShareController.php index 5ccaab746f..8e3405311e 100644 --- a/apps/files_sharing/lib/Controllers/ShareController.php +++ b/apps/files_sharing/lib/Controllers/ShareController.php @@ -35,6 +35,8 @@ namespace OCA\Files_Sharing\Controllers; use OC_Files; use OC_Util; use OCA\FederatedFileSharing\FederatedShareProvider; +use OCP\Defaults; +use OCP\IL10N; use OCP\Template; use OCP\Share; use OCP\AppFramework\Controller; @@ -84,6 +86,10 @@ class ShareController extends Controller { protected $federatedShareProvider; /** @var EventDispatcherInterface */ protected $eventDispatcher; + /** @var IL10N */ + protected $l10n; + /** @var Defaults */ + protected $defaults; /** * @param string $appName @@ -99,6 +105,8 @@ class ShareController extends Controller { * @param IRootFolder $rootFolder * @param FederatedShareProvider $federatedShareProvider * @param EventDispatcherInterface $eventDispatcher + * @param IL10N $l10n + * @param \OC_Defaults $defaults */ public function __construct($appName, IRequest $request, @@ -112,7 +120,9 @@ class ShareController extends Controller { IPreview $previewManager, IRootFolder $rootFolder, FederatedShareProvider $federatedShareProvider, - EventDispatcherInterface $eventDispatcher) { + EventDispatcherInterface $eventDispatcher, + IL10N $l10n, + \OC_Defaults $defaults) { parent::__construct($appName, $request); $this->config = $config; @@ -126,6 +136,8 @@ class ShareController extends Controller { $this->rootFolder = $rootFolder; $this->federatedShareProvider = $federatedShareProvider; $this->eventDispatcher = $eventDispatcher; + $this->l10n = $l10n; + $this->defaults = $defaults; } /** @@ -352,12 +364,19 @@ class ShareController extends Controller { $shareTmpl['hideFileList'] = $hideFileList; $shareTmpl['shareOwner'] = $this->userManager->get($share->getShareOwner())->getDisplayName(); - $shareTmpl['downloadURL'] = $this->urlGenerator->linkToRouteAbsolute('files_sharing.sharecontroller.downloadShare', array('token' => $token)); + $shareTmpl['downloadURL'] = $this->urlGenerator->linkToRouteAbsolute('files_sharing.sharecontroller.downloadShare', ['token' => $token]); + $shareTmpl['shareUrl'] = $this->urlGenerator->linkToRouteAbsolute('files_sharing.sharecontroller.showShare', ['token' => $token]); $shareTmpl['maxSizeAnimateGif'] = $this->config->getSystemValue('max_filesize_animated_gifs_public_sharing', 10); $shareTmpl['previewEnabled'] = $this->config->getSystemValue('enable_previews', true); $shareTmpl['previewMaxX'] = $this->config->getSystemValue('preview_max_x', 1024); $shareTmpl['previewMaxY'] = $this->config->getSystemValue('preview_max_y', 1024); $shareTmpl['disclaimer'] = $this->config->getAppValue('core', 'shareapi_public_link_disclaimertext', null); + if ($shareTmpl['previewSupported']) { + $shareTmpl['previewImage'] = $this->urlGenerator->linkToRouteAbsolute( 'core_ajax_public_preview', + ['x' => 200, 'y' => 200, 'file' => $shareTmpl['directory_path'], 't' => $shareTmpl['dirToken']]); + } else { + $shareTmpl['previewImage'] = $this->urlGenerator->getAbsoluteURL($this->urlGenerator->imagePath('core', 'favicon-fb.png')); + } // Load files we need \OCP\Util::addScript('files', 'file-upload'); @@ -382,6 +401,14 @@ class ShareController extends Controller { \OCP\Util::addScript('files', 'keyboardshortcuts'); } + // OpenGraph Support: http://ogp.me/ + \OCP\Util::addHeader('meta', ['property' => "og:title", 'content' => $this->defaults->getName() . ' - ' . $this->defaults->getSlogan()]); + \OCP\Util::addHeader('meta', ['property' => "og:description", 'content' => $this->l10n->t('%s is publicly shared', [$shareTmpl['filename']])]); + \OCP\Util::addHeader('meta', ['property' => "og:site_name", 'content' => $this->defaults->getName()]); + \OCP\Util::addHeader('meta', ['property' => "og:url", 'content' => $shareTmpl['shareUrl']]); + \OCP\Util::addHeader('meta', ['property' => "og:type", 'content' => "object"]); + \OCP\Util::addHeader('meta', ['property' => "og:image", 'content' => $shareTmpl['previewImage']]); + $this->eventDispatcher->dispatch('OCA\Files_Sharing::loadAdditionalScripts'); $csp = new \OCP\AppFramework\Http\ContentSecurityPolicy(); diff --git a/apps/files_sharing/templates/public.php b/apps/files_sharing/templates/public.php index bdedb04d24..80c7d4d746 100644 --- a/apps/files_sharing/templates/public.php +++ b/apps/files_sharing/templates/public.php @@ -4,7 +4,7 @@ ?> - +
diff --git a/apps/files_sharing/tests/Controllers/ShareControllerTest.php b/apps/files_sharing/tests/Controllers/ShareControllerTest.php index 1b9fd401f7..94891d868c 100644 --- a/apps/files_sharing/tests/Controllers/ShareControllerTest.php +++ b/apps/files_sharing/tests/Controllers/ShareControllerTest.php @@ -109,7 +109,9 @@ class ShareControllerTest extends \Test\TestCase { $this->previewManager, $this->getMockBuilder('\OCP\Files\IRootFolder')->getMock(), $this->federatedShareProvider, - $this->eventDispatcher + $this->eventDispatcher, + $this->getMockBuilder('\OCP\IL10N')->getMock(), + $this->getMockBuilder('\OC_Defaults')->getMock() ); @@ -392,6 +394,8 @@ class ShareControllerTest extends \Test\TestCase { 'hideFileList' => false, 'shareOwner' => 'ownerDisplay', 'disclaimer' => 'My disclaimer text', + 'shareUrl' => null, + 'previewImage' => null ); $csp = new \OCP\AppFramework\Http\ContentSecurityPolicy(); diff --git a/core/img/favicon-fb.png b/core/img/favicon-fb.png new file mode 100644 index 0000000000..dc07d7c1c8 Binary files /dev/null and b/core/img/favicon-fb.png differ