
    i8                     d    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ej	                  Z	dS )	    )
cmf_plugin)*)fields)
BadRequest)SSLErrorc                   \     e Zd Zed             Zd Zd Zd Zddddd fd	
Z fd
Z	 xZ
S )	CmfPluginc           	      N   dd l }t          j        sd S t                                          }|s
J d            |                    |          }dg}t          j        D ]}dd|gdddt          |          gg dg dgg}t          j        |         sJ d	|             t          j        |         D ]7}|                    |dt          j	        
                    |          g           8|                    |           t          j                            d
          rdS t                              d|            d }d }	t          j                            |ddg          D ]2}	|	j        sd} n&|	j        D ]}
||                    |
          v rd} n3|st)          d          |	S )Nr   uW   Не удалось получить IP address из заголовка X-Forwarded-ForORtype==ext_ip)r   r   N)r   r   z0.0.0.0uQ   Настройка PUB_ACCEPT_TYPES не может быть пустой для z/pub/webhookTu   Ищем секрет z--ext_networks)filterr   u   Ошибка доступа)	ipaddressconfigPUB_ACCEPT_TYPEScmfutilget_client_ipIPv4Addressstrappendrequestargsgetpath
startswithgdebugmodelsr	   listr   IPv4Networkr   )clsr   r   
ext_ip_obj_filter	type_name
sub_filterkeyacceptedpluginnetworks              ./cmf/models/cmf_plugin.pycheck_secretzCmfPlugin.check_secret	   s   & 	4&&((pppppv **622
&0 	' 	'Iy)D#j//2''',,,J *95 p podmoop p5 .y9 F F!!3gl.>.>s.C.C"DEEEENN:&&&&<"">22 	4	222333&++7D.CY+ZZ 	 	F& !.  !6!6w!?!???#HE @  	<:;;;    c                 0    | j         rd S | j        | _         d S N)nameext_url)selfs    r,   
_calc_namezCmfPlugin._calc_name<   s    9 	FL			r.   c                 P   ddl m} | j        j        s@| j        j        s4| j        j        s(| j        j        s| j        j        r| j        s	| j        sd S | j        j        | j        j        nd}| j        j        | j        j        nd}|	                    | | d          | _        d S )Nr   )cmf_hashlib    )
cmf.utilr6   r2   is_not_null
is_changedext_token_addonsource_hashis_nullvalueshort_str_enc)r3   r6   r2   r<   s       r,   _calc_source_hashzCmfPlugin._calc_source_hashA   s    (((((()	-1\-D	(4	8<8L8W	 $,	 37,	 CGBV	
 F(,(:(F$,$$B8<8L8R8^$.44df&445R5R5RTUVVr.   c                 $    d} j         |vs j        r	 j        dv rdS 	 t           fddD                       }| j        k    rt	          d|rdnd d	           dS  j         o j        } j        o j        } j        r;|s|r9 j        }t          
                    |          }|                                 dS dS dS # t          $ r}t	          d
| d           Y d}~dS d}~wt          $ r}t	          d|            Y d}~dS d}~ww xY w)u   
        Проверяет корректность настроек подключения
        и выполняет тест подключения для поддерживаемых плагинов
        )CmfPluginJiraCmfPluginConfluence)zhttp://zhttps://Nc              3   *   K   | ]}|j         v V  d S r0   )r2   ).0domainr3   s     r,   	<genexpr>z.CmfPlugin._check_connection.<locals>.<genexpr>^   s;        +1$,&     r.   )zatlassian.netzjira.comuF   Для указанного адреса необходимо <strong>u   включитьu   выключитьu:   </strong> параметр 'Облачная версия'u   Ошибка: u   .<br /><br />Попробуйте <strong>выключить</strong> параметр 'Проверять сертификат'u%   Ошибка подключения: )r   r2   anycloud	cmf_alertext_password	ext_token	ext_logintokenr   get_obj_by_idcheck_connectionr   	Exception)r3   supported_pluginsis_cloud_urlis_server_with_passwordis_cloud_with_tokenimport_plugin_idimport_pluginexcs   `       r,   _check_connectionzCmfPlugin._check_connectionM   s   


 I...< /|666F	E    5R    L tz))H5A[11G[H H H     /3j.*NT=N'&*j&CT^#> 5'> 5BU 5'+z$$+$9$9:J$K$KM!22444445 5 5 5  	 	 	G G G G          	E 	E 	ECcCCDDDDDDDDD	Es*   =C AC 
DC%%D2D

Dr   TNdepthnotifyemitorderno_filterc                   |                                   |                                  | j        r#| j        j                                        | _         t                      j        |||||d|}|                                  |S )Nr[   )r4   rA   rN   r?   stripsupersaverZ   )	r3   r\   r]   r^   r_   r   kwargsres	__class__s	           r,   rc   zCmfPlugin.savev   s       > 	:!^17799DNegglDf4Xfqqjpqq   
r.   c                 R    g d}t                                                      |z   S )N)	r2   r=   r<   rN   rL   rM   r   rO   rJ   )rb   save_preload_fields)r3   preload_fieldsrf   s     r,   rh   zCmfPlugin.save_preload_fields   s1    

 

 

 ww**,,~==r.   )__name__
__module____qualname__classmethodr-   r4   rA   rZ   rc   rh   __classcell__)rf   s   @r,   r	   r	      s        0 0 [0d! ! !

W 
W 
W'E 'E 'ER !"$T$       > > > > > > > > >r.   r	   N)

cmf.fieldsr   cmf.includecmfr   werkzeug.exceptionsr   requests.exceptionsr   r	    r.   r,   <module>ru      s    ! ! ! ! ! !           * * * * * * ( ( ( ( ( (D> D> D> D> D>
$ D> D> D> D> D>r.   