o
    &g                     @   s\   G d d dZ G dd deZG dd deZG dd dZG dd	 d	ZG d
d dZdS )c                   @      e Zd ZdddZdd ZdS )
BasePluginNc                 C   
   || _ d S N)sourceselfsrc r	   V/root/parts/websockify/install/lib/python3.10/site-packages/websockify/auth_plugins.py__init__      
zBasePlugin.__init__c                 C   s   d S r   r	   r   headerstarget_hosttarget_portr	   r	   r
   authenticate   s   zBasePlugin.authenticater   __name__
__module____qualname__r   r   r	   r	   r	   r
   r      s    
r   c                       s&   e Zd Zddi df fdd	Z  ZS )AuthenticationErrorN  c                    s8   || _ || _|| _|d u r|}t d| j |f  d S )Nz%s %s)coder   msgsuperr   )r   log_msgresponse_coderesponse_headersresponse_msg	__class__r	   r
   r   
   s   zAuthenticationError.__init__r   r   r   r   __classcell__r	   r	   r   r
   r   	   s    r   c                       s   e Zd Z fddZ  ZS )InvalidOriginErrorc                    s(   || _ || _t jdd||f d d S )NzInvalid Originz3Invalid Origin Header: Expected one of %s, got '%s')r   r   )expected_originactual_originr   r   )r   expectedactualr   r	   r
   r      s   
zInvalidOriginError.__init__r!   r	   r	   r   r
   r#      s    r#   c                   @   s:   e Zd ZdZdddZdd Zdd Zd	d
 Zdd ZdS )BasicHTTPAuthz=Verifies Basic Auth headers. Specify src as username:passwordNc                 C   r   r   r   r   r	   r	   r
   r   #   r   zBasicHTTPAuth.__init__c           	      C   s   dd l }|d}|r_|ds|   z||dd  }W n ty,   |   Y nw z|d}W n tyA   |   Y nw |dd}t	|dkrR|   | j
| s]|   d S d S |   d S )	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   r0   auth_headeruser_pass_rawuser_pass_as_text	user_passr	   r	   r
   r   &   s,   


zBasicHTTPAuth.authenticatec                 C   s   d||f | j krdS dS )Nz%s:%sTFr)   )r   usernamepasswordr	   r	   r
   r:   B   s   zBasicHTTPAuth.validate_credsc                 C   s
   t dd)Nr   r   r   r   r	   r	   r
   r3   H   r   zBasicHTTPAuth.auth_errorc                 C   s   t dddid)Ni  zWWW-AuthenticatezBasic realm="Websockify")r   r   rC   rD   r	   r	   r
   r;   K   s   zBasicHTTPAuth.demand_authr   )	r   r   r   __doc__r   r   r:   r3   r;   r	   r	   r	   r
   r(       s    
r(   c                   @   r   )ExpectOriginNc                 C       |d u r	g | _ d S | | _ d S r   r   r8   r   r	   r	   r
   r   P      
zExpectOrigin.__init__c                 C   s0   | dd }|d u s|| jvrt| j|dd S )NOrigin)r&   r'   )r1   r   r#   )r   r   r   r   originr	   r	   r
   r   V   s   zExpectOrigin.authenticater   r   r	   r	   r	   r
   rF   O   s    
rF   c                   @   s"   e Zd ZdZdddZdd ZdS )ClientCertCNAuthz]Verifies client by SSL certificate. Specify src as whitespace separated list of common names.Nc                 C   rG   r   rH   r   r	   r	   r
   r   ^   rI   zClientCertCNAuth.__init__c                 C   s    | dd | jvrtddd S )NSSL_CLIENT_S_DN_CNr   rB   )r1   r   r   r   r	   r	   r
   r   d   s   
zClientCertCNAuth.authenticater   )r   r   r   rE   r   r   r	   r	   r	   r
   rL   [   s    
rL   N)r   	Exceptionr   r#   r(   rF   rL   r	   r	   r	   r
   <module>   s    /