
    afi8                     h    d dl mZ d dl d dlmZ d dlmZ d dlmZ  G d dej                        Z	y)	    )
cmf_plugin)*)fields)
BadRequest)SSLErrorc                   V     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           	      2   dd l }t        j                  sy t        j	                         }|sJ d       |j                  |      }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 ]3  }|j                  |dt        j                  j                  |      g       5 |j                  |        t        j                  j                  d
      ryt        j                  d|        d }d }	t        j                   j#                  |ddg      D ]:  }	|	j$                  sd} n*|	j$                  D ]  }
||j'                  |
      v sd} : < |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   &&&&(pppv **62
&00 	'Iy)D#j/2',J **95 pcdmcnop5 ..y9 F!!3gll.>.>s.C"DEFNN:&	'  <<"">2	(	23&&++7D.CY+Z 	F&&!.. !6!6w!??#H			 :;;    c                 @    | j                   ry | j                  | _         y N)nameext_url)selfs    r,   
_calc_namezCmfPlugin._calc_name<   s    99LL	r.   c                    ddl m} | j                  j                  sq| j                  j                  s[| j
                  j                  sE| j
                  j                  s/| j                  j                  r| j                  s| j
                  sy | j                  j                  | j                  j                  nd}| j
                  j                  | j
                  j                  nd}|j                  | | d      | _        y )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    ())T\\-D-D((448L8L8W8W$$,,$,,$BVBV(,(:(:(F$,,$$B8<8L8L8R8R8^$..44df&447H	5RTUVr.   c                 D    d} j                   |vs j                  r j                  dv ry	 t         fddD              }| j                  k7  rt	        d|rdnd d	       y j                   xr  j
                  } j                  xr  j                  } j                  r7|s|r2 j                  }t        j                  |      }|j                          yyy# t        $ r}t	        d
| d       Y d}~yd}~wt        $ r}t	        d|        Y d}~yd}~ww xY w)u   
        Проверяет корректность настроек подключения
        и выполняет тест подключения для поддерживаемых плагинов
        )CmfPluginJiraCmfPluginConfluence)zhttp://zhttps://Nc              3   :   K   | ]  }|j                   v   y wr0   )r2   ).0domainr3   s     r,   	<genexpr>z.CmfPlugin._check_connection.<locals>.<genexpr>^   s      +1$,,&s   )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=   


 II..<<||66	E 5R L tzz)5A1G[\ ]GH /3jj.*NT=N=N'&*jj&CT^^#>>'>BU'+zz$$+$9$9:J$KM!224 CV>  	  &F G   	E=cUCDD	Es*   6C %A6C 	D'C;;DDDr   TNdepthnotifyemitorderno_filterc                    | j                          | j                          | j                  r)| j                  j                  j	                         | _        t        |   |||||d|}| j                          |S )Nr[   )r4   rA   rN   r?   stripsupersaverZ   )	r3   r\   r]   r^   r_   r   kwargsres	__class__s	           r,   rc   zCmfPlugin.savev   sh     >>!^^11779DNglDf4Xfqjpq 
r.   c                 .    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   s    

 w*,~==r.   )__name__
__module____qualname__classmethodr-   r4   rA   rZ   rc   rh   __classcell__)rf   s   @r,   r	   r	      sB    0 0d!

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

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