diff options
author | Emmanuel Gil Peyrot <linkmauve@linkmauve.fr> | 2015-08-20 20:03:32 +0100 |
---|---|---|
committer | Emmanuel Gil Peyrot <emmanuel.peyrot@collabora.com> | 2015-08-20 20:04:58 +0100 |
commit | 041bd63864429ac74ff7b7e267a0a96b04553383 (patch) | |
tree | 632b523bf73ef7b6fa387dea7540973bd1a0c159 /slixmpp/stringprep.py | |
parent | a721084f6e9bc82568483176c7c8b8f182e96c15 (diff) | |
download | slixmpp-041bd63864429ac74ff7b7e267a0a96b04553383.tar.gz slixmpp-041bd63864429ac74ff7b7e267a0a96b04553383.tar.bz2 slixmpp-041bd63864429ac74ff7b7e267a0a96b04553383.tar.xz slixmpp-041bd63864429ac74ff7b7e267a0a96b04553383.zip |
Add a function to convert a domain name to punycode.
Diffstat (limited to 'slixmpp/stringprep.py')
-rw-r--r-- | slixmpp/stringprep.py | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/slixmpp/stringprep.py b/slixmpp/stringprep.py index e0757ef2..99506d78 100644 --- a/slixmpp/stringprep.py +++ b/slixmpp/stringprep.py @@ -101,5 +101,21 @@ def idna(domain): domain_parts.append(label) return '.'.join(domain_parts) +def punycode(domain): + domain_parts = [] + for label in domain.split('.'): + try: + label = encodings.idna.nameprep(label) + encodings.idna.ToASCII(label) + except UnicodeError: + raise StringprepError + + for char in label: + if char in ILLEGAL_CHARS: + raise StringprepError + + domain_parts.append(label) + return b'.'.join(domain_parts) + logging.getLogger(__name__).warning('Using slower stringprep, consider ' 'compiling the faster cython/libidn one.') |