Add basic auth header 77/116477/11
authorxuegao <xue.gao@intl.att.com>
Fri, 18 Dec 2020 09:37:23 +0000 (10:37 +0100)
committerXue Gao <xue.gao@intl.att.com>
Tue, 19 Jan 2021 15:32:33 +0000 (15:32 +0000)
Add basic auth header for sdc-backend-init python scripts.

Issue-ID: OJSI-273
Signed-off-by: xuegao <xue.gao@intl.att.com>
Change-Id: I3559d5792509db0f65b202a731545083c7c91c96
Signed-off-by: xuegao <xue.gao@intl.att.com>
19 files changed:
asdctool/src/main/resources/config/configuration.yaml
catalog-be/sdc-backend-init/chef-repo/cookbooks/sdc-catalog-be-setup/attributes/default.rb
catalog-be/sdc-backend-init/chef-repo/cookbooks/sdc-catalog-be-setup/recipes/1_create_consumer_and_user.rb
catalog-be/sdc-backend-init/chef-repo/cookbooks/sdc-catalog-be-setup/recipes/2_check_Backend.rb
catalog-be/sdc-backend-init/chef-repo/cookbooks/sdc-catalog-be-setup/recipes/3_import_Normatives.rb
catalog-be/src/main/docker/backend/chef-repo/cookbooks/sdc-catalog-be/attributes/default.rb
catalog-be/src/main/docker/backend/chef-repo/cookbooks/sdc-catalog-be/templates/default/BE-configuration.yaml.erb
catalog-be/src/main/resources/scripts/sdcBePy/common/healthCheck.py
catalog-be/src/main/resources/scripts/sdcBePy/common/normative/toscaElements.py
catalog-be/src/main/resources/scripts/sdcBePy/common/normative/toscaTypes.py
catalog-be/src/main/resources/scripts/sdcBePy/common/sdcBeProxy.py
catalog-be/src/main/resources/scripts/sdcBePy/consumers/run.py
catalog-be/src/main/resources/scripts/sdcBePy/tosca/imports/runNormativeElement.py
catalog-be/src/main/resources/scripts/sdcBePy/tosca/main.py
catalog-be/src/main/resources/scripts/sdcBePy/users/run.py
catalog-be/src/test/resources/config/catalog-be/configuration.yaml
integration-tests/pom.xml
openecomp-be/dist/sdc-onboard-backend-docker/artifacts/chef-repo/cookbooks/sdc-onboard-backend/attributes/default.rb
openecomp-be/dist/sdc-onboard-backend-docker/artifacts/chef-repo/cookbooks/sdc-onboard-backend/templates/default/configuration.yaml.erb

index 78869a7..5009305 100644 (file)
@@ -88,6 +88,12 @@ neo4j:
     user: neo4j
     password: "12345"
 
+basicAuth:
+  enabled: false
+  userName: test
+  userPass: test
+  excludedUrls:
+
 cassandraConfig:
     cassandraHosts: [192.168.33.10]
     cassandraPort: 9042
index 68cfcab..5585bc0 100644 (file)
@@ -1,3 +1,4 @@
+require 'base64'
 if node['disableHttp']
   protocol = "https"
   https_flag = "--https"
@@ -15,9 +16,21 @@ else
   user_conf_dir = ""
 end
 
+if node['basic_auth']
+  basic_auth_enabled = node['basic_auth']['enabled']
+  basic_auth_user = node['basic_auth']['user_name']
+  basic_auth_pass = node['basic_auth']['user_pass']
+  if basic_auth_enabled
+    basic_auth_config = "--header " + Base64.encode64(basic_auth_user + ":" + basic_auth_pass)
+  else
+    # set default user configuration file
+    basic_auth_config = ""
+  end
+end
+
 bash "executing-create_users" do
   code <<-EOH
-    sdcuserinit -i #{node['Nodes']['BE']} -p #{be_port} #{user_conf_dir} #{https_flag}
+    sdcuserinit -i #{node['Nodes']['BE']} -p #{be_port} #{basic_auth_config} #{user_conf_dir} #{https_flag}
     rc=$?
     if [[ $rc != 0 ]]; then exit $rc; fi
   EOH
