U
    u4i8                     @   sN   d dl mZ d dlT d dlmZ d dlmZ d dlmZ G dd dej	Z	dS )	    )
cmf_plugin)*)fields)
BadRequest)SSLErrorc                       sX   e Zd Zedd Z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_TYPES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_hashA   s&    zCmfPlugin._calc_source_hashc              
      s  d} j |ks jr jdkr"dS z~t fdddD }| jkr^td|rPdnd	 d
 n@ j oj j} jov j} jr|s|r j}t	
|}|  W nb tk
r } ztd| d W 5 d}~X Y n2 tk
r } ztd|  W 5 d}~X Y nX dS )u   
        Проверяет корректность настроек подключения
        и выполняет тест подключения для поддерживаемых плагинов
        )ZCmfPluginJiraZCmfPluginConfluence)zhttp://zhttps://Nc                 3   s   | ]}| j kV  qd S r"   )r$   ).0domainr%   r   r    	<genexpr>^   s    z.CmfPlugin._check_connection.<locals>.<genexpr>)zatlassian.netzjira.comuF   Для указанного адреса необходимо <strong>u   включитьu   выключитьu:   </strong> параметр 'Облачная версия'u   Ошибка: u   .<br /><br />Попробуйте <strong>выключить</strong> параметр 'Проверять сертификат'u%   Ошибка подключения: )r	   r$   anycloudZ	cmf_alertext_password	ext_token	ext_logintokenr   Zget_obj_by_idZcheck_connectionr   	Exception)r&   Zsupported_pluginsZis_cloud_urlZis_server_with_passwordZis_cloud_with_tokenZimport_plugin_idZimport_pluginexcr   r%   r    _check_connectionM   s8    


zCmfPlugin._check_connectionr   TNdepthnotifyemitorderno_filterc                   sL   |    |   | jr$| jj | _t j|||||d|}|   |S )Nr;   )r'   r.   r6   r-   stripsupersaver:   )r&   r<   r=   r>   r?   r   kwargsres	__class__r   r    rB   v   s    zCmfPlugin.savec              	      s$   ddddddddd	g	}t   | S )
Nr$   r,   r+   r6   r4   r5   r	   r7   r3   )rA   save_preload_fields)r&   Zpreload_fieldsrE   r   r    rG      s    zCmfPlugin.save_preload_fields)__name__
__module____qualname__classmethodr!   r'   r.   r:   rB   rG   __classcell__r   r   rE   r    r      s   
2)	r   N)
Z
cmf.fieldsr   Zcmf.includeZcmfr   Zwerkzeug.exceptionsr   Zrequests.exceptionsr   r   r   r   r   r    <module>   s
   