
    hW                     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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 r   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}|	r!t           j                            |           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_persondeferred_audit_notrans_listappenddeferred_audit_list)r3   r4   r5   r6   r7   r9   r:   r;   r<   ignore_transactionr=   check_is_admincmf_author_idrI   	parent_idr8   r   s                    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 ,*'"$,&&,%
 
  	1)0088888!((00000r   Fc                 v   |r#g t           _        t          t           d          sd S g t           j        t           j        }|sd S t                                          5  t                               dt          |           d           |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           _        g t           _        d S )	NrX   zapply_deferred_audit save z audit recsr7   T)include_deletedr6    )r?   rZ   hasattrrX   rR   disable_acldebuglengetrA   rB   get_obj_by_idrF   r   r   )clsrollback
audit_listr   r7   s        r   apply_deferred_auditzCmfAudit.apply_deferred_auditv   s    	$&A!1;<< Mq,Mq/LM
 	F  "" 
	1 
	1GGMZMMMNNN$ 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,DDD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?   rE   in_person_groupsystem_userr   )rh   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 NrM   r=   r   )rY   r   listr=   rq   rh   r   r   resr   s       r   rt   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 rs   )rY   r   slistr=   rq   ru   s       r   rx   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 rs   )rY   r   rf   r=   rq   ru   s       r   rf   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 rs   )rY   r   sgetr=   rq   ru   s       r   r{   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slicerM   AND)r   )r?   global_settingsaudit_storage_durationrD   r   nowr   rF   r   rt   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 )u	  
        Форматирует данные аудита в сообщение для отправки в лог-систему.
        
        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=   rF   r   choicesr   rD   	isoformatr8   r3   r4   r5   r6   r7   r;   r<   r9   	db_formatr:   rC   replace)r   r   hostname
ip_addressvendor_nameproduct_namer=   security_level_strdtr8   r3   r4   r5   r6   objobj_nameobj_coder9   r:   rC   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   )r|   r~   r   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 }d}	 	 t          j                            g ddgddg          }	|t%          |	          z  }t                              d| dd           |	snt'          |	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|j         dt
          j         d           nE# t          $ r8}t                              d|j         d| d           d }|dz  }Y d }~nd }~ww xY wt
          j        rFt
          j        r9t
          j	        dk    r	 |                    |d!z                                              t                              d|j         d"d           n# t          $ rP}t                              d#|j         d| d           	 t                              d$d           |                                 |                      | j
        | j                  }|                    t
          j        t          t
          j                  f           |                    |d!z                                              t                              d%|j         d&d           nE# t          $ r8}t                              d'| d           d }d }|dz  }Y d }~Y d }~ nd }~ww xY wY d }~nd }~ww xY w	 d(}|                    d)          }t%          |          |k    rq|d |d*z
                               d)d+,          }|d-z  }|                    d)          }t                              d.|j         d/t%          |           d0d           |                      | j
        | j                  5 }|                    |t
          j        t          t
          j                  f           d d d            n# 1 swxY w Y   t                              d|j         d1d           nE# t          $ r8}t                              d2|j         d| d           d }|dz  }Y d }~nd }~ww xY w|r|                    |j        j                   t                              d3d           	 t          j                             d4d id5d6|g7          }t                              d8| d           n%#  t                              d9| d            xY w|                                |z
  d:k    r!t                              d;| d<d           n7t                              d=| d>d           |!                    d           n2# t          $ r%}t                              d?| d            d }~ww xY w|r	 |                                 t                              d@d           n6# t          $ r)}t                              dA| d           Y d }~nd }~ww xY wt                              dBt%          |           dC| dD| d           n# |r	 |                                 t                              d@d           n6# t          $ r)}t                              dA| d           Y d }~nd }~ww xY wt                              dBt%          |           dC| dD| d           w w xY wt                              dE|                                |z
   d           d S )FNr   uH   Запуск процесса экспорта аудит-записейINFO)levelu   Не настроены параметры экспорта (IB_AUDIT_FILE или IB_AUDIT_RSYSLOG_HOST/PORT). Экспорт не выполняется.WARNINGuN   Используемый протокол для отправки логов: tcpu7   Устанавливаем TCP-соединение с :u>   TCP-соединение успешно установленоuG   Ошибка при установлении TCP-соединения: ERRORT)need_exportz==Tz**   )r   rM   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: i  zutf-82   ignore)errorsz... [TRUNCATED]u*   Сообщение для записи ID u    обрезано до u	    байтu-    успешно отправлена по UDPuN   Ошибка при отправке лога по UDP для записи ID u=   Обновляем статус отправки аудитаr   rC   IN)valuesr   u"   Обновлено записей u@   Ошибка обновления статуса записей    uP   Превышен лимит времени 20 секунд обработано u    объектовu   Обработано u    объектов, sleep 1uX   Необработанное исключение в процессе экспорта: u6   TCP-соединение успешно закрытоu?   Ошибка при закрытии TCP-соединения: u1   Экспорт завершен. Успешно: u   , Ошибок: u   , Всего: u3   Закончили обработку аудита )"r   loggingtimer?   rd   configIB_AUDIT_FILEIB_AUDIT_RSYSLOG_HOSTIB_AUDIT_RSYSLOG_PORTIB_AUDIT_RSYSLOG_PROTOAF_INETSOCK_STREAMconnectint	ExceptionrF   r   rt   re   	enumeraterC   r   openwritesendallencodeclosedecode