@@ -26,7 +39,7 @@ end
 
 bash "executing-create_consumers" do
   code <<-EOH
-    sdcconsumerinit -i #{node['Nodes']['BE']} -p #{be_port} #{https_flag}
+    sdcconsumerinit -i #{node['Nodes']['BE']} -p #{be_port} #{basic_auth_config} #{https_flag}
     rc=$?
     if [[ $rc != 0 ]]; then exit $rc; fi
   EOH
index e35caed..ffa1fee 100644 (file)
@@ -1,3 +1,4 @@
+require 'base64'
 if node['disableHttp']
   protocol = "https"
   https_flag = "--https"
@@ -8,9 +9,21 @@ else
   be_port = node['BE']['http_port']
 end
 
+if node['basic_auth']
+  basic_auth_enabled = node['basic_auth']['enabled']
+  basic_auth_user = node['basic_auth']['user_name']
+  basic_auth_pass = node['basic_auth']['user_pass']
+  if basic_auth_enabled
+    basic_auth_config = "--header " + Base64.encode64(basic_auth_user + ":" + basic_auth_pass)
+  else
+    # set default user configuration file
+    basic_auth_config = ""
+  end
+end
+
 bash "executing-check_backend_health" do
    code <<-EOH
-     sdccheckbackend -i #{node['Nodes']['BE']} -p #{be_port} #{https_flag}
+     sdccheckbackend -i #{node['Nodes']['BE']} -p #{be_port} #{basic_auth_config} #{https_flag}
      rc=$?
      if [[ $rc != 0 ]]; then exit $rc; fi
    EOH
index e9e44c0..04fb25f 100644 (file)
@@ -1,3 +1,4 @@
+require 'base64'
 be_ip=node['Nodes'][:BE]
 
 if node['disableHttp']
@@ -10,6 +11,17 @@ else
   param="-i #{be_ip} -p #{be_port}"
 end
 
+if node['basic_auth']
+  basic_auth_enabled = node['basic_auth']['enabled']
+  basic_auth_user = node['basic_auth']['user_name']
+  basic_auth_pass = node['basic_auth']['user_pass']
+  if basic_auth_enabled
+    basic_auth_config = "--header " + Base64.encode64(basic_auth_user + ":" + basic_auth_pass)
+  else
+    # set default user configuration file
+    basic_auth_config = ""
+  end
+end
 cookbook_file "/var/tmp/normatives.tar.gz" do
   source "normatives.tar.gz"
 end
@@ -25,7 +37,7 @@ bash "executing-import_Normatives" do
     # add --debug to the sdcinit command to enable debug
 
     cd /var/tmp/normatives/import/tosca
-    sdcinit #{param} > /var/lib/jetty/logs/init.log
+    sdcinit #{param} #{basic_auth_config} > /var/lib/jetty/logs/init.log
     rc=$?
     if [[ $rc != 0 ]]; then exit $rc; fi
 
index 40411f2..614433c 100644 (file)
@@ -28,7 +28,7 @@ default['DCAE_BE_VIP'] = "dcae-be"
 default['basic_auth']['enabled'] = false
 default['basic_auth'][:user_name] = "testName"
 default['basic_auth'][:user_pass] = "testPass"
-default['basic_auth']['excludedUrls'] = "/sdc2/rest/healthCheck,/sdc2/rest/v1/user,/sdc2/rest/v1/user/jh0003,/sdc2/rest/v1/screen,/sdc2/rest/v1/consumers,/sdc2/rest/v1/catalog/uploadType/datatypes,/sdc2/rest/v1/catalog/upload/multipart"
+default['basic_auth']['excludedUrls'] = "/sdc2/rest/healthCheck"
 
 #Cassandra
 default['cassandra']['cassandra_port'] = 9042
index 1e1888e..e8d2ece 100644 (file)
@@ -99,7 +99,7 @@ basicAuth:
   enabled: <%= @basic_auth_flag %>
   userName: <%= @user_name %>
   userPass: <%= @user_pass %>
