B
    ê¹`Ô  ã               @   sÒ   d Z ddlZddlmZ ddlmZ ddlmZ ddlmZ e 	d¡Z
d	d
„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ ZdS )+z3Validate PGWUI_Core and PGWUI_Common configuration
é    N)Úliteral_evalé   )Ú	constants)Ú
exceptions)Úchecksetz'^(?:(?:[^:/]+:)?//[^/])|(?:/(?:[^/]|$))c             C   s
   d  | ¡S )zGConvert the setting key to a key used in an ini file's declaration
    zpgwui:{})Úformat)Úkey© r	   úc/home/kop/projects/devel/pgwui/test_venv/lib/python3.7/site-packages/pgwui_common/check_settings.pyÚ
key_to_ini&   s    r   c             C   s$   ||kr |   t ||ƒ¡¡ dS dS )NFT)ÚappendÚexZMissingSettingError)ÚerrorsÚsettingÚpgwui_settingsÚ	formatterr	   r	   r
   Úrequire_setting,   s    r   c             C   s`   ||kr\yt || ƒ}W n tk
r0   d }Y nX |dk	r\|dk	r\|  t t|ƒ|| ¡¡ d S )NTF)r   Ú
ValueErrorr   r   ZNotBooleanSettingErrorr   )r   r   r   Úvalr	   r	   r
   Úboolean_setting3   s    
r   c             C   s2   |d }t | d|tƒ t| d|ƒ t| d|ƒ dS )z+Check each settings value for validity
    ÚpgwuiÚdry_runÚvalidate_hmacN)r   r   r   )r   Úsettingsr   r	   r	   r
   Úvalidate_setting_values?   s    	r   c             C   s   | d }d|kpt |d ƒS )zATrue unless the user has specificly rejected hmac validation
    r   r   )r   )r   r   r	   r	   r
   Údo_validate_hmacV   s    r   c             C   sN   t |ƒsdS d|kr&|  t ¡ ¡ dS t|d ƒtjkrJ|  t ¡ ¡ dS dS )z?Unless otherwise requested, validate the session.secret settingNzsession.secret)r   r   r   ZNoHMACErrorÚlenr   ZHMAC_LENZHMACLengthError)r   r   r	   r	   r
   r   ^   s    r   c             C   s   t | › d|› ƒS )z>Convert the page setting subkey to a ini file declaration
    ú:)r   )Úpage_keyÚsubkeyr	   r	   r
   Úpage_key_to_inil   s    r    c                s4   ‡ fdd„}d}x|D ]}|t | |||ƒM }qW |S )z0Check for required keys in the page setting
    c                s
   t ˆ | ƒS )N)r    )r   )r   r	   r
   Úsubkey_to_iniu   s    z,require_page_settings.<locals>.subkey_to_iniT)r   )r   Zrequired_settingsÚpage_settingsr   r!   Zhave_settingsr   r	   )r   r
   Úrequire_page_settingsr   s    
r#   c             C   s*   t  |¡rdS |  t t|dƒ|¡¡ dS )z0Validate the page setting "source" for URLs
    NÚsource)ÚURL_REÚmatchr   r   ZBadURLSourceErrorr    )r   r   r$   r	   r	   r
   Úvalidate_url_source€   s    
r'   c             C   s8   |d }|dd… dkrdS |   t t|dƒ|¡¡ dS )z)Validate the page setting "url_path"
    Úurl_pathr   r   ú/N)r   r   ZBadFileURLPathErrorr    )r   r   r"   r(   r	   r	   r
   Úvalidate_url_path‰   s
    r*   c             C   s0   |dd… dkrdS |   t t|dƒ|¡¡ dS )z1Validate the page setting "source" for files
    r   r   r)   NÚfile)r   r   ZBadFileSourceErrorr    )r   r   r$   r	   r	   r
   Úvalidate_file_source“   s    r,   c             C   s(   |dkrdS |   t t|dƒ|¡¡ dS )zŒValidate the page setting "source" for routes

    The routes are not yet established, so we don't confirm
    existance at this point.
    Ú NÚroute)r   r   ZBadRouteSourceErrorr    )r   r   r$   r	   r	   r
   Úvalidate_route_sourceœ   s    r/   c             C   s(   |dkrdS |   t t|dƒ|¡¡ dS )z2Validate the page setting "source" for assets
    r-   NÚasset)r   r   ZBadAssetSourceErrorr    )r   r   r$   r	   r	   r
   Úvalidate_asset_source¨   s    r1   c             C   sL   t | ||ƒ t| dg||ƒr(t| ||ƒ |  t d|› dddg|¡¡ dS )z2Validate the content of a "file" page setting
    r(   zpgwui:Útyper$   N)r,   r#   r*   Úextendr   Úunknown_settings)r   r   r"   r$   r	   r	   r
   Úvalidate_file_content±   s    r5   c             C   sÖ   |d }|d }|dkr@t | ||ƒ |  t dddg|¡¡ dS |dkrZt| |||ƒ dS |dkrŠt| ||ƒ |  t dddg|¡¡ dS |dkrºt| ||ƒ |  t dddg|¡¡ dS |  t 	t
|dƒ|¡¡ dS )	z]Validate the page setting's "type", and other page setting content
    based on the type
    r2   r$   ÚURLZpgwui_commonNr+   r.   r0   )r'   r3   r   r4   r5   r/   r1   r   r   ZBadPageTypeErrorr    )r   r   r"   r2   r$   r	   r	   r
   Úvalidate_type_content¼   s,    r7   c             C   sB   |d }||krdS || }t | ddg||ƒs2dS t| ||ƒ dS )z5Validate the multiple values of the page setting
    r   Nr2   r$   )r#   r7   )r   r   r   r   r"   r	   r	   r
   Úvalidate_page_settingÙ   s    r8   c             C   s0   t | |ƒ t| |ƒ t| |dƒ t| |dƒ dS )zValidate all core settings
    Z	home_pageZ	menu_pageN)r   r   r8   )r   r   r	   r	   r
   Úvalidate_settingsè   s    

r9   )Ú__doc__ÚreÚastr   r-   r   r   r   r   Úcompiler%   r   r   r   r   r   r   r    r#   r'   r*   r,   r/   r1   r5   r7   r8   r9   r	   r	   r	   r
   Ú<module>   s.   
	
		