
    vhQ                     P    d dl m Z mZ d dlT d dlmZ  G d dej                  ZdS )    )datetime	timedelta)*)	cmf_auditc                       e Zd ZdZej        j        dgz   Zd Z fdZe		 	 	 dd
            Z
ed             Zed             Ze fd            Ze fd            Ze fd            Ze fd            Ze	 edddd          d                         Zd Ze	 edddd          d                         Zd Zeddef fd            Z xZS ) CmfAuditTaudit_eventc                 (    t          dd           d S )Nu>   Невозможно удалить запись Аудита!Tabort)	cmf_alert)selfargskwargss      ./cmf/models/cmf_audit.pydeletezCmfAudit.delete   s    S[_``````    c                     | j         r-|                                   t                      j        |i |S t	          dd           d S )NuJ   Невозможно редактировать запись Аудита!Tr   )is_new_log_ib_auditsupersaver   )r   r   r   	__class__s      r   r   zCmfAudit.save   sU    ; 	1   577<0000_gkllllllr   okN Fr   c                    t           j        rd S |r%t          |t                    r|}nX|j        j        }nKt           j        rt           j        j        j        }n(t          j        	                                j        j        }|}t           j
        r"t           j
        j        rt           j
        j        }|rQt          |t                    s,t          t          |          t          j        j                  r|}n|j        j        }n|}|s|}|                    d          r|}|dk    rd}d }t$          j        rt$          j        d         }|sg }|
