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()
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