fixed ssl context for python < 2.7.9
[unfold.git] / manifoldapi / manifoldapi.py
index b1a1a0c..796d0a5 100644 (file)
@@ -1,9 +1,10 @@
 # Manifold API Python interface
-import copy, xmlrpclib
+import copy, xmlrpclib, ssl
 
 from myslice.configengine import ConfigEngine
 
 from django.contrib import messages
+from django.shortcuts import redirect
 from manifoldresult import ManifoldResult, ManifoldCode, ManifoldException
 from manifold.core.result_value import ResultValue
 
@@ -40,7 +41,13 @@ class ManifoldAPI:
         self.calls = {}
         self.multicall = False
         self.url = ConfigEngine().manifold_url()
-        self.server = xmlrpclib.Server(self.url, verbose=False, allow_none=True)
+        
+        # Manifold uses a self signed certificate
+        # https://www.python.org/dev/peps/pep-0476/
+        if hasattr(ssl, '_create_unverified_context'): 
+            self.server = xmlrpclib.Server(self.url, verbose=False, allow_none=True, context=ssl._create_unverified_context())
+        else :
+            self.server = xmlrpclib.Server(self.url, verbose=False, allow_none=True)
 
     def __repr__ (self): return "ManifoldAPI[%s]"%self.url
 
@@ -152,7 +159,9 @@ def _execute_query(request, query, manifold_api_session_auth):
 def execute_query(request, query):
     if not 'manifold' in request.session or not 'auth' in request.session['manifold']:
         request.session.flush()
-        raise Exception, "User not authenticated"
+        #raise Exception, "User not authenticated"
+        host = request.get_host()
+        return redirect('/')
     manifold_api_session_auth = request.session['manifold']['auth']
     return _execute_query(request, query, manifold_api_session_auth)