ソースを参照

HUE-8336 [sqoop] Can't disable certificate verification

Ivan Dzikovsky 7 年 前
コミット
166c53d6d3

+ 1 - 1
apps/sqoop/src/sqoop/api/connector.py

@@ -43,7 +43,7 @@ def get_connectors(request):
     'connectors': []
   }
   try:
-    c = client.SqoopClient(conf.SERVER_URL.get(), request.user.username, request.LANGUAGE_CODE)
+    c = client.SqoopClient(conf.SERVER_URL.get(), request.user.username, request.LANGUAGE_CODE, ssl_cert_ca_verify=conf.SSL_CERT_CA_VERIFY.get())
     response['connectors'] = list_to_dict(c.get_connectors())
   except RestException, e:
     response.update(handle_rest_exception(e, _('Could not get connectors.')))

+ 4 - 4
apps/sqoop/src/sqoop/api/decorators.py

@@ -37,7 +37,7 @@ def get_connector_or_exception(exception_class=PopupException):
   def inner(view_func):
     def decorate(request, connector_id, *args, **kwargs):
       try:
-        c = client.SqoopClient(conf.SERVER_URL.get(), request.user.username, request.LANGUAGE_CODE)
+        c = client.SqoopClient(conf.SERVER_URL.get(), request.user.username, request.LANGUAGE_CODE, ssl_cert_ca_verify=conf.SSL_CERT_CA_VERIFY.get())
         connector = c.get_connector(int(connector_id))
       except RestException, e:
         handle_rest_exception(e, _('Could not get connector.'))
@@ -50,7 +50,7 @@ def get_link_or_exception(exception_class=PopupException):
   def inner(view_func):
     def decorate(request, link_id, *args, **kwargs):
       try:
-        c = client.SqoopClient(conf.SERVER_URL.get(), request.user.username, request.LANGUAGE_CODE)
+        c = client.SqoopClient(conf.SERVER_URL.get(), request.user.username, request.LANGUAGE_CODE, ssl_cert_ca_verify=conf.SSL_CERT_CA_VERIFY.get())
         link = c.get_link(int(link_id))
       except RestException, e:
         handle_rest_exception(e, _('Could not get link.'))
@@ -63,7 +63,7 @@ def get_job_or_exception(exception_class=PopupException):
   def inner(view_func):
     def decorate(request, job_id, *args, **kwargs):
       try:
-        c = client.SqoopClient(conf.SERVER_URL.get(), request.user.username, request.LANGUAGE_CODE)
+        c = client.SqoopClient(conf.SERVER_URL.get(), request.user.username, request.LANGUAGE_CODE, ssl_cert_ca_verify=conf.SSL_CERT_CA_VERIFY.get())
         job = c.get_job(int(job_id))
       except RestException, e:
         handle_rest_exception(e, _('Could not get job.'))
@@ -76,7 +76,7 @@ def get_submission_or_exception(exception_class=PopupException):
   def inner(view_func):
     def decorate(request, submission_id, *args, **kwargs):
       try:
-        c = client.SqoopClient(conf.SERVER_URL.get(), request.user.username, request.LANGUAGE_CODE)
+        c = client.SqoopClient(conf.SERVER_URL.get(), request.user.username, request.LANGUAGE_CODE, ssl_cert_ca_verify=conf.SSL_CERT_CA_VERIFY.get())
         submission = c.get_submission(int(submission_id))
       except RestException, e:
         handle_rest_exception(e, _('Could not get submission.'))

+ 1 - 1
apps/sqoop/src/sqoop/api/driver.py

@@ -42,7 +42,7 @@ def driver(request):
   }
   if request.method == 'GET':
     try:
-      c = client.SqoopClient(conf.SERVER_URL.get(), request.user.username, request.LANGUAGE_CODE)
+      c = client.SqoopClient(conf.SERVER_URL.get(), request.user.username, request.LANGUAGE_CODE, ssl_cert_ca_verify=conf.SSL_CERT_CA_VERIFY.get())
       response['driver'] = c.get_driver().to_dict()
     except RestException, e:
       response.update(handle_rest_exception(e, _('Could not get driver.')))

+ 8 - 8
apps/sqoop/src/sqoop/api/job.py

@@ -45,7 +45,7 @@ def get_jobs(request):
     'jobs': []
   }
   try:
-    c = client.SqoopClient(conf.SERVER_URL.get(), request.user.username, request.LANGUAGE_CODE)
+    c = client.SqoopClient(conf.SERVER_URL.get(), request.user.username, request.LANGUAGE_CODE, ssl_cert_ca_verify=conf.SSL_CERT_CA_VERIFY.get())
     jobs = c.get_jobs()
     response['jobs'] = list_to_dict(jobs)
   except RestException, e:
@@ -70,7 +70,7 @@ def create_job(request):
   job = client.Job.from_dict(d)
 
   try:
