From af2a43f946a44bb8c08b59f62199d274f3f1f6a2 Mon Sep 17 00:00:00 2001 From: Vahid Hashemian Date: Tue, 29 Sep 2015 16:15:22 -0700 Subject: [PATCH] Add validation of external resources for CSAR archives Add support for validation of external resources specified in imports, interfaces, and artifacts sections of the main yaml template in CSAR archives. Change-Id: I7dc6875cb8117ca56066552ec7d23ce98621f31d Partially-Implements: blueprint tosca-csar-translation --- toscaparser/prereq/csar.py | 94 ++++++++++++++++++ .../tests/data/CSAR/csar_wordpress.zip | Bin 5964 -> 5967 bytes .../csar_wordpress_invalid_import_path.zip | Bin 0 -> 5971 bytes .../csar_wordpress_invalid_import_url.zip | Bin 0 -> 6043 bytes .../csar_wordpress_invalid_script_path.zip | Bin 0 -> 5969 bytes .../csar_wordpress_invalid_script_url.zip | Bin 0 -> 6043 bytes ...r_wordpress_with_url_import_and_script.zip | Bin 0 -> 6046 bytes .../tosca_single_instance_wordpress.yaml | 16 +-- toscaparser/tests/test_prereq.py | 50 ++++++++++ toscaparser/utils/urlutils.py | 16 +++ 10 files changed, 168 insertions(+), 8 deletions(-) create mode 100644 toscaparser/tests/data/CSAR/csar_wordpress_invalid_import_path.zip create mode 100644 toscaparser/tests/data/CSAR/csar_wordpress_invalid_import_url.zip create mode 100644 toscaparser/tests/data/CSAR/csar_wordpress_invalid_script_path.zip create mode 100644 toscaparser/tests/data/CSAR/csar_wordpress_invalid_script_url.zip create mode 100644 toscaparser/tests/data/CSAR/csar_wordpress_with_url_import_and_script.zip diff --git a/toscaparser/prereq/csar.py b/toscaparser/prereq/csar.py index 6b01951..898931e 100644 --- a/toscaparser/prereq/csar.py +++ b/toscaparser/prereq/csar.py @@ -12,11 +12,14 @@ import os.path import requests +import six import tempfile import yaml import zipfile +from toscaparser.common.exception import URLException from toscaparser.common.exception import ValidationError +from toscaparser.imports import ImportsLoader from toscaparser.utils.gettextutils import _ from toscaparser.utils.urlutils import UrlUtils @@ -93,6 +96,10 @@ class CSAR(object): '"%s" does not exist.') % self.csar_file) raise ValidationError(message=err_msg) + # validate that external references in the main template actually exist + # and are accessible + self._validate_external_references() + def get_metadata(self): """Return the metadata dictionary.""" @@ -148,3 +155,90 @@ class CSAR(object): with zipfile.ZipFile(self.csar_file, "r") as zf: zf.extractall(folder) return folder + + def _validate_external_references(self): + """Extracts files referenced in the main template + + These references are currently supported: + * imports + * interface implementations + * artifacts + """ + temp_dir = self.decompress() + main_tpl_file = self.get_main_template() + main_tpl = self.get_main_template_yaml() + + if 'imports' in main_tpl: + ImportsLoader(main_tpl['imports'], + os.path.join(temp_dir, main_tpl_file)) + + if 'topology_template' not in main_tpl: + return + topology_template = main_tpl['topology_template'] + + if 'node_templates' not in topology_template: + return + node_templates = topology_template['node_templates'] + + for node_template_key in node_templates: + node_template = node_templates[node_template_key] + if 'artifacts' in node_template: + artifacts = node_template['artifacts'] + for artifact_key in artifacts: + artifact = artifacts[artifact_key] + if isinstance(artifact, six.string_types): + self._validate_external_reference(temp_dir, + main_tpl_file, + artifact) + elif isinstance(artifact, dict): + if 'file' in artifact: + self._validate_external_reference(temp_dir, + main_tpl_file, + artifact['file']) + else: + raise ValueError(_('Unexpected artifact definition ' + 'for %s.') % artifact_key) + if 'interfaces' in node_template: + interfaces = node_template['interfaces'] + for interface_key in interfaces: + interface = interfaces[interface_key] + for opertation_key in interface: + operation = interface[opertation_key] + if isinstance(operation, six.string_types): + self._validate_external_reference(temp_dir, + main_tpl_file, + operation, + False) + elif isinstance(operation, dict): + if 'implementation' in operation: + self._validate_external_reference( + temp_dir, main_tpl_file, + operation['implementation']) + + def _validate_external_reference(self, base_dir, tpl_file, resource_file, + raise_exc=True): + """Verify that the external resource exists + + If resource_file is a URL verify that the URL is valid. + If resource_file is a relative path verify that the path is valid + considering base_dir and tpl_file. + Note that in a CSAR resource_file cannot be an absolute path. + """ + if UrlUtils.validate_url(resource_file): + msg = (_('The resource at %s cannot be accessed') % resource_file) + try: + if UrlUtils.url_accessible(resource_file): + return + else: + raise URLException(what=msg) + except Exception: + raise URLException(what=msg) + + if os.path.isfile(os.path.join(base_dir, + os.path.dirname(tpl_file), + resource_file)): + return + + if raise_exc: + raise ValueError(_('The resource %s does not exist.') + % resource_file) diff --git a/toscaparser/tests/data/CSAR/csar_wordpress.zip b/toscaparser/tests/data/CSAR/csar_wordpress.zip index 7889df356cfcbd68816377fc383fd2be29a2161e..5df7b48333a2480cd6f686e339cb0656fd0d009a 100644 GIT binary patch delta 1226 zcmZ9MdoFf9yTyeb4hg&)=Wt2g`?+;x;r4Aqb#q z?*-%Nc^D2n3VL8;70R@_Z{oDN!Y6@RT`hoBGKFIiq}f4971G?`9Ca%U_JTMt3Y7)e zdmMSU5ybbOJWI+#P4p5HB7<%YB3^$V_j$SI!eud(QRY=5sUJ6gT4s%1t)86JPi z7*R97C&Hr*dQX;fe#G|3u4D@w1hsaj{DXdmQJz89t-Ep3_pAU(&OZOJ_wTQOvgWrnd9F!Y9pDs%1&J+2e{c52{NSDB>9Ug}QP^>A(@U zQA+C(NmOOagkFwmR)kApqqvyQU&cSEFYmM>tFq=O2EX;YCQ0(o6q;NLyy(VhJzdXW zf2x|gR5Y1rWG8GWTv^Mjl^0)qNYSpJO_PfS!~7>l@KN=D4By+4@-RE9Jed#EdtZ5I zX@z%n=!%Z%kkHrmT#xG^`zfxo$Nt;?(l9UP7G=Wrk!p9+yli+zY$xmXisfrAzIYvP zVb$vX%TF2?P!n$B8!B57*DFbNo#J#-?VRD+xK7V>QvQn(%aoJaj$18XF>}&W_ix+s zFYBd;@2E3qi_qFRp8e{jCVFn^%_VvqqsH+0RN7+kwzcH$)Ec|<3)125wSt=dywqoE z5U~t3&)-axb`_tnm>P+7xU(zRSn;dg_KTinZtjY**OMcBmf%M7L9TqWk&`{rK$_$~ zKYbrFHx}DCxi&iqy~f(U%5+(^N}!VN4|&Ad9(W{WmK@vQB}WSHc$XHL3o8@DtsBm_ zJDO-13+Uc7ue~n6Cvge4%954skhX&dxGRHS!;=DW?yR%~d8Xg~ikm{pP2eU~MA7KX zg+m9Ad+m9C)#ux=!#+zdXakfH0?@~`!7YLwzz}K5t~w~i{0+^U4($K{ delta 1216 zcmV;x1V8)FF3c{lw*mvPvr$KUfQ?gKCiQ&n}mnAC@Lnp8G6I#p9uMNVSCY7(cmQ^ux!_nqy;i6Kcrn#PM3 z+2{YA?|x@aaT$>yrc0JF#ds!z7b+xvnSwG~lBIb&RY6!r}n`7F15*0VYFuJA~6AoWr9ri^Cv)!;AUBpc2bgZL!>;V{Naa(LuyS zk&s9_s>BKm>liU@?Uuc`f^&6@ zmv3nAR7^Ey+r`)0I$-3&*P7$XHC?ue=`B}Lqti$!9>{o19Ytkj9c{iB(+DGdK#uNd zc#-FS35$q!Gjd5O4+#2PFhNtgL(7^=HPuaE*=p=mK?O96bB>fvZF2ZzbZ-Ou_W#3poK&z;;+ z^gFWg+2ldh74REY6zLE=r$TLY2l>|?T6Q0Q;ZM7YX@>(;OdE8nRJ0wU!M6`fr_sO81NR31%V2Th$g&3<5O zRtf4ss*5S;A!_mA_NJR7=%L7->|zIAA;+Hfcxh3v&*SR=Viktq8SfE@CO!0B&K5m? zYa1X=FdjtOmRyWf!B->5}1!~dZe&gDVHsI6TwjPYw1yW%OPwR%P)l9P}n%*WYWs^Pi~dHso* ze8S=O7rK~?;p3&ZnH6bZCP|-iy|mMR%PCDumDBONGnmynTpkhz5z(3{8YxX5{5(Gk z&Q3i8n}u7J6+d_5$3ZGAESfho=7M+zZjPUvkH$K`yihfi8YA=@6e6ht^2Vo6bDZvC zGw$gj>b{zcaIk-3)o5&{-zrB$*?4f_!4?vqK*3&+lc1E+5dQ^GO9KQ70001!#tIUX zH3=01b+ieSO$kW@b+ieS`U)Piw+TQ219h|sv-%2l0t0ol36uH?936o(GIsq7y zoDxj|T9fJ$R|BRA0F%ZEACr9)9Fu<&Bm+na0F!769h1WoKmogx1Qb^R2a{YBVFB!u zz7%5vzYGAA-wYj-!xKOOG?RiAR|9|z0F$5%ACr9)CX*@-4wEky3;`LFJQiaC@spqy eTLM83lc5$ElXwpflV27XlRFm<20{=30000nHVf7O diff --git a/toscaparser/tests/data/CSAR/csar_wordpress_invalid_import_path.zip b/toscaparser/tests/data/CSAR/csar_wordpress_invalid_import_path.zip new file mode 100644 index 0000000000000000000000000000000000000000..d6442594363def4ad1dca76b884680e8c375fa15 GIT binary patch literal 5971 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 PZs2zT_+-FA{O|t&l?c`g literal 0 HcmV?d00001 diff --git a/toscaparser/tests/data/CSAR/csar_wordpress_invalid_import_url.zip b/toscaparser/tests/data/CSAR/csar_wordpress_invalid_import_url.zip new file mode 100644 index 0000000000000000000000000000000000000000..c7a260f584159f562e88404fc1c0cc32bd8d8b0d GIT binary patch literal 6043 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 literal 0 HcmV?d00001 diff --git a/toscaparser/tests/data/CSAR/csar_wordpress_invalid_script_path.zip b/toscaparser/tests/data/CSAR/csar_wordpress_invalid_script_path.zip new file mode 100644 index 0000000000000000000000000000000000000000..5e4f9e0a0d64eefd73777caf4e63be3e1ebb2ee2 GIT binary patch literal 5969 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 literal 0 HcmV?d00001 diff --git a/toscaparser/tests/data/CSAR/tosca_single_instance_wordpress/Definitions/tosca_single_instance_wordpress.yaml b/toscaparser/tests/data/CSAR/tosca_single_instance_wordpress/Definitions/tosca_single_instance_wordpress.yaml index fcf0196..1dd195a 100644 --- a/toscaparser/tests/data/CSAR/tosca_single_instance_wordpress/Definitions/tosca_single_instance_wordpress.yaml +++ b/toscaparser/tests/data/CSAR/tosca_single_instance_wordpress/Definitions/tosca_single_instance_wordpress.yaml @@ -37,9 +37,9 @@ topology_template: - database_endpoint: mysql_database interfaces: Standard: - create: Scripts/WordPress/install.sh + create: ../Scripts/WordPress/install.sh configure: - implementation: Scripts/WordPress/configure.sh + implementation: ../Scripts/WordPress/configure.sh inputs: wp_db_name: { get_property: [ mysql_database, name ] } wp_db_user: { get_property: [ mysql_database, user ] } @@ -56,7 +56,7 @@ topology_template: interfaces: Standard: configure: - implementation: Scripts/MYSQLDatabase/configure.sh + implementation: ../Scripts/MYSQLDatabase/configure.sh inputs: db_name: { get_property: [ SELF, name ] } db_user: { get_property: [ SELF, user ] } @@ -72,10 +72,10 @@ topology_template: - host: server interfaces: Standard: - create: Scripts/MYSQLDBMS/install.sh - start: Scripts/MYSQLDBMS/start.sh + create: ../Scripts/MYSQLDBMS/install.sh + start: ../Scripts/MYSQLDBMS/start.sh configure: - implementation: Scripts/MYSQLDBMS/configure.sh + implementation: ../Scripts/MYSQLDBMS/configure.sh inputs: root_password: { get_property: [ mysql_dbms, root_password ] } @@ -85,8 +85,8 @@ topology_template: - host: server interfaces: Standard: - create: Scripts/WebServer/install.sh - start: Scripts/WebServer/start.sh + create: ../Scripts/WebServer/install.sh + start: ../Scripts/WebServer/start.sh server: type: tosca.nodes.Compute diff --git a/toscaparser/tests/test_prereq.py b/toscaparser/tests/test_prereq.py index f33eb93..f1ba365 100644 --- a/toscaparser/tests/test_prereq.py +++ b/toscaparser/tests/test_prereq.py @@ -13,6 +13,7 @@ import os import zipfile +from toscaparser.common.exception import URLException from toscaparser.common.exception import ValidationError from toscaparser.prereq.csar import CSAR from toscaparser.tests.base import TestCase @@ -81,11 +82,60 @@ class CSARPrereqTest(TestCase): self.assertEqual(_('The "Entry-Definitions" file defined in the CSAR ' '"%s" does not exist.') % path, str(error)) + def test_csar_invalid_import_path(self): + path = os.path.join(self.base_path, + "data/CSAR/csar_wordpress_invalid_import_path.zip") + csar = CSAR(path) + error = self.assertRaises(ImportError, csar.validate) + self.assertEqual(_('Import Definitions/wordpress.yaml is not valid'), + str(error)) + + def test_csar_invalid_import_url(self): + path = os.path.join(self.base_path, + "data/CSAR/csar_wordpress_invalid_import_url.zip") + csar = CSAR(path) + error = self.assertRaises(URLException, csar.validate) + self.assertEqual(_('URLException "Failed to reach server ' + 'https://raw.githubusercontent.com/openstack/' + 'tosca-parser/master/toscaparser/tests/data/CSAR/' + 'tosca_single_instance_wordpress/Definitions/' + 'wordpress1.yaml. Reason is : Not Found".'), + str(error)) + + def test_csar_invalid_script_path(self): + path = os.path.join(self.base_path, + "data/CSAR/csar_wordpress_invalid_script_path.zip") + csar = CSAR(path) + error = self.assertRaises(ValueError, csar.validate) + self.assertTrue( + str(error) == _('The resource Scripts/WordPress/install.sh does ' + 'not exist.') or + str(error) == _('The resource Scripts/WordPress/configure.sh does ' + 'not exist.')) + + def test_csar_invalid_script_url(self): + path = os.path.join(self.base_path, + "data/CSAR/csar_wordpress_invalid_script_url.zip") + csar = CSAR(path) + error = self.assertRaises(URLException, csar.validate) + self.assertEqual(_('URLException "The resource at ' + 'https://raw.githubusercontent.com/openstack/' + 'tosca-parser/master/toscaparser/tests/data/CSAR/' + 'tosca_single_instance_wordpress/Scripts/WordPress/' + 'install1.sh cannot be accessed".'), + str(error)) + def test_valid_csar(self): path = os.path.join(self.base_path, "data/CSAR/csar_hello_world.zip") csar = CSAR(path) self.assertIsNone(csar.validate()) + def test_valid_csar_with_url_import_and_script(self): + path = os.path.join(self.base_path, "data/CSAR/csar_wordpress_with_url" + "_import_and_script.zip") + csar = CSAR(path) + self.assertIsNone(csar.validate()) + def test_metadata_invalid_csar(self): path = os.path.join(self.base_path, "data/CSAR/csar_metadata_not_yaml.zip") diff --git a/toscaparser/utils/urlutils.py b/toscaparser/utils/urlutils.py index e1b4056..c6633b1 100644 --- a/toscaparser/utils/urlutils.py +++ b/toscaparser/utils/urlutils.py @@ -15,6 +15,13 @@ from six.moves.urllib.parse import urljoin from six.moves.urllib.parse import urlparse from toscaparser.utils.gettextutils import _ +try: + # Python 3.x + import urllib.request as urllib +except ImportError: + # Python 2.x + import urllib + class UrlUtils(object): @@ -41,3 +48,12 @@ class UrlUtils(object): if not UrlUtils.validate_url(url): raise ValueError(_("Provided URL is invalid.")) return urljoin(url, relative_path) + + @staticmethod + def url_accessible(url): + """Validates whether the given URL is accessible. + + Returns true if the get call returns a 200 response code. + Otherwise, returns false. + """ + return urllib.urlopen(url).getcode() == 200