X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sfa%2Futil%2Fnamespace.py;h=512f398a8b959a4e111528c45e51d6ace5bbe3be;hb=6d32570ac8dff9a4ef424a2ac3abde4bf4d9cce2;hp=f53808cb5b5a989333b5b1ec99af0ec1002ecb73;hpb=19626c7e9bfc131b6bf030ad7e1d4258871584d2;p=sfa.git diff --git a/sfa/util/namespace.py b/sfa/util/namespace.py index f53808cb..512f398a 100644 --- a/sfa/util/namespace.py +++ b/sfa/util/namespace.py @@ -1,6 +1,6 @@ ### $Id$ ### $URL$ - +import re from sfa.util.faults import * URN_PREFIX = "urn:publicid:IDN" @@ -57,6 +57,9 @@ def urn_to_hrn(urn): """ convert a urn to hrn return a tuple (hrn, type) + Warning: urn_to_hrn() replces some special characters that + are not replaced in hrn_to_urn(). Due to this, + urn_to_hrn() -> hrn_to_urn() may not return the original urn """ # if this is already a hrn dont do anything @@ -66,16 +69,20 @@ def urn_to_hrn(urn): name = urn[len(URN_PREFIX):] hrn_parts = name.split("+") type = hrn_parts.pop(2) - + + # Remove the authority name (e.g. '.sa') if type == 'authority': hrn_parts = hrn_parts[:-1] # convert hrn_parts (list) into hrn (str) by doing the following + # dont allow special characters (except ':') in the site login base # remove blank elements # replace ':' with '.' # join list elements using '.' - hrn = '.'.join([part.replace(':', '.') for part in hrn_parts if part]) + only_alphanum = re.compile('[^a-zA-Z0-9:]+') + valid_chars = lambda x: only_alphanum.sub('', x).replace(':', '.') + hrn = '.'.join([valid_chars(part) for part in hrn_parts if part]) return str(hrn), str(type)