-  excludedUrls: "/sdc2/rest/healthCheck,/sdc2/rest/v1/user,/sdc2/rest/v1/user/jh0003,/sdc2/rest/v1/screen,/sdc2/rest/v1/consumers,/sdc2/rest/v1/catalog/uploadType/datatypes,/sdc2/rest/v1/catalog/upload/multipart,/sdc2/rest/v1/catalog/uploadType/capability,/sdc2/rest/v1/catalog/uploadType/relationship,/sdc2/rest/v1/catalog/uploadType/interfaceLifecycle,/sdc2/rest/v1/catalog/uploadType/categories,/sdc2/rest/v1/catalog/uploadType/grouptypes,/sdc2/rest/v1/catalog/uploadType/policytypes,/sdc2/rest/v1/catalog/uploadType/annotationtypes"
+  excludedUrls: "/sdc2/rest/healthCheck"
 
 cassandraConfig:
     cassandraHosts: [<%= @cassandra_ip %>]
index c99db5b..a0acc90 100644 (file)
@@ -12,9 +12,9 @@ from sdcBePy.common.sdcBeProxy import SdcBeProxy
 colors = BColors()
 
 
-def check_backend(sdc_be_proxy=None, reply_append_count=1, be_host=None, be_port=None, scheme=None, debug=False):
+def check_backend(sdc_be_proxy=None, reply_append_count=1, be_host=None, be_port=None, header=None, scheme=None, debug=False):
     if sdc_be_proxy is None:
-        sdc_be_proxy = SdcBeProxy(be_host, be_port, scheme, debug=debug)
+        sdc_be_proxy = SdcBeProxy(be_host, be_port, header, scheme, debug=debug)
 
     for i in range(1, reply_append_count + 1):
         if sdc_be_proxy.check_backend() == 200:
@@ -28,9 +28,9 @@ def check_backend(sdc_be_proxy=None, reply_append_count=1, be_host=None, be_port
     return False
 
 
-def run(be_host, be_port, protocol):
+def run(be_host, be_port, header, protocol):
     if not check_backend(reply_append_count=properties.retry_attempts, be_host=be_host,
-                         be_port=be_port, scheme=protocol):
+                         be_port=be_port, header=header, scheme=protocol):
         print('[ERROR]: ' + time.strftime('%Y/%m/%d %H:%M:%S') + colors.FAIL + ' Backend is DOWN :-(' + colors.END_C)
         sys.exit()
 
@@ -40,12 +40,13 @@ def get_args():
 
     parser.add_argument('-i', '--ip', required=True)
     parser.add_argument('-p', '--port', required=True)
+    parser.add_argument('--header')
     parser.add_argument('--https', action='store_true')
 
     args = parser.parse_args()
 
     init_properties(10, 10)
-    return [args.ip, args.port, 'https' if args.https else 'http']
+    return [args.ip, args.port, args.header, 'https' if args.https else 'http']
 
 
 def main():
index 5cdca0a..5ef3173 100644 (file)
@@ -9,11 +9,11 @@ from sdcBePy.common.errors import ResourceCreationError
 
 
 def process_and_create_normative_element(normative_element,
-                                         scheme=None, be_host=None, be_port=None, admin_user=None, sdc_be_proxy=None,
+                                         scheme=None, be_host=None, be_port=None, header=None, admin_user=None, sdc_be_proxy=None,
                                          debug=False,
                                          exit_on_success=False):
     if sdc_be_proxy is None:
