
    辙hb                         d Z ddlZddlZddlmZ ddlmZ  G d d      Z G d de      Z G d	 d
e      Z	d Z
 e
       Z G d de      Z G d de      Zy)z(SASL mechanisms for AMQP authentication.    N)BytesIO)_write_tablec                   &    e Zd ZdZed        Zd Zy)SASLzThe base class for all amqp SASL authentication mechanisms.

    You should sub-class this if you're implementing your own authentication.
    c                     t         )z2Return a bytes containing the SASL mechanism name.NotImplementedErrorselfs    E/var/www/Befach/backend/env/lib/python3.12/site-packages/amqp/sasl.py	mechanismzSASL.mechanism   s
     "!    c                     t         )z@Return the first response to a SASL challenge as a bytes object.r   r   
connections     r   startz
SASL.start   s    !!r   N)__name__
__module____qualname____doc__propertyr   r    r   r   r   r   
   s     
 " ""r   r   c                   $    e Zd ZdZdZd ZdZd Zy)PLAINzbPLAIN SASL authentication mechanism.

    See https://tools.ietf.org/html/rfc4616 for details
    s   PLAINc                 "    ||c| _         | _        y Nusernamepasswordr   r   r   s      r   __init__zPLAIN.__init__"       '/$t}r   r   c                 ^   | j                   | j                  t        S t               }|j	                  d       |j	                  | j                   j                  d             |j	                  d       |j	                  | j                  j                  d             |j                         S )N    zutf-8)r   r   NotImplementedr   writeencodegetvaluer   r   login_responses      r   r   zPLAIN.start*   s    == DMM$9!! U#T]]11':;U#T]]11':;&&((r   Nr   r   r   r   r   r!   	__slots__r   r   r   r   r   r      s    
 I:
I
)r   r   c                   $    e Zd ZdZdZd ZdZd Zy)AMQPLAINzhAMQPLAIN SASL authentication mechanism.

    This is a non-standard mechanism used by AMQP servers.
    s   AMQPLAINc                 "    ||c| _         | _        y r   r   r    s      r   r!   zAMQPLAIN.__init__=   r"   r   r   c                     | j                   | j                  t        S t               }t	        | j                   | j                  d|j
                  g        |j                         dd  S )N)s   LOGINs   PASSWORD   )r   r   r%   r   r   r&   r(   r)   s      r   r   zAMQPLAIN.startE   s\    == DMM$9!! DMMJ#))2	/ &&(,,r   Nr+   r   r   r   r.   r.   5   s    
 I:
I
-r   r.   c                  |    	 dd l dd l G fddt              } | S # t        $ r  G d dt              }|cY S w xY w)Nr   c                   6    e Zd ZdZdZ	 	 ddZdZd Z fdZy)	%_get_gssapi_mechanism.<locals>.GSSAPIzsGSSAPI SASL authentication mechanism.

            See https://tools.ietf.org/html/rfc4752 for details
            s   GSSAPINc                     |r!t        |t              s|j                  d      }|| _        || _        || _        || _        y )Nascii)
isinstancebytesr'   client_name	fail_softservicerdnsr   r9   r;   r<   r:   s        r   r!   z._get_gssapi_mechanism.<locals>.GSSAPI.__init__l   s;    z+u'E"-"4"4W"=K#. !*& 	r   )r9   r:   r;   r<   c                 j   |j                   j                  }| j                  rY|j                  t        j
                  t        j                  fv r-|j                         }t	        j                  |d         \  }}}n|j                   j                  }t        |t              s|j                  d      }|S )Nr   r6   )	transportsockr<   familysocketAF_INETAF_INET6getpeernamegethostbyaddrhostr7   r8   r'   )r   r   r@   peerhostname_s         r   get_hostnamez2_get_gssapi_mechanism.<locals>.GSSAPI.get_hostname|   s    !++0099171B "B++-D%+%9%9$q'%BNHa)3388H!(E2'w7Hr   c                    	 | j                   r,j                  j                  | j                               }nd }| j                  |      }j                  dj	                  | j
                  |g      j                  j                        }j                  ||      }|j                  d       S # j                  j                  j                  $ r | j                  rt        cY S  w xY w)N)name   @)rM   creds)r9   CredentialsNamerK   joinr;   NameTypehostbased_serviceSecurityContextsteprawmiscGSSErrorr:   r%   )r   r   rO   rI   rM   contextgssapis         r   r   z+_get_gssapi_mechanism.<locals>.GSSAPI.start   s    '' & 2 2!'T-=-=!> !3 !@ !%#00<H!;;tyy$,,1I'J'-'H'HJD$44$e4LG"<<--zz// ~~--	s   B/B3 35C,*C,Ns   amqpFF)	r   r   r   r   r   r!   r,   rK   r   )r[   s   r   GSSAPIr4   d   s+    
 "I9@/4!I
 r   r]   c                   &    e Zd ZdZdZ	 	 ddZd Zy))_get_gssapi_mechanism.<locals>.FakeGSSAPIz7A no-op SASL mechanism for when gssapi isn't available.Nc                     |st        d      y )Nz?You need to install the `gssapi` module for GSSAPI SASL supportr   r=   s        r   r!   z2_get_gssapi_mechanism.<locals>.FakeGSSAPI.__init__Y   s     -'( ( !r   c                     t         S r   )r%   r
   s    r   r   z/_get_gssapi_mechanism.<locals>.FakeGSSAPI.start`   s    %%r   r\   r   r   r   r   r   r!   r   r   r   r   
FakeGSSAPIr_   T   s    II9@/4(&r   rc   )r[   gssapi.raw.miscr   ImportError)r]   rc   r[   s     @r   _get_gssapi_mechanismrf   O   sI    I$4	T 4	j M  	& 	& s    ;;c                       e Zd ZdZdZd Zy)EXTERNALzEXTERNAL SASL mechanism.

    Enables external authentication, i.e. not handled through this protocol.
    Only passes 'EXTERNAL' as authentication mechanism, but no further
    authentication data.
    s   EXTERNALc                      y)Nr   r   r   s     r   r   zEXTERNAL.start   s    r   N)r   r   r   r   r   r   r   r   r   rh   rh      s     Ir   rh   c                        e Zd ZdZdZd Zd Zy)RAWzA generic custom SASL mechanism.

    This mechanism takes a mechanism name and response to send to the server,
    so can be used for simple custom authentication schemes.
    Nc                     t        |t              sJ t        |t              sJ ||c| _        | _        t	        j
                  dt               y )NznPassing login_method and login_response to Connection is deprecated. Please implement a SASL subclass instead.)r7   r8   r   responsewarningswarnDeprecationWarning)r   r   rm   s      r   r!   zRAW.__init__   sF    )U+++(E***(18% !"4	6r   c                     | j                   S r   )rm   r   s     r   r   z	RAW.start   s    }}r   rb   r   r   r   rk   rk      s     I6r   rk   )r   rB   rn   ior   amqp.serializationr   r   r   r.   rf   r]   rh   rk   r   r   r   <module>rt      s_    .    +" " )D )6-t -4JZ 
	 t $ r   