
    0 hW                     T    d dl m Z mZ d dl d dlmZ  G d dej
                        Zy)    )datetime	timedelta)*)	cmf_auditc                   j    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       y )Nu>   Невозможно удалить запись Аудита!Tabort)	cmf_alert)selfargskwargss      ./cmf/models/cmf_audit.pydeletezCmfAudit.delete   s    R[_`    c                 v    | j                   r| j                          t        |   |i |S t	        dd       y )NuJ   Невозможно редактировать запись Аудита!Tr   )is_new_log_ib_auditsupersaver   )r   r   r   	__class__s      r   r   zCmfAudit.save   s6    ;; 7<000^gklr   c                    t         j                  ry |r*t        |t              r|}n~|j                  j
                  }ngt         j                  r%t         j                  j                  j
                  }n2t        j                  j                         j                  j
                  }|}t         j                  r4t         j                  j                  rt         j                  j                  }|rWt        |t              s-t        t        |      t        j                  j                         r|}n|j                  j
                  }n|}|s|}|j#                  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(  rJt(        j+                  |      j,                  dvs"t(        j+                  |      j.                  dk7  rd}
d|  } |r=|
dk(  r8t         j0                  r(t         j2                  t         j                  k7  rd|  } d}
| ||||||||||
|d}|	r t         j4                  j7                  |       y t         j8                  j7                  |       y )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)r1   r2   r3   r4   r5   r7   r8   r9   r:   ignore_transactionr;   check_is_admincmf_author_idrG   	parent_idr6   r   s                    r   r	   zCmfAudit.audit_event   sM    ==&#& * * 3 3^^NN--33M",,::<??EEM$99//9911L &#&*T&\3::CTCT*U"	"IIOO	%I#K ,%IZ'7K 	,,Q/IJ Q>]#BNgY'G Q> 6J $J NgY'GQG$=$=n$M$V$V^}$},,^<TTXaaNWI&G
 n1a6F6F1K[K[_`_n_nKnwi(GN ,*'"$,&&,%
 ))008!!((0r   c                 0   |rg t         _        t        t         d      sy g t         j                  t         j                  }|sy t        j                         5  t         j                  dt        |       d       |D ]l  }|j                  dd       }|r't        |t              rt        j                  |d      }|s|d   }||d<   t        j                  di |j                          n 	 d d d        g t         _        g t         _        y # 1 sw Y    xY w)	NrV   zapply_deferred_audit save z audit recsr5   T)include_deletedr4    )r=   rX   hasattrrV   rP   disable_acldebuglengetr?   r@   get_obj_by_idrD   r   r   )clsrollback
audit_listr   r5   s        r   apply_deferred_auditzCmfAudit.apply_deferred_auditv   s    $&A!1;<Mq,,Mq/L/LM
  " 
	1GG0Z0AMN$ 1Hd3j5$22642PF#L1F#)x )&)..01
	1 !#(*%
	1 
	1s   BDDc                     t         j                  j                  d      s0t         j                  t         j                  k7  rt	        dd       y y y )NIBAdmins)
group_codeu   Просматривать Аудит безопасности разрешено только Администраторам ИБ из группы IBAdminsTr   )r=   rC   in_person_groupsystem_userr   )rf   s    r   _check_perm_admin_ibzCmfAudit._check_perm_admin_ib   sK     ~~---D[\[h[hIh  v  ~B  C JiDr   c                     d|vrg |d<   |d   j                  d       t        |   |i |}|r"|d   j                  dkD  r| j	                          |S NrK   r;   r   )rW   r   listr;   ro   rf   r   r   resr   s       r   rr   zCmfAudit.list   sa    6!!F8x 01glD+F+3q6((1,$$&
r   c                     d|vrg |d<   |d   j                  d       t        |   |i |}|r"|d   j                  dkD  r| j	                          |S rq   )rW   r   slistr;   ro   rs   s       r   rv   zCmfAudit.slist   sa    6!!F8x 01gmT,V,3q6((1,$$&
r   c                     d|vrg |d<   |d   j                  d       t        |   |i |}|r|j                  dkD  r| j	                          |S rq   )rW   r   rd   r;   ro   rs   s       r   rd   zCmfAudit.get   s]    6!!F8x 01gk4*6*3%%)$$&
r   c                     d|vrg |d<   |d   j                  d       t        |   |i |}|r|j                  dkD  r| j	                          |S rq   )rW   r   sgetr;   ro   rs   s       r   ry   zCmfAudit.sget   s]    6!!F8x 01glD+F+3%%)$$&
r   u4   Удаление устаревшего аудитаz@daily)	only_oncedescription
system_jobschedulec                  >   t         j                  j                  j                  } | sy t	        j
                         t        |       z
  }dd|g}t        j                  j                  dg|ddgdg      }|sy |d   j                  }|t        d      z   }|j                         |j                         k  rgddd|gdd|gg}t        j                  j                  |       t                |t        d      z  }|j                         |j                         k  rfy y )	Ndayscmf_created_at<r      )order_byfilterslicerK   AND)r   )r=   global_settingsaudit_storage_durationrB   r   nowr   rD   r   rr   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*1-<<&)::$$&&*:*:*<<.\BEUWZ\bDcdFOO''v'6LI1--L $$&&*:*:*<<r   c                    ddl }|j                         }|j                  |      }d}d}| j                  }t        j
                  j                  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  }|j-                  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;   rD   r   choicesr   rB   	isoformatr6   r1   r2   r3   r4   r5   r9   r:   r7   	db_formatr8   rA   replace)r   r   hostname