-        sdc_be_proxy = SdcBeProxy(be_host, be_port, scheme, admin_user, debug=debug)
+        sdc_be_proxy = SdcBeProxy(be_host, be_port, header, scheme, admin_user, debug=debug)
 
     file_dir, url_suffix, element_name, element_from_name, with_metadata = normative_element.get_parameters()
     _create_normative_element(sdc_be_proxy,
index 5d64f44..97fb2d1 100644 (file)
@@ -9,13 +9,13 @@ from sdcBePy.common.sdcBeProxy import SdcBeProxy
 
 
 def process_and_create_normative_types(normative_type,
-                                       scheme=None, be_host=None, be_port=None, admin_user=None,
+                                       scheme=None, be_host=None, be_port=None, header=None, admin_user=None,
                                        sdc_be_proxy=None,
                                        update_version=False,
                                        debug=False,
                                        exit_on_success=False):
     if sdc_be_proxy is None:
-        sdc_be_proxy = SdcBeProxy(be_host, be_port, scheme, admin_user, debug=debug)
+        sdc_be_proxy = SdcBeProxy(be_host, be_port, header, scheme, admin_user, debug=debug)
 
     file_dir, normative_type_list = normative_type.get_parameters()
 
index d9aa260..169979a 100755 (executable)
@@ -15,21 +15,22 @@ class SdcBeProxy:
     BODY_SEPARATOR = "\r\n\r\n"
     CHARTSET = 'UTF-8'
 
-    def __init__(self, be_ip, be_port, scheme, user_id="jh0003",
+    def __init__(self, be_ip, be_port, header, scheme, user_id="jh0003",
                  debug=False, connector=None):
         if not check_arguments_not_none(be_ip, be_port, scheme, user_id):
             raise AttributeError("The be_host, be_port, scheme or admin_user are missing")
         url = get_url(be_ip, be_port, scheme)
         self.con = connector if connector \
-            else CurlConnector(url, user_id, scheme=scheme, debug=debug)
+            else CurlConnector(url, user_id, header, scheme=scheme, debug=debug)
 
     def check_backend(self):
         return self.con.get('/sdc2/rest/v1/user/jh0003')
 
     def check_user(self, user_name):
-        return self.con.get("/sdc2/rest/v1/user/" + user_name)
+          return self.con.get("/sdc2/rest/v1/user" + user_name)
 
     def create_user(self, first_name, last_name, user_id, email, role):
+
         return self.con.post('/sdc2/rest/v1/user', json.dumps({
             'firstName': first_name,
             'lastName': last_name,
@@ -39,10 +40,10 @@ class SdcBeProxy:
         }))
 
     def check_consumer(self, consumer_name):
-        return self.con.get("/sdc2/rest/v1/consumers/" + consumer_name)
+        return self.con.get("/sdc2/rest/v1/consumers" + consumer_name)
 
     def create_consumer(self, consumer_name, slat, password):
-        return self.con.post("/sdc2/rest/v1/consumers/", json.dumps({
+        return self.con.post("/sdc2/rest/v1/consumers", json.dumps({
             'consumerName': consumer_name,
             'consumerSalt': slat,
             'consumerPassword': password
@@ -67,7 +68,7 @@ class CurlConnector:
     CONTENT_TYPE_HEADER = "Content-Type: application/json"
     ACCEPT_HEADER = "Accept: application/json; charset=UTF-8"
 
-    def __init__(self, url, user_id_header, buffer=None, scheme="http", debug=False):
+    def __init__(self, url, user_id_header, header, buffer=None, scheme="http", debug=False):
         self.c = pycurl.Curl()
         self.c.setopt(pycurl.HEADER, True)
 
@@ -82,6 +83,11 @@ class CurlConnector:
         if not buffer:
             self.buffer = BytesIO()
 
+        if header is None:
+            self.basicauth_header = ""
+        else:
+            self.basicauth_header = "Authorization: Basic " + header
+
         self.url = url
         self._check_schema(scheme)
 
@@ -90,7 +96,9 @@ class CurlConnector:
             self.c.setopt(pycurl.URL, self.url + path)
             self.c.setopt(pycurl.HTTPHEADER, [self.user_header,
                                               CurlConnector.CONTENT_TYPE_HEADER,
-                                              CurlConnector.ACCEPT_HEADER])
+                                              CurlConnector.ACCEPT_HEADER,
+                                              self.basicauth_header])
+
 
             if with_buffer:
                 write = self.buffer.write if not buffer else buffer.write
@@ -105,9 +113,11 @@ class CurlConnector:
         try:
             self.c.setopt(pycurl.URL, self.url + path)
             self.c.setopt(pycurl.POST, 1)
+
             self.c.setopt(pycurl.HTTPHEADER, [self.user_header,
-                                              CurlConnector.CONTENT_TYPE_HEADER,
-                                              CurlConnector.ACCEPT_HEADER])
+                                           CurlConnector.CONTENT_TYPE_HEADER,
+                                           CurlConnector.ACCEPT_HEADER,
+                                           self.basicauth_header])
 
             self.c.setopt(pycurl.POSTFIELDS, data)
 
@@ -122,7 +132,9 @@ class CurlConnector:
         try:
             self.c.setopt(pycurl.URL, self.url + path)
             self.c.setopt(pycurl.POST, 1)
-            self.c.setopt(pycurl.HTTPHEADER, [self.user_header])
+            self.c.setopt(pycurl.HTTPHEADER, [self.user_header,
+                                           self.basicauth_header])
+
 
             self.c.setopt(pycurl.HTTPPOST, post_body)
 
index 1fb7662..8ea1d1c 100644 (file)
@@ -7,8 +7,8 @@ from sdcBePy.consumers.models.consumerCandidateList import get_consumers
 from sdcBePy.users.run import colors
 
 
-def be_consumers_init(be_ip, be_port, protocol, consumer_candidate_list):
-    sdc_be_proxy = SdcBeProxy(be_ip, be_port, protocol)
+def be_consumers_init(be_ip, be_port, header, protocol, consumer_candidate_list):
+    sdc_be_proxy = SdcBeProxy(be_ip, be_port, header, protocol)
     if check_backend(sdc_be_proxy, properties.retry_attempts):
         for consumer in consumer_candidate_list:
             if sdc_be_proxy.check_user(consumer.consumer_name) != 200:
@@ -28,8 +28,8 @@ def be_consumers_init(be_ip, be_port, protocol, consumer_candidate_list):
 
 
 def main():
-    be_ip, be_port, protocol = get_args()
-    be_consumers_init(be_ip, be_port, protocol, get_consumers())
+    be_ip, be_port, header, protocol = get_args()
+    be_consumers_init(be_ip, be_port, header, protocol, get_consumers())
 
 
 if __name__ == '__main__':
index 1bdb150..ce5eca4 100644 (file)
@@ -9,10 +9,10 @@ from sdcBePy.tosca.models.normativeElementsList import get_capability, get_data,
 
 
 def run(candidate):
-    scheme, be_host, be_port, admin_user, _, debug = get_args()
+    scheme, be_host, be_port, header, admin_user, _, debug = get_args()
     try:
         process_and_create_normative_element(candidate,
-                                             scheme, be_host, be_port, admin_user,
+                                             scheme, be_host, be_port, header, admin_user,
                                              debug=debug,
                                              exit_on_success=True)
     except AttributeError:
index 565ce7e..78032a4 100644 (file)
@@ -11,7 +11,7 @@ from sdcBePy.common.sdcBeProxy import SdcBeProxy
 def usage():
     print(sys.argv[0],
           '[-s <scheme> | --scheme=<scheme> ] [-i <be host> | --ip=<be host>] [-p <be port> | '
-          '--port=<be port> ] [-u <user userId> | --user=<user userId> ] [-d <true|false> | '
+          '--port=<be port> ] --header=<header> ] [-u <user userId> | --user=<user userId> ] [-d <true|false> | '
           '--debug=<true|false>] [-v <true|false> | --updateVersion=<true|false>]')
 
 
@@ -28,6 +28,7 @@ def parse_param():
 
     parser.add_argument('--ip', "-i")
     parser.add_argument('--port', "-p")
+    parser.add_argument('--header')
     parser.add_argument('--adminUser', "-a")
     parser.add_argument('--https', action='store_true')
     parser.add_argument('--updateVersion', action='store_false')
@@ -36,14 +37,14 @@ def parse_param():
     args, _ = parser.parse_known_args()
 
     return [args.conf, 'https' if args.https else 'http',
-            args.ip, args.port, args.adminUser, args.updateVersion,
+            args.ip, args.port, args.header, args.adminUser, args.updateVersion,
             args.debug]
 
 
 def get_args():
     print('Number of arguments:', len(sys.argv), 'arguments.')
 
-    conf_path, scheme, be_host, be_port, admin_user, update_version, debug = parse_param()
+    conf_path, scheme, be_host, be_port, header, admin_user, update_version, debug = parse_param()
     defaults = load_be_config(conf_path)
 
     # Use defaults if param not provided by the user
@@ -54,22 +55,26 @@ def get_args():
     if admin_user is None:
         admin_user = defaults["adminUser"]
 
-    print('scheme =', scheme, ',be host =', be_host, ', be port =', be_port, ', user =', admin_user,
+    if header is None:
+        print('scheme =', scheme, ',be host =', be_host, ', be port =', be_port, ', user =', admin_user,
           ', debug =', debug, ', update_version =', update_version)
+    else:
+        print('scheme =', scheme, ',be host =', be_host, ', be port =', be_port, ', header =', header, ', user =', admin_user,
+              ', debug =', debug, ', update_version =', update_version)
 
     init_properties(defaults["retryTime"], defaults["retryAttempt"], defaults["resourceLen"])
-    return scheme, be_host, be_port, admin_user, update_version, debug
+    return scheme, be_host, be_port, header, admin_user, update_version, debug
 
 
 def parse_and_create_proxy():
-    scheme, be_host, be_port, admin_user, update_version, debug = get_args()
+    scheme, be_host, be_port, header, admin_user, update_version, debug = get_args()
 
     if debug is False:
         print('Disabling debug mode')
         logger.debugFlag = debug
 
     try:
-        sdc_be_proxy = SdcBeProxy(be_host, be_port, scheme, admin_user, debug=debug)
+        sdc_be_proxy = SdcBeProxy(be_host, be_port, header, scheme, admin_user, debug=debug)
     except AttributeError:
         usage()
         sys.exit(3)
index 1518c2f..56640db 100755 (executable)
@@ -19,8 +19,8 @@ def load_users(conf_path):
         return json.load(f)
 
 
-def be_user_init(be_ip, be_port, protocol, conf_path):
-    sdc_be_proxy = SdcBeProxy(be_ip, be_port, protocol)
+def be_user_init(be_ip, be_port, header, protocol, conf_path):
+    sdc_be_proxy = SdcBeProxy(be_ip, be_port, header, protocol)
     if check_backend(sdc_be_proxy, properties.retry_attempts):
         users = load_users(conf_path)
         for user in users:
@@ -49,6 +49,7 @@ def get_args():
 
     parser.add_argument('-i', '--ip', required=True)
     parser.add_argument('-p', '--port', required=True)
+    parser.add_argument('--header')
     parser.add_argument('--https', action='store_true')
     path = os.path.dirname(__file__)
     parser.add_argument('--conf', default=os.path.join(path, 'data', 'users.json'))
@@ -56,7 +57,7 @@ def get_args():
     args = parser.parse_args()
 
     init_properties(10, 10)
-    return [args.ip, args.port, 'https' if args.https else 'http', args.conf]
+    return [args.ip, args.port, args.header, 'https' if args.https else 'http', args.conf]
 
 
 def main():
index 7f75646..3ca0682 100644 (file)
@@ -82,6 +82,12 @@ neo4j:
     user: neo4j
     password: "12345"
 
+basicAuth:
+  enabled: false
+  userName: test
+  userPass: test
+  excludedUrls:
+
 cassandraConfig:
     cassandraHosts: ['localhost']
     cassandraPort: 9042
index 76b6b03..9b9569b 100644 (file)
@@ -622,7 +622,7 @@ limitations under the License.
                                     </bind>
                                 </volumes>
                                 <wait>
-                                    <time>600000</time>
+                                    <time>660000</time>
                                     <log>Chef Client finished</log>
                                 </wait>
                                 <network>
index 2018a83..761edc9 100644 (file)
@@ -21,10 +21,10 @@ default['cassandra']['socket_connect_timeout'] = 20000
 default['cassandra']['janusgraph_connection_timeout'] = 10000
 
 #Basicauth
-default['basic_auth']['enabled'] = false
-default['basic_auth'][:user_name] = "userName"
-default['basic_auth'][:user_pass] = "userPass"
-default['basic_auth']['excludedUrls'] = ""
+default['basic_auth']['enabled'] = true
+default['basic_auth'][:user_name] = "testName"
+default['basic_auth'][:user_pass] = "testPass"
+default['basic_auth']['excludedUrls'] = "/v1.0/healthcheck"
 
 #ExternalTesting
 default['EXTTEST']['ep1_config'] = "vtp,VTP,true,http://refrepo:8702/onapapi/vnfsdk-marketplace,onap.*"