Пример #1
0
    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)
Пример #5
0
    def process_response(self, request, response):
        from networkapi.eventlog.models import AuditRequest
        AuditRequest.cleanup_request()

        return response