dk    r|dv rd}
d|  } |
dk    r|dv rd	}
d
|  } |
dk    rKt(                              |          j        dvs#t(                              |          j        dk    rd}
d|  } |r3|
dk    r-t           j        r!t           j        t           j	        k    rd|  } d}
| ||||||||||
|d}|	rXt          j        di |}t(                                          5  |                                 d d d            n# 1 swxY w Y   d S t           j                            |           d S )Nz	CmfAudit:r   u   Таблица Аудитаr   )	CmfPerson   user_)CmfPersonGroupCmfRole
CmfOrgUnitCmfProjectRoleCmfProjectPermSchemeRuleCmfProjectPermSchemeCmfAccessListCmfAccessRuleCmfSecurityLevelRuleCmfSecurityLevelSchemeCmfSecurityLevel   perm_)defaultstaticno_aclr-      cfg_admin_)operatecmf_model_nameresult_status
cmf_authorparent	client_ip
audit_datahtml_diff_dataparent_nameparent_codesecurity_level	real_user )gimport_mode
isinstancestridvaluecurrent_usermodelsr   system_personsessionreal_user_id
issubclasstypecmffieldsCmfStr
startswithrequestaccess_routecmfutilget_model_by_nameacl_typeacl_default_user_policyacl_admin_modecurrent_personr   disable_aclr   deferred_audit_listappend)r3   r4   r5   r6   r7   r9   r:   r;   r<   current_transactionr=   check_is_admincmf_author_idrJ   	parent_idr8   r   audits                     r   r	   zCmfAudit.audit_event   s)   
 = 	F 	F&#&& 4 * * 3^ 	FN-3MM",::<<?EM$9 	2/ 	291L  	&&#&& ,*T&\\3:CT*U*U ,"		"IO		%I 	$#K ,, 	&%IZ''7K 	 	0,Q/I 	J Q>]#B#BN'g''G Q> 6J $J $J N'g''GQG$=$=n$M$M$V^}$}$},,^<<TXaaaN&W&&G
  	n11a6F11K[_`_nKnKn(w((GN ,*'"$,&&,%
 
  	O--f--E$$&&  

              F	$$V,,,,,s   0IIIc                    t           j        sd S t                                          5  t           j        D ]}}|                    dd           }|r1t          |t                    rt                              |d          }|s|d         }||d<   t          j	        di |
                                 ~	 d d d            n# 1 swxY w Y   g t           _        d S )Nr7   T)include_deletedr6   r?   )r@   rZ   rS   rY   getrB   rC   get_obj_by_idrG   r   r   )clsr   r7   s      r   apply_deferred_auditzCmfAudit.apply_deferred_auditv   s'   $ 	F  "" 		1 		1/ 1 1Hd33 Qj55 Q$22642PPF 2#L1F#)x ))&))..00001		1 		1 		1 		1 		1 		1 		1 		1 		1 		1 		1 		1 		1 		1 		1 !#s   BC  CCc                     t           j                            d          s-t           j        t           j        k    rt	          dd           d S d S d S )NIBAdmins)
group_codeu   Просматривать Аудит безопасности разрешено только Администраторам ИБ из группы IBAdminsTr   )r@   rF   in_person_groupsystem_userr   )re   s    r   _check_perm_admin_ibzCmfAudit._check_perm_admin_ib   sv     ~---DD 	C[\[hIhIh  v  ~B  C  C  C  C  C  C	C 	CIhIhr   c                     d|vrg |d<   |d                              d            t                      j        |i |}|r%|d         j        dk    r|                                  |S NrN   r=   r   )r[   r   listr=   rl   re   r   r   resr   s       r   ro   zCmfAudit.list   s|    6!!!F8x 0111egglD+F++ 	'3q6(1,,$$&&&
r   c                     d|vrg |d<   |d                              d            t                      j        |i |}|r%|d         j        dk    r|                                  |S rn   )r[   r   slistr=   rl   rp   s       r   rs   zCmfAudit.slist   s|    6!!!F8x 0111eggmT,V,, 	'3q6(1,,$$&&&
r   c                     d|vrg |d<   |d                              d            t                      j        |i |}|r|j        dk    r|                                  |S rn   )r[   r   rc   r=   rl   rp   s       r   rc   zCmfAudit.get   sx    6!!!F8x 0111eggk4*6** 	'3%))$$&&&
r   c                     d|vrg |d<   |d                              d            t                      j        |i |}|r|j        dk    r|                                  |S rn   )r[   r   sgetr=   rl   rp   s       r   rv   zCmfAudit.sget   sx    6!!!F8x 0111egglD+F++ 	'3%))$$&&&
r   u4   Удаление устаревшего аудитаz@daily)	only_oncedescription
system_jobschedulec                  f   t           j        j        j        } | sd S t	          j                    t          |           z
  }dd|g}t          j        	                    dg|ddgdg          }|sd S |d         j
        }|t          d          z   }|                                |                                k    rxddd|gdd|gg}t          j                            |           t                       |t          d          z  }|                                |                                k    vd S d S )	Ndayscmf_created_at<r      )order_byfilterslicerN   AND)r   )r@   global_settingsaudit_storage_durationrE   r   nowr   rG   r   ro   r~   	timestampbulk_delete
cmf_commit)days_durationend_dtr   oldest_date_listoldest_datetimemax_datetimes         r   cron_delete_outdated_auditz#CmfAudit.cron_delete_outdated_audit   s]    )@F 	F)"?"?"??"C0 "?//:J9KTZcdfgbh  sC  rD/  E  E 	F*1-<&):):)::$$&&&*:*:*<*<<<.\BEUWZ\bDcdFO''v'666LLLI1----L $$&&&*:*:*<*<<<<<<<r   c                    ddl }|                                }|                    |          }d}d}| j        }t          j        j        j        | j                 }| j        j        	                                }| j
        }	| j        }
| j        }| j        }| j        }| j        }| j        }| j        }| j                                        }| j        }| j        }d| d| d| d| d| d| }|d|
 d| d	| d
| z  }|d| d| z  }|d|	 d| z  }|d| d| z  }|d| d| z  }|                    dd          }|S )ul  
        Форматирует данные аудита в сообщение для отправки в лог-систему.
        
        Args:
            audit: Объект CmfAudit с данными аудита
            
        Returns:
            str: Отформатированное сообщение для логирования
        r   NEvaTeamr   z> 1  z	 operate=z id=z cmf_model_name=z result_status=z cmf_author=z obj=z client_ip=z security_level_str=z
 obj_name=z
 obj_code=z audit_data=z html_diff_data=
)socketgethostnamegethostbynamer=   rG   r   choicesr~   rE   	isoformatr8   r3   r4   r5   r6   r7   r;   r<   r9   	db_formatr:   rD   replace)r   r   hostname
ip_addressvendor_nameproduct_namer=   security_level_strdtr8   r3   r4   r5   r6   objobj_nameobj_coder9   r:   rD   messages                        r   format_audit_messagezCmfAudit.format_audit_message   s    	 %%''))(33
  ,#_;CDDWX &0022N	,,*_
k##_..00
,W dncc"ccxcc*cc{ccUaccnwnnBnnnn_lnnn8*883888TTT@RTTT>>>H>>>N*NNnNNN //$,,r   z	@minutely   )rw   ry   rz   priorityc            
         dd l } dd l}dd l}t                              dd           t
          j        s6t
          j        rt
          j        st                              dd           d S t                              dt
          j	         d           d }t
          j        rt
          j        rt
          j	        dk    r	 t                              d	t
          j         d
t
          j         d           |                      | j
        | j                  }|                    t
          j        t          t
          j                  f           t                              d           n2# t          $ r%}t                              d| d            d }~ww xY w|                                }d}g }	 	 t          j                            g ddgddg          }|t%          |          z  }t                              d| dd           |snd}	t'          |d          D ]\  }
}t                              d|
 d| d|j         d           |                                }d}t
          j        r	 t-          t
          j        d          5 }|                    |dz              d d d            n# 1 swxY w Y   t                              dt(           dt
          j         d           nE# t          $ r8}t                              dt(           d| d           d }|	dz  }	Y d }~nd }~ww xY wt
          j        rt
          j        rt
          j	        dk    r	 |                    |d!z                                              t                              dt(           d"d           nL# t          $ rO}t                              d#t(           d| d           	 t                              d$d           |                                 |                      | j
        | j                  }|                    t
          j        t          t
          j                  f           |                    |d!z                                              t                              d%t(           d&d           nE# t          $ r8}t                              d'| d           d }d }|	dz  }	Y d }~Y d }~ n'd }~ww xY wY d }~nd }~ww xY w	 |                      | j
        | j                  5 }|                    |                                t
          j        t          t
          j                  f           d d d            n# 1 swxY w Y   t                              dt(           d(d           nE# t          $ r8}t                              d)t(           d| d           d }|	dz  }	Y d }~nd }~ww xY w|r|                    |j        j                    t                              d*d           	 t          j                            d+d id,d-|g.          }t                              d/| d           n%#  t                              d0| d            xY w|                                |z
  d1k    r!t                              d2| d3d           n7t                              d4| d5d           |                     d           jn2# t          $ r%}t                              d6| d            d }~ww xY w|r	 |                                 t                              d7d           n6# t          $ r)}t                              d8| d           Y d }~nd }~ww xY wt                              d9t%          |           d:|	 d;| d           n# |r	 |                                 t                              d7d           n6# t          $ r)}t                              d8| d           Y d }~nd }~ww xY wt                              d9t%          |           d:|	 d;| d           w w xY wt                              d<|                                |z
   d           d S )=Nr   uH   Запуск процесса экспорта аудит-записейINFO)levelu   Не настроены параметры экспорта (IB_AUDIT_FILE или IB_AUDIT_RSYSLOG_HOST/PORT). Экспорт не выполняется.WARNINGuN   Используемый протокол для отправки логов: tcpu7   Устанавливаем TCP-соединение с :u>   TCP-соединение успешно установленоuG   Ошибка при установлении TCP-соединения: ERRORT)need_exportz==Tz**   )r   rN   r   u   Найдено u'    записей для экспортаr   u    Обработка записи /z, ID: DEBUGza+r   u   Запись ID u-    успешно записана в файл uD   Ошибка при записи в файл для записи ID z: Fz
u-    успешно отправлена по TCPuN   Ошибка при отправке лога по TCP для записи ID u4   Попытка переподключения TCP...u?   Переподключение успешно, запись ID u    отправленаu8   Ошибка при переподключении TCP: u-    успешно отправлена по UDPuN   Ошибка при отправке лога по UDP для записи ID u=   Обновляем статус отправки аудитаr   rD   IN)valuesr   u"   Обновлено записей u@   Ошибка обновления статуса записей    uP   Превышен лимит времени 20 секунд обработано u    объектовu   Обработано u    объектов, sleep 1uX   Необработанное исключение в процессе экспорта: u6   TCP-соединение успешно закрытоu?   Ошибка при закрытии TCP-соединения: u1   Экспорт завершен. Успешно: u   , Ошибок: u   , Всего: u3   Закончили обработку аудита )!r   loggingtimer@   debugconfigIB_AUDIT_FILEIB_AUDIT_RSYSLOG_HOSTIB_AUDIT_RSYSLOG_PORTIB_AUDIT_RSYSLOG_PROTOAF_INETSOCK_STREAMconnectint	ExceptionrG   r   ro   len	enumeraterD   r   openwritesendallencodeclose
SOCK_DGRAMsendtor[   rE   bulk_updatesleep)r   r   r   
tcp_socketestrecord_countsuccessaudit_recordserror_countidxr`   r   export_successfreconnect_errorsrq   s                     r   cron_log_ib_auditzCmfAudit.cron_log_ib_audit   s    		Zbhiii$ 	0	5;5Q	GG  q  yBG  C  C  CF	  Aaga~  A  A  IO  	P  	P  	P 
' 	F,H 	VMjnsMsMs  PRXRn  P  Pqw  rN  P  P  X^  _  _  _#]]6>6;MNN
""F$@#fFbBcBc#deeeXYYYY   ebceemtuuu YY[[\	cM & 4 4<W<W<Wae`f;<R& !5 !B !B M 2 22_,___gmnnn$ "+M1"="= 67 67JCGGcscc\ccY^YacckrGsss#88::G%)N + --!%f&:D!A!A 8Q !$ 7 7 78 8 8 8 8 8 8 8 8 8 8 8 8 8 8GG$~r$~$~hnh|$~$~  GNG  O  O  O  O( - - -GG$tkm$t$tqr$t$t  }DG  E  E  E-2N'1,KKKKKK- 3 18T 1!8EAA* * 2 2Gf4D3L3L3N3N O O O !(l2(l(l(lt{ | | | |#, * * * !  )Cy{  )C  )C  @A  )C  )C  KR  !S  !S  !S!*$%GG,bjpG$q$q$q$.$4$4$6$6$617v~vOa1b1bJ$.$6$68TVYZ`ZvVwVw7x$y$y$y$.$6$6&8H7P7P7R7R$S$S$S$%GG  -Hnp  -H  -H  -H  PVG  %W  %W  %W  %W'0 !* !* !*$%GG,xgv,x,x  AHG  %I  %I  %I15J5:N$/1$4K$)EEEEEEEEE!* %W  %W  %W  %W  %W*$1%+]]6>6CT%U%U !BYZ$%HHW^^-=-=@\^abhb~^^  @A  %B  %B  %B!B !B !B !B !B !B !B !B !B !B !B !B !B !B !B !(l2(l(l(lt{ | | | |#, 1 1 1 !  )Cy{  )C  )C  @A  )C  )C  KR  !S  !S  !S16 +q 01 & 7ux~666X`ghhh /55mU=S]acgip\q5rrCGGFFFgGVVVVGGh_fhhpwGxxx99;;#b((GG  Oo{  O  O  O  W^G  _  _  _XXXX`ghhh

1[M\  	 	 	GGroprr  {BG  C  C  C	  cr$$&&&GGT\bGcccc  r r rGGa^_aaipGqqqqqqqqr   TCPWLL  T  Tju  T  T  FR  T  T  \b  c  c  c  cr$$&&&GGT\bGcccc  r r rGGa^_aaipGqqqqqqqqr   TCPWLL  T  Tju  T  T  FR  T  T  \b  c  c  c  cc 	
VdiikkRTnVV^efffffs  ?B(E( (
F2 FF3C\ 6K2J5)K25J9	9K2<J9	=4K21\ 2
L4<.L/*\ /L44.\ #AN42\ 4T?'T	'CR?>T	?
T	(S<1T	5\ <TT	\ 	T\  V;2AV
>V;
V	V;V	(V;:\ ;
W=.W83\ 8W==A\  AZ \ "Z((A6\ _. 
]) ]		]_. 0^ 
^8^33^8.b20`#"b#
a-aba7bc                 z    t           j        st           j        rt           j        sd S | j        dk    r	d| _        d S d S )Nr   T)r   r   r   r   r=   r   )r   s    r   r   zCmfAudit._log_ib_audit~  sN    $ 	0	5;5Q	F ""#D #"r   csvreturnc                 H   |sdg}|sot          j                    }t          |j        dd          }|t          d          z   }|                    d          }	|                    d          }
d|	 d|
 d}|sg d}t                                          |||||	          S )
Nz-cmf_created_atr   r|   z%a %b %d %Yz ["AND",["cmf_created_at",">=", "z"],["cmf_created_at","<=","z"],["security_level","=", 0]])r<   r;   r~   r4   r6   zcmf_author.loginr3   )r   )r   r   yearr   strftimer   export2file)re   rN   bqlformat_fileinclude_archivedr   current_date
start_datefinish_datestart_date_strfinish_date_strr   s              r   r   zCmfAudit.export2file  s     	+)*H 	O#<>>L!,"3Q::J&):):)::K'00??N)22=AAO O^  O  O`o  O  O  OC 		  F ww""63=MX`"aaar   )
r   NNNr   NNFr   T)NNr   FN)__name__
__module____qualname__	api_allowr   r   api_methodsr   r   staticmethodr	   classmethodrf   rl   ro   rs   rc   rv   cmf_deferred_jobr   r   r   r   rC   r   __classcell__)r   s   @r   r   r      sZ       I$04
 
Ka a am m m m m Y]VZPT]- ]- ]- \]-~ # # [# C C [C
     [     [     [     [ 2huy  EM  N  N  N. . N  N \.,- - -^ VWXXXzg zg YX \zgz$ $ $ b bmp b b b b b [b b b b br   r   N)r   r   cmf.include
cmf.fieldsr   r   r?   r   r   <module>r      s    ( ( ( ( ( ( ( (                Wb Wb Wb Wb Wby! Wb Wb Wb Wb Wbr   