open graph: Display realm description as open graph description.

This commit is contained in:
Puneeth Chaganti 2019-04-24 08:00:15 +05:30 committed by Tim Abbott
parent a653fcca93
commit 2d9c5b3575
4 changed files with 27 additions and 4 deletions

View File

@ -17,7 +17,7 @@ from zerver.decorator import get_client_name
from zerver.lib.send_email import FromAddress from zerver.lib.send_email import FromAddress
from zerver.lib.subdomains import get_subdomain from zerver.lib.subdomains import get_subdomain
from zerver.lib.realm_icon import get_realm_icon_url from zerver.lib.realm_icon import get_realm_icon_url
from zerver.lib.realm_description import get_realm_rendered_description from zerver.lib.realm_description import get_realm_rendered_description, get_realm_text_description
from version import ZULIP_VERSION, LATEST_RELEASE_VERSION, LATEST_MAJOR_VERSION, \ from version import ZULIP_VERSION, LATEST_RELEASE_VERSION, LATEST_MAJOR_VERSION, \
LATEST_RELEASE_ANNOUNCEMENT LATEST_RELEASE_ANNOUNCEMENT
@ -154,6 +154,10 @@ def login_context(request: HttpRequest) -> Dict[str, Any]:
'two_factor_authentication_enabled': settings.TWO_FACTOR_AUTHENTICATION_ENABLED, 'two_factor_authentication_enabled': settings.TWO_FACTOR_AUTHENTICATION_ENABLED,
} # type: Dict[str, Any] } # type: Dict[str, Any]
if realm is not None and realm.description:
context['OPEN_GRAPH_TITLE'] = realm.name
context['OPEN_GRAPH_DESCRIPTION'] = get_realm_text_description(realm)
# Add the keys for our standard authentication backends. # Add the keys for our standard authentication backends.
no_auth_enabled = True no_auth_enabled = True
social_backends = [] social_backends = []

View File

@ -446,6 +446,9 @@ def realm_alert_words_automaton_cache_key(realm: 'Realm') -> str:
def realm_rendered_description_cache_key(realm: 'Realm') -> str: def realm_rendered_description_cache_key(realm: 'Realm') -> str:
return "realm_rendered_description:%s" % (realm.string_id,) return "realm_rendered_description:%s" % (realm.string_id,)
def realm_text_description_cache_key(realm: 'Realm') -> str:
return "realm_text_description:%s" % (realm.string_id,)
# Called by models.py to flush the stream cache whenever we save a stream # Called by models.py to flush the stream cache whenever we save a stream
# object. # object.
def flush_stream(sender: Any, **kwargs: Any) -> None: def flush_stream(sender: Any, **kwargs: Any) -> None:

View File

@ -1,9 +1,16 @@
from zerver.models import Realm from zerver.models import Realm
from zerver.lib.cache import cache_with_key, realm_rendered_description_cache_key from zerver.lib.cache import cache_with_key, realm_rendered_description_cache_key, \
realm_text_description_cache_key
from zerver.lib.bugdown import convert as bugdown_convert from zerver.lib.bugdown import convert as bugdown_convert
from zerver.lib.html_to_text import html_to_text
@cache_with_key(realm_rendered_description_cache_key, timeout=3600*24*7) @cache_with_key(realm_rendered_description_cache_key, timeout=3600*24*7)
def get_realm_rendered_description(realm: Realm) -> str: def get_realm_rendered_description(realm: Realm) -> str:
realm_description_raw = realm.description or "The coolest place in the universe." realm_description_raw = realm.description or "The coolest place in the universe."
return bugdown_convert(realm_description_raw, message_realm=realm, return bugdown_convert(realm_description_raw, message_realm=realm,
no_previews=True) no_previews=True)
@cache_with_key(realm_text_description_cache_key, timeout=3600*24*7)
def get_realm_text_description(realm: Realm) -> str:
html_description = get_realm_rendered_description(realm)
return html_to_text(html_description)

View File

@ -5,8 +5,7 @@ from bs4 import BeautifulSoup
from django.test import override_settings from django.test import override_settings
from unittest.mock import Mock, patch from unittest.mock import Mock, patch
from zerver.lib.test_classes import ZulipTestCase from zerver.lib.test_classes import ZulipTestCase
from zerver.middleware import is_slow_query from zerver.middleware import is_slow_query, write_log_line
from zerver.middleware import write_log_line
class SlowQueryTest(ZulipTestCase): class SlowQueryTest(ZulipTestCase):
SLOW_QUERY_TIME = 10 SLOW_QUERY_TIME = 10
@ -139,3 +138,13 @@ class OpenGraphTest(ZulipTestCase):
[], [],
# Test that our open graph logic doesn't throw a 500 # Test that our open graph logic doesn't throw a 500
404) 404)
def test_login_page_simple_description(self) -> None:
name = 'Zulip Dev'
description = "The Zulip development environment default organization. It's great for testing!"
self.check_title_and_description(
'/login/',
name,
[description],
[])