B
    aEf5                 @   s6   d dl mZ d dlT d dlmZ G dd dejZdS )    )
cmf_plugin)*)fieldsc                   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   sf  dd l }tjsd S tjdr0tjdd }ntj}|sBtddg}||}xtjD ]~}dd|gdddt	|gddd gdddggg}tj| std	| x*tj| D ]}|
|dtj|g qW |
| qZW tjd
rdS td|  d }d }xNtjj|ddgdD ]6}|js,d}P x |jD ]}	||	kr4d}P q4W qW |sbtd|S )Nr   zX-Forwarded-ForuW   Не удалось получить 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requestZheadersZgetlistZremote_addrAssertionErrorZIPv4Addressstrappendargsgetpath
startswithgdebugZmodelsr   listr	   	Exception)
clsr   r   Z_filter	type_nameZ
sub_filterkeyZacceptedZpluginZnetwork r   ./cmf/models/cmf_plugin.pycheck_secret   sB    

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_hash4   s    zCmfPlugin._calc_source_hashr   TN)depthnotifyemitorderno_filterc               s@   |    |   | jr$| jj | _t j|||||d|S )N)r(   r)   r*   r+   )r    r'   Z	ext_loginr&   stripsupersave)r   r(   r)   r*   r+   r   kwargs)	__class__r   r   r.   @   s
    zCmfPlugin.savec                s   t   ddg S )Nr   r%   )r-   save_preload_fields)r   )r0   r   r   r1   G   s    zCmfPlugin.save_preload_fields)
__name__
__module____qualname__classmethodr   r    r'   r.   r1   __classcell__r   r   )r0   r   r      s
   'r   N)Z
cmf.fieldsr   Zcmf.includeZcmfr   r   r   r   r   r   <module>   s   