Fix the vnflcm problem of registering MSB with HTTPS
[vfc/gvnfm/vnflcm.git] / lcm / lcm / pub / utils / restcall.py
index 663f16c..8a9010c 100644 (file)
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+import base64
 import sys
 import traceback
 import logging
-import urllib2
+import urllib.error
 import uuid
 import httplib2
 
-from lcm.pub.config.config import MSB_SERVICE_IP, MSB_SERVICE_PORT
+from lcm.pub.config.config import MSB_BASE_URL
 
 rest_no_auth, rest_oneway_auth, rest_bothway_auth = 0, 1, 2
 HTTP_200_OK, HTTP_201_CREATED, HTTP_204_NO_CONTENT, HTTP_202_ACCEPTED = '200', '201', '204', '202'
@@ -29,7 +30,7 @@ HTTP_404_NOTFOUND, HTTP_403_FORBIDDEN, HTTP_401_UNAUTHORIZED, HTTP_400_BADREQUES
 logger = logging.getLogger(__name__)
 
 
-def call_req(base_url, user, passwd, auth_type, resource, method, content=''):
+def call_req(base_url, user, passwd, auth_type, resource, method, content='', additional_headers={}):
     callid = str(uuid.uuid1())
     logger.debug("[%s]call_req('%s','%s','%s',%s,'%s','%s','%s')" % (
         callid, base_url, user, passwd, auth_type, resource, method, content))
@@ -39,8 +40,10 @@ def call_req(base_url, user, passwd, auth_type, resource, method, content=''):
         full_url = combine_url(base_url, resource)
         headers = {'content-type': 'application/json', 'accept': 'application/json'}
         if user:
-            headers['Authorization'] = 'Basic ' + ('%s:%s' % (user, passwd)).encode("base64")
+            headers['Authorization'] = 'Basic %s' % base64.b64encode(bytes('%s:%s' % (user, passwd), "utf-8")).decode()
         ca_certs = None
+        if additional_headers:
+            headers.update(additional_headers)
         for retry_times in range(3):
             http = httplib2.Http(ca_certs=ca_certs, disable_ssl_certificate_validation=(auth_type == rest_no_auth))
             http.follow_all_redirects = True
@@ -60,7 +63,7 @@ def call_req(base_url, user, passwd, auth_type, resource, method, content=''):
                     ret = [1, "Unable to connect to %s" % full_url, resp_status]
                     continue
                 raise ex
-    except urllib2.URLError as err:
+    except urllib.error.URLError as err:
         ret = [2, str(err), resp_status]
     except Exception as ex:
         logger.error(traceback.format_exc())
@@ -78,7 +81,7 @@ def call_req(base_url, user, passwd, auth_type, resource, method, content=''):
 
 
 def req_by_msb(resource, method, content=''):
-    base_url = "http://%s:%s/" % (MSB_SERVICE_IP, MSB_SERVICE_PORT)
+    base_url = MSB_BASE_URL
     return call_req(base_url, "", "", rest_no_auth, resource, method, content)