-    c = client.SqoopClient(conf.SERVER_URL.get(), request.user.username, request.LANGUAGE_CODE)
+    c = client.SqoopClient(conf.SERVER_URL.get(), request.user.username, request.LANGUAGE_CODE, ssl_cert_ca_verify=conf.SSL_CERT_CA_VERIFY.get())
     response['job'] = c.create_job(job).to_dict()
   except RestException, e:
     response.update(handle_rest_exception(e, _('Could not create job.')))
@@ -96,7 +96,7 @@ def update_job(request, job):
   job.update_from_dict(json.loads(smart_str(request.POST.get('job'))))
 
   try:
-    c = client.SqoopClient(conf.SERVER_URL.get(), request.user.username, request.LANGUAGE_CODE)
+    c = client.SqoopClient(conf.SERVER_URL.get(), request.user.username, request.LANGUAGE_CODE, ssl_cert_ca_verify=conf.SSL_CERT_CA_VERIFY.get())
     response['job'] = c.update_job(job).to_dict()
   except RestException, e:
     response.update(handle_rest_exception(e, _('Could not update job.')))
@@ -145,7 +145,7 @@ def job_clone(request, job):
   job.id = -1
   job.name = '%s-copy' % job.name
   try:
-    c = client.SqoopClient(conf.SERVER_URL.get(), request.user.username, request.LANGUAGE_CODE)
+    c = client.SqoopClient(conf.SERVER_URL.get(), request.user.username, request.LANGUAGE_CODE, ssl_cert_ca_verify=conf.SSL_CERT_CA_VERIFY.get())
     response['job'] = c.create_job(job).to_dict()
   except RestException, e:
     response.update(handle_rest_exception(e, _('Could not clone job.')))
@@ -167,7 +167,7 @@ def job_delete(request, job):
   }
 
   try:
-    c = client.SqoopClient(conf.SERVER_URL.get(), request.user.username, request.LANGUAGE_CODE)
+    c = client.SqoopClient(conf.SERVER_URL.get(), request.user.username, request.LANGUAGE_CODE, ssl_cert_ca_verify=conf.SSL_CERT_CA_VERIFY.get())
     c.delete_job(job)
   except RestException, e:
     response.update(handle_rest_exception(e, _('Could not delete job.')))
@@ -189,7 +189,7 @@ def job_start(request, job):
   }
 
   try:
-    c = client.SqoopClient(conf.SERVER_URL.get(), request.user.username, request.LANGUAGE_CODE)
+    c = client.SqoopClient(conf.SERVER_URL.get(), request.user.username, request.LANGUAGE_CODE, ssl_cert_ca_verify=conf.SSL_CERT_CA_VERIFY.get())
     response['submission'] = c.start_job(job).to_dict()
   except RestException, e:
     response.update(handle_rest_exception(e, _('Could not start job.')))
@@ -211,7 +211,7 @@ def job_stop(request, job):
   }
 
   try:
-    c = client.SqoopClient(conf.SERVER_URL.get(), request.user.username, request.LANGUAGE_CODE)
+    c = client.SqoopClient(conf.SERVER_URL.get(), request.user.username, request.LANGUAGE_CODE, ssl_cert_ca_verify=conf.SSL_CERT_CA_VERIFY.get())
     response['submission'] = c.stop_job(job).to_dict()
   except RestException, e:
     response.update(handle_rest_exception(e, _('Could not stop job.')))
@@ -233,7 +233,7 @@ def job_status(request, job):
   }
 
   try:
-    c = client.SqoopClient(conf.SERVER_URL.get(), request.user.username, request.LANGUAGE_CODE)
+    c = client.SqoopClient(conf.SERVER_URL.get(), request.user.username, request.LANGUAGE_CODE, ssl_cert_ca_verify=conf.SSL_CERT_CA_VERIFY.get())
     response['submission'] = c.get_job_status(job).to_dict()
   except RestException, e:
     response.update(handle_rest_exception(e, _('Could not get job status.')))

+ 5 - 5
apps/sqoop/src/sqoop/api/link.py

@@ -45,7 +45,7 @@ def get_links(request):
     'links': []
   }
   try:
-    c = client.SqoopClient(conf.SERVER_URL.get(), request.user.username, request.LANGUAGE_CODE)
+    c = client.SqoopClient(conf.SERVER_URL.get(), request.user.username, request.LANGUAGE_CODE, ssl_cert_ca_verify=conf.SSL_CERT_CA_VERIFY.get())
     response['links'] = list_to_dict(c.get_links())
   except RestException, e:
     response.update(handle_rest_exception(e, _('Could not get links.')))
@@ -66,7 +66,7 @@ def create_link(request):
   link = client.Link.from_dict(d)
 
   try:
-    c = client.SqoopClient(conf.SERVER_URL.get(), request.user.username, request.LANGUAGE_CODE)
+    c = client.SqoopClient(conf.SERVER_URL.get(), request.user.username, request.LANGUAGE_CODE, ssl_cert_ca_verify=conf.SSL_CERT_CA_VERIFY.get())
     response['link'] = c.create_link(link).to_dict()
   except RestException, e:
     response.update(handle_rest_exception(e, _('Could not create link.')))
