def _create_closed_ticket(report, user): report.ticket = common.create_ticket(report, attach_new=False) report.save() # Add temp proof(s) for mail content temp_proofs = [] if not report.ticket.proof.count(): temp_proofs = common.get_temp_proofs(report.ticket) # Send email to Provider try: validate_email(report.provider.email.strip()) Logger.info(unicode('Sending email to provider')) common.send_email(report.ticket, [report.provider.email], settings.CODENAMES['not_managed_ip']) report.ticket.save() Logger.info(unicode('Mail sent to provider')) ImplementationFactory.instance.get_singleton_of('MailerServiceBase').close_thread(report.ticket) # Delete temp proof(s) for proof in temp_proofs: Proof.objects.filter(id=proof.id).delete() except (AttributeError, TypeError, ValueError, ValidationError): pass common.close_ticket(report, resolution_codename=settings.CODENAMES['invalid'], user=user) Logger.info(unicode('Ticket %d and report %d closed' % (report.ticket.id, report.id)))
def close_because_all_down(report=None, denied_by=None): """ Create and close a ticket when all report's items are down :param `abuse.models.Report` report: A Cerberus `abuse.models.Report` instance :param int denied_by: The id of the `abuse.models.User` who takes the decision to close the ticket """ if not isinstance(report, Report): try: report = Report.objects.get(id=report) except (AttributeError, ObjectDoesNotExist, TypeError, ValueError): Logger.error(unicode('Report %d cannot be found in DB. Skipping...' % (report))) return if not report.ticket: report.ticket = common.create_ticket(report, denied_by) report.save() # Add temp proof(s) for mail content temp_proofs = [] if not report.ticket.proof.count(): temp_proofs = common.get_temp_proofs(report.ticket) # Send email to Provider try: validate_email(report.provider.email.strip()) Logger.info(unicode('Sending email to provider')) __send_email(report.ticket, report.provider.email, settings.CODENAMES['no_more_content']) report.ticket.save() Logger.info(unicode('Mail sent to provider')) ImplementationFactory.instance.get_singleton_of('MailerServiceBase').close_thread(report.ticket) # Delete temp proof(s) for proof in temp_proofs: Proof.objects.filter(id=proof.id).delete() except (AttributeError, TypeError, ValueError, ValidationError): pass # Closing ticket and add tags common.close_ticket(report, resolution_codename=settings.CODENAMES['no_more_content']) report.ticket.tags.remove(Tag.objects.get(name=settings.TAGS['phishing_autoreopen'])) report.ticket.tags.add(Tag.objects.get(name=settings.TAGS['phishing_autoclosed'])) Logger.info(unicode('Ticket %d and report %d closed' % (report.ticket.id, report.id)))
def create_ticket_from_phishtocheck(report=None, user=None): """ Create/attach report to ticket + block_url + mail to defendant + email to provider :param int report: The id of the `abuse.models.Report` :param int user: The id of the `abuse.models.User` """ if not isinstance(report, Report): try: report = Report.objects.get(id=report) except (AttributeError, ObjectDoesNotExist, TypeError, ValueError): Logger.error(unicode('Report %d cannot be found in DB. Skipping...' % (report))) return if not isinstance(user, User): try: user = User.objects.get(id=user) except (AttributeError, ObjectDoesNotExist, TypeError, ValueError): Logger.error(unicode('User %d cannot be found in DB. Skipping...' % (user))) return # Create/attach to ticket ticket = database.search_ticket(report.defendant, report.category, report.service) new_ticket = False if not ticket: ticket = database.create_ticket(report.defendant, report.category, report.service, priority=report.provider.priority) new_ticket = True utils.scheduler.enqueue_in( timedelta(seconds=settings.GENERAL_CONFIG['phishing']['wait']), 'ticket.timeout', ticket_id=ticket.id, timeout=3600, ) common.get_temp_proofs(ticket, only_urls=True) report.ticket = ticket report.status = 'Attached' report.save() database.log_action_on_ticket( ticket=ticket, action='attach_report', report=report, new_ticket=new_ticket ) database.log_action_on_ticket( ticket=ticket, action='validate_phishtocheck', user=user, report=report ) # Sending email to provider if settings.TAGS['no_autoack'] not in report.provider.tags.all().values_list('name', flat=True): common.send_email( ticket, [report.provider.email], settings.CODENAMES['ack_received'], acknowledged_report_id=report.id, ) utils.default_queue.enqueue('phishing.block_url_and_mail', ticket_id=ticket.id, report_id=report.id) return ticket