
    Yfb                         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dS )z(SASL mechanisms for AMQP authentication.    N)BytesIO)_write_tablec                   .    e Zd ZdZed             Zd ZdS )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    ;/var/www/html/env/lib/python3.11/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   
   sH         
 " " X"" " " " "r   r   c                   &    e Zd ZdZdZd ZdZd ZdS )PLAINzbPLAIN SASL authentication mechanism.

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

    This is a non-standard mechanism used by AMQP servers.
    s   AMQPLAINc                 $    ||c| _         | _        d S r   r   r    s      r   r!   zAMQPLAIN.__init__=   r"   r   r   c                     | j         | j        t          S t                      }t	          | j         | j        d|j        g            |                                dd          S )N)s   LOGINs   PASSWORD   )r   r   r%   r   r   r&   r(   r)   s      r   r   zAMQPLAIN.startE   se    = DM$9!! DMJJ#)2	/ 	/ 	/ &&((,,r   Nr+   r   r   r   r.   r.   5   sJ         
 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                   8    e Zd ZdZdZ	 	 d
dZdZd Z fd	ZdS )%_get_gssapi_mechanism.<locals>.GSSAPIzsGSSAPI SASL authentication mechanism.

            See https://tools.ietf.org/html/rfc4752 for details
            s   GSSAPIN   amqpFc                     |r*t          |t                    s|                    d          }|| _        || _        || _        || _        d S )Nascii)
isinstancebytesr'   client_name	fail_softservicerdnsr   r:   r<   r=   r;   s        r   r!   z._get_gssapi_mechanism.<locals>.GSSAPI.__init__l   sO     >z+u'E'E >"-"4"4W"="=K#. !*& 			r   )r:   r;   r<   r=   c                 <   |j         j        }| j        rR|j        t          j        t          j        fv r3|                                }t	          j        |d                   \  }}}n|j         j	        }t          |t                    s|                    d          }|S )Nr   r7   )	transportsockr=   familysocketAF_INETAF_INET6getpeernamegethostbyaddrhostr8   r9   r'   )r   r   rA   peerhostname_s         r   get_hostnamez2_get_gssapi_mechanism.<locals>.GSSAPI.get_hostname|   s    !+09 9171B "B "B++--D%+%9$q'%B%BNHa)38H!(E22 8'w77Hr   c                    	 | j         r/                                        | j                             }nd }|                     |          }                    d                    | j        |g          j        j                  }                    ||          }|	                    d           S # j
        j        j        $ r | j        r	t          cY S  w xY w)N)name   @)rN   creds)r:   CredentialsNamerL   joinr<   NameTypehostbased_serviceSecurityContextsteprawmiscGSSErrorr;   r%   )r   r   rP   rJ   rN   contextgssapis         r   r   z+_get_gssapi_mechanism.<locals>.GSSAPI.start   s    ' % & 2 2!'T-=!>!> !3 !@ !@ !%#00<<H!;;tyy$,1I'J'J'-'HJ JD$44$e4LLG"<<---z/   ~ ----	s   B2B6 6"CCNr5   FF)	r   r   r   r   r   r!   r,   rL   r   )r\   s   r   GSSAPIr4   d   so         
 "I9@/4! ! ! !I
  
  
       r   r^   c                   (    e Zd ZdZdZ	 	 ddZd ZdS ))_get_gssapi_mechanism.<locals>.FakeGSSAPIz7A no-op SASL mechanism for when gssapi isn't available.Nr5   Fc                 (    |st          d          d S )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   sH        III9@/4( ( ( (& & & & &r   rd   )r\   gssapi.raw.miscr   ImportError)r^   rd   r\   s     @r   _get_gssapi_mechanismrg   O   s    I$4	 4	 4	 4	 4	 4	 4	T 4	 4	 4	j M    	& 	& 	& 	& 	& 	& 	& 	& s   " AAc                       e Zd ZdZdZd ZdS )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                     dS )Nr   r   r   s     r   r   zEXTERNAL.start   s    sr   N)r   r   r   r   r   r   r   r   r   ri   ri      s4          I    r   ri   c                   "    e Zd ZdZdZd Zd ZdS )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                     d S )NznPassing login_method and login_response to Connection is deprecated. Please implement a SASL subclass instead.)r8   r9   r   responsewarningswarnDeprecationWarning)r   r   rn   s      r   r!   zRAW.__init__   sd    )U+++++(E*****(18% !"4	6 	6 	6 	6 	6r   c                     | j         S r   )rn   r   s     r   r   z	RAW.start   s
    }r   rc   r   r   r   rl   rl      sC          I6 6 6    r   rl   )r   rC   ro   ior   amqp.serializationr   r   r   r.   rg   r^   ri   rl   r   r   r   <module>ru      s>   . .         + + + + + +" " " " " " " " ) ) ) ) )D ) ) )6- - - - -t - - -4J J JZ 
		 	     t       $     r   