mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-04 05:53:43 +00:00 
			
		
		
		
	thumbnails: Rename size value 'original' to 'full'.
This commit is contained in:
		
				
					committed by
					
						
						Tim Abbott
					
				
			
			
				
	
			
			
			
						parent
						
							5b5d8bb310
						
					
				
				
					commit
					77651ece39
				
			@@ -233,7 +233,7 @@ def add_a(
 | 
			
		||||
        img.set("src", "/thumbnail?url={0}&size=thumbnail".format(
 | 
			
		||||
            urllib.parse.quote(url, safe='')
 | 
			
		||||
        ))
 | 
			
		||||
        img.set('data-src-fullsize', "/thumbnail?url={0}&size=original".format(
 | 
			
		||||
        img.set('data-src-fullsize', "/thumbnail?url={0}&size=full".format(
 | 
			
		||||
            urllib.parse.quote(url, safe='')
 | 
			
		||||
        ))
 | 
			
		||||
    else:
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										12
									
								
								zerver/tests/fixtures/markdown_test_cases.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										12
									
								
								zerver/tests/fixtures/markdown_test_cases.json
									
									
									
									
										vendored
									
									
								
							@@ -276,41 +276,41 @@
 | 
			
		||||
    {
 | 
			
		||||
      "name": "inline_image",
 | 
			
		||||
      "input": "Google logo today: https://www.google.com/images/srpr/logo4w.png\nKinda boring",
 | 
			
		||||
      "expected_output": "<p>Google logo today: <a href=\"https://www.google.com/images/srpr/logo4w.png\" target=\"_blank\" title=\"https://www.google.com/images/srpr/logo4w.png\">https://www.google.com/images/srpr/logo4w.png</a><br>\nKinda boring</p>\n<div class=\"message_inline_image\"><a href=\"https://www.google.com/images/srpr/logo4w.png\" target=\"_blank\" title=\"https://www.google.com/images/srpr/logo4w.png\"><img data-src-fullsize=\"/thumbnail?url=https%3A%2F%2Fwww.google.com%2Fimages%2Fsrpr%2Flogo4w.png&size=original\" src=\"/thumbnail?url=https%3A%2F%2Fwww.google.com%2Fimages%2Fsrpr%2Flogo4w.png&size=thumbnail\"></a></div>",
 | 
			
		||||
      "expected_output": "<p>Google logo today: <a href=\"https://www.google.com/images/srpr/logo4w.png\" target=\"_blank\" title=\"https://www.google.com/images/srpr/logo4w.png\">https://www.google.com/images/srpr/logo4w.png</a><br>\nKinda boring</p>\n<div class=\"message_inline_image\"><a href=\"https://www.google.com/images/srpr/logo4w.png\" target=\"_blank\" title=\"https://www.google.com/images/srpr/logo4w.png\"><img data-src-fullsize=\"/thumbnail?url=https%3A%2F%2Fwww.google.com%2Fimages%2Fsrpr%2Flogo4w.png&size=full\" src=\"/thumbnail?url=https%3A%2F%2Fwww.google.com%2Fimages%2Fsrpr%2Flogo4w.png&size=thumbnail\"></a></div>",
 | 
			
		||||
      "backend_only_rendering": true,
 | 
			
		||||
      "text_content": "Google logo today: https:\/\/www.google.com\/images\/srpr\/logo4w.png\nKinda boring\n"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "name": "blockquote_inline_image",
 | 
			
		||||
      "input": ">Google logo today:\n>https://www.google.com/images/srpr/logo4w.png\n>Kinda boring",
 | 
			
		||||
      "expected_output": "<blockquote>\n<p>Google logo today:<br>\n<a href=\"https://www.google.com/images/srpr/logo4w.png\" target=\"_blank\" title=\"https://www.google.com/images/srpr/logo4w.png\">https://www.google.com/images/srpr/logo4w.png</a><br>\nKinda boring</p>\n<div class=\"message_inline_image\"><a href=\"https://www.google.com/images/srpr/logo4w.png\" target=\"_blank\" title=\"https://www.google.com/images/srpr/logo4w.png\"><img data-src-fullsize=\"/thumbnail?url=https%3A%2F%2Fwww.google.com%2Fimages%2Fsrpr%2Flogo4w.png&size=original\" src=\"/thumbnail?url=https%3A%2F%2Fwww.google.com%2Fimages%2Fsrpr%2Flogo4w.png&size=thumbnail\"></a></div></blockquote>",
 | 
			
		||||
      "expected_output": "<blockquote>\n<p>Google logo today:<br>\n<a href=\"https://www.google.com/images/srpr/logo4w.png\" target=\"_blank\" title=\"https://www.google.com/images/srpr/logo4w.png\">https://www.google.com/images/srpr/logo4w.png</a><br>\nKinda boring</p>\n<div class=\"message_inline_image\"><a href=\"https://www.google.com/images/srpr/logo4w.png\" target=\"_blank\" title=\"https://www.google.com/images/srpr/logo4w.png\"><img data-src-fullsize=\"/thumbnail?url=https%3A%2F%2Fwww.google.com%2Fimages%2Fsrpr%2Flogo4w.png&size=full\" src=\"/thumbnail?url=https%3A%2F%2Fwww.google.com%2Fimages%2Fsrpr%2Flogo4w.png&size=thumbnail\"></a></div></blockquote>",
 | 
			
		||||
      "backend_only_rendering": true,
 | 
			
		||||
      "text_content": "> Google logo today:\n> https:\/\/www.google.com\/images\/srpr\/logo4w.png\n> Kinda boring\n"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "name": "two_inline_images",
 | 
			
		||||
      "input": "Google logo today: https://www.google.com/images/srpr/logo4w.png\nKinda boringGoogle logo today: https://www.google.com/images/srpr/logo4w.png\nKinda boring",
 | 
			
		||||
      "expected_output": "<p>Google logo today: <a href=\"https://www.google.com/images/srpr/logo4w.png\" target=\"_blank\" title=\"https://www.google.com/images/srpr/logo4w.png\">https://www.google.com/images/srpr/logo4w.png</a><br>\nKinda boringGoogle logo today: <a href=\"https://www.google.com/images/srpr/logo4w.png\" target=\"_blank\" title=\"https://www.google.com/images/srpr/logo4w.png\">https://www.google.com/images/srpr/logo4w.png</a><br>\nKinda boring</p>\n<div class=\"message_inline_image\"><a href=\"https://www.google.com/images/srpr/logo4w.png\" target=\"_blank\" title=\"https://www.google.com/images/srpr/logo4w.png\"><img data-src-fullsize=\"/thumbnail?url=https%3A%2F%2Fwww.google.com%2Fimages%2Fsrpr%2Flogo4w.png&size=original\" src=\"/thumbnail?url=https%3A%2F%2Fwww.google.com%2Fimages%2Fsrpr%2Flogo4w.png&size=thumbnail\"></a></div><div class=\"message_inline_image\"><a href=\"https://www.google.com/images/srpr/logo4w.png\" target=\"_blank\" title=\"https://www.google.com/images/srpr/logo4w.png\"><img data-src-fullsize=\"/thumbnail?url=https%3A%2F%2Fwww.google.com%2Fimages%2Fsrpr%2Flogo4w.png&size=original\" src=\"/thumbnail?url=https%3A%2F%2Fwww.google.com%2Fimages%2Fsrpr%2Flogo4w.png&size=thumbnail\"></a></div>",
 | 
			
		||||
      "expected_output": "<p>Google logo today: <a href=\"https://www.google.com/images/srpr/logo4w.png\" target=\"_blank\" title=\"https://www.google.com/images/srpr/logo4w.png\">https://www.google.com/images/srpr/logo4w.png</a><br>\nKinda boringGoogle logo today: <a href=\"https://www.google.com/images/srpr/logo4w.png\" target=\"_blank\" title=\"https://www.google.com/images/srpr/logo4w.png\">https://www.google.com/images/srpr/logo4w.png</a><br>\nKinda boring</p>\n<div class=\"message_inline_image\"><a href=\"https://www.google.com/images/srpr/logo4w.png\" target=\"_blank\" title=\"https://www.google.com/images/srpr/logo4w.png\"><img data-src-fullsize=\"/thumbnail?url=https%3A%2F%2Fwww.google.com%2Fimages%2Fsrpr%2Flogo4w.png&size=full\" src=\"/thumbnail?url=https%3A%2F%2Fwww.google.com%2Fimages%2Fsrpr%2Flogo4w.png&size=thumbnail\"></a></div><div class=\"message_inline_image\"><a href=\"https://www.google.com/images/srpr/logo4w.png\" target=\"_blank\" title=\"https://www.google.com/images/srpr/logo4w.png\"><img data-src-fullsize=\"/thumbnail?url=https%3A%2F%2Fwww.google.com%2Fimages%2Fsrpr%2Flogo4w.png&size=full\" src=\"/thumbnail?url=https%3A%2F%2Fwww.google.com%2Fimages%2Fsrpr%2Flogo4w.png&size=thumbnail\"></a></div>",
 | 
			
		||||
      "backend_only_rendering": true,
 | 
			
		||||
      "text_content": "Google logo today: https:\/\/www.google.com\/images\/srpr\/logo4w.png\nKinda boringGoogle logo today: https:\/\/www.google.com\/images\/srpr\/logo4w.png\nKinda boring\n"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "name": "bulleted_list_inlining",
 | 
			
		||||
      "input": "* Google?\n* Google. https://www.google.com/images/srpr/logo4w.png\n* Google!",
 | 
			
		||||
      "expected_output": "<ul>\n<li>Google?</li>\n<li>Google. <a href=\"https://www.google.com/images/srpr/logo4w.png\" target=\"_blank\" title=\"https://www.google.com/images/srpr/logo4w.png\">https://www.google.com/images/srpr/logo4w.png</a><div class=\"message_inline_image\"><a href=\"https://www.google.com/images/srpr/logo4w.png\" target=\"_blank\" title=\"https://www.google.com/images/srpr/logo4w.png\"><img data-src-fullsize=\"/thumbnail?url=https%3A%2F%2Fwww.google.com%2Fimages%2Fsrpr%2Flogo4w.png&size=original\" src=\"/thumbnail?url=https%3A%2F%2Fwww.google.com%2Fimages%2Fsrpr%2Flogo4w.png&size=thumbnail\"></a></div></li>\n<li>Google!</li>\n</ul>",
 | 
			
		||||
      "expected_output": "<ul>\n<li>Google?</li>\n<li>Google. <a href=\"https://www.google.com/images/srpr/logo4w.png\" target=\"_blank\" title=\"https://www.google.com/images/srpr/logo4w.png\">https://www.google.com/images/srpr/logo4w.png</a><div class=\"message_inline_image\"><a href=\"https://www.google.com/images/srpr/logo4w.png\" target=\"_blank\" title=\"https://www.google.com/images/srpr/logo4w.png\"><img data-src-fullsize=\"/thumbnail?url=https%3A%2F%2Fwww.google.com%2Fimages%2Fsrpr%2Flogo4w.png&size=full\" src=\"/thumbnail?url=https%3A%2F%2Fwww.google.com%2Fimages%2Fsrpr%2Flogo4w.png&size=thumbnail\"></a></div></li>\n<li>Google!</li>\n</ul>",
 | 
			
		||||
      "backend_only_rendering": true,
 | 
			
		||||
      "text_content": "\nGoogle?\nGoogle. https://www.google.com/images/srpr/logo4w.png\nGoogle!\n"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "name": "only_inline_image",
 | 
			
		||||
      "input": "https://www.google.com/images/srpr/logo4w.png",
 | 
			
		||||
      "expected_output": "<div class=\"message_inline_image\"><a href=\"https://www.google.com/images/srpr/logo4w.png\" target=\"_blank\" title=\"https://www.google.com/images/srpr/logo4w.png\"><img data-src-fullsize=\"/thumbnail?url=https%3A%2F%2Fwww.google.com%2Fimages%2Fsrpr%2Flogo4w.png&size=original\" src=\"/thumbnail?url=https%3A%2F%2Fwww.google.com%2Fimages%2Fsrpr%2Flogo4w.png&size=thumbnail\"></a></div>",
 | 
			
		||||
      "expected_output": "<div class=\"message_inline_image\"><a href=\"https://www.google.com/images/srpr/logo4w.png\" target=\"_blank\" title=\"https://www.google.com/images/srpr/logo4w.png\"><img data-src-fullsize=\"/thumbnail?url=https%3A%2F%2Fwww.google.com%2Fimages%2Fsrpr%2Flogo4w.png&size=full\" src=\"/thumbnail?url=https%3A%2F%2Fwww.google.com%2Fimages%2Fsrpr%2Flogo4w.png&size=thumbnail\"></a></div>",
 | 
			
		||||
      "backend_only_rendering": true
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "name": "only_named_inline_image",
 | 
			
		||||
      "input": "[Google Link](https://www.google.com/images/srpr/logo4w.png)",
 | 
			
		||||
      "expected_output": "<p><a href=\"https://www.google.com/images/srpr/logo4w.png\" target=\"_blank\" title=\"https://www.google.com/images/srpr/logo4w.png\">Google Link</a></p>\n<div class=\"message_inline_image\"><a href=\"https://www.google.com/images/srpr/logo4w.png\" target=\"_blank\" title=\"Google Link\"><img data-src-fullsize=\"/thumbnail?url=https%3A%2F%2Fwww.google.com%2Fimages%2Fsrpr%2Flogo4w.png&size=original\" src=\"/thumbnail?url=https%3A%2F%2Fwww.google.com%2Fimages%2Fsrpr%2Flogo4w.png&size=thumbnail\"></a></div>",
 | 
			
		||||
      "expected_output": "<p><a href=\"https://www.google.com/images/srpr/logo4w.png\" target=\"_blank\" title=\"https://www.google.com/images/srpr/logo4w.png\">Google Link</a></p>\n<div class=\"message_inline_image\"><a href=\"https://www.google.com/images/srpr/logo4w.png\" target=\"_blank\" title=\"Google Link\"><img data-src-fullsize=\"/thumbnail?url=https%3A%2F%2Fwww.google.com%2Fimages%2Fsrpr%2Flogo4w.png&size=full\" src=\"/thumbnail?url=https%3A%2F%2Fwww.google.com%2Fimages%2Fsrpr%2Flogo4w.png&size=thumbnail\"></a></div>",
 | 
			
		||||
      "backend_only_rendering": true,
 | 
			
		||||
      "text_content": "Google Link\n"
 | 
			
		||||
    },
 | 
			
		||||
 
 | 
			
		||||
@@ -343,17 +343,17 @@ class BugdownTest(ZulipTestCase):
 | 
			
		||||
    def test_inline_image_thumbnail_url(self):
 | 
			
		||||
        # type: () -> None
 | 
			
		||||
        msg = '[foobar](/user_uploads/2/50/w2G6ok9kr8AMCQCTNAUOFMln/IMG_0677.JPG)'
 | 
			
		||||
        thumbnail_img = '<img data-src-fullsize="/thumbnail?url=user_uploads%2F2%2F50%2Fw2G6ok9kr8AMCQCTNAUOFMln%2FIMG_0677.JPG&size=original" src="/thumbnail?url=user_uploads%2F2%2F50%2Fw2G6ok9kr8AMCQCTNAUOFMln%2FIMG_0677.JPG&size=thumbnail"><'
 | 
			
		||||
        thumbnail_img = '<img data-src-fullsize="/thumbnail?url=user_uploads%2F2%2F50%2Fw2G6ok9kr8AMCQCTNAUOFMln%2FIMG_0677.JPG&size=full" src="/thumbnail?url=user_uploads%2F2%2F50%2Fw2G6ok9kr8AMCQCTNAUOFMln%2FIMG_0677.JPG&size=thumbnail"><'
 | 
			
		||||
        converted = bugdown_convert(msg)
 | 
			
		||||
        self.assertIn(thumbnail_img, converted)
 | 
			
		||||
 | 
			
		||||
        msg = 'https://www.google.com/images/srpr/logo4w.png'
 | 
			
		||||
        thumbnail_img = '<img data-src-fullsize="/thumbnail?url=https%3A%2F%2Fwww.google.com%2Fimages%2Fsrpr%2Flogo4w.png&size=original" src="/thumbnail?url=https%3A%2F%2Fwww.google.com%2Fimages%2Fsrpr%2Flogo4w.png&size=thumbnail">'
 | 
			
		||||
        thumbnail_img = '<img data-src-fullsize="/thumbnail?url=https%3A%2F%2Fwww.google.com%2Fimages%2Fsrpr%2Flogo4w.png&size=full" src="/thumbnail?url=https%3A%2F%2Fwww.google.com%2Fimages%2Fsrpr%2Flogo4w.png&size=thumbnail">'
 | 
			
		||||
        converted = bugdown_convert(msg)
 | 
			
		||||
        self.assertIn(thumbnail_img, converted)
 | 
			
		||||
 | 
			
		||||
        msg = 'www.google.com/images/srpr/logo4w.png'
 | 
			
		||||
        thumbnail_img = '<img data-src-fullsize="/thumbnail?url=http%3A%2F%2Fwww.google.com%2Fimages%2Fsrpr%2Flogo4w.png&size=original" src="/thumbnail?url=http%3A%2F%2Fwww.google.com%2Fimages%2Fsrpr%2Flogo4w.png&size=thumbnail">'
 | 
			
		||||
        thumbnail_img = '<img data-src-fullsize="/thumbnail?url=http%3A%2F%2Fwww.google.com%2Fimages%2Fsrpr%2Flogo4w.png&size=full" src="/thumbnail?url=http%3A%2F%2Fwww.google.com%2Fimages%2Fsrpr%2Flogo4w.png&size=thumbnail">'
 | 
			
		||||
        converted = bugdown_convert(msg)
 | 
			
		||||
        self.assertIn(thumbnail_img, converted)
 | 
			
		||||
 | 
			
		||||
@@ -366,7 +366,7 @@ class BugdownTest(ZulipTestCase):
 | 
			
		||||
    @override_settings(INLINE_IMAGE_PREVIEW=True)
 | 
			
		||||
    def test_inline_image_preview(self):
 | 
			
		||||
        # type: () -> None
 | 
			
		||||
        with_preview = '<div class="message_inline_image"><a href="http://cdn.wallpapersafari.com/13/6/16eVjx.jpeg" target="_blank" title="http://cdn.wallpapersafari.com/13/6/16eVjx.jpeg"><img data-src-fullsize="/thumbnail?url=http%3A%2F%2Fcdn.wallpapersafari.com%2F13%2F6%2F16eVjx.jpeg&size=original" src="/thumbnail?url=http%3A%2F%2Fcdn.wallpapersafari.com%2F13%2F6%2F16eVjx.jpeg&size=thumbnail"></a></div>'
 | 
			
		||||
        with_preview = '<div class="message_inline_image"><a href="http://cdn.wallpapersafari.com/13/6/16eVjx.jpeg" target="_blank" title="http://cdn.wallpapersafari.com/13/6/16eVjx.jpeg"><img data-src-fullsize="/thumbnail?url=http%3A%2F%2Fcdn.wallpapersafari.com%2F13%2F6%2F16eVjx.jpeg&size=full" src="/thumbnail?url=http%3A%2F%2Fcdn.wallpapersafari.com%2F13%2F6%2F16eVjx.jpeg&size=thumbnail"></a></div>'
 | 
			
		||||
        without_preview = '<p><a href="http://cdn.wallpapersafari.com/13/6/16eVjx.jpeg" target="_blank" title="http://cdn.wallpapersafari.com/13/6/16eVjx.jpeg">http://cdn.wallpapersafari.com/13/6/16eVjx.jpeg</a></p>'
 | 
			
		||||
        content = 'http://cdn.wallpapersafari.com/13/6/16eVjx.jpeg'
 | 
			
		||||
 | 
			
		||||
@@ -387,7 +387,7 @@ class BugdownTest(ZulipTestCase):
 | 
			
		||||
    @override_settings(INLINE_IMAGE_PREVIEW=True)
 | 
			
		||||
    def test_inline_image_preview_order(self) -> None:
 | 
			
		||||
        content = 'http://imaging.nikon.com/lineup/dslr/df/img/sample/img_01.jpg\nhttp://imaging.nikon.com/lineup/dslr/df/img/sample/img_02.jpg\nhttp://imaging.nikon.com/lineup/dslr/df/img/sample/img_03.jpg'
 | 
			
		||||
        expected = '<p><a href="http://imaging.nikon.com/lineup/dslr/df/img/sample/img_01.jpg" target="_blank" title="http://imaging.nikon.com/lineup/dslr/df/img/sample/img_01.jpg">http://imaging.nikon.com/lineup/dslr/df/img/sample/img_01.jpg</a><br>\n<a href="http://imaging.nikon.com/lineup/dslr/df/img/sample/img_02.jpg" target="_blank" title="http://imaging.nikon.com/lineup/dslr/df/img/sample/img_02.jpg">http://imaging.nikon.com/lineup/dslr/df/img/sample/img_02.jpg</a><br>\n<a href="http://imaging.nikon.com/lineup/dslr/df/img/sample/img_03.jpg" target="_blank" title="http://imaging.nikon.com/lineup/dslr/df/img/sample/img_03.jpg">http://imaging.nikon.com/lineup/dslr/df/img/sample/img_03.jpg</a></p>\n<div class="message_inline_image"><a href="http://imaging.nikon.com/lineup/dslr/df/img/sample/img_01.jpg" target="_blank" title="http://imaging.nikon.com/lineup/dslr/df/img/sample/img_01.jpg"><img data-src-fullsize="/thumbnail?url=http%3A%2F%2Fimaging.nikon.com%2Flineup%2Fdslr%2Fdf%2Fimg%2Fsample%2Fimg_01.jpg&size=original" src="/thumbnail?url=http%3A%2F%2Fimaging.nikon.com%2Flineup%2Fdslr%2Fdf%2Fimg%2Fsample%2Fimg_01.jpg&size=thumbnail"></a></div><div class="message_inline_image"><a href="http://imaging.nikon.com/lineup/dslr/df/img/sample/img_02.jpg" target="_blank" title="http://imaging.nikon.com/lineup/dslr/df/img/sample/img_02.jpg"><img data-src-fullsize="/thumbnail?url=http%3A%2F%2Fimaging.nikon.com%2Flineup%2Fdslr%2Fdf%2Fimg%2Fsample%2Fimg_02.jpg&size=original" src="/thumbnail?url=http%3A%2F%2Fimaging.nikon.com%2Flineup%2Fdslr%2Fdf%2Fimg%2Fsample%2Fimg_02.jpg&size=thumbnail"></a></div><div class="message_inline_image"><a href="http://imaging.nikon.com/lineup/dslr/df/img/sample/img_03.jpg" target="_blank" title="http://imaging.nikon.com/lineup/dslr/df/img/sample/img_03.jpg"><img data-src-fullsize="/thumbnail?url=http%3A%2F%2Fimaging.nikon.com%2Flineup%2Fdslr%2Fdf%2Fimg%2Fsample%2Fimg_03.jpg&size=original" src="/thumbnail?url=http%3A%2F%2Fimaging.nikon.com%2Flineup%2Fdslr%2Fdf%2Fimg%2Fsample%2Fimg_03.jpg&size=thumbnail"></a></div>'
 | 
			
		||||
        expected = '<p><a href="http://imaging.nikon.com/lineup/dslr/df/img/sample/img_01.jpg" target="_blank" title="http://imaging.nikon.com/lineup/dslr/df/img/sample/img_01.jpg">http://imaging.nikon.com/lineup/dslr/df/img/sample/img_01.jpg</a><br>\n<a href="http://imaging.nikon.com/lineup/dslr/df/img/sample/img_02.jpg" target="_blank" title="http://imaging.nikon.com/lineup/dslr/df/img/sample/img_02.jpg">http://imaging.nikon.com/lineup/dslr/df/img/sample/img_02.jpg</a><br>\n<a href="http://imaging.nikon.com/lineup/dslr/df/img/sample/img_03.jpg" target="_blank" title="http://imaging.nikon.com/lineup/dslr/df/img/sample/img_03.jpg">http://imaging.nikon.com/lineup/dslr/df/img/sample/img_03.jpg</a></p>\n<div class="message_inline_image"><a href="http://imaging.nikon.com/lineup/dslr/df/img/sample/img_01.jpg" target="_blank" title="http://imaging.nikon.com/lineup/dslr/df/img/sample/img_01.jpg"><img data-src-fullsize="/thumbnail?url=http%3A%2F%2Fimaging.nikon.com%2Flineup%2Fdslr%2Fdf%2Fimg%2Fsample%2Fimg_01.jpg&size=full" src="/thumbnail?url=http%3A%2F%2Fimaging.nikon.com%2Flineup%2Fdslr%2Fdf%2Fimg%2Fsample%2Fimg_01.jpg&size=thumbnail"></a></div><div class="message_inline_image"><a href="http://imaging.nikon.com/lineup/dslr/df/img/sample/img_02.jpg" target="_blank" title="http://imaging.nikon.com/lineup/dslr/df/img/sample/img_02.jpg"><img data-src-fullsize="/thumbnail?url=http%3A%2F%2Fimaging.nikon.com%2Flineup%2Fdslr%2Fdf%2Fimg%2Fsample%2Fimg_02.jpg&size=full" src="/thumbnail?url=http%3A%2F%2Fimaging.nikon.com%2Flineup%2Fdslr%2Fdf%2Fimg%2Fsample%2Fimg_02.jpg&size=thumbnail"></a></div><div class="message_inline_image"><a href="http://imaging.nikon.com/lineup/dslr/df/img/sample/img_03.jpg" target="_blank" title="http://imaging.nikon.com/lineup/dslr/df/img/sample/img_03.jpg"><img data-src-fullsize="/thumbnail?url=http%3A%2F%2Fimaging.nikon.com%2Flineup%2Fdslr%2Fdf%2Fimg%2Fsample%2Fimg_03.jpg&size=full" src="/thumbnail?url=http%3A%2F%2Fimaging.nikon.com%2Flineup%2Fdslr%2Fdf%2Fimg%2Fsample%2Fimg_03.jpg&size=thumbnail"></a></div>'
 | 
			
		||||
 | 
			
		||||
        sender_user_profile = self.example_user('othello')
 | 
			
		||||
        msg = Message(sender=sender_user_profile, sending_client=get_client("test"))
 | 
			
		||||
@@ -395,7 +395,7 @@ class BugdownTest(ZulipTestCase):
 | 
			
		||||
        self.assertEqual(converted, expected)
 | 
			
		||||
 | 
			
		||||
        content = 'http://imaging.nikon.com/lineup/dslr/df/img/sample/img_01.jpg\n\n>http://imaging.nikon.com/lineup/dslr/df/img/sample/img_02.jpg\n\n* http://imaging.nikon.com/lineup/dslr/df/img/sample/img_03.jpg\n* https://www.google.com/images/srpr/logo4w.png'
 | 
			
		||||
        expected = '<div class="message_inline_image"><a href="http://imaging.nikon.com/lineup/dslr/df/img/sample/img_01.jpg" target="_blank" title="http://imaging.nikon.com/lineup/dslr/df/img/sample/img_01.jpg"><img data-src-fullsize="/thumbnail?url=http%3A%2F%2Fimaging.nikon.com%2Flineup%2Fdslr%2Fdf%2Fimg%2Fsample%2Fimg_01.jpg&size=original" src="/thumbnail?url=http%3A%2F%2Fimaging.nikon.com%2Flineup%2Fdslr%2Fdf%2Fimg%2Fsample%2Fimg_01.jpg&size=thumbnail"></a></div><blockquote>\n<div class="message_inline_image"><a href="http://imaging.nikon.com/lineup/dslr/df/img/sample/img_02.jpg" target="_blank" title="http://imaging.nikon.com/lineup/dslr/df/img/sample/img_02.jpg"><img data-src-fullsize="/thumbnail?url=http%3A%2F%2Fimaging.nikon.com%2Flineup%2Fdslr%2Fdf%2Fimg%2Fsample%2Fimg_02.jpg&size=original" src="/thumbnail?url=http%3A%2F%2Fimaging.nikon.com%2Flineup%2Fdslr%2Fdf%2Fimg%2Fsample%2Fimg_02.jpg&size=thumbnail"></a></div></blockquote>\n<ul>\n<li><div class="message_inline_image"><a href="http://imaging.nikon.com/lineup/dslr/df/img/sample/img_03.jpg" target="_blank" title="http://imaging.nikon.com/lineup/dslr/df/img/sample/img_03.jpg"><img data-src-fullsize="/thumbnail?url=http%3A%2F%2Fimaging.nikon.com%2Flineup%2Fdslr%2Fdf%2Fimg%2Fsample%2Fimg_03.jpg&size=original" src="/thumbnail?url=http%3A%2F%2Fimaging.nikon.com%2Flineup%2Fdslr%2Fdf%2Fimg%2Fsample%2Fimg_03.jpg&size=thumbnail"></a></div></li>\n<li><div class="message_inline_image"><a href="https://www.google.com/images/srpr/logo4w.png" target="_blank" title="https://www.google.com/images/srpr/logo4w.png"><img data-src-fullsize="/thumbnail?url=https%3A%2F%2Fwww.google.com%2Fimages%2Fsrpr%2Flogo4w.png&size=original" src="/thumbnail?url=https%3A%2F%2Fwww.google.com%2Fimages%2Fsrpr%2Flogo4w.png&size=thumbnail"></a></div></li>\n</ul>'
 | 
			
		||||
        expected = '<div class="message_inline_image"><a href="http://imaging.nikon.com/lineup/dslr/df/img/sample/img_01.jpg" target="_blank" title="http://imaging.nikon.com/lineup/dslr/df/img/sample/img_01.jpg"><img data-src-fullsize="/thumbnail?url=http%3A%2F%2Fimaging.nikon.com%2Flineup%2Fdslr%2Fdf%2Fimg%2Fsample%2Fimg_01.jpg&size=full" src="/thumbnail?url=http%3A%2F%2Fimaging.nikon.com%2Flineup%2Fdslr%2Fdf%2Fimg%2Fsample%2Fimg_01.jpg&size=thumbnail"></a></div><blockquote>\n<div class="message_inline_image"><a href="http://imaging.nikon.com/lineup/dslr/df/img/sample/img_02.jpg" target="_blank" title="http://imaging.nikon.com/lineup/dslr/df/img/sample/img_02.jpg"><img data-src-fullsize="/thumbnail?url=http%3A%2F%2Fimaging.nikon.com%2Flineup%2Fdslr%2Fdf%2Fimg%2Fsample%2Fimg_02.jpg&size=full" src="/thumbnail?url=http%3A%2F%2Fimaging.nikon.com%2Flineup%2Fdslr%2Fdf%2Fimg%2Fsample%2Fimg_02.jpg&size=thumbnail"></a></div></blockquote>\n<ul>\n<li><div class="message_inline_image"><a href="http://imaging.nikon.com/lineup/dslr/df/img/sample/img_03.jpg" target="_blank" title="http://imaging.nikon.com/lineup/dslr/df/img/sample/img_03.jpg"><img data-src-fullsize="/thumbnail?url=http%3A%2F%2Fimaging.nikon.com%2Flineup%2Fdslr%2Fdf%2Fimg%2Fsample%2Fimg_03.jpg&size=full" src="/thumbnail?url=http%3A%2F%2Fimaging.nikon.com%2Flineup%2Fdslr%2Fdf%2Fimg%2Fsample%2Fimg_03.jpg&size=thumbnail"></a></div></li>\n<li><div class="message_inline_image"><a href="https://www.google.com/images/srpr/logo4w.png" target="_blank" title="https://www.google.com/images/srpr/logo4w.png"><img data-src-fullsize="/thumbnail?url=https%3A%2F%2Fwww.google.com%2Fimages%2Fsrpr%2Flogo4w.png&size=full" src="/thumbnail?url=https%3A%2F%2Fwww.google.com%2Fimages%2Fsrpr%2Flogo4w.png&size=thumbnail"></a></div></li>\n</ul>'
 | 
			
		||||
 | 
			
		||||
        sender_user_profile = self.example_user('othello')
 | 
			
		||||
        msg = Message(sender=sender_user_profile, sending_client=get_client("test"))
 | 
			
		||||
@@ -403,7 +403,7 @@ class BugdownTest(ZulipTestCase):
 | 
			
		||||
        self.assertEqual(converted, expected)
 | 
			
		||||
 | 
			
		||||
        content = 'Test 1\n[21136101110_1dde1c1a7e_o.jpg](/user_uploads/1/6d/F1PX6u16JA2P-nK45PyxHIYZ/21136101110_1dde1c1a7e_o.jpg) \n\nNext Image\n[IMG_20161116_023910.jpg](/user_uploads/1/69/sh7L06e7uH7NaX6d5WFfVYQp/IMG_20161116_023910.jpg) \n\nAnother Screenshot\n[Screenshot-from-2016-06-01-16-22-42.png](/user_uploads/1/70/_aZmIEWaN1iUaxwkDjkO7bpj/Screenshot-from-2016-06-01-16-22-42.png)'
 | 
			
		||||
        expected = '<p>Test 1<br>\n<a href="/user_uploads/1/6d/F1PX6u16JA2P-nK45PyxHIYZ/21136101110_1dde1c1a7e_o.jpg" target="_blank" title="21136101110_1dde1c1a7e_o.jpg">21136101110_1dde1c1a7e_o.jpg</a> </p>\n<div class="message_inline_image"><a href="/user_uploads/1/6d/F1PX6u16JA2P-nK45PyxHIYZ/21136101110_1dde1c1a7e_o.jpg" target="_blank" title="21136101110_1dde1c1a7e_o.jpg"><img data-src-fullsize="/thumbnail?url=user_uploads%2F1%2F6d%2FF1PX6u16JA2P-nK45PyxHIYZ%2F21136101110_1dde1c1a7e_o.jpg&size=original" src="/thumbnail?url=user_uploads%2F1%2F6d%2FF1PX6u16JA2P-nK45PyxHIYZ%2F21136101110_1dde1c1a7e_o.jpg&size=thumbnail"></a></div><p>Next Image<br>\n<a href="/user_uploads/1/69/sh7L06e7uH7NaX6d5WFfVYQp/IMG_20161116_023910.jpg" target="_blank" title="IMG_20161116_023910.jpg">IMG_20161116_023910.jpg</a> </p>\n<div class="message_inline_image"><a href="/user_uploads/1/69/sh7L06e7uH7NaX6d5WFfVYQp/IMG_20161116_023910.jpg" target="_blank" title="IMG_20161116_023910.jpg"><img data-src-fullsize="/thumbnail?url=user_uploads%2F1%2F69%2Fsh7L06e7uH7NaX6d5WFfVYQp%2FIMG_20161116_023910.jpg&size=original" src="/thumbnail?url=user_uploads%2F1%2F69%2Fsh7L06e7uH7NaX6d5WFfVYQp%2FIMG_20161116_023910.jpg&size=thumbnail"></a></div><p>Another Screenshot<br>\n<a href="/user_uploads/1/70/_aZmIEWaN1iUaxwkDjkO7bpj/Screenshot-from-2016-06-01-16-22-42.png" target="_blank" title="Screenshot-from-2016-06-01-16-22-42.png">Screenshot-from-2016-06-01-16-22-42.png</a></p>\n<div class="message_inline_image"><a href="/user_uploads/1/70/_aZmIEWaN1iUaxwkDjkO7bpj/Screenshot-from-2016-06-01-16-22-42.png" target="_blank" title="Screenshot-from-2016-06-01-16-22-42.png"><img data-src-fullsize="/thumbnail?url=user_uploads%2F1%2F70%2F_aZmIEWaN1iUaxwkDjkO7bpj%2FScreenshot-from-2016-06-01-16-22-42.png&size=original" src="/thumbnail?url=user_uploads%2F1%2F70%2F_aZmIEWaN1iUaxwkDjkO7bpj%2FScreenshot-from-2016-06-01-16-22-42.png&size=thumbnail"></a></div>'
 | 
			
		||||
        expected = '<p>Test 1<br>\n<a href="/user_uploads/1/6d/F1PX6u16JA2P-nK45PyxHIYZ/21136101110_1dde1c1a7e_o.jpg" target="_blank" title="21136101110_1dde1c1a7e_o.jpg">21136101110_1dde1c1a7e_o.jpg</a> </p>\n<div class="message_inline_image"><a href="/user_uploads/1/6d/F1PX6u16JA2P-nK45PyxHIYZ/21136101110_1dde1c1a7e_o.jpg" target="_blank" title="21136101110_1dde1c1a7e_o.jpg"><img data-src-fullsize="/thumbnail?url=user_uploads%2F1%2F6d%2FF1PX6u16JA2P-nK45PyxHIYZ%2F21136101110_1dde1c1a7e_o.jpg&size=full" src="/thumbnail?url=user_uploads%2F1%2F6d%2FF1PX6u16JA2P-nK45PyxHIYZ%2F21136101110_1dde1c1a7e_o.jpg&size=thumbnail"></a></div><p>Next Image<br>\n<a href="/user_uploads/1/69/sh7L06e7uH7NaX6d5WFfVYQp/IMG_20161116_023910.jpg" target="_blank" title="IMG_20161116_023910.jpg">IMG_20161116_023910.jpg</a> </p>\n<div class="message_inline_image"><a href="/user_uploads/1/69/sh7L06e7uH7NaX6d5WFfVYQp/IMG_20161116_023910.jpg" target="_blank" title="IMG_20161116_023910.jpg"><img data-src-fullsize="/thumbnail?url=user_uploads%2F1%2F69%2Fsh7L06e7uH7NaX6d5WFfVYQp%2FIMG_20161116_023910.jpg&size=full" src="/thumbnail?url=user_uploads%2F1%2F69%2Fsh7L06e7uH7NaX6d5WFfVYQp%2FIMG_20161116_023910.jpg&size=thumbnail"></a></div><p>Another Screenshot<br>\n<a href="/user_uploads/1/70/_aZmIEWaN1iUaxwkDjkO7bpj/Screenshot-from-2016-06-01-16-22-42.png" target="_blank" title="Screenshot-from-2016-06-01-16-22-42.png">Screenshot-from-2016-06-01-16-22-42.png</a></p>\n<div class="message_inline_image"><a href="/user_uploads/1/70/_aZmIEWaN1iUaxwkDjkO7bpj/Screenshot-from-2016-06-01-16-22-42.png" target="_blank" title="Screenshot-from-2016-06-01-16-22-42.png"><img data-src-fullsize="/thumbnail?url=user_uploads%2F1%2F70%2F_aZmIEWaN1iUaxwkDjkO7bpj%2FScreenshot-from-2016-06-01-16-22-42.png&size=full" src="/thumbnail?url=user_uploads%2F1%2F70%2F_aZmIEWaN1iUaxwkDjkO7bpj%2FScreenshot-from-2016-06-01-16-22-42.png&size=thumbnail"></a></div>'
 | 
			
		||||
 | 
			
		||||
        msg = Message(sender=sender_user_profile, sending_client=get_client("test"))
 | 
			
		||||
        converted = render_markdown(msg, content)
 | 
			
		||||
@@ -474,7 +474,7 @@ class BugdownTest(ZulipTestCase):
 | 
			
		||||
        with mock.patch('zerver.lib.bugdown.fetch_open_graph_image', return_value=None):
 | 
			
		||||
            converted = bugdown_convert(msg)
 | 
			
		||||
 | 
			
		||||
        self.assertEqual(converted, '<p>Look at the new dropbox logo: <a href="https://www.dropbox.com/static/images/home_logo.png" target="_blank" title="https://www.dropbox.com/static/images/home_logo.png">https://www.dropbox.com/static/images/home_logo.png</a></p>\n<div class="message_inline_image"><a href="https://www.dropbox.com/static/images/home_logo.png" target="_blank" title="https://www.dropbox.com/static/images/home_logo.png"><img data-src-fullsize="/thumbnail?url=https%3A%2F%2Fwww.dropbox.com%2Fstatic%2Fimages%2Fhome_logo.png&size=original" src="/thumbnail?url=https%3A%2F%2Fwww.dropbox.com%2Fstatic%2Fimages%2Fhome_logo.png&size=thumbnail"></a></div>')
 | 
			
		||||
        self.assertEqual(converted, '<p>Look at the new dropbox logo: <a href="https://www.dropbox.com/static/images/home_logo.png" target="_blank" title="https://www.dropbox.com/static/images/home_logo.png">https://www.dropbox.com/static/images/home_logo.png</a></p>\n<div class="message_inline_image"><a href="https://www.dropbox.com/static/images/home_logo.png" target="_blank" title="https://www.dropbox.com/static/images/home_logo.png"><img data-src-fullsize="/thumbnail?url=https%3A%2F%2Fwww.dropbox.com%2Fstatic%2Fimages%2Fhome_logo.png&size=full" src="/thumbnail?url=https%3A%2F%2Fwww.dropbox.com%2Fstatic%2Fimages%2Fhome_logo.png&size=thumbnail"></a></div>')
 | 
			
		||||
 | 
			
		||||
    def test_inline_dropbox_bad(self) -> None:
 | 
			
		||||
        # Don't fail on bad dropbox links
 | 
			
		||||
@@ -488,12 +488,12 @@ class BugdownTest(ZulipTestCase):
 | 
			
		||||
        msg = 'Test: https://github.com/zulip/zulip/blob/master/static/images/logo/zulip-icon-128x128.png'
 | 
			
		||||
        converted = bugdown_convert(msg)
 | 
			
		||||
 | 
			
		||||
        self.assertEqual(converted, '<p>Test: <a href="https://github.com/zulip/zulip/blob/master/static/images/logo/zulip-icon-128x128.png" target="_blank" title="https://github.com/zulip/zulip/blob/master/static/images/logo/zulip-icon-128x128.png">https://github.com/zulip/zulip/blob/master/static/images/logo/zulip-icon-128x128.png</a></p>\n<div class="message_inline_image"><a href="https://github.com/zulip/zulip/blob/master/static/images/logo/zulip-icon-128x128.png" target="_blank" title="https://github.com/zulip/zulip/blob/master/static/images/logo/zulip-icon-128x128.png"><img data-src-fullsize="/thumbnail?url=https%3A%2F%2Fraw.githubusercontent.com%2Fzulip%2Fzulip%2Fmaster%2Fstatic%2Fimages%2Flogo%2Fzulip-icon-128x128.png&size=original" src="/thumbnail?url=https%3A%2F%2Fraw.githubusercontent.com%2Fzulip%2Fzulip%2Fmaster%2Fstatic%2Fimages%2Flogo%2Fzulip-icon-128x128.png&size=thumbnail"></a></div>')
 | 
			
		||||
        self.assertEqual(converted, '<p>Test: <a href="https://github.com/zulip/zulip/blob/master/static/images/logo/zulip-icon-128x128.png" target="_blank" title="https://github.com/zulip/zulip/blob/master/static/images/logo/zulip-icon-128x128.png">https://github.com/zulip/zulip/blob/master/static/images/logo/zulip-icon-128x128.png</a></p>\n<div class="message_inline_image"><a href="https://github.com/zulip/zulip/blob/master/static/images/logo/zulip-icon-128x128.png" target="_blank" title="https://github.com/zulip/zulip/blob/master/static/images/logo/zulip-icon-128x128.png"><img data-src-fullsize="/thumbnail?url=https%3A%2F%2Fraw.githubusercontent.com%2Fzulip%2Fzulip%2Fmaster%2Fstatic%2Fimages%2Flogo%2Fzulip-icon-128x128.png&size=full" src="/thumbnail?url=https%3A%2F%2Fraw.githubusercontent.com%2Fzulip%2Fzulip%2Fmaster%2Fstatic%2Fimages%2Flogo%2Fzulip-icon-128x128.png&size=thumbnail"></a></div>')
 | 
			
		||||
 | 
			
		||||
        msg = 'Test: https://developer.github.com/assets/images/hero-circuit-bg.png'
 | 
			
		||||
        converted = bugdown_convert(msg)
 | 
			
		||||
 | 
			
		||||
        self.assertEqual(converted, '<p>Test: <a href="https://developer.github.com/assets/images/hero-circuit-bg.png" target="_blank" title="https://developer.github.com/assets/images/hero-circuit-bg.png">https://developer.github.com/assets/images/hero-circuit-bg.png</a></p>\n<div class="message_inline_image"><a href="https://developer.github.com/assets/images/hero-circuit-bg.png" target="_blank" title="https://developer.github.com/assets/images/hero-circuit-bg.png"><img data-src-fullsize="/thumbnail?url=https%3A%2F%2Fdeveloper.github.com%2Fassets%2Fimages%2Fhero-circuit-bg.png&size=original" src="/thumbnail?url=https%3A%2F%2Fdeveloper.github.com%2Fassets%2Fimages%2Fhero-circuit-bg.png&size=thumbnail"></a></div>')
 | 
			
		||||
        self.assertEqual(converted, '<p>Test: <a href="https://developer.github.com/assets/images/hero-circuit-bg.png" target="_blank" title="https://developer.github.com/assets/images/hero-circuit-bg.png">https://developer.github.com/assets/images/hero-circuit-bg.png</a></p>\n<div class="message_inline_image"><a href="https://developer.github.com/assets/images/hero-circuit-bg.png" target="_blank" title="https://developer.github.com/assets/images/hero-circuit-bg.png"><img data-src-fullsize="/thumbnail?url=https%3A%2F%2Fdeveloper.github.com%2Fassets%2Fimages%2Fhero-circuit-bg.png&size=full" src="/thumbnail?url=https%3A%2F%2Fdeveloper.github.com%2Fassets%2Fimages%2Fhero-circuit-bg.png&size=thumbnail"></a></div>')
 | 
			
		||||
 | 
			
		||||
    def test_twitter_id_extraction(self) -> None:
 | 
			
		||||
        self.assertEqual(bugdown.get_tweet_id('http://twitter.com/#!/VizzQuotes/status/409030735191097344'), '409030735191097344')
 | 
			
		||||
@@ -1145,7 +1145,7 @@ class BugdownTest(ZulipTestCase):
 | 
			
		||||
            '</p>\n'
 | 
			
		||||
            '<div class="message_inline_image">'
 | 
			
		||||
            '<a href="https://example.com/testimage.png" target="_blank" title="My favorite image">'
 | 
			
		||||
            '<img data-src-fullsize="/thumbnail?url=https%3A%2F%2Fexample.com%2Ftestimage.png&size=original" src="/thumbnail?url=https%3A%2F%2Fexample.com%2Ftestimage.png&size=thumbnail">'
 | 
			
		||||
            '<img data-src-fullsize="/thumbnail?url=https%3A%2F%2Fexample.com%2Ftestimage.png&size=full" src="/thumbnail?url=https%3A%2F%2Fexample.com%2Ftestimage.png&size=thumbnail">'
 | 
			
		||||
            '</a>'
 | 
			
		||||
            '</div>'
 | 
			
		||||
        )
 | 
			
		||||
 
 | 
			
		||||
@@ -40,8 +40,8 @@ class ThumbnailTest(ZulipTestCase):
 | 
			
		||||
 | 
			
		||||
        quoted_uri = urllib.parse.quote(uri[1:], safe='')
 | 
			
		||||
 | 
			
		||||
        # Test original image size.
 | 
			
		||||
        result = self.client_get("/thumbnail?url=%s&size=original" % (quoted_uri))
 | 
			
		||||
        # Test full size image.
 | 
			
		||||
        result = self.client_get("/thumbnail?url=%s&size=full" % (quoted_uri))
 | 
			
		||||
        self.assertEqual(result.status_code, 302, result)
 | 
			
		||||
        expected_part_url = get_file_path_urlpart(uri)
 | 
			
		||||
        self.assertIn(expected_part_url, result.url)
 | 
			
		||||
@@ -56,7 +56,7 @@ class ThumbnailTest(ZulipTestCase):
 | 
			
		||||
        self.logout()
 | 
			
		||||
        result = self.api_get(
 | 
			
		||||
            self.example_email("hamlet"),
 | 
			
		||||
            '/thumbnail?url=%s&size=original' %
 | 
			
		||||
            '/thumbnail?url=%s&size=full' %
 | 
			
		||||
            (quoted_uri,))
 | 
			
		||||
        self.assertEqual(result.status_code, 302, result)
 | 
			
		||||
        expected_part_url = get_file_path_urlpart(uri)
 | 
			
		||||
@@ -64,17 +64,17 @@ class ThumbnailTest(ZulipTestCase):
 | 
			
		||||
 | 
			
		||||
        # Test with another user trying to access image using thumbor.
 | 
			
		||||
        self.login(self.example_email("iago"))
 | 
			
		||||
        result = self.client_get("/thumbnail?url=%s&size=original" % (quoted_uri))
 | 
			
		||||
        result = self.client_get("/thumbnail?url=%s&size=full" % (quoted_uri))
 | 
			
		||||
        self.assertEqual(result.status_code, 403, result)
 | 
			
		||||
        self.assert_in_response("You are not authorized to view this file.", result)
 | 
			
		||||
 | 
			
		||||
    def test_external_source_type(self) -> None:
 | 
			
		||||
        def run_test_with_image_url(image_url: str) -> None:
 | 
			
		||||
            # Test original image size.
 | 
			
		||||
            # Test full size image.
 | 
			
		||||
            self.login(self.example_email("hamlet"))
 | 
			
		||||
            quoted_url = urllib.parse.quote(image_url, safe='')
 | 
			
		||||
            encoded_url = base64.urlsafe_b64encode(image_url.encode()).decode('utf-8')
 | 
			
		||||
            result = self.client_get("/thumbnail?url=%s&size=original" % (quoted_url))
 | 
			
		||||
            result = self.client_get("/thumbnail?url=%s&size=full" % (quoted_url))
 | 
			
		||||
            self.assertEqual(result.status_code, 302, result)
 | 
			
		||||
            expected_part_url = '/smart/filters:no_upscale()/' + encoded_url + '/source_type/external'
 | 
			
		||||
            self.assertIn(expected_part_url, result.url)
 | 
			
		||||
@@ -112,7 +112,7 @@ class ThumbnailTest(ZulipTestCase):
 | 
			
		||||
            # Test with another user trying to access image using thumbor.
 | 
			
		||||
            # File should be always accessible to user in case of external source
 | 
			
		||||
            self.login(self.example_email("iago"))
 | 
			
		||||
            result = self.client_get("/thumbnail?url=%s&size=original" % (quoted_url))
 | 
			
		||||
            result = self.client_get("/thumbnail?url=%s&size=full" % (quoted_url))
 | 
			
		||||
            self.assertEqual(result.status_code, 302, result)
 | 
			
		||||
            expected_part_url = '/smart/filters:no_upscale()/' + encoded_url + '/source_type/external'
 | 
			
		||||
            self.assertIn(expected_part_url, result.url)
 | 
			
		||||
@@ -145,11 +145,11 @@ class ThumbnailTest(ZulipTestCase):
 | 
			
		||||
        base = '/user_uploads/'
 | 
			
		||||
        self.assertEqual(base, uri[:len(base)])
 | 
			
		||||
 | 
			
		||||
        # Test original image size.
 | 
			
		||||
        # Test full size image.
 | 
			
		||||
        # We remove the forward slash infront of the `/user_uploads/` to match
 | 
			
		||||
        # bugdown behaviour.
 | 
			
		||||
        quoted_uri = urllib.parse.quote(uri[1:], safe='')
 | 
			
		||||
        result = self.client_get("/thumbnail?url=%s&size=original" % (quoted_uri))
 | 
			
		||||
        result = self.client_get("/thumbnail?url=%s&size=full" % (quoted_uri))
 | 
			
		||||
        self.assertEqual(result.status_code, 302, result)
 | 
			
		||||
        expected_part_url = get_file_path_urlpart(uri)
 | 
			
		||||
        self.assertIn(expected_part_url, result.url)
 | 
			
		||||
@@ -173,7 +173,7 @@ class ThumbnailTest(ZulipTestCase):
 | 
			
		||||
        # We remove the forward slash infront of the `/user_uploads/` to match
 | 
			
		||||
        # bugdown behaviour.
 | 
			
		||||
        quoted_uri = urllib.parse.quote(uri[1:], safe='')
 | 
			
		||||
        result = self.client_get("/thumbnail?url=%s&size=original" % (quoted_uri))
 | 
			
		||||
        result = self.client_get("/thumbnail?url=%s&size=full" % (quoted_uri))
 | 
			
		||||
        self.assertEqual(result.status_code, 302, result)
 | 
			
		||||
        expected_part_url = get_file_path_urlpart(uri)
 | 
			
		||||
        self.assertIn(expected_part_url, result.url)
 | 
			
		||||
@@ -183,7 +183,7 @@ class ThumbnailTest(ZulipTestCase):
 | 
			
		||||
        user_profile = self.example_user("hamlet")
 | 
			
		||||
        result = self.api_get(
 | 
			
		||||
            self.example_email("hamlet"),
 | 
			
		||||
            '/thumbnail?url=%s&size=original' %
 | 
			
		||||
            '/thumbnail?url=%s&size=full' %
 | 
			
		||||
            (quoted_uri,))
 | 
			
		||||
        self.assertEqual(result.status_code, 302, result)
 | 
			
		||||
        expected_part_url = get_file_path_urlpart(uri)
 | 
			
		||||
@@ -193,7 +193,7 @@ class ThumbnailTest(ZulipTestCase):
 | 
			
		||||
        # auth.
 | 
			
		||||
        user_profile = self.example_user("hamlet")
 | 
			
		||||
        result = self.client_get(
 | 
			
		||||
            '/thumbnail?url=%s&size=original&api_key=%s' %
 | 
			
		||||
            '/thumbnail?url=%s&size=full&api_key=%s' %
 | 
			
		||||
            (quoted_uri, user_profile.api_key))
 | 
			
		||||
        self.assertEqual(result.status_code, 302, result)
 | 
			
		||||
        expected_part_url = get_file_path_urlpart(uri)
 | 
			
		||||
@@ -201,7 +201,7 @@ class ThumbnailTest(ZulipTestCase):
 | 
			
		||||
 | 
			
		||||
        # Test with another user trying to access image using thumbor.
 | 
			
		||||
        self.login(self.example_email("iago"))
 | 
			
		||||
        result = self.client_get("/thumbnail?url=%s&size=original" % (quoted_uri))
 | 
			
		||||
        result = self.client_get("/thumbnail?url=%s&size=full" % (quoted_uri))
 | 
			
		||||
        self.assertEqual(result.status_code, 403, result)
 | 
			
		||||
        self.assert_in_response("You are not authorized to view this file.", result)
 | 
			
		||||
 | 
			
		||||
@@ -210,7 +210,7 @@ class ThumbnailTest(ZulipTestCase):
 | 
			
		||||
        self.login(self.example_email("hamlet"))
 | 
			
		||||
        uri = '/static/images/cute/turtle.png'
 | 
			
		||||
        quoted_uri = urllib.parse.quote(uri[1:], safe='')
 | 
			
		||||
        result = self.client_get("/thumbnail?url=%s&size=original" % (quoted_uri))
 | 
			
		||||
        result = self.client_get("/thumbnail?url=%s&size=full" % (quoted_uri))
 | 
			
		||||
        self.assertEqual(result.status_code, 302, result)
 | 
			
		||||
        self.assertEqual(uri, result.url)
 | 
			
		||||
 | 
			
		||||
@@ -230,21 +230,21 @@ class ThumbnailTest(ZulipTestCase):
 | 
			
		||||
        quoted_uri = urllib.parse.quote(uri[1:], safe='')
 | 
			
		||||
 | 
			
		||||
        with self.settings(THUMBOR_URL=''):
 | 
			
		||||
            result = self.client_get("/thumbnail?url=%s&size=original" % (quoted_uri))
 | 
			
		||||
            result = self.client_get("/thumbnail?url=%s&size=full" % (quoted_uri))
 | 
			
		||||
        self.assertEqual(result.status_code, 302, result)
 | 
			
		||||
        self.assertEqual(uri, result.url)
 | 
			
		||||
 | 
			
		||||
        uri = 'https://www.google.com/images/srpr/logo4w.png'
 | 
			
		||||
        quoted_uri = urllib.parse.quote(uri, safe='')
 | 
			
		||||
        with self.settings(THUMBOR_URL=''):
 | 
			
		||||
            result = self.client_get("/thumbnail?url=%s&size=original" % (quoted_uri))
 | 
			
		||||
            result = self.client_get("/thumbnail?url=%s&size=full" % (quoted_uri))
 | 
			
		||||
        self.assertEqual(result.status_code, 302, result)
 | 
			
		||||
        self.assertEqual(uri, result.url)
 | 
			
		||||
 | 
			
		||||
        uri = 'http://www.google.com/images/srpr/logo4w.png'
 | 
			
		||||
        quoted_uri = urllib.parse.quote(uri, safe='')
 | 
			
		||||
        with self.settings(THUMBOR_URL=''):
 | 
			
		||||
            result = self.client_get("/thumbnail?url=%s&size=original" % (quoted_uri))
 | 
			
		||||
            result = self.client_get("/thumbnail?url=%s&size=full" % (quoted_uri))
 | 
			
		||||
        self.assertEqual(result.status_code, 302, result)
 | 
			
		||||
        base = 'https://external-content.zulipcdn.net/7b6552b60c635e41e8f6daeb36d88afc4eabde79/687474703a2f2f7777772e676f6f676c652e636f6d2f696d616765732f737270722f6c6f676f34772e706e67'
 | 
			
		||||
        self.assertEqual(base, result.url)
 | 
			
		||||
@@ -265,7 +265,7 @@ class ThumbnailTest(ZulipTestCase):
 | 
			
		||||
        quoted_uri = urllib.parse.quote(uri[1:], safe='')
 | 
			
		||||
        hex_uri = base64.urlsafe_b64encode(uri[len('/user_uploads/'):].encode()).decode('utf-8')
 | 
			
		||||
        with self.settings(THUMBOR_URL='http://test-thumborhost.com'):
 | 
			
		||||
            result = self.client_get("/thumbnail?url=%s&size=original" % (quoted_uri))
 | 
			
		||||
            result = self.client_get("/thumbnail?url=%s&size=full" % (quoted_uri))
 | 
			
		||||
        self.assertEqual(result.status_code, 302, result)
 | 
			
		||||
        base = 'http://test-thumborhost.com/'
 | 
			
		||||
        self.assertEqual(base, result.url[:len(base)])
 | 
			
		||||
@@ -296,20 +296,20 @@ class ThumbnailTest(ZulipTestCase):
 | 
			
		||||
 | 
			
		||||
        # Test with size supplied as a query parameter.
 | 
			
		||||
        # size=thumbnail should return a 0x100 sized image.
 | 
			
		||||
        # size=original should return the original resolution image.
 | 
			
		||||
        # size=full should return the original resolution image.
 | 
			
		||||
        quoted_uri = urllib.parse.quote(uri[1:], safe='')
 | 
			
		||||
        result = self.client_get("/thumbnail?url=%s&size=thumbnail" % (quoted_uri))
 | 
			
		||||
        self.assertEqual(result.status_code, 302, result)
 | 
			
		||||
        expected_part_url = get_file_path_urlpart(uri, '0x100')
 | 
			
		||||
        self.assertIn(expected_part_url, result.url)
 | 
			
		||||
 | 
			
		||||
        result = self.client_get("/thumbnail?url=%s&size=original" % (quoted_uri))
 | 
			
		||||
        result = self.client_get("/thumbnail?url=%s&size=full" % (quoted_uri))
 | 
			
		||||
        self.assertEqual(result.status_code, 302, result)
 | 
			
		||||
        expected_part_url = get_file_path_urlpart(uri)
 | 
			
		||||
        self.assertIn(expected_part_url, result.url)
 | 
			
		||||
 | 
			
		||||
        # Test with size supplied as a query parameter where size is anything
 | 
			
		||||
        # else than original or thumbnail. Result should be an error message.
 | 
			
		||||
        # else than 'full' or 'thumbnail'. Result should be an error message.
 | 
			
		||||
        result = self.client_get("/thumbnail?url=%s&size=480x360" % (quoted_uri))
 | 
			
		||||
        self.assertEqual(result.status_code, 403, result)
 | 
			
		||||
        self.assert_in_response("Invalid size.", result)
 | 
			
		||||
 
 | 
			
		||||
@@ -28,7 +28,7 @@ def backend_serve_thumbnail(request: HttpRequest, user_profile: UserProfile,
 | 
			
		||||
    size = None
 | 
			
		||||
    if size_requested == 'thumbnail':
 | 
			
		||||
        size = '0x100'
 | 
			
		||||
    elif size_requested == 'original':
 | 
			
		||||
    elif size_requested == 'full':
 | 
			
		||||
        size = '0x0'
 | 
			
		||||
 | 
			
		||||
    if size is None:
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user