SOCK_DGRAMsendtorY   rD   bulk_updatesleep)r   r   r   
tcp_socketestrecord_countsuccesserror_countaudit_recordsidxauditexport_successr   freconnect_errorMAX_UDP_SIZEmessage_bytestruncated_messagesrv   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[[f	cW & 4 4<W<W<Wae`f;<R& !5 !B !B M 2 22_,___gmnnn$ "+M1"="= A7 A7JCGGcscc\ccY^YacckrGsss%)N#88::G+ --!%f&:D!A!A 8Q !$ 7 7 78 8 8 8 8 8 8 8 8 8 8 8 8 8 8GG  %Eux  %E  %Ent  oC  %E  %E  MTG  U  U  U  U( - - -GG$zkpks$z$zwx$z$z  CJG  K  K  K-2N'1,KKKKKK- 3 ,18T ,1!8EAA* * 2 2Gf4D3L3L3N3N O O O !(r58(r(r(r  {B  !C  !C  !C  !C#, * * * !  )Iy~  zB  )I  )I  FG  )I  )I  QX  !Y  !Y  !Y!*$%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  -Nnsnv  -N  -N  -N  V\G  %]  %]  %]  %]'0 !* !* !*$%GG,xgv,x,x  AHG  %I  %I  %I15J5:N$/1$4K$)EEEEEEEEE!* %]  %]  %]  %]  %]*$1 0407w0G0G#&}#5#5#D#D8EFV|TVFV8W8^8^_fow8^8x8x$5$59J$J$54E4L4LW4U4UM$%GG  -XY^Ya  -X  -Xz}  L  {M  {M  -X  -X  -X  `iG  %j  %j  %j%+]]6>6CT%U%U !YZ$%HH]V=Y[^_e_{[|[|<}$~$~$~! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !(r58(r(r(r  {B  !C  !C  !C  !C#, 1 1 1 !  )Iy~  zB  )I  )I  FG  )I  )I  QX  !Y  !Y  !Y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oWp  	 	 	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5C ^) 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^) B;Y:XYX	YX	(Y^) 
Z.Z=^) ZA^) 
A\ ^) "\22A6^) (a8 )
_3 __a8 0` 
a`==a8d<0b-,d-
c 7cdc  7d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)rh   field_names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 		  K ww"";[BR]e"fffr   )
r   NNNr   NNTr   T)F)NNr   FN)__name__
__module____qualname__	api_allowr   r   api_methodsr   r   staticmethodr	   classmethodrk   rq   rt   rx   rf   r{   cmf_deferred_jobr   r   r   r   rB   r   __classcell__)r   s   @r   r   r      s_       I$04
 
Ka a am m m m m Y]VZNR]1 ]1 ]1 \]1~ + + + [+, C C [C
     [     [     [     [ 2huy  EM  N  N  N. . N  N \.,* * *X VWXXXEg Eg YX \EgP$ $ $ g gru g g g g g [g g g g gr   r   N)r   r   cmf.include
cmf.fieldsr   r   ra   r   r   <module>r     s    ( ( ( ( ( ( ( (                fg fg fg fg fgy! fg fg fg fg fgr   