U
    t	h                     @   sB   d dl mZ d dlT d dlmZ d dlmZ G dd dejZdS )    )
cmf_plugin)*)fields)
BadRequestc                       sP   e Zd Zedd Zdd Zdd Zdddd	d
 fdd
Z fddZ  Z	S )	CmfPluginc              	   C   sD  dd l }tjsd S t }|s&td||}dg}tjD ]z}dd|gdddt|gddd gdddggg}tj| std| tj| D ]}||dt	j
|g q|| q<t	jd	rd
S td|  d }d }	tjj|ddgdD ]<}	|	js
d
} q2|	jD ]}
|||
krd
} qqq|s@td|	S )Nr   uW   Не удалось получить IP address из заголовка X-Forwarded-ForORtypez==ext_ipz0.0.0.0uQ   Настройка PUB_ACCEPT_TYPES не может быть пустой для z/pub/webhookTu   Ищем секрет z--ext_networks)filterr   u   Ошибка доступа)	ipaddressZconfigZPUB_ACCEPT_TYPESZcmfutilZget_client_ipAssertionErrorIPv4AddressstrappendZrequestargsgetpath
startswithgdebugZmodelsr   listr
   IPv4Networkr   )clsr   r	   Z
ext_ip_objZ_filter	type_nameZ
sub_filterkeyZacceptedZpluginnetwork r   ./cmf/models/cmf_plugin.pycheck_secret   sJ    



zCmfPlugin.check_secretc                 C   s   | j r
d S | j| _ d S )N)nameext_urlselfr   r   r   
_calc_name;   s    zCmfPlugin._calc_namec                 C   s   ddl m} | jjsD| jjsD| jjsD| jjsD| jjr@| jsD| jsDd S | jjd k	rX| jjnd}| jjd k	rp| jjnd}|	| | d| _d S )Nr   )cmf_hashlib    )
Zcmf.utilr%   r!   Zis_not_nullZ
is_changedext_token_addonsource_hashZis_nullvalueZshort_str_enc)r#   r%   r!   r(   r   r   r   _calc_source_hash@   s&    zCmfPlugin._calc_source_hashr   TNdepthnotifyemitorderno_filterc                   s@   |    |   | jr$| jj | _t j|||||d|S )Nr,   )r$   r+   Z	ext_loginr*   stripsupersave)r#   r-   r.   r/   r0   r   kwargs	__class__r   r   r3   L   s
    zCmfPlugin.savec                    s   t   ddg S )Nr!   r)   )r2   save_preload_fieldsr"   r5   r   r   r7   S   s    zCmfPlugin.save_preload_fields)
__name__
__module____qualname__classmethodr   r$   r+   r3   r7   __classcell__r   r   r5   r   r      s   
2r   N)Z
cmf.fieldsr   Zcmf.includeZcmfr   Zwerkzeug.exceptionsr   r   r   r   r   r   <module>   s   