You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@allura.apache.org by br...@apache.org on 2019/09/30 17:31:49 UTC

[allura] 01/01: [#8334] set a global socket default timeout for oembed usage

This is an automated email from the ASF dual-hosted git repository.

brondsem pushed a commit to branch db/8334
in repository https://gitbox.apache.org/repos/asf/allura.git

commit 5c4baf3b1ca0627f331854c838e4b8013fbc06dd
Author: Dave Brondsema <da...@brondsema.net>
AuthorDate: Mon Sep 30 13:31:40 2019 -0400

    [#8334] set a global socket default timeout for oembed usage
---
 Allura/allura/lib/macro.py | 13 +++++++++----
 Allura/allura/lib/utils.py | 11 +++++++++++
 2 files changed, 20 insertions(+), 4 deletions(-)

diff --git a/Allura/allura/lib/macro.py b/Allura/allura/lib/macro.py
index 6746a48..abb4776 100644
--- a/Allura/allura/lib/macro.py
+++ b/Allura/allura/lib/macro.py
@@ -31,6 +31,7 @@ from tg import request
 from paste.deploy.converters import asint
 from bs4 import BeautifulSoup
 
+from allura.lib.utils import socket_default_timeout
 from . import helpers as h
 from . import security
 
@@ -452,10 +453,14 @@ def embed(url=None):
                                       'http://*.youtube-nocookie.com/*', 'https://*.youtube-nocookie.com/*',
                                       ])
     consumer.addEndpoint(endpoint)
-    try:
-        html = consumer.embed(url)['html']
-    except oembed.OEmbedNoEndpoint:
-        html = None
+
+    # workaround for https://github.com/abarmat/python-oembed/pull/9 not being implemented yet
+    with socket_default_timeout(5):
+
+        try:
+            html = consumer.embed(url)['html']
+        except oembed.OEmbedNoEndpoint:
+            html = None
 
     if html:
         # youtube has a trailing ")" at the moment
diff --git a/Allura/allura/lib/utils.py b/Allura/allura/lib/utils.py
index 0203f7a..fdf0340 100644
--- a/Allura/allura/lib/utils.py
+++ b/Allura/allura/lib/utils.py
@@ -33,6 +33,7 @@ import collections
 from urlparse import urlparse
 import urllib
 import types
+import socket
 
 import tg
 import emoji
@@ -862,3 +863,13 @@ def urlencode(params):
 
 def close_ipv4_addrs(ip1, ip2):
     return ip1.split('.')[0:3] == ip2.split('.')[0:3]
+
+
+@contextmanager
+def socket_default_timeout(timeout):
+    orig_timeout = socket.getdefaulttimeout()
+    socket.setdefaulttimeout(timeout)
+    try:
+        yield
+    finally:
+        socket.setdefaulttimeout(orig_timeout)
\ No newline at end of file