def process_request(self, request): from networkapi.eventlog.models import AuditRequest if not request.user.is_anonymous(): ip = self._get_ip(request) AuditRequest.new_request(request.get_full_path(), request.user, ip) else: user_auth_tuple = BasicAuthentication().authenticate(request) if user_auth_tuple is not None: user, token = user_auth_tuple else: # keeps compatibility with old authentication method user = RestResource.authenticate_user(request) if user is not None: ip = self._get_ip(request) AuditRequest.new_request(request.get_full_path(), user, ip)
def process_request(self, request): from networkapi.eventlog.models import AuditRequest if not request.user.is_anonymous(): ip = self._get_ip(request) context = local.request_context identity = local.request_id AuditRequest.new_request(request.get_full_path(), request.user, ip, identity, context) else: user_auth_tuple = BasicAuthentication().authenticate(request) if user_auth_tuple is not None: user, token = user_auth_tuple else: # keeps compatibility with old authentication method user = RestResource.authenticate_user(request) if user is not None: ip = self._get_ip(request) context = local.request_context identity = local.request_id AuditRequest.new_request(request.get_full_path(), user, ip, identity, context)
def process_response(self, request, response): from networkapi.eventlog.models import AuditRequest AuditRequest.cleanup_request() return response
def save_audit(instance, operation, kwargs={}): """ Saves the audit. However, the variable persist_audit controls if the audit should be really saved to the database or not. This variable is only affected in a change operation. If no change is detected than it is setted to False. Keyword arguments: instance -- instance operation -- operation type (add, change, delete) kwargs -- kwargs dict sent from m2m signal """ m2m_change = kwargs.get('m2m_change', False) event = dict() action = None try: persist_audit = True new_state = to_dict(instance) old_state = {} try: if operation == EventLog.CHANGE and instance.pk: if not m2m_change: old_state = to_dict( instance.__class__.objects.get(pk=instance.pk)) else: # m2m change LOG.debug('m2m change detected') new_state = kwargs.get('new_state', {}) old_state = kwargs.get('old_state', {}) except: pass if m2m_change: # m2m_change returns a list of changes changed_fields = m2m_audit.m2m_dict_diff(old_state, new_state) else: changed_fields = dict_diff(old_state, new_state) ######################## # CHANGE OPERATION ######################## if operation == EventLog.CHANGE: action = 'Alterar' # is there any change? if not changed_fields: persist_audit = False if m2m_change: descriptions = [] for changed_field in changed_fields: description = u'\n'.join([u'%s %s: %s %s %s %s' % ( _('field'), k, _('was changed from'), format_value(v[0]), _('to'), format_value(v[1]), ) for k, v in changed_field.items()]) descriptions.append(description) else: description = u'\n'.join([u'%s %s: %s %s %s %s' % ( _('field'), k, _('was changed from'), format_value(v[0]), _('to'), format_value(v[1]), ) for k, v in changed_fields.items()]) elif operation == EventLog.DELETE: action = 'Remover' description = _('Deleted %s') % unicode(instance) elif operation == EventLog.ADD: action = 'Cadastrar' description = _('Added %s') % unicode(instance) # LOG.debug("called audit with operation=%s instance=%s persist=%s" % (operation, instance, persist_audit)) if persist_audit: if m2m_change: for description in descriptions: # obj_description = ( # instance and unicode(instance) and '')[:100] audit_request = AuditRequest.current_request(True) changed_field = changed_fields.pop(0) old_value_list = {} new_value_list = {} for field, (old_value, new_value) in changed_field.items(): old_value_list.update( {field: handle_unicode(old_value)}) new_value_list.update( {field: handle_unicode(new_value)}) event['acao'] = 'Alterar' if action is None else action event['funcionalidade'] = instance.__class__.__name__ event['parametro_anterior'] = old_value_list event['parametro_atual'] = new_value_list event['id_objeto'] = instance.pk event['audit_request'] = audit_request # save the event log if audit_request: EventLog.log(audit_request.user, event) if LOG_QUEUE: EventLogQueue.log(audit_request.user, event) else: EventLog.log(None, event) if LOG_QUEUE: EventLogQueue.log(None, event) else: # obj_description = (instance and unicode(instance) and '')[:100] audit_request = AuditRequest.current_request(True) old_value_list = {} new_value_list = {} for field, (old_value, new_value) in changed_fields.items(): old_value_list.update({field: handle_unicode(old_value)}) new_value_list.update({field: handle_unicode(new_value)}) event['acao'] = 'Alterar' if action is None else action event['funcionalidade'] = instance.__class__.__name__ event['parametro_anterior'] = old_value_list event['parametro_atual'] = new_value_list event['id_objeto'] = instance.pk event['audit_request'] = audit_request if audit_request: EventLog.log(audit_request.user, event) if LOG_QUEUE: EventLogQueue.log(audit_request.user, event) else: EventLog.log(None, event) if LOG_QUEUE: EventLogQueue.log(None, event) except: LOG.error(u'Error registering auditing to %s: (%s) %s', repr(instance), type(instance), getattr(instance, '__dict__', None), exc_info=True)