def _reinject_validated(report, user): trusted = True ticket = None if all((report.defendant, report.category, report.service)): msg = 'Looking for opened ticket for (%s, %s, %s)' Logger.debug(unicode(msg % (report.defendant.customerId, report.category.name, report.service.name))) ticket = database.search_ticket(report.defendant, report.category, report.service) # Checking specific processing workflow for workflow in ReportWorkflowFactory.instance.registered_instances: if workflow.identify(report, ticket, is_trusted=trusted) and workflow.apply(report, ticket, trusted, False): Logger.debug(unicode('Specific workflow %s applied' % (str(workflow.__class__.__name__)))) return # Create ticket if trusted new_ticket = False if not ticket: ticket = database.create_ticket(report.defendant, report.category, report.service, priority=report.provider.priority) new_ticket = True if ticket: report.ticket = Ticket.objects.get(id=ticket.id) report.status = 'Attached' report.save() database.set_ticket_higher_priority(report.ticket) database.log_action_on_ticket( ticket=ticket, action='attach_report', report=report, new_ticket=new_ticket, user=user ) try: __send_ack(report, lang='EN') except MailerServiceException as ex: raise MailerServiceException(ex)
def __create_with_services(abuse_report, filename, services): """ Create report(s), ticket(s), item(s), defendant(s), service(s), attachment(s) in Cerberus :param `ParsedEmail` abuse_report: The `ParsedEmail` :param str filename: The filename of the email :param dict services: The identified service(s) (see adapters/dao/customer/abstract.py) :rtype: list :returns: The list of Cerberus `abuse.models.Report` created """ created_reports = [] for data in services: # For identified (service, defendant, items) tuple report = __create_without_services(abuse_report, filename) created_reports.append(report) report.defendant = data['defendant'] report.service = data['service'] report.save() if report.status == 'Archived': # because autoarchive tag continue _, attach_only, no_phishtocheck = __get_attributes_based_on_tags(report, abuse_report.recipients) __insert_items(report.id, data['items']) # The provider or the way we received the report trusted = True if report.provider.trusted or abuse_report.trusted else False # Looking for existing open ticket for same (service, defendant, category) ticket = None if all((report.defendant, report.category, report.service)): msg = 'Looking for opened ticket for (%s, %s, %s)' Logger.debug(unicode(msg % (report.defendant.customerId, report.category.name, report.service.name))) ticket = database.search_ticket(report.defendant, report.category, report.service) # Checking specific processing workflow is_workflow_applied = False for workflow in ReportWorkflowFactory.instance.registered_instances: if workflow.identify(report, ticket, is_trusted=trusted): is_workflow_applied = workflow.apply(report, ticket, trusted, no_phishtocheck) if is_workflow_applied: database.set_report_specificworkflow_tag(report, str(workflow.__class__.__name__)) Logger.debug(unicode('Specific workflow %s applied' % str(workflow.__class__.__name__))) break if is_workflow_applied: continue # If attach report only and no ticket found, continue if not ticket and attach_only: report.status = 'Archived' report.save() continue # Create ticket if trusted new_ticket = False if not ticket and trusted: ticket = database.create_ticket(report.defendant, report.category, report.service, priority=report.provider.priority) new_ticket = True if ticket: report.ticket = Ticket.objects.get(id=ticket.id) report.status = 'Attached' report.save() database.set_ticket_higher_priority(report.ticket) database.log_action_on_ticket( ticket=ticket, action='attach_report', report=report, new_ticket=new_ticket ) return created_reports