예제 #1
0
    def save_response(self, data):
        if not self.audit_obj and data:
            # We got an exception before hitting auditwrapper on the way in: make sure to add basic info
            data['datetime'] = strftime("%Y-%m-%d %H:%M:%S")
            self.audit_obj = Audit(**data)

        else:
            for k, v in data.iteritems():
                if hasattr(self.audit_obj, k):
                    setattr(self.audit_obj, k, v)

        self.audit_obj.save()
예제 #2
0
    def process_view(self, request, view_func, view_args, view_kwargs):
        basic = {}
        principal_info = {}
        resources = {}
        request_info = {}

        # Don't audit unless required to
        if not self.must_audit(request):
            self.audit_obj = None
            return None

        # Basic Info
        basic['datetime'] = strftime("%Y-%m-%d %H:%M:%S")

        if hasattr(view_func, 'resolve'):
            view_func = view_func.resolve(request)
        basic['view_func'] = view_func.func_name if view_func else ''

        # Principal Info
        if request.principal:
            principal_info[
                'effective_principal_email'] = request.principal.effective_principal.email
            proxied_by = request.principal.proxied_by
            if proxied_by:
                principal_info['proxied_by_email'] = proxied_by.email

        # Resources
        carenet_id = record_id = None
        if view_kwargs.has_key('record'):
            resources['record_id'] = view_kwargs['record'].id
        elif view_kwargs.has_key('carenet'):
            resources['carenet_id'] = view_kwargs['carenet'].id

        if view_kwargs.has_key('document_id'):
            resources['document_id'] = view_kwargs['document_id']

        if view_kwargs.has_key('external_id'):

            # No need to resolve external ids: the info will still be in the DB
            resources['external_id'] = view_kwargs['external_id']

        if view_kwargs.has_key('message_id'):
            resources['message_id'] = view_kwargs['message_id']

        if view_kwargs.has_key('pha'):
            resources['pha_id'] = view_kwargs['pha'].id

        # Request Info

        # if request.META contains HTTP_AUTHORIZATION then use it
        # SZ: Temporary solution
        # Due to the possibility of different standards
        # we will need to check request.META
        # abstract this out!
        req_headers = ''
        if request.META.has_key('HTTP_AUTHORIZATION'):
            req_headers = request.META['HTTP_AUTHORIZATION']
        remote_host = ''
        if request.META.has_key('REMOTE_HOST'):
            remote_host = request.META['REMOTE_HOST']
        request_info['req_domain'] = remote_host
        request_info['req_headers'] = req_headers
        request_info['req_method'] = request.META['REQUEST_METHOD']
        request_info['req_ip_address'] = request.META['REMOTE_ADDR']
        request_info['req_url'] = request.META['PATH_INFO']

        # Build Audit object based on audit level
        data = {}
        for data_category in AUDIT_LEVELS[self.audit_level]:
            if data_category == BASIC:
                data.update(basic)
            if data_category == PRINCIPAL_INFO:
                data.update(principal_info)
            elif data_category == RESOURCES:
                data.update(resources)
            elif data_category == REQUEST_INFO:
                data.update(request_info)
            else:
                pass  # ignore data categories we don't know about

        self.audit_obj = Audit(**data) if data else None

        return None