use idna python module to check domainpart when available

This commit is contained in:
Yann Leboulanger 2017-08-10 14:53:20 +02:00 committed by Yann Leboulanger
parent 1a2ac87f46
commit b6189a60cf
1 changed files with 13 additions and 2 deletions

View File

@ -59,6 +59,12 @@ try:
except ImportError:
HAS_PRECIS_I18N = False
try:
import idna
HAS_IDNA = True
except ImportError:
HAS_IDNA = False
HAS_SOUND = True
if sys.platform == 'win32':
try:
@ -283,11 +289,16 @@ def prep(user, server, resource):
if not ip_address:
if server is not None:
if server.endswith('.'): # RFC7622, 3.2
server = server[:-1]
if len(server) < 1 or len(server.encode('utf-8')) > 1023:
raise InvalidFormat(_('Server must be between 1 and 1023 bytes'))
try:
from nbxmpp.stringprepare import nameprep
server = nameprep.prepare(server)
if HAS_IDNA:
server = idna.encode(server).decode('utf-8')
else:
from nbxmpp.stringprepare import nameprep
server = nameprep.prepare(server)
except UnicodeError:
raise InvalidFormat(_('Invalid character in hostname.'))
else: