From 42b2926c0a96139799bab37db6db31bffec0a2a1 Mon Sep 17 00:00:00 2001 From: gordon chung Date: Mon, 2 Nov 2015 14:42:54 -0500 Subject: make generate_uuid return valid uuid original design prepended a namespace to the beginning of uuid. this scoped the uuid to a namespace but it is technically invalid. this patch drops the behaviour of prepending string. rather, it takes the namespace, hashes it, and uses uuid v5 to generate valid uuid based on that namespace Change-Id: Ibde222c91522fa3c4a1720b6a8da81dac31560b9 Closes-Bug: #1504889 --- pycadf/identifier.py | 34 ++++++++++++++++++++-------------- 1 file changed, 20 insertions(+), 14 deletions(-) (limited to 'pycadf/identifier.py') diff --git a/pycadf/identifier.py b/pycadf/identifier.py index de9e8eb..cb60627 100644 --- a/pycadf/identifier.py +++ b/pycadf/identifier.py @@ -11,11 +11,11 @@ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations under # the License. - +import hashlib import uuid +from debtcollector import removals from oslo_config import cfg -import six CONF = cfg.CONF opts = [ @@ -26,29 +26,35 @@ opts = [ CONF.register_opts(opts, group='audit') -# TODO(mrutkows): make the namespace prefix configurable and have it resolve to -# a full openstack namespace/domain value via some declaration (e.g. -# "openstack:" == "http:\\www.openstack.org\")... +AUDIT_NS = None +if CONF.audit.namespace: + md5_hash = hashlib.md5(CONF.audit.namespace.encode('utf-8')) + AUDIT_NS = uuid.UUID(md5_hash.hexdigest()) + + def generate_uuid(): """Generate a CADF identifier """ - return norm_ns(str(uuid.uuid4())) + if AUDIT_NS: + return str(uuid.uuid5(AUDIT_NS, str(uuid.uuid4()))) + return str(uuid.uuid4()) +@removals.remove def norm_ns(str_id): - """Apply a namespace to the identifier - """ + """Apply a namespace to the identifier """ prefix = CONF.audit.namespace + ':' if CONF.audit.namespace else '' return prefix + str_id -# TODO(mrutkows): validate any cadf:Identifier (type) record against -# CADF schema. This would include schema validation as an optional parm. def is_valid(value): """Validation to ensure Identifier is correct. """ - if not isinstance(value, six.string_types): - raise TypeError - elif not value: + if value in ['target', 'initiator', 'observer']: + return True + try: + uuid.UUID(value) + except ValueError: return False - return True + else: + return True -- cgit v1.2.1