B
    f*                 @   s:   d dl m Z mZ d dlT d dlmZ G dd dejZdS )    )datetime	timedelta)*)	cmf_auditc                   s   e Zd ZdZejjdg Zdd Z fddZe	d!ddZ
edd Zedd Ze fddZe fddZe fddZe fddZe	eddddddd Zdd  Z  ZS )"CmfAuditTaudit_eventc             O   s   t ddd d S )Nu>   Невозможно удалить запись Аудита!T)abort)	cmf_alert)selfargskwargs r   ./cmf/models/cmf_audit.pydelete   s    zCmfAudit.deletec                s,   | j r|   t j||S tddd d S )NuJ   Невозможно редактировать запись Аудита!T)r   )Zis_new_log_ib_auditsupersaver	   )r
   r   r   )	__class__r   r   r      s    zCmfAudit.saveokN Fr   c             C   s  t jr
d S |r(t|tr|}qH|jj}n t jr:t jjj}ntj	 jj}|}t j
rbt j
jrbt j
j}|rt|tstt|tjjr|}q|jj}n|}|s|}|dr|}|dkrd}d }tjrtjd }|sg }|
dkr|dkrd}
d|  } |
dkr|dkrd	}
d
|  } |
dkrPt|jdksBt|jdkrPd}
d|  } |r|
dkrt jrt jt j	krd|  } d}
| ||||||||||
|d}|	rtjf |}t  |  W d Q R X d S t j| d S )Nz	CmfAudit:r   u   Таблица Аудитаr   )	CmfPerson   Zuser_)ZCmfPersonGroupZCmfRoleZ
CmfOrgUnitZCmfProjectRoleZCmfProjectPermSchemeRuleZCmfProjectPermSchemeZCmfAccessListZCmfAccessRuleZCmfSecurityLevelRuleZCmfSecurityLevelSchemeZCmfSecurityLevel   Zperm_)defaultZstaticZno_aclr      Zcfg_Zadmin_)operatecmf_model_nameresult_status
cmf_authorparent	client_ip
audit_datahtml_diff_dataparent_nameparent_codesecurity_levelZ	real_user)gZimport_mode
isinstancestridvaluecurrent_usermodelsr   Zsystem_personZsessionreal_user_id
issubclasstypeZcmffieldsZCmfStr
startswithZrequestZaccess_routecmfutilZget_model_by_nameZacl_typeZacl_default_user_policyZacl_admin_modeZcurrent_personr   disable_aclr   deferred_audit_listappend)r   r   r   r   r   r!   r"   r#   r$   Zcurrent_transactionr%   Zcheck_is_adminZcmf_author_idr-   Z	parent_idr    r   Zauditr   r   r   r      sv    







&

zCmfAudit.audit_eventc          	   C   st   t  b xZtjD ]P}|dd }|r>t|tr>t j|dd}|sJ|d }||d< tj	f |
  qW W d Q R X d S )Nr   T)Zinclude_deletedr   )r2   r3   r&   r4   getr'   r(   Zget_obj_by_idr,   r   r   )clsr   r   r   r   r   apply_deferred_auditv   s    
zCmfAudit.apply_deferred_auditc             C   s   t jjddstddd d S )NZIBAdmins)Z
group_codeu   Просматривать Аудит безопасности разрешено только Администраторам ИБ из группы IBAdminsT)r   )r&   r+   Zin_person_groupr	   )r7   r   r   r   _check_perm_admin_ib   s    zCmfAudit._check_perm_admin_ibc                sJ   d|krg |d< |d  d t j||}|rF|d jdkrF|   |S )Nr0   r%   r   )r5   r   listr%   r9   )r7   r   r   res)r   r   r   r:      s    zCmfAudit.listc                sJ   d|krg |d< |d  d t j||}|rF|d jdkrF|   |S )Nr0   r%   r   )r5   r   slistr%   r9   )r7   r   r   r;   )r   r   r   r<      s    zCmfAudit.slistc                sF   d|krg |d< |d  d t j||}|rB|jdkrB|   |S )Nr0   r%   r   )r5   r   r6   r%   r9   )r7   r   r   r;   )r   r   r   r6      s    zCmfAudit.getc                sF   d|krg |d< |d  d t j||}|rB|jdkrB|   |S )Nr0   r%   r   )r5   r   sgetr%   r9   )r7   r   r   r;   )r   r   r   r=      s    zCmfAudit.sgetu4   Удаление устаревшего аудитаz@daily)Z	only_oncedescriptionZ
system_jobZschedulec              C   sn   t jjj} | sd S t t| d }dd|g}x:tjj	|ddgd}|sJP x|D ]}|
  qPW t  q0W d S )N)Zdayscmf_created_at<r   d   )filterslice)r&   Zglobal_settingsZaudit_storage_durationr*   r   Znowr   r,   r   r:   r   Z
cmf_commit)Zdays_durationZend_dtrB   Zoutdated_auditZeventr   r   r   cron_delete_outdated_audit   s    


z#CmfAudit.cron_delete_outdated_auditc             C   s  dd l }| jdkry| }||}d}d}| 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	| 7 }|d
| d| 7 }|d|	 d| 7 }|d| d| 7 }|d| d| 7 }|dd}tjrfttjd}||d  W d Q R X tjrtjr| |j|j"}|| tjttjf W d Q R X W n2 tk
r } zt d|  W d d }~X Y nX d S )Nr   Z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=
za+u   Ошибка аудита: )!socketr%   ZgethostnameZgethostbynamechoicesr?   r*   Z	isoformatr    r   r   r   r   r   r#   r$   r!   r"   r)   replaceZconfigZIB_AUDIT_FILEopenwriteZIB_AUDIT_RSYSLOG_HOSTZIB_AUDIT_RSYSLOG_PORTZAF_INETZ
SOCK_DGRAMZsendtoencodeint	Exceptionr	   )r
   rG   ZhostnameZ
ip_addressZvendor_nameZproduct_namer%   Zsecurity_level_strZdtr    r   r   r   r   objZobj_nameZobj_coder!   r"   r)   messagefser   r   r   r      sH    
( *zCmfAudit._log_ib_audit)
r   NNNr   NNFr   T)__name__
__module____qualname__Z	api_allowr   r   Zapi_methodsr   r   staticmethodr   classmethodr8   r9   r:   r<   r6   r=   Zcmf_deferred_jobrD   r   __classcell__r   r   )r   r   r      s$     ]r   N)r   r   Zcmf.includeZ
cmf.fieldsr   r   r   r   r   r   <module>   s   