Skip to content

Commit

Permalink
Adding Open Graph Support for public shares http://ogp.me/
Browse files Browse the repository at this point in the history
In case no preview is available we display the ownCloud logo

Fix unit test
  • Loading branch information
DeepDiver1975 authored and rullzer committed Oct 21, 2016
1 parent e8adf53 commit e0d919b
Show file tree
Hide file tree
Showing 5 changed files with 41 additions and 6 deletions.
8 changes: 6 additions & 2 deletions apps/files_sharing/lib/AppInfo/Application.php
Original file line number Diff line number Diff line change
Expand Up @@ -37,12 +37,14 @@
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();

/**
Expand All @@ -63,7 +65,9 @@ public function __construct(array $urlParams = array()) {
$server->getPreviewManager(),
$server->getRootFolder(),
$federatedSharingApp->getFederatedShareProvider(),
$server->getEventDispatcher()
$server->getEventDispatcher(),
$server->getL10N($c->query('AppName')),
$server->getThemingDefaults()
);
});
$container->registerService('ExternalSharesController', function (SimpleContainer $c) {
Expand Down Expand Up @@ -133,7 +137,7 @@ public function __construct(array $urlParams = array()) {
});

// Execute middlewares
$container->registerMiddleware('SharingCheckMiddleware');
$container->registerMiddleWare('SharingCheckMiddleware');
$container->registerMiddleWare('OCSShareAPIMiddleware');

$container->registerService('MountProvider', function (IContainer $c) {
Expand Down
31 changes: 29 additions & 2 deletions apps/files_sharing/lib/Controllers/ShareController.php
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,8 @@
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;
Expand Down Expand Up @@ -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
Expand All @@ -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,
Expand All @@ -112,7 +120,9 @@ public function __construct($appName,
IPreview $previewManager,
IRootFolder $rootFolder,
FederatedShareProvider $federatedShareProvider,
EventDispatcherInterface $eventDispatcher) {
EventDispatcherInterface $eventDispatcher,
IL10N $l10n,
\OC_Defaults $defaults) {
parent::__construct($appName, $request);

$this->config = $config;
Expand All @@ -126,6 +136,8 @@ public function __construct($appName,
$this->rootFolder = $rootFolder;
$this->federatedShareProvider = $federatedShareProvider;
$this->eventDispatcher = $eventDispatcher;
$this->l10n = $l10n;
$this->defaults = $defaults;
}

/**
Expand Down Expand Up @@ -352,12 +364,19 @@ public function showShare($token, $path = '') {

$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');
Expand All @@ -382,6 +401,14 @@ public function showShare($token, $path = '') {
\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();
Expand Down
2 changes: 1 addition & 1 deletion apps/files_sharing/templates/public.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
?>

<?php if ($_['previewSupported']): /* This enables preview images for links (e.g. on Facebook, Google+, ...)*/?>
<link rel="image_src" href="<?php p(\OC::$server->getURLGenerator()->linkToRoute( 'core_ajax_public_preview', array('x' => $_['previewMaxX'], 'y' => $_['previewMaxY'], 'file' => $_['directory_path'], 't' => $_['dirToken']))); ?>" />
<link rel="image_src" href="<?php p($_['previewImage']); ?>" />
<?php endif; ?>

<div id="notification-container">
Expand Down
6 changes: 5 additions & 1 deletion apps/files_sharing/tests/Controllers/ShareControllerTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,9 @@ protected function setUp() {
$this->previewManager,
$this->getMockBuilder('\OCP\Files\IRootFolder')->getMock(),
$this->federatedShareProvider,
$this->eventDispatcher
$this->eventDispatcher,
$this->getMockBuilder('\OCP\IL10N')->getMock(),
$this->getMockBuilder('\OCP\Defaults')->getMock()
);


Expand Down Expand Up @@ -392,6 +394,8 @@ public function testShowShare() {
'hideFileList' => false,
'shareOwner' => 'ownerDisplay',
'disclaimer' => 'My disclaimer text',
'shareUrl' => null,
'previewImage' => null
);

$csp = new \OCP\AppFramework\Http\ContentSecurityPolicy();
Expand Down
Binary file added core/img/favicon-fb.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit e0d919b

Please sign in to comment.