scripts/send-error-report: simple hack to use proxy from the enviroment
authorStefan Stanacar <stefanx.stanacar@intel.com>
Fri, 11 Apr 2014 17:49:14 +0000 (20:49 +0300)
committerRichard Purdie <richard.purdie@linuxfoundation.org>
Wed, 23 Apr 2014 10:43:27 +0000 (11:43 +0100)
People behind a proxy couldn't send an error report to an upstream server,
this should fix the issue if they use a proxy that doesn't require authentication,
or one that uses basic http authentication and it's correctly exported in the enviroment.

(From OE-Core rev: a8511ee80246b4e2caa353b87f4b586f1539e6d4)

Signed-off-by: Stefan Stanacar <stefanx.stanacar@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
scripts/send-error-report

index d23ae27..3d1f7a4 100755 (executable)
@@ -7,7 +7,39 @@
 
 
 
-import httplib, urllib, os, sys, json
+import httplib, urllib, os, sys, json, base64
+from urllib2 import _parse_proxy as parseproxy
+
+
+def handle_connection(server, data):
+    params = urllib.urlencode({'data': data})
+    headers = {"Content-type": "application/json"}
+    proxyrequired = False
+    if os.environ.get("http_proxy") or os.environ.get("HTTP_PROXY"):
+        proxyrequired = True
+        # we need to check that the server isn't a local one, as in no_proxy
+        try:
+            temp = httplib.HTTPConnection(server, strict=True, timeout=5)
+            temp.request("GET", "/")
+            tempres = temp.getresponse()
+            if tempres.status == 200:
+                proxyrequired = False
+            temp.close()
+        except:
+            pass
+
+    if proxyrequired:
+        proxy = parseproxy(os.environ.get("http_proxy") or os.environ.get("HTTP_PROXY"))
+        if proxy[1] and proxy[2]:
+            auth = base64.encodestring("%s:%s" % (proxy[1], proxy[2]))
+            headers["Authorization"] = "Basic %s" % auth
+        conn = httplib.HTTPConnection(proxy[3])
+        conn.request("POST", "http://%s/ClientPost/" % server, params, headers)
+    else:
+        conn = httplib.HTTPConnection(server)
+        conn.request("POST", "/ClientPost/", params, headers)
+
+    return conn
 
 
 def sendData(json_file, server):
@@ -45,10 +77,7 @@ def sendData(json_file, server):
             return
 
         try:
-            params = urllib.urlencode({'data': data})
-            headers = {"Content-type": "application/json"}
-            conn = httplib.HTTPConnection(server)
-            conn.request("POST", "/ClientPost/", params, headers)
+            conn = handle_connection(server, data)
             response = conn.getresponse()
             print response.status, response.reason
             res = response.read()
@@ -59,8 +88,8 @@ def sendData(json_file, server):
                 with open("%s.response.html" % json_file, "w") as f:
                     f.write(res)
             conn.close()
-        except:
-                print("Server connection failed")
+        except Exception as e:
+                print("Server connection failed: %s" % e)
 
     else:
         print("No data file found.")