
    oi                     `    d dl Z d dlZd dlmZ d dl d dlmZ  G d dej                        Zy)    N)Response)*)cmf_webhookc                   D    e Zd Zed        Zedd       Zed        Zd Zy)
CmfWebhookc                     t         j                  dd      5  t        j                  j	                  d      }|s&t        j                  ddd      j                         }d d d        |S # 1 sw Y   S xY w)	Nz&CmfLock:CmfWebhook:create_person_group   )timeoutwebhook)codeTu   Webhook группа)r   systemname)cmfutilCmfLockmodelsCmfPersonGroupgetsave)clsgroups     *./modules/automation/models/cmf_webhook.pywebhook_person_groupzCmfWebhook.webhook_person_group   sr    __EPR_S 	o))--9-=E--9TPf-glln	o 		o s   A	A++A5Nc                 0   t         j                  j                  d      }|syt        j                  j                  |      }|rE|j                  d       |j                  d       |j                  d       |j                  d       ng d}t        j                  j                  |dd	|
      }|r|j                  rP|j                  t        j                  j                         k  r%t        j                  d|j                   d       yt        j                  j                  dd|j                  j                  gg dg|      }|r#t        j                  d|dd  d| d|        |S t        j                  dt         j                   d       y)u   
        Получение пользователя по webhook токену из CmfAccessToken.
        Токен передается через ?token=... параметр.
        tokenNparentexpiration_datelast_used_attype)r   r   r   r   Fr   )hash
is_revokedr   fieldsz'Expired Webhook token: expiration_date=WARNING)levelid==)
user_localr%   T)filterr!   zAuth Webhook Token(   z...): hash=z	, person=z$Invalid Webhook token: request.args=)requestargsr   r   	CmfPerson
hash_tokenappendCmfAccessTokenr   datetimenowgdebugr   r$   )r   r!   webhook_tokenwebhook_token_hashaccess_tokenauth_persons         r   get_token_personzCmfWebhook.get_token_person   sy     ((1#--88GMM(#MM+,MM.)MM&!JF ,,00#	 1 
 ++0L0LxO`O`OdOdOf0fA,B^B^A_`hqr !**..t\%8%8%;%;<>XY / K -mBQ.?-@L^K__hithuvw"" 	
6w||nEYW    c                    t         j                  dt         j                   dt        j                          t        j                  j                  d      }|s#t         j                  d       t        ddd      S g d	}| j                  ||
      }|s| j                  ||      }|s*t         j                  d|        t        d| ddd      S |j                  t         j                  k7  rAt         j                  d|j                   dt         j                          t        ddd      S |j                         }|S )NzCmfWebhook.cls_call: person z, args: r   z(CmfWebhook.cls_call: webhook name absentzwebhook name absent  
text/plaincontent_type)	hook_type
token_user	eval_code	eval_fileeval_file_pathr   r!   )r   r!   z/CmfWebhook.cls_call: webhook not found by name webhook 
 not found  z(CmfWebhook.cls_call: webhook token_user z mismatch current_person znot authorized. Show error logi  )	r1   r2   current_personr)   r*   r   r   r?   call)r   webhook_namer!   r   responses        r   cls_callzCmfWebhook.cls_callE   s!   	.q/?/?.@WX||''/GG>@13\RRX''|F';gg<g?GGGEl^TUh|nJ?S_``!1!11GG''.'9'9&::STUTdTdSegh <sQ]^^<<>r8   c                    | j                   dv rt        j                  j                  d      }|s't        j                  d|  d       t        ddd      S t        j                  j                  |d	d
g      }|s-t        j                  d|  d|        t        d| ddd      S |j                  | k7  rFt        j                  d|  d|  d|j                          t        d|  d|j                   dd      S |j                         }|S | j                   dk(  r| j                         }d|i}|S | j                   dk(  rt        j                  j                  d      t        j                  j                  d      }}|dvr-t        j                  d|  d|        t        d| ddd      S t        j                  j                  t        j                   j#                  |            }|s.t        j                  d|  d| d       t        d| ddd      S 	 t%        t        j                  j&                  |j(                  g        dd| d!i}|S t        j                  d|  d&| j                           t        d'd$d      S # t*        $ r6}t        j-                  d|  d"|        t        d#| d$d      cY d%}~S d%}~ww xY w)(ug   Без полиморфного наследования мало смысла в этом методе)githubgitlabpluginzCmfWebhook.call(z): plugin code absentzplugin arg absentr:   r;   r<   r   r   rC   z): plugin notfound by code zplugin code=rE   rF   z): webhook z mismatch plugin.webhook rD   bzPythonresultevagit_synceventrepo)pushz): unsupported event zUnsupported event: .i  )urlz): repo zRepo )r*   z synced successfullyz): zRepo sync error: i  Nz): unsupported hook_type z&Unsupported hook_type. Show error log.)r>   r)   r*   r   r1   r2   r   r   CmfPluginGitr   webhook_calleval_bzpythonloggingwarningCmfEvagitRepourllibparseunquoteschedule_deferred_job	sync_repor$   	Exception	exception)selfplugin_coderO   rQ   rS   repo_urlrT   es           r   rH   zCmfWebhook.call\   s   >>11!,,**84K*4&0EFG 3S|TT((,,+vyFY,ZF*4&0KK=YZ,{m: FZfgg~~%&tf -  $v%>v~~>NPQ  tf$=fnn=MNPSbnp p((*F2 1 ^^z)'')F'F, + ^^},%ll..w79I9I&9Q8EJ&"24&8MeW UV"5eWA >R^__''++0D0DX0N+OD"24&
* UV%z <cP\]]Y%f&:&:&D&DDGG;W"eH:5I$JK  GG&tf,EdnnEUVWDsYeff  Y!!$4TF#aS"AB"3A3 7<XXYs   #8J 	K+K
K
K)N)__name__
__module____qualname__classmethodr   r7   rK   rH    r8   r   r   r   
   sB      / /b  ,*r8   r   )r/   r^   flaskr   cmf.includemodules.automation.fieldsr   r   rm   r8   r   <module>rq      s(        1|'' |r8   