You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sdap.apache.org by ea...@apache.org on 2020/08/06 02:03:27 UTC

[incubator-sdap-nexus] branch cassandra-authentication updated: Add cassandra auth support in doms

This is an automated email from the ASF dual-hosted git repository.

eamonford pushed a commit to branch cassandra-authentication
in repository https://gitbox.apache.org/repos/asf/incubator-sdap-nexus.git


The following commit(s) were added to refs/heads/cassandra-authentication by this push:
     new 095a89f  Add cassandra auth support in doms
095a89f is described below

commit 095a89f818597b1ff4bb2c2eca03dabf4feee5e5
Author: Eamon Ford <ea...@gmail.com>
AuthorDate: Wed Aug 5 19:03:14 2020 -0700

    Add cassandra auth support in doms
---
 .../algorithms/doms/DomsInitialization.py          | 31 ++++++++++++++++++----
 .../algorithms/doms/domsconfig.ini.default         |  4 ++-
 analysis/webservice/webapp.py                      |  2 --
 3 files changed, 29 insertions(+), 8 deletions(-)

diff --git a/analysis/webservice/algorithms/doms/DomsInitialization.py b/analysis/webservice/algorithms/doms/DomsInitialization.py
index 2d429ca..b9ee6f3 100644
--- a/analysis/webservice/algorithms/doms/DomsInitialization.py
+++ b/analysis/webservice/algorithms/doms/DomsInitialization.py
@@ -14,16 +14,18 @@
 # limitations under the License.
 
 
-
 import ConfigParser
 import logging
 
 import pkg_resources
-from cassandra.cluster import Cluster
-from cassandra.policies import TokenAwarePolicy, DCAwareRoundRobinPolicy, WhiteListRoundRobinPolicy
 
+from cassandra.auth import PlainTextAuthProvider
+from cassandra.cluster import Cluster
+from cassandra.policies import (DCAwareRoundRobinPolicy, TokenAwarePolicy,
+                                WhiteListRoundRobinPolicy)
 from webservice.NexusHandler import nexus_initializer
 
+
 @nexus_initializer
 class DomsInitializer:
     def __init__(self):
@@ -35,9 +37,12 @@ class DomsInitializer:
 
         domsconfig = ConfigParser.SafeConfigParser()
         domsconfig.read(DomsInitializer._get_config_files('domsconfig.ini'))
+        domsconfig = self.override_config(domsconfig, config)
 
         cassHost = domsconfig.get("cassandra", "host")
         cassPort = domsconfig.get("cassandra", "port")
+        cassUsername = domsconfig.get("cassandra", "username")
+        cassPassword = domsconfig.get("cassandra", "password")
         cassKeyspace = domsconfig.get("cassandra", "keyspace")
         cassDatacenter = domsconfig.get("cassandra", "local_datacenter")
         cassVersion = int(domsconfig.get("cassandra", "protocol_version"))
@@ -55,13 +60,29 @@ class DomsInitializer:
             dc_policy = WhiteListRoundRobinPolicy([cassHost])
         token_policy = TokenAwarePolicy(dc_policy)
 
-        with Cluster([host for host in cassHost.split(',')], port=int(cassPort), load_balancing_policy=token_policy,
-                     protocol_version=cassVersion) as cluster:
+        if cassUsername and cassPassword:
+            auth_provider = PlainTextAuthProvider(username=cassUsername, password=cassPassword)
+        else:
+            auth_provider = None
+
+        with Cluster([host for host in cassHost.split(',')],
+                     port=int(cassPort),
+                     load_balancing_policy=token_policy,
+                     protocol_version=cassVersion,
+                     auth_provider=auth_provider) as cluster:
             session = cluster.connect()
 
             self.createKeyspace(session, cassKeyspace)
             self.createTables(session)
 
+    def override_config(self, first, second):
+        for section in second.sections():
+            if first.has_section(section):  # only override preexisting section, ignores the other
+                for option in second.options(section):
+                    if second.get(section, option) is not None:
+                        first.set(section, option, second.get(section, option))
+        return first
+
     def createKeyspace(self, session, cassKeyspace):
         log = logging.getLogger(__name__)
         log.info("Verifying DOMS keyspace '%s'" % cassKeyspace)
diff --git a/analysis/webservice/algorithms/doms/domsconfig.ini.default b/analysis/webservice/algorithms/doms/domsconfig.ini.default
index d1814bf..6191f9e 100644
--- a/analysis/webservice/algorithms/doms/domsconfig.ini.default
+++ b/analysis/webservice/algorithms/doms/domsconfig.ini.default
@@ -1,10 +1,12 @@
 [cassandra]
-host=sdap-cassandra
+host=localhost
 port=9042
 keyspace=doms
 local_datacenter=datacenter1
 protocol_version=3
 dc_policy=DCAwareRoundRobinPolicy
+username=
+password=
 
 
 [cassandraDD]
diff --git a/analysis/webservice/webapp.py b/analysis/webservice/webapp.py
index 3ee2f09..d1ada7f 100644
--- a/analysis/webservice/webapp.py
+++ b/analysis/webservice/webapp.py
@@ -126,12 +126,10 @@ if __name__ == "__main__":
                                   tile_service_factory=tile_service_factory,
                                   thread_pool=request_thread_pool)))
 
-
     class VersionHandler(tornado.web.RequestHandler):
         def get(self):
             self.write(pkg_resources.get_distribution("nexusanalysis").version)
 
-
     handlers.append((r"/version", VersionHandler))
 
     if staticEnabled: