mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-03 21:43:21 +00:00 
			
		
		
		
	bugdown: Rewrite links to local server to be relative links.
Fixes #7247
This commit is contained in:
		@@ -982,15 +982,26 @@ def url_to_a(url, text = None):
 | 
			
		||||
    a = markdown.util.etree.Element('a')
 | 
			
		||||
 | 
			
		||||
    href = sanitize_url(url)
 | 
			
		||||
    target_blank = True
 | 
			
		||||
    if href is None:
 | 
			
		||||
        # Rejected by sanitize_url; render it as plain text.
 | 
			
		||||
        return url
 | 
			
		||||
    if text is None:
 | 
			
		||||
        text = markdown.util.AtomicString(url)
 | 
			
		||||
 | 
			
		||||
    target_blank = 'mailto:' not in href[:7]
 | 
			
		||||
 | 
			
		||||
    if db_data:
 | 
			
		||||
        # If the link points to a local destination we can just switch to that
 | 
			
		||||
        # instead of opening a new tab.
 | 
			
		||||
        local_link = re.match("^{}\/(#.+)$".format(re.escape(db_data['realm_uri'])), url)
 | 
			
		||||
        if local_link:
 | 
			
		||||
            href = local_link.group(1)
 | 
			
		||||
            target_blank = False
 | 
			
		||||
 | 
			
		||||
    a.set('href', href)
 | 
			
		||||
    a.text = text
 | 
			
		||||
    fixup_link(a, 'mailto:' not in href[:7])
 | 
			
		||||
    fixup_link(a, target_blank)
 | 
			
		||||
    return a
 | 
			
		||||
 | 
			
		||||
class VerbosePattern(markdown.inlinepatterns.Pattern):
 | 
			
		||||
@@ -1719,6 +1730,7 @@ def do_convert(content, message=None, message_realm=None, possible_words=None, s
 | 
			
		||||
            'email_info': email_info,
 | 
			
		||||
            'mention_data': mention_data,
 | 
			
		||||
            'realm_emoji': realm_emoji,
 | 
			
		||||
            'realm_uri': message_realm.uri,
 | 
			
		||||
            'sent_by_bot': sent_by_bot,
 | 
			
		||||
            'stream_names': stream_name_info,
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
@@ -1168,6 +1168,30 @@ class BugdownTest(ZulipTestCase):
 | 
			
		||||
                          '<p>I am writing this message to test something. I am writing this message to test something.</p>'
 | 
			
		||||
        self.assertEqual(converted, expected_output)
 | 
			
		||||
 | 
			
		||||
    def test_normal_link(self):
 | 
			
		||||
        # type: () -> None
 | 
			
		||||
        realm = get_realm("zulip")
 | 
			
		||||
        sender_user_profile = self.example_user('othello')
 | 
			
		||||
        message = Message(sender=sender_user_profile, sending_client=get_client("test"))
 | 
			
		||||
        msg = "http://example.com/#settings/"
 | 
			
		||||
 | 
			
		||||
        self.assertEqual(
 | 
			
		||||
            bugdown.convert(msg, message_realm=realm, message=message),
 | 
			
		||||
            '<p><a href="http://example.com/#settings/" target="_blank" title="http://example.com/#settings/">http://example.com/#settings/</a></p>'
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
    def test_relative_link(self):
 | 
			
		||||
        # type: () -> None
 | 
			
		||||
        realm = get_realm("zulip")
 | 
			
		||||
        sender_user_profile = self.example_user('othello')
 | 
			
		||||
        message = Message(sender=sender_user_profile, sending_client=get_client("test"))
 | 
			
		||||
        msg = "http://zulip.testserver/#narrow/stream/hello"
 | 
			
		||||
 | 
			
		||||
        self.assertEqual(
 | 
			
		||||
            bugdown.convert(msg, message_realm=realm, message=message),
 | 
			
		||||
            '<p><a href="#narrow/stream/hello" title="#narrow/stream/hello">http://zulip.testserver/#narrow/stream/hello</a></p>'
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
class BugdownApiTests(ZulipTestCase):
 | 
			
		||||
    def test_render_message_api(self):
 | 
			
		||||
        # type: () -> None
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user