X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sfa%2Futil%2Fnamespace.py;h=b94eb1db3f7e6b30afd2298485abdcdb2d0c88dd;hb=629fe0ee59797913bc3cd5aaec9ec9021fb23a32;hp=d036f064ddfdb3ad6ac6d9063410b5240ed8b5cf;hpb=11fdbb35325530daf834d5ba1222b2b7ea7f04a0;p=sfa.git diff --git a/sfa/util/namespace.py b/sfa/util/namespace.py index d036f064..b94eb1db 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" @@ -65,19 +65,22 @@ 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]) - # Remove the authority name (e.g. '.sa') - if type == 'authority': - hrn = hrn[:hrn.rindex('.')] - return str(hrn), str(type)