ó
øÐLac           @   s  d  Z  d d l Z d d l Z e j e ƒ Z d d l m Z d d l m	 Z	 m
 Z
 d d l m Z m Z m Z d d l j j Z d d d g Z d e j j e j f d	 „  ƒ  YZ e d
 ƒ Z d
 Z d e j j e j f d „  ƒ  YZ d e j f d „  ƒ  YZ d S(   s.   passlib.handlers.misc - misc generic handlers
iÿÿÿÿN(   t   warn(   t   to_native_strt   str_consteq(   t   unicodet   ut   unicode_or_bytes_typest   unix_disabledt   unix_fallbackt	   plaintextc           B   sP   e  Z d  Z d Z d Z e d „  ƒ Z e d „ Z d „  Z	 e e d „ ƒ Z
 RS(   s…  This class provides the fallback behavior for unix shadow files, and follows the :ref:`password-hash-api`.

    This class does not implement a hash, but instead provides fallback
    behavior as found in /etc/shadow on most unix variants.
    If used, should be the last scheme in the context.

    * this class will positively identify all hash strings.
    * for security, passwords will always hash to ``!``.
    * it rejects all passwords if the hash is NOT an empty string (``!`` or ``*`` are frequently used).
    * by default it rejects all passwords if the hash is an empty string,
      but if ``enable_wildcard=True`` is passed to verify(),
      all passwords will be allowed through if the hash is an empty string.

    .. deprecated:: 1.6
        This has been deprecated due to its "wildcard" feature,
        and will be removed in Passlib 1.8. Use :class:`unix_disabled` instead.
    R   t   enable_wildcardc         C   s,   t  | t ƒ r t St j j | d ƒ ‚ d  S(   Nt   hash(   t
   isinstanceR   t   Truet   uht   exct   ExpectedStringError(   t   clsR
   (    (    sP   /var/www/html/packages/venv/lib/python3.8/site-packages/passlib/handlers/misc.pyt   identify.   s    c         K   s0   t  d t ƒ t t |  ƒ j |   | |  _ d  S(   Nsf   'unix_fallback' is deprecated, and will be removed in Passlib 1.8; please use 'unix_disabled' instead.(   R    t   DeprecationWarningt   superR   t   __init__R	   (   t   selfR	   t   kwds(    (    sP   /var/www/html/packages/venv/lib/python3.8/site-packages/passlib/handlers/misc.pyR   5   s    c         C   s   |  j  r |  j  St d ƒ Sd  S(   Nt   !(   t   checksumR   (   R   t   secret(    (    sP   /var/www/html/packages/venv/lib/python3.8/site-packages/passlib/handlers/misc.pyt   _calc_checksum=   s    	c         C   sF   t  j | ƒ t | t ƒ s4 t  j j | d ƒ ‚ n | r> t S| Sd  S(   NR
   (   R   t   validate_secretR   R   R   R   t   False(   R   R   R
   R	   (    (    sP   /var/www/html/packages/venv/lib/python3.8/site-packages/passlib/handlers/misc.pyt   verifyE   s    (   R	   (   t   __name__t
   __module__t   __doc__t   namet   context_kwdst   classmethodR   R   R   R   R   (    (    (    sP   /var/www/html/packages/venv/lib/python3.8/site-packages/passlib/handlers/misc.pyR      s   	s   *!c           B   sæ   e  Z d  Z d Z d Z d Z e e e ƒ ƒ Z	 d e
 j k rN e d ƒ Z n e d ƒ Z e d d „ ƒ Z e d „  ƒ Z e d „  ƒ Z e d	 „  ƒ Z e j d
 d d d ƒ e d d „ ƒ ƒ Z e d d „ ƒ Z e d „  ƒ Z RS(   s  This class provides disabled password behavior for unix shadow files,
    and follows the :ref:`password-hash-api`.

    This class does not implement a hash, but instead matches the "disabled account"
    strings found in ``/etc/shadow`` on most Unix variants. "encrypting" a password
    will simply return the disabled account marker. It will reject all passwords,
    no matter the hash string. The :meth:`~passlib.ifc.PasswordHash.hash`
    method supports one optional keyword:

    :type marker: str
    :param marker:
        Optional marker string which overrides the platform default
        used to indicate a disabled account.

        If not specified, this will default to ``"*"`` on BSD systems,
        and use the Linux default ``"!"`` for all other platforms.
        (:attr:`!unix_disabled.default_marker` will contain the default value)

    .. versionadded:: 1.6
        This class was added as a replacement for the now-deprecated
        :class:`unix_fallback` class, which had some undesirable features.
    R   t   markert   bsdt   *R   c         K   sV   t  t |  ƒ j |   } | d  k	 rR |  j | ƒ sF t d | ƒ ‚ n  | | _ n  | S(   Ns   invalid marker: %r(   R   R   t   usingt   NoneR   t
   ValueErrort   default_marker(   R   R$   R   t   subcls(    (    sP   /var/www/html/packages/venv/lib/python3.8/site-packages/passlib/handlers/misc.pyR'   x   s    c         C   sZ   t  | t ƒ r t } n- t  | t ƒ r0 t } n t j j | d ƒ ‚ | pY | d | k S(   NR
   i    (   R   R   t   _MARKER_CHARSt   bytest   _MARKER_BYTESR   R   R   (   R   R
   t   start(    (    sP   /var/www/html/packages/venv/lib/python3.8/site-packages/passlib/handlers/misc.pyR      s    		c         C   s5   t  j | ƒ |  j | ƒ s1 t  j j |  ƒ ‚ n  t S(   N(   R   R   R   R   t   InvalidHashErrorR   (   R   R   R
   (    (    sP   /var/www/html/packages/venv/lib/python3.8/site-packages/passlib/handlers/misc.pyR   ™   s    c         K   sm   | r, t  j |  | ƒ |  j |   j | ƒ St  j | ƒ |  j } | rW |  j | ƒ s] t ‚ t | d d ƒS(   Nt   paramR$   (	   R   t   warn_hash_settings_deprecationR'   R
   R   R*   R   t   AssertionErrorR   (   R   R   R   R$   (    (    sP   /var/www/html/packages/venv/lib/python3.8/site-packages/passlib/handlers/misc.pyR
       s    	t
   deprecateds   1.7t   removeds   2.0c         C   sy   |  j  | ƒ s$ t j j |  ƒ ‚ nQ | rG t j | ƒ t | d d ƒS| d  k	 rh |  j d | ƒ }  n  |  j | ƒ Sd  S(   NR1   t   configR$   (	   R   R   R   R0   R   R   R(   R'   R
   (   R   R   R6   R$   (    (    sP   /var/www/html/packages/venv/lib/python3.8/site-packages/passlib/handlers/misc.pyt   genhashª   s    c         C   sh   |  j  d ƒ } | d  k	 rd t | d d ƒ} |  j | ƒ rN |  j | ƒ } n  | rd | | 7} qd n  | S(   Nt    R1   R
   (   R
   R(   R   R   t   enable(   R   R
   t   out(    (    sP   /var/www/html/packages/venv/lib/python3.8/site-packages/passlib/handlers/misc.pyt   disable¸   s    c         C   st   t  | d d ƒ} xI |  j D]> } | j | ƒ r | t | ƒ } | rK | St d ƒ ‚ q q Wt j j |  ƒ ‚ d  S(   NR1   R
   s   cannot restore original hash(   R   t   _disable_prefixest
   startswitht   lenR)   R   R   R0   (   R   R
   t   prefixt   orig(    (    sP   /var/www/html/packages/venv/lib/python3.8/site-packages/passlib/handlers/misc.pyR9   Ä   s    (   R$   (    N(   R   R   R    R!   t   setting_kwdsR"   t   tuplet   strR,   R<   t   syst   platformR   R*   R#   R(   R'   R   R   R
   R   t   deprecated_methodR7   R;   R9   (    (    (    sP   /var/www/html/packages/venv/lib/python3.8/site-packages/passlib/handlers/misc.pyR   R   s&   
c           B   sª   e  Z d  Z d Z d Z d Z d Z e d „  ƒ Z e d d „ ƒ Z
 e d d „ ƒ Z e j d d d	 d
 ƒ e d „  ƒ ƒ Z e j d d d	 d
 ƒ e d d „ ƒ ƒ Z RS(   s~  This class stores passwords in plaintext, and follows the :ref:`password-hash-api`.

    The :meth:`~passlib.ifc.PasswordHash.hash`, :meth:`~passlib.ifc.PasswordHash.genhash`, and :meth:`~passlib.ifc.PasswordHash.verify` methods all require the
    following additional contextual keyword:

    :type encoding: str
    :param encoding:
        This controls the character encoding to use (defaults to ``utf-8``).

        This encoding will be used to encode :class:`!unicode` passwords
        under Python 2, and decode :class:`!bytes` hashes under Python 3.

    .. versionchanged:: 1.6
        The ``encoding`` keyword was added.
    R   t   encodings   utf-8c         C   s,   t  | t ƒ r t St j j | d ƒ ‚ d  S(   NR
   (   R   R   R   R   R   R   (   R   R
   (    (    sP   /var/www/html/packages/venv/lib/python3.8/site-packages/passlib/handlers/misc.pyR   ç   s    c         C   s/   t  j | ƒ | s |  j } n  t | | d ƒ S(   NR   (   R   R   t   default_encodingR   (   R   R   RG   (    (    sP   /var/www/html/packages/venv/lib/python3.8/site-packages/passlib/handlers/misc.pyR
   î   s    c         C   sa   | s |  j  } n  t | | d ƒ } |  j | ƒ sH t j j |  ƒ ‚ n  t |  j | | ƒ | ƒ S(   NR
   (   RH   R   R   R   R   R0   R   R
   (   R   R   R
   RG   (    (    sP   /var/www/html/packages/venv/lib/python3.8/site-packages/passlib/handlers/misc.pyR   õ   s    R4   s   1.7R5   s   2.0c         C   s   |  j  d ƒ S(   NR8   (   R
   (   R   (    (    sP   /var/www/html/packages/venv/lib/python3.8/site-packages/passlib/handlers/misc.pyt	   genconfigþ   s    c         C   s7   |  j  | ƒ s$ t j j |  ƒ ‚ n  |  j | d | ƒS(   NRG   (   R   R   R   R0   R
   (   R   R   R6   RG   (    (    sP   /var/www/html/packages/venv/lib/python3.8/site-packages/passlib/handlers/misc.pyR7     s    (    (   RG   N(   R   R   R    R!   RA   R"   RH   R#   R   R(   R
   R   R   RF   RI   R7   (    (    (    sP   /var/www/html/packages/venv/lib/python3.8/site-packages/passlib/handlers/misc.pyR   Ð   s   (   R    RD   t   loggingt	   getLoggerR   t   logt   warningsR    t   passlib.utilsR   R   t   passlib.utils.compatR   R   R   t   passlib.utils.handlerst   utilst   handlersR   t   __all__t   ifct   DisabledHasht   StaticHandlerR   R,   R.   t   MinimalHandlerR   R   (    (    (    sP   /var/www/html/packages/venv/lib/python3.8/site-packages/passlib/handlers/misc.pyt   <module>   s    	"6"~