o
    ç÷¡g°  ã                   @   sF  d dl Z d dlZd dlZd dlZd dlmZ d dlmZm	Z	m
Z
 d dlmZmZmZ d dlmZ dd„ Zedd	d
d� ededdd� edd	dd� ededdd� edd	dd� edd	dd� ededdd� edddd� edd	d d� ed!d	d"d� ed#d	d$d� ed%ed&d'd� ed(ed&d)d� ed*ed&d+d� ed,ed&d-d� ed.d/d0d� ed1ed d2d� ed3ed4d5d� ed6ed4d7d� ed8ed9d:d� ed;d	d<d� ed=d	d>d� ed?ed@edA� ej ej ej e¡¡¡Zg dB¢ZdCZG dDdE„ dEeƒZdFdG„ ZdHdI„ ZdJdK„ Z dLdM„ Z!dNdO„ Z"dPdQ„ Z#dRdS„ Z$dTdU„ Z%dVdW„ Z&dS )Xé    N)Údefine)Úload_host_keysÚget_policy_classÚcheck_policy_setting)Úto_ip_addressÚparse_origin_from_urlÚis_valid_encoding)Ú__version__c                 C   s   | rt tƒ t d¡ d S d S )Nr   )Úprintr	   ÚsysÚexit)Úflag© r   ú:/usr/local/lib/python3.10/dist-packages/webssh/settings.pyÚprint_version   s   þr   ÚaddressÚ zListen address)ÚdefaultÚhelpÚporti¸"  zListen port)Útyper   r   Ú
ssladdresszSSL listen addressÚsslportiQ  zSSL listen portÚcertfilezSSL certificate fileÚkeyfilezSSL private key fileÚdebugFz
Debug modeÚpolicyÚwarningz/Missing host key policy, reject|autoadd|warningÚhostfilezUser defined host keys fileÚsyshostfilezSystem wide host keys fileÚtdstreamz&Trusted downstream, separated by commaÚredirectTzRedirecting http to httpsÚfbidhttpz*Forbid public plain http incoming requestsÚxheaderszSupport xheadersÚxsrfzCSRF protectionÚoriginÚsamea3  Origin policy,
'same': same origin policy, matches host name and port number;
'primary': primary domain policy, matches primary domain only;
'<domains>': custom domains policy, matches any domain in the <domains> list
separated by comma;
'*': wildcard policy, matches any domain, allowed in debug mode only.ÚwpintvlzWebsocket ping intervalÚtimeouté   zSSH connection timeoutÚdelayz The delay to call recycle_workerÚmaxconné   z2Maximum live connections (ssh sessions) per clientÚfontzcustom font filenameÚencodingzzThe default character encoding of ssh servers.
Example: --encoding='utf-8' to solve the problem with some switches&routersÚversionzShow version information)r   r   Úcallback)ÚwebsshÚstaticÚcssÚfontsi   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚFontc                 C   s   |   |¡| _|  ||¡| _d S ©N)Ú
get_familyÚfamilyÚget_urlÚurl©ÚselfÚfilenameÚdirsr   r   r   Ú__init__A   s   zFont.__init__c                 C   s   |  d¡d S )NÚ.r   )Úsplit)r<   r=   r   r   r   r7   E   s   zFont.get_familyc                 C   s   d  ||g ¡S )Nú/)Újoinr;   r   r   r   r9   H   s   zFont.get_urlN)Ú__name__Ú
__module__Ú__qualname__r?   r7   r9   r   r   r   r   r5   ?   s    r5   c                 C   sb   t tj tdd¡tj tdd¡| j| j| jtt	| j
tjjtgt¢R Ž ƒtdd … ƒt| ƒd�}|S )Nr1   Ú	templatesr2   é   )Útemplate_pathÚstatic_pathÚwebsocket_ping_intervalr   Úxsrf_cookiesr-   Úorigin_policy)ÚdictÚosÚpathrC   Úbase_dirr'   r   r$   r5   Úget_font_filenamer-   Ú	font_dirsÚget_origin_setting©ÚoptionsÚsettingsr   r   r   Úget_app_settingsL   s   ÿ
ýõrX   c                 C   s   t | jtt| jƒd�}|S )N)r#   Úmax_body_sizeÚtrusted_downstream)rN   r#   rY   Úget_trusted_downstreamr    rU   r   r   r   Úget_server_settings]   s   ýr\   c                 C   sX   | j stj td¡}n| j }t|ƒ}| jstj d¡}n| j}t|ƒ}t|||d�}|S )NÚknown_hostsz~/.ssh/known_hosts)Ú	host_keysÚsystem_host_keysÚhost_keys_filename)	r   rO   rP   rC   rQ   r   r   Ú
expanduserrN   )rV   r`   r^   r=   r_   rW   r   r   r   Úget_host_keys_settingsf   s   ýrb   c                 C   s&   t | jƒ}t |j¡ t||ƒ |ƒ S r6   )r   r   ÚloggingÚinforD   r   )rV   Úhost_keys_settingsÚpolicy_classr   r   r   Úget_policy_setting{   s   

rg   c                 C   sŠ   | j s| jsd S | j stdƒ‚| jstdƒ‚tj | j ¡s%td | j ¡ƒ‚tj | j¡s4td | j¡ƒ‚t tj	j
¡}| | j | j¡ |S )Nzcertfile is not providedzkeyfile is not providedzFile {!r} does not exist)r   r   Ú
ValueErrorrO   rP   ÚisfileÚformatÚsslÚcreate_default_contextÚPurposeÚCLIENT_AUTHÚload_cert_chain)rV   Ússl_ctxr   r   r   Úget_ssl_context‚   s   rq   c                 C   s8   t ƒ }|  d¡D ]}| ¡ }|rt|ƒ | |¡ q|S )Nú,)ÚsetrA   Ústripr   Úadd)r    ÚresultÚipr   r   r   r[   “   s   
€r[   c                 C   sn   | j dkr| jstdƒ‚dS | j  ¡ }|dv r|S tƒ }| d¡D ]}t|ƒ}|r.| |¡ q!|s5tdƒ‚|S )NÚ*z5Wildcard origin policy is only allowed in debug mode.)r&   Úprimaryrr   zEmpty origin list)r%   r   rh   Úlowerrs   rA   r   ru   )rV   r%   Úoriginsr:   Úorigr   r   r   rT   �   s$   
ÿ

€rT   c                    sP   ‡ fdd„t  ˆ ¡D ƒ}| r | |vrtd t j ˆ | ¡¡ƒ‚| S |r&| ¡ } | S )Nc                    s0   h | ]}|  d ¡stj tj ˆ |¡¡r|’qS )r@   )Ú
startswithrO   rP   ri   rC   )Ú.0Úf©Úfont_dirr   r   Ú	<setcomp>·   s    
ÿz$get_font_filename.<locals>.<setcomp>zFont file {!r} not found)rO   Úlistdirrh   rj   rP   rC   Úpop)r-   r�   Ú	filenamesr   r€   r   rR   ¶   s   ÿýrR   c                 C   s"   | rt | ƒstd | ¡ƒ‚d S d S )Nz Unknown character encoding {!r}.)r   rh   rj   )r.   r   r   r   Úcheck_encoding_settingÄ   s   ÿr†   )'rc   Úos.pathrO   rk   r   Útornado.optionsr   Úwebssh.policyr   r   r   Úwebssh.utilsr   r   r   Úwebssh._versionr	   r   ÚintÚboolÚfloatrP   ÚdirnameÚabspathÚ__file__rQ   rS   rY   Úobjectr5   rX   r\   rb   rg   rq   r[   rT   rR   r†   r   r   r   r   Ú<module>   sn    ÿÿÿÿÿ	
