[Toaster] [RFC PATCH v2] toaster: support authentication required proxy connection

Bian Naimeng biannm at cn.fujitsu.com
Thu Aug 27 19:18:05 PDT 2015


At authentication required proxy environment, such as setting $http_proxy to
'http://user:password@ip:port', the following error will be caught.

 EE: Using proxy http://user:password@ip:port
 EE: could not connect to 'url', skipping update: 'error message'

It means toaster can not fetche layer, recipe and machine information from remote repository
at authentication required proxy environment.

What this patch tries to fix is that make toaster support authentication required proxy connection.

I have did some tests after applying this patch.

1. Proxy with authentication
   # export http_proxy="http://user:password@ip:port"
   # bitbake/bin/toaster

   Result: OK

2. Proxy without authentication
   # export http_proxy="http://ip:port"
   # bitbake/bin/toaster

   Result: OK

3. Directly
   # bitbake/bin/toaster

   Result: Unknow, Not yet tested

Signed-off-by: Bian Naimeng <biannm at cn.fujitsu.com>
---
 lib/toaster/orm/models.py | 36 +++++++-----------------------------
 1 file changed, 7 insertions(+), 29 deletions(-)

diff --git a/lib/toaster/orm/models.py b/lib/toaster/orm/models.py
index 92fcaa7..ffd435b 100644
--- a/lib/toaster/orm/models.py
+++ b/lib/toaster/orm/models.py
@@ -817,42 +817,20 @@ class LayerIndexLayerSource(LayerSource):
         assert self.apiurl is not None
         from django.db import transaction, connection
 
-        import httplib, urlparse, json
+        import urllib2, urlparse, json
         import os
         proxy_settings = os.environ.get("http_proxy", None)
 
         def _get_json_response(apiurl = self.apiurl):
-            conn = None
             _parsedurl = urlparse.urlparse(apiurl)
             path = _parsedurl.path
-            query = _parsedurl.query
-            def parse_url(url):
-                parsedurl = urlparse.urlparse(url)
-                try:
-                    (host, port) = parsedurl.netloc.split(":")
-                except ValueError:
-                    host = parsedurl.netloc
-                    port = None
-
-                if port is None:
-                    port = 80
-                else:
-                    port = int(port)
-                return (host, port)
 
-            if proxy_settings is None:
-                host, port = parse_url(apiurl)
-                conn = httplib.HTTPConnection(host, port)
-                conn.request("GET", path + "?" + query)
-            else:
-                host, port = parse_url(proxy_settings)
-                conn = httplib.HTTPConnection(host, port)
-                conn.request("GET", apiurl)
-
-            r = conn.getresponse()
-            if r.status != 200:
-                raise Exception("Failed to read " + path + ": %d %s" % (r.status, r.reason))
-            return json.loads(r.read())
+            try:
+                res = urllib2.urlopen(apiurl);
+            except urllib2.URLError,e:
+                raise Exception("Failed to read " + path + ": %d %s" % (e.code, e.reason))
+
+            return json.loads(res.read())
 
         # verify we can get the basic api
         try:
-- 
1.9.1



More information about the toaster mailing list