@@ -89,7 +89,7 @@ def update_link(request, link):
   link.update_from_dict(json.loads(smart_str(request.POST.get('link'))))
 
   try:
-    c = client.SqoopClient(conf.SERVER_URL.get(), request.user.username, request.LANGUAGE_CODE)
+    c = client.SqoopClient(conf.SERVER_URL.get(), request.user.username, request.LANGUAGE_CODE, ssl_cert_ca_verify=conf.SSL_CERT_CA_VERIFY.get())
     response['link'] = c.update_link(link).to_dict()
   except RestException, e:
     response.update(handle_rest_exception(e, _('Could not update link.')))
@@ -138,7 +138,7 @@ def link_clone(request, link):
   link.id = -1
   link.name = '%s-copy' % link.name
   try:
-    c = client.SqoopClient(conf.SERVER_URL.get(), request.user.username, request.LANGUAGE_CODE)
+    c = client.SqoopClient(conf.SERVER_URL.get(), request.user.username, request.LANGUAGE_CODE, ssl_cert_ca_verify=conf.SSL_CERT_CA_VERIFY.get())
     response['link'] = c.create_link(link).to_dict()
   except RestException, e:
     response.update(handle_rest_exception(e, _('Could not clone link.')))
@@ -159,7 +159,7 @@ def link_delete(request, link):
   }
 
   try:
-    c = client.SqoopClient(conf.SERVER_URL.get(), request.user.username, request.LANGUAGE_CODE)
+    c = client.SqoopClient(conf.SERVER_URL.get(), request.user.username, request.LANGUAGE_CODE, ssl_cert_ca_verify=conf.SSL_CERT_CA_VERIFY.get())
     c.delete_link(link)
   except RestException, e:
     response.update(handle_rest_exception(e, _('Could not delete link.')))

+ 1 - 1
apps/sqoop/src/sqoop/api/submission.py

@@ -44,7 +44,7 @@ def get_submissions(request):
   }
   status = request.GET.get('status', 'submissions').split(',')
   try:
-    c = client.SqoopClient(conf.SERVER_URL.get(), request.user.username, request.LANGUAGE_CODE)
+    c = client.SqoopClient(conf.SERVER_URL.get(), request.user.username, request.LANGUAGE_CODE, ssl_cert_ca_verify=conf.SSL_CERT_CA_VERIFY.get())
     submissions = c.get_submissions()
     response['submissions'] = list_to_dict(submissions)
   except RestException, e:

+ 3 - 1
apps/sqoop/src/sqoop/client/base.py

@@ -43,7 +43,7 @@ class SqoopClient(object):
   STATUS_GOOD = ('FINE', 'ACCEPTABLE')
   STATUS_BAD = ('UNACCEPTABLE', 'FAILURE_ON_SUBMIT')
 
-  def __init__(self, url, username, language='en'):
+  def __init__(self, url, username, language='en', ssl_cert_ca_verify=False):
     self._url = url
     self._client = HttpClient(self._url, logger=LOG)
     self._root = SqoopResource(self._client)
@@ -54,6 +54,8 @@ class SqoopClient(object):
       self._client.set_kerberos_auth()
     self._security_enabled = has_sqoop_has_security()
 
+    self._client.set_verify(ssl_cert_ca_verify)
+
   def __str__(self):
     return "SqoopClient at %s with security %s" % (self._url, self._security_enabled)
 

+ 9 - 1
apps/sqoop/src/sqoop/conf.py

@@ -19,7 +19,8 @@ import os
 
 from django.utils.translation import ugettext_lazy as _t
 
-from desktop.lib.conf import Config
+from desktop.conf import default_ssl_validate
+from desktop.lib.conf import Config, coerce_bool
 from sqoop.settings import NICE_NAME
 
 
@@ -33,6 +34,13 @@ SQOOP_CONF_DIR = Config(
   default='/etc/sqoop2/conf',
   help=_t("Path to Sqoop2 configuration directory."))
 
+SSL_CERT_CA_VERIFY = Config(
+  key="ssl_cert_ca_verify",
+  help=_t("Choose whether Hue should validate certificates received from the server."),
+  dynamic_default=default_ssl_validate,
+  type=coerce_bool
+)
+
 
 def config_validator(user):
   res = []

+ 3 - 0
desktop/conf.dist/hue.ini

@@ -1226,6 +1226,9 @@
   # Path to configuration directory
   ## sqoop_conf_dir=/etc/sqoop2/conf
 
+  # Choose whether Hue should validate certificates received from the server.
+  ## ssl_cert_ca_verify=true
+
 
 ###########################################################################
 # Settings to configure Proxy

+ 3 - 0
desktop/conf/pseudo-distributed.ini.tmpl

@@ -1228,6 +1228,9 @@
   # Path to configuration directory
   ## sqoop_conf_dir=/etc/sqoop2/conf
 
+  # Choose whether Hue should validate certificates received from the server.
+  ## ssl_cert_ca_verify=true
+
 
 ###########################################################################
 # Settings to configure Proxy