summaryrefslogtreecommitdiffstats
path: root/Monitoring/src/main/python/Driver/REST.py
diff options
context:
space:
mode:
Diffstat (limited to 'Monitoring/src/main/python/Driver/REST.py')
-rw-r--r--Monitoring/src/main/python/Driver/REST.py94
1 files changed, 94 insertions, 0 deletions
diff --git a/Monitoring/src/main/python/Driver/REST.py b/Monitoring/src/main/python/Driver/REST.py
new file mode 100644
index 0000000..aed2241
--- /dev/null
+++ b/Monitoring/src/main/python/Driver/REST.py
@@ -0,0 +1,94 @@
+'''
+Created on Feb 4, 2013
+
+@author: Sandor Laki, rewritten for jython
+@organization: ELTE
+@contact: laki@complex.elte.hu
+'''
+
+from Driver import Driver
+from Credential.credentialtypes import UsernamePassword
+import urllib2, base64
+
+from javax.net.ssl import TrustManager, X509TrustManager
+from jarray import array
+from javax.net.ssl import SSLContext
+
+class TrustAllX509TrustManager(X509TrustManager):
+ def checkClientTrusted(self, chain, auth):
+ pass
+
+ def checkServerTrusted(self, chain, auth):
+ pass
+
+ def getAcceptedIssuers(self):
+ return None
+
+# It is not threadsafe, since setDefault is a global function...
+def setSSLTrusted():
+ trust_managers = array([TrustAllX509TrustManager()], TrustManager)
+ TRUST_ALL_CONTEXT = SSLContext.getInstance("SSL")
+ TRUST_ALL_CONTEXT.init(None, trust_managers, None)
+ DEFAULT_CONTEXT = SSLContext.getDefault()
+ SSLContext.setDefault(TRUST_ALL_CONTEXT)
+
+class RESTDriver(Driver):
+ '''
+ @summary: implements REST driver to fetch using http GET
+ @cvar timeout: timeout of connection
+ @type timeout: float
+ @cvar cache: a cache directory
+ @type cache: str
+ @ivar url: a default document locator to be reused
+ @type url: str
+ @ivar proxy: an interface to the http server
+ @type proxy: httplib2.Http
+ '''
+ timeout = 10
+
+ def __init__(self, url, credential = None, validate_ssl = False):
+ '''
+ @summary: initializes a proxy to the http service and saves a default document locator
+ @param url: the default document locator
+ @type url: str
+ @param credential: an authentication secret
+ @type credential: L{Credential} or None
+ @param validate_ssl: whether to apply strick certificate validation, default is False
+ @type validate_ssl: bool
+ '''
+ self.url = url
+ self.proxy = urllib2.Request(self.url)
+ if isinstance(credential, UsernamePassword):
+ base64string = base64.encodestring('%s:%s' % (credential.username, credential.password)).replace('\n', '')
+ self.proxy.add_header("Authorization", "Basic %s" % base64string)
+# self.proxy = Http(cache = self.cache, timeout = self.timeout)
+# self.proxy.disable_ssl_certificate_validation = not validate_ssl
+# if isinstance(credential, UsernamePassword):
+# # use password authentication
+# self.proxy.add_credentials(credential.username, credential.password)
+
+ def fetch(self, url = None):
+ '''
+ @summary: retrieve the document
+ @param url: the document locator, if not present the default is used
+ @type url: str or None
+ @return: the remote document
+ @rtype: str or None
+ @note: if the remote content cached is not changed, None is returned
+ '''
+ if url is None:
+ url = self.url
+ try:
+ resp = urllib2.urlopen(self.proxy)
+ return resp.read()
+ except Exception, e:
+ print "Error: %s" % e
+ return None
+# status, response = self.proxy.request(uri = url, method = "GET")
+# if status.status == 200:
+# return response
+# if status.status == 304:
+# self.logger.warning("remote content @ %s was not changed" % url)
+# return None
+# self.logger.error("%s -- retrieving @%s failed: %s" % (status, url, response))
+# return None