Ñò
_*WPc           @   sQ  d  d k  Z  d  d k Z d  d k l Z d  d k l Z l Z e e i j oŽ e  i d ƒ Z	 d Z
 d Z d Z e  i d ƒ Z d	 Z d
 Z e  i d ƒ Z d Z d Z e  i d ƒ Z d Z d Z e Z e Z d Z d Z n¡e e i j oá e d ƒ d d d d d d d d d g	 Z e  i d d i e d „  e ƒ ƒ e  d ƒ e  d ƒ d  ƒ Z	 d! Z
 d" Z e
 Z e  i d# ƒ Z d! Z d$ Z e  i d% ƒ Z d Z d Z e	 Z d Z d Z e! Z e! Z d Z d Z n° e e i" j oŽ e  i d ƒ Z	 d Z
 d Z d Z e  i d& ƒ Z d Z d Z e  i d' ƒ Z d! Z d Z e  i d ƒ Z d Z d Z e Z e Z d Z d Z n e! p
 t# d( ‚ e d! Z$ e d! Z% d) „  Z& e d* „ Z' d+ „  Z( d, „  Z) e
 d- „ Z* d. „  Z+ d/ „  Z, d0 „  Z- d1 „  Z. d2 „  Z/ d3 „  Z0 d4 „  Z1 d5 „  Z2 d6 „  Z3 d7 d8 „ Z4 d9 „  Z5 d: „  Z6 d; „  Z7 d< „  Z8 d= „  Z9 d S(>   iÿÿÿÿN(   t   LOG_CURRENT_EXCEPTION(   t   CREDENTIALS_RESTRICTIONt   CREDENTIALS_RESTRICTION_SETs   ^[a-zA-Z0-9_]+$i   i   i   sE   ^[a-z0-9_-]+(\.[a-z0-9_-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*\.([a-z]{2,4})$i   iÿ   i   id   s   ^[A-Z0-9_\-]+$iF   i   iè  i    i"   i&   i'   i/   i:   i<   i>   i@   i   u   (?u)^[^u    c         C   s   d  |  S(   u   \x%0.2x(    (   t   n(    (    s(   scripts/common/external_strings_utils.pyt   <lambda>(   s    iÿÿ  iþÿ  u   ]+$i   i   s   ^[_a-z0-9-+@.]+$i   s   ^[!-~]+$s   ^[a-zA-Z0-9_][a-zA-Z0-9._]+$s*   ^[a-zA-Z0-9+!@#$%^&*()?.,_=";:><{}\[\]']+$s#   Unknown credential restrictions setc         C   s%   t  |  d ƒ } t i d | ƒ | f S(   Nt   utf8t   NFKC(   t   unicodet   unicodedatat	   normalize(   t   utf8strt
   unicodeStr(    (    s(   scripts/common/external_strings_utils.pyt   unicode_from_utf8h   s    c            sK   t  |  ƒ \ } } ‡ ‡  ‡ f d †  } | o | | ƒ o t S| | ƒ S(   Nc            s/   ˆ  i  |  ƒ o ˆ t |  ƒ j o ˆ j SS(    (   t   matcht   len(   t   uniStr(   t   ret   maxLent   minLen(    s(   scripts/common/external_strings_utils.pyR   u   s    (   R   t   False(   R
   R   R   R   t   checkBeforeNFKCt   nfkct   plaint   matchFn(    (   R   R   R   s(   scripts/common/external_strings_utils.pyt   utf8_accepteds   s
    c         C   sc   yM t  |  ƒ \ } } t | ƒ t d | ƒ j o | |  } n | i d ƒ SWn t ƒ  d  SXd  S(   Ni    R   (   R   R   t   maxt   encodeR    t   None(   R
   t   lengthR   t   _(    (    s(   scripts/common/external_strings_utils.pyt   normalized_unicode_trim   s    c         C   si   yS t  |  ƒ \ } } t | ƒ t d | ƒ j o | |  } n | i ƒ  i d ƒ SWn t ƒ  d  SXd  S(   Ni    R   (   R   R   R   t   lowerR   R    R   (   R
   R   R   R   (    (    s(   scripts/common/external_strings_utils.pyt%   normalized_unicode_trim_and_lowercaseŽ   s    c         C   s   t  |  t | t ƒ S(   N(   R   t   _ACCOUNT_NAME_REt   _ACCOUNT_NAME_MAX_LENGTH(   t   textt	   minLength(    (    s(   scripts/common/external_strings_utils.pyt   isAccountNameValid�   s    c         C   s   t  |  t ƒ S(   N(   R    R"   (   R#   (    (    s(   scripts/common/external_strings_utils.pyt   normalizedAccountName£   s    c         C   s   t  |  t t t ƒ S(   N(   R   t   _PASSWORD_REt   _PASSWORD_MIN_LENGTHt   _PASSWORD_MAX_LENGTH(   R#   (    (    s(   scripts/common/external_strings_utils.pyt   isPasswordValid¨   s    c         C   s   t  |  t t t ƒ S(   N(   R   t   _LOGIN_NAME_REt   _LOGIN_NAME_MIN_LENGTHt   _LOGIN_NAME_MAX_LENGTH(   R#   (    (    s(   scripts/common/external_strings_utils.pyt   isAccountLoginValid­   s    c         C   sQ   y; t  |  ƒ }  t |  ƒ t j o |  t  }  n |  i ƒ  SWn t ƒ  d  SXd  S(   N(   t   normalize_utf8R   R-   R   R    R   (   R#   (    (    s(   scripts/common/external_strings_utils.pyt   normalizedAccountLogin³   s    c         C   s·   y¡ t  |  d ƒ i ƒ  } | i d ƒ |  j o t Sd t | ƒ j o
 t j n p t Sx= | i d ƒ D], } | p t t d „  | ƒ ƒ o t Sql Wt	 SWn t
 ƒ  t SXd  S(   NR   i   t    c         S   s   t  |  ƒ d  j  S(   i    (   t   ord(   t   c(    (    s(   scripts/common/external_strings_utils.pyR   Î   s    (   R   t   stripR   R   R   t   _CLAN_NAME_MAX_LENGTHt   splitt   anyt   mapt   TrueR    (   R#   t   utextt   word(    (    s(   scripts/common/external_strings_utils.pyt   isClanNameValidÂ   s    $ !	c         C   s`   yJ t  |  ƒ \ } } t | ƒ t j o | t  } n | i ƒ  i d ƒ SWn t ƒ  d  SXd  S(   NR   (   R   R   R5   R   R   R    R   (   R#   R:   R   (    (    s(   scripts/common/external_strings_utils.pyt   normalizedClanNameÚ   s    c         C   s.   t  |  t d t ƒ o t p |  t |  ƒ j S(   Ni   (   R   t   _CLAN_ABBREV_REt   _CLAN_ABBREV_MAX_LENGTHt   _REQUIRE_NORMALIZED_CLAN_ABBREVt   normalizedClanAbbrev(   t   abbrev(    (    s(   scripts/common/external_strings_utils.pyt   isClanAbbrevValidé   s    c         C   sq   y[ t  |  ƒ \ }  } t |  ƒ t j o |  t  }  n t o |  i ƒ  }  n |  i d ƒ SWn t ƒ  d  SXd  S(   NR   (   R   R   R?   t   _UPPERCASE_CLAN_ABBREVt   upperR   R    R   (   RB   R   (    (    s(   scripts/common/external_strings_utils.pyRA   ð   s    c         C   s!   |  i  ƒ  } | o | d d j S(   Ni    s   [<{((   R4   (   t   channelNamet   test(    (    s(   scripts/common/external_strings_utils.pyt   isChannelNameValid  s    s   \0c         C   sF   |  d  j o | S|  i d d ƒ i d d ƒ i d d ƒ i d d ƒ S(	   Ns   \s   \\t   's   \'t   "s   \"t    s   \0(   R   t   replace(   R#   t   default(    (    s(   scripts/common/external_strings_utils.pyt	   escapeSQL  s    c         C   s   t  |  d ƒ i d ƒ S(   NR   (   R   R   (   R
   (    (    s(   scripts/common/external_strings_utils.pyR/     s    c         C   s²   t  |  ƒ | j  o |  S| d j o d St |  | d ƒ o	 |  |  Sx_ t d d ƒ D]N } t |  | | ƒ o3 t |  | | ƒ } | | j o Pn |  | |  SqX W|  |  S(   Ni    t    i   i   (   R   t   _is_utf8_one_bytet   xranget   _is_utf8_first_bytet   _decode_utf8_len_byte(   R
   t   maxbytest   xt   ut8_len(    (    s(   scripts/common/external_strings_utils.pyt   truncate_utf8  s    	 c         C   s   t  |  ƒ } d | @| j S(   Ni   (   R2   (   t   bytet   o(    (    s(   scripts/common/external_strings_utils.pyRP   +  s    c         C   s   t  |  ƒ } d | @| j S(   Ni¿   (   R2   (   RX   RY   (    (    s(   scripts/common/external_strings_utils.pyRR   1  s    c         C   sb   t  |  ƒ } d | @} | d j o d S| d j o d S| d j o d S| d j  o d Sd	 S(
   Nið   i   ià   i   iÀ   i   i   i   i    (   R2   (   RX   RY   t   v(    (    s(   scripts/common/external_strings_utils.pyRS   7  s    
(:   R   R   t   debug_utilsR    t	   constantsR   R   t   BASICt   compileR!   t   _ACCOUNT_NAME_MIN_LENGTHR"   t   _ACCOUNT_NAME_MIN_LENGTH_REGR+   R,   R-   R'   R(   R)   R>   R5   R?   R9   RD   R@   t   CLAN_DESCR_MAX_LENGTHt   CLAN_MOTTO_MAX_LENGTHt   CHINESEt   ranget   _ACCOUNT_NAME_EXCLUDED_SYMBOLSt   joinR8   t   unichrR   t   VIETNAMt   AssertionErrort   CLAN_DESCR_MAX_BYTESt   CLAN_MOTTO_MAX_BYTESR   R   R   R    R%   R&   R*   R.   R0   R<   R=   RC   RA   RH   RN   R/   RW   RP   RR   RS   (    (    (    s(   scripts/common/external_strings_utils.pyt   <module>   s¦   
:



																	