- # 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 '.'
- 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])
+ # convert hrn_parts (list) into hrn (str) by doing the following
+ # 1. remove blank elements
+ # 2. escape all non alpha numeric chars (excluding ':')
+ # 3. replace ':' with '.' (':' is the urn hierarchy delimiter)
+ # 4. join list elements using '.'
+ #hrn = '.'.join([part.replace('.', '\\.').replace(':', '.') for part in hrn_parts if part])
+ hrn = '.'.join([re.sub(r'([^a-zA-Z0-9\:])', r'\\\1', part).replace(':', '.') for part in urn_parts if part])