ip_addressvendor_nameproduct_namer;   security_level_strdtr6   r1   r2   r3   r4   objobj_nameobj_coder7   r8   rA   messages                        r   format_audit_messagezCmfAudit.format_audit_message   s    	 %%'))(3
  ,,#__;;CCDDWDWX  &&002NN	,,,,**__
kk####__..0
,,WW n%T"Qxj*Q{mSTUaTbcYwitB4/??O_l^mnn\*U3%88[+?@R?STTZzH:>>\*-=n=MNN //$,r   z	@minutely   )rz   r|   r}   priorityc            
         dd l } dd l}dd l}t        j	                  dd       t
        j                  s8t
        j                  rt
        j                  st        j	                  dd       y t        j	                  dt
        j                   d       d }t
        j                  rt
        j                  rt
        j                  dk(  r	 t        j	                  d	t
        j                   d
t
        j                   d       | j                  | j                  | j                        }|j                  t
        j                  t        t
        j                        f       t        j	                  d       |j                         }d}g }d}	 	 t        j                   j#                  g ddgddg      }	|t%        |	      z  }t        j	                  d| dd       |	sn>t'        |	d      D ]v  \  }
}t        j	                  d|
 d| d|j(                   d       d}|j+                         }t
        j                  rm	 t-        t
        j                  d      5 }|j/                  |dz          d d d        t        j	                  d|j(                   dt
        j                   d       t
        j                  r}t
        j                  rlt
        j                  dk(  rJ	 |j1                  |d!z   j3                                t        j	                  d|j(                   d"d       n	 d(}|j3                  d)      }t%        |      |kD  r`|d |d*z
   j7                  d)d+,      }|d-z  }|j3                  d)      }t        j	                  d.|j(                   d/t%        |       d0d       | j                  | j                  | j8                        5 }|j;                  |t
        j                  t        t
        j                        f       d d d        t        j	                  d|j(                   d1d       |sR|j=                  |j(                  j>                         y t        j	                  d3d       	 t        j                   jA                  d4d id5d6|g7      }t        j	                  d8| d       |j                         |z
  d:kD  rt        j	                  d;| d<d       n.t        j	                  d=| d>d       |jC                  d       |rR	 |j5                          t        j	                  d@d       t        j	                  dBt%        |       dC| dD| d       	 t        j	                  dE|j                         |z
   d       y # t        $ r }t        j	                  d| d        d }~ww xY w# 1 sw Y   ]xY w# t        $ r9}t        j	                  d|j(                   d| d       d }|dz  }Y d }~hd }~ww xY w# t        $ r?}t        j	                  d#|j(                   d| d       	 t        j	                  d$d       |j5                          | j                  | j                  | j                        }|j                  t
        j                  t        t
        j                        f       |j1                  |d!z   j3                                t        j	                  d%|j(                   d&d       n?# t        $ r3}t        j	                  d'| d       d }d }|dz  }Y d }~Y d }~ d }~ww xY wY d }~&d }~ww xY w# 1 sw Y   ]xY w# t        $ r9}t        j	                  d2|j(                   d| d       d }|dz  }Y d }~xd }~ww xY w#  t        j	                  d9| d        xY w# t        $ r }t        j	                  d?| d        d }~ww xY w# t        $ r%}t        j	                  dA| d       Y d }~d }~ww xY w# |r	 |j5                          t        j	                  d@d       n0# t        $ r$}t        j	                  dA| d       Y d }~nd }~ww xY wt        j	                  dBt%        |       dC| dD| d       w w xY w)FNr   uH   Запуск процесса экспорта аудит-записейINFO)levelu   Не настроены параметры экспорта (IB_AUDIT_FILE или IB_AUDIT_RSYSLOG_HOST/PORT). Экспорт не выполняется.WARNINGuN   Используемый протокол для отправки логов: tcpu7   Устанавливаем TCP-соединение с :u>   TCP-соединение успешно установленоuG   Ошибка при установлении TCP-соединения: ERRORT)need_exportz==Tz**   )r   rK   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   rA   IN)valuesr   u"   Обновлено записей u@   Ошибка обновления статуса записей    uP   Превышен лимит времени 20 секунд обработано u    объектовu   Обработано u    объектов, sleep 1uX   Необработанное исключение в процессе экспорта: u6   TCP-соединение успешно закрытоu?   Ошибка при закрытии TCP-соединения: u1   Экспорт завершен. Успешно: u   , Ошибок: u   , Всего: u3   Закончили обработку аудита )"r   loggingtimer=   rb   configIB_AUDIT_FILEIB_AUDIT_RSYSLOG_HOSTIB_AUDIT_RSYSLOG_PORTIB_AUDIT_RSYSLOG_PROTOAF_INETSOCK_STREAMconnectint	ExceptionrD   r   rr   rc   	enumeraterA   r   openwritesendallencodeclosedecode
SOCK_DGRAMsendtorW   rB   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srt   s                        r   cron_log_ib_auditzCmfAudit.cron_log_ib_audit  s@	    		Zbhi$$00V5Q5QGG  q  yBG  C	`aga~a~`  A  IO  	P 
''F,H,HVMjMjnsMsQRXRnRnQoopqw  rN  rN  qO  P  X^  _#]]6>>6;M;MN
""F$@$@#fFbFbBc#deXY YY[f	c & 4 4<Wae`f;<R& !5 !B M 22/,7^_gmn$"+M1"= A7JCGG>se1\NRXY^YaYaXbckrGs%)N#88:G++-!%f&:&:D!A 8Q !$ 78GG&6uxxj@mnt  oC  oC  nD  %E  MTG  U 338T8T!88EA* * 2 2Gf4D3L3L3N O !*:588*Dq(r  {B  !C&1 0407w0G#&}#5#D8EFV|TV8W8^8^_fow8^8x$5$59J$J$54E4L4LW4UM$%GG.XY^YaYaXbbyz}  L  {M  zN  NW  -X  `iG  %j%+]]6>>6CTCT%U !YZ$%HH]V=Y=Y[^_e_{_{[|<}$~! !*:588*Dq(r  {B  !C &uxx~~6CA7D W`gh //55mU=S]acgip\q5rCGG@FgGV 99;#b(GGno{n|  }N  O  W^G  _/~=WX`gh

1o | r$$&GGT\bGc KCPWL>Yijuiv  wE  FR  ES  T  \b  c	EdiikRTnEUV^ef_  abcademtu48 8  ) -GG&jkpksksjttvwxvy$z  CJG  K-2N'1,K- $- * !*xy~  zB  zB  yC  CE  FG  EH  )I  QX  !Y!*$%GG,bjpG$q$.$4$4$617v~~vOaOa1bJ$.$6$68T8TVYZ`ZvZvVw7x$y$.$6$6&8H7P7P7R$S$%GG.mnsnvnvmw  xM  -N  V\G  %]'0 !*$%GG.fgvfw,x  AHG  %I15J5:N$/1$4K$)E!* %]*@! ! $- 1 !*xy~  zB  zB  yC  CE  FG  EH  )I  QX  !Y16 +q 01GG^_f^ghpwGx  	GGnopnqr  {BG  C	 ! rGG]^_]`aipGqqr	 r$$&GGT\bGc  rGG]^_]`aipGqqr KCPWL>Yijuiv  wE  FR  ES  T  \b  c s  
B,V  B4_ WW1=W.5_ $AX+_ .B']7:]*-]7<_  ?_  A ^<  A _ #'`  	W	)WW	W	W	X".X_ X_ 
]'(']"C\]"	]&#]	]"_ ]]"_ "]''_ *]4	/]77	^9 .^4._ 4^99_ <__ 	`%`  ``9 	`6`11`69c ='a%$c %	b.bc b.c c                     t         j                  s!t         j                  rt         j                  sy | j                  dkD  rd| _        y y )Nr   T)r   r   r   r   r;   r   )r   s    r   r   zCmfAudit._log_ib_audit  s<    $$00V5Q5Q "#D #r   returnc                    |sdg}|set        j                         }t        |j                  dd      }|t        d      z   }|j	                  d      }	|j	                  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:   r9   r   r2   r4   zcmf_author.loginr1   )r   )r   r   yearr   strftimer   export2file)rf   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#<<>L!,"3"3Q:J&)::K'00?N)22=AO4^4DD_`o_p  qN  OCK w";[BR]e"ffr   )
okNNN NNTr   T)F)NNcsvFN)__name__
__module____qualname__	api_allowr   r   api_methodsr   r   staticmethodr	   classmethodri   ro   rr   rv   rd   ry   cmf_deferred_jobr   r   r   r   r@   r   __classcell__)r   s   @r   r   r      sV   I$$004
 
Kam Y]VZNR]1 ]1~ + +, C C
         2huy  EM  N. N .,*X VWXEg Y EgP$ gru g gr   r   N)r   r   cmf.include
cmf.fieldsr   r   r_   r   r   <module>r     s$    (   fgy!! fgr   