
    #&a                          G d  d      Z  G d de      Z G d de      Z G d d      Z G d d	      Z G d
 d      Zy)c                       e Zd ZddZd Zy)
BasePluginNc                     || _         y N)sourceselfsrcs     9/usr/lib/python3/dist-packages/websockify/auth_plugins.py__init__zBasePlugin.__init__   s	        c                      y r    r   headerstarget_hosttarget_ports       r
   authenticatezBasePlugin.authenticate   s    r   r   __name__
__module____qualname__r   r   r   r   r
   r   r      s    r   r   c                   (     e Zd Zddi df fd	Z xZS )AuthenticationErrorN  c                 t    || _         || _        || _        ||}t        |   | j                   d|       y )N )coder   msgsuperr   )r   log_msgresponse_coderesponse_headersresponse_msg	__class__s        r
   r   zAuthenticationError.__init__
   s8    !	'?"GDIIw78r   r   r   r   r   __classcell__r$   s   @r
   r   r   	   s    #3Z^ 9 9r   r   c                        e Zd Z fdZ xZS )InvalidOriginErrorc                 R    || _         || _        t        |   dd|d|d       y )NzInvalid Originz'Invalid Origin Header: Expected one of z, got '')r#   r    )expected_originactual_originr   r   )r   expectedactualr$   s      r
   r   zInvalidOriginError.__init__   s2    '#)&.8 	 	9r   r%   r'   s   @r
   r)   r)      s    9 9r   r)   c                   0    e Zd ZdZddZd Zd Zd Zd Zy)	BasicHTTPAuthz=Verifies Basic Auth headers. Specify src as username:passwordNc                     || _         y r   r	   r   s     r
   r   zBasicHTTPAuth.__init__#   s	    r   c                     dd l }|j                  d      }|r|j                  d      s| j                          	 |j	                  |dd        }	 j                  d      }j                  dd      }t        |      dk7  r| j                           | j                  | s| j                          y y | j                          y # t
        $ r | j                          Y w xY w# t        $ r | j                          Y w xY w)	N    AuthorizationzBasic    z
ISO-8859-1:      )base64get
startswith
auth_error	b64decode	TypeErrordecodeUnicodeDecodeErrorsplitlenvalidate_credsdemand_auth)	r   r   r   r   r;   auth_headeruser_pass_rawuser_pass_as_text	user_passs	            r
   r   zBasicHTTPAuth.authenticate&   s    kk/2))(3!" & 0 0QR A"$1$8$8$F! *//Q7I9~"!&4&&	2  " 3 #  "!" & "!"s#   C C! CC!C=<C=c                 .    |d|| j                   k(  ryy)Nr8   TFr3   )r   usernamepasswords      r
   rE   zBasicHTTPAuth.validate_credsB   s    )TXX5r   c                     t        d      )Nr   r!   r   r   s    r
   r>   zBasicHTTPAuth.auth_errorH   s    !44r   c                      t        dddi      )Ni  zWWW-AuthenticatezBasic realm="Websockify")r!   r"   rP   rQ   s    r
   rF   zBasicHTTPAuth.demand_authK   s    !4FHb3ce 	er   r   )	r   r   r   __doc__r   r   rE   r>   rF   r   r   r
   r1   r1       s    G85er   r1   c                       e Zd ZddZd Zy)ExpectOriginNc                 B    |g | _         y |j                         | _         y r   r   rC   r   s     r
   r   zExpectOrigin.__init__P       ;DK))+DKr   c                 v    |j                  dd       }||| j                  vrt        | j                  |      y )NOrigin)r.   r/   )r<   r   r)   )r   r   r   r   origins        r
   r   zExpectOrigin.authenticateV   s8    Xt,>V4;;6$dkk&II 7r   r   r   r   r   r
   rU   rU   O   s    &Jr   rU   c                       e Zd ZdZddZd Zy)ClientCertCNAuthz]Verifies client by SSL certificate. Specify src as whitespace separated list of common names.Nc                 B    |g | _         y |j                         | _         y r   rW   r   s     r
   r   zClientCertCNAuth.__init__^   rX   r   c                 X    |j                  dd       | j                  vrt        d      y )NSSL_CLIENT_S_DN_CNr   rO   )r<   r   r   r   s       r
   r   zClientCertCNAuth.authenticated   s+    ;;+T2$++E%C88 Fr   r   )r   r   r   rS   r   r   r   r   r
   r]   r]   [   s    g&9r   r]   N)r   	Exceptionr   r)   r1   rU   r]   r   r   r
   <module>rb      sK    	9) 	99, 9-e -e^
J 
J9 9r   