1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-11-29 18:22:41 +01:00

Add basic support for OpenGraph header tags for public installs

Summary: Ref T13018. This is easy to get working roughly, at least, and seems reasonable.

Test Plan: Viewed page source, saw tags. Custom header logo still worked. Pretty hard to debug against a local install since Disqus / debugger tools can't hit it, but I'll see what it looks like in production and tweak it if I got anything horribly wrong.

Reviewers: amckinley

Reviewed By: amckinley

Maniphest Tasks: T13018

Differential Revision: https://secure.phabricator.com/D18780
This commit is contained in:
epriestley 2017-11-22 09:21:37 -08:00
parent 2d4a158356
commit 2c72c2b924
3 changed files with 84 additions and 29 deletions

View file

@ -13,6 +13,39 @@ final class PhabricatorCustomLogoConfigType
return idx($logo, 'wordmarkText');
}
public static function getLogoURI(PhabricatorUser $viewer) {
$logo_uri = null;
$custom_header = self::getLogoImagePHID();
if ($custom_header) {
$cache = PhabricatorCaches::getImmutableCache();
$cache_key_logo = 'ui.custom-header.logo-phid.v3.'.$custom_header;
$logo_uri = $cache->getKey($cache_key_logo);
if (!$logo_uri) {
// NOTE: If the file policy has been changed to be restrictive, we'll
// miss here and just show the default logo. The cache will fill later
// when someone who can see the file loads the page. This might be a
// little spooky, see T11982.
$files = id(new PhabricatorFileQuery())
->setViewer($viewer)
->withPHIDs(array($custom_header))
->execute();
$file = head($files);
if ($file) {
$logo_uri = $file->getViewURI();
$cache->setKey($cache_key_logo, $logo_uri);
}
}
}
if (!$logo_uri) {
$logo_uri = celerity_get_resource_uri('/rsrc/image/logo/light-eye.png');
}
return $logo_uri;
}
public function validateOption(PhabricatorConfigOption $option, $value) {
if (!is_array($value)) {
throw new Exception(

View file

@ -426,10 +426,11 @@ final class PhabricatorStandardPageView extends PhabricatorBarePageView
}
return hsprintf(
'%s%s%s',
'%s%s%s%s',
parent::getHead(),
$font_css,
$response->renderSingleResource('javelin-magical-init', 'phabricator'));
$response->renderSingleResource('javelin-magical-init', 'phabricator'),
$this->newOpenGraphTags());
}
public function setGlyph($glyph) {
@ -911,4 +912,45 @@ final class PhabricatorStandardPageView extends PhabricatorBarePageView
return $response;
}
private function newOpenGraphTags() {
// If we don't allow public access, there's no point in emitting OpenGraph
// tags because external systems can't fetch pages.
if (!PhabricatorEnv::getEnvConfig('policy.allow-public')) {
return array();
}
$viewer = $this->getViewer();
$properties = array(
array(
'og:title',
$this->getTitle(),
),
array(
'og:type',
'website',
),
array(
'og:url',
PhabricatorEnv::getProductionURI($this->getRequest()->getRequestURI()),
),
array(
'og:image',
PhabricatorCustomLogoConfigType::getLogoURI($viewer),
),
);
$tags = array();
foreach ($properties as $property) {
$tags[] = phutil_tag(
'meta',
array(
'property' => $property[0],
'content' => $property[1],
));
}
return $tags;
}
}

View file

@ -262,35 +262,16 @@ final class PhabricatorMainMenuView extends AphrontView {
}
private function renderPhabricatorLogo() {
$custom_header = PhabricatorCustomLogoConfigType::getLogoImagePHID();
$logo_style = array();
$custom_header = PhabricatorCustomLogoConfigType::getLogoImagePHID();
if ($custom_header) {
$cache = PhabricatorCaches::getImmutableCache();
$cache_key_logo = 'ui.custom-header.logo-phid.v3.'.$custom_header;
$viewer = $this->getViewer();
$logo_uri = PhabricatorCustomLogoConfigType::getLogoURI($viewer);
$logo_uri = $cache->getKey($cache_key_logo);
if (!$logo_uri) {
// NOTE: If the file policy has been changed to be restrictive, we'll
// miss here and just show the default logo. The cache will fill later
// when someone who can see the file loads the page. This might be a
// little spooky, see T11982.
$files = id(new PhabricatorFileQuery())
->setViewer($this->getViewer())
->withPHIDs(array($custom_header))
->execute();
$file = head($files);
if ($file) {
$logo_uri = $file->getViewURI();
$cache->setKey($cache_key_logo, $logo_uri);
}
}
if ($logo_uri) {
$logo_style[] = 'background-size: 40px 40px;';
$logo_style[] = 'background-position: 0 0;';
$logo_style[] = 'background-image: url('.$logo_uri.')';
}
$logo_style[] = 'background-size: 40px 40px;';
$logo_style[] = 'background-position: 0 0;';
$logo_style[] = 'background-image: url('.$logo_uri.')';
}
$logo_node = phutil_tag(
@ -300,7 +281,6 @@ final class PhabricatorMainMenuView extends AphrontView {
'style' => implode(' ', $logo_style),
));
$wordmark_text = PhabricatorCustomLogoConfigType::getLogoWordmark();
if (!strlen($wordmark_text)) {
$wordmark_text = pht('Phabricator');