| ... |
... |
@@ -37,11 +37,12 @@ from dataclasses import asdict |
|
37
|
37
|
from gi.repository import GLib
|
|
38
|
38
|
|
|
39
|
39
|
import idna
|
|
40
|
|
-from precis_i18n import get_profile
|
|
41
|
40
|
from nbxmpp.simplexml import Node
|
|
42
|
41
|
from nbxmpp.namespaces import Namespace
|
|
43
|
42
|
from nbxmpp.stringprep import nodeprep
|
|
44
|
43
|
from nbxmpp.stringprep import resourceprep
|
|
|
44
|
+from nbxmpp.precis import enforce_precis_username
|
|
|
45
|
+from nbxmpp.precis import enforce_precis_opaque
|
|
45
|
46
|
|
|
46
|
47
|
|
|
47
|
48
|
def ascii_upper(s):
|
| ... |
... |
@@ -256,7 +257,6 @@ _errorcodes = { |
|
256
|
257
|
}
|
|
257
|
258
|
|
|
258
|
259
|
|
|
259
|
|
-_localpart_disallowed_chars = set('"&\'/:<>@')
|
|
260
|
260
|
_localpart_escape_chars = ' "&\'/:<>@'
|
|
261
|
261
|
|
|
262
|
262
|
|
| ... |
... |
@@ -487,18 +487,17 @@ def validate_localpart(localpart: str) -> str: |
|
487
|
487
|
if not localpart or len(localpart.encode()) > 1023:
|
|
488
|
488
|
raise LocalpartByteLimit
|
|
489
|
489
|
|
|
490
|
|
- if os.environ.get('NBXMPP_USE_PRECIS') is None:
|
|
|
490
|
+ if os.environ.get('NBXMPP_ENFORCE_PRECIS') is None:
|
|
491
|
491
|
try:
|
|
492
|
492
|
return nodeprep(localpart)
|
|
493
|
493
|
except Exception:
|
|
494
|
|
- raise LocalpartNotAllowedChar
|
|
495
|
|
-
|
|
496
|
|
- if _localpart_disallowed_chars & set(localpart):
|
|
497
|
|
- raise LocalpartNotAllowedChar
|
|
|
494
|
+ try:
|
|
|
495
|
+ return enforce_precis_username(localpart)
|
|
|
496
|
+ except Exception:
|
|
|
497
|
+ raise LocalpartNotAllowedChar
|
|
498
|
498
|
|
|
499
|
499
|
try:
|
|
500
|
|
- username = get_profile('UsernameCaseMapped')
|
|
501
|
|
- return username.enforce(localpart)
|
|
|
500
|
+ return enforce_precis_username(localpart)
|
|
502
|
501
|
except Exception:
|
|
503
|
502
|
raise LocalpartNotAllowedChar
|
|
504
|
503
|
|
| ... |
... |
@@ -508,15 +507,17 @@ def validate_resourcepart(resourcepart: str) -> str: |
|
508
|
507
|
if not resourcepart or len(resourcepart.encode()) > 1023:
|
|
509
|
508
|
raise ResourcepartByteLimit
|
|
510
|
509
|
|
|
511
|
|
- if os.environ.get('NBXMPP_USE_PRECIS') is None:
|
|
|
510
|
+ if os.environ.get('NBXMPP_ENFORCE_PRECIS') is None:
|
|
512
|
511
|
try:
|
|
513
|
512
|
return resourceprep(resourcepart)
|
|
514
|
513
|
except Exception:
|
|
515
|
|
- raise ResourcepartNotAllowedChar
|
|
|
514
|
+ try:
|
|
|
515
|
+ return enforce_precis_opaque(resourcepart)
|
|
|
516
|
+ except Exception:
|
|
|
517
|
+ raise ResourcepartNotAllowedChar
|
|
516
|
518
|
|
|
517
|
519
|
try:
|
|
518
|
|
- opaque = get_profile('OpaqueString')
|
|
519
|
|
- return opaque.enforce(resourcepart)
|
|
|
520
|
+ return enforce_precis_opaque(resourcepart)
|
|
520
|
521
|
except Exception:
|
|
521
|
522
|
raise ResourcepartNotAllowedChar
|
|
522
|
523
|
|