Skip to content

Commit

Permalink
chore: remove unused submit by email functionality (#7249)
Browse files Browse the repository at this point in the history
  • Loading branch information
rjsparks committed Mar 26, 2024
1 parent 891c0e9 commit a00dfc0
Show file tree
Hide file tree
Showing 11 changed files with 43 additions and 1,158 deletions.
4 changes: 0 additions & 4 deletions ietf/mailtrigger/utils.py
Expand Up @@ -149,9 +149,5 @@ def starts_with(prefix):
return sorted(rule_list)


def get_base_submission_message_address():
return Recipient.objects.get(slug="submission_manualpost_handling").gather()[0]


def get_base_ipr_request_address():
return Recipient.objects.get(slug="ipr_requests").gather()[0]
193 changes: 2 additions & 191 deletions ietf/submit/mail.py
@@ -1,33 +1,22 @@
# Copyright The IETF Trust 2013-2020, All Rights Reserved
# -*- coding: utf-8 -*-


import re
import email
import base64
import os
import pyzmail

from django.conf import settings
from django.urls import reverse as urlreverse
from django.core.exceptions import ValidationError
from django.contrib.sites.models import Site
from django.template.loader import render_to_string
from django.utils.encoding import force_str

import debug # pyflakes:ignore

from ietf.utils.log import log
from ietf.utils.mail import send_mail, send_mail_message
from ietf.doc.models import Document
from ietf.ipr.mail import utc_from_string
from ietf.person.models import Person
from ietf.message.models import Message, MessageAttachment
from ietf.message.models import Message
from ietf.utils.accesstoken import generate_access_token
from ietf.mailtrigger.utils import gather_address_lists, get_base_submission_message_address
from ietf.submit.models import SubmissionEmailEvent, Submission
from ietf.mailtrigger.utils import gather_address_lists
from ietf.submit.checkers import DraftIdnitsChecker
from ietf.utils.timezone import date_today


def send_submission_confirmation(request, submission, chair_notice=False):
Expand Down Expand Up @@ -196,181 +185,3 @@ def announce_to_authors(request, submission):
'group': group},
cc=cc)


def get_reply_to():
"""Returns a new reply-to address for use with an outgoing message. This is an
address with "plus addressing" using a random string. Guaranteed to be unique"""
local,domain = get_base_submission_message_address().split('@')
while True:
rand = force_str(base64.urlsafe_b64encode(os.urandom(12)))
address = "{}+{}@{}".format(local,rand,domain)
q = Message.objects.filter(reply_to=address)
if not q:
return address


def process_response_email(msg):
"""Saves an incoming message. msg=string. Message "To" field is expected to
be in the format ietf-submit+[identifier]@ietf.org. Expect to find a message with
a matching value in the reply_to field, associated to a submission.
Create a Message object for the incoming message and associate it to
the original message via new SubmissionEvent"""
message = email.message_from_string(force_str(msg))
to = message.get('To')

# exit if this isn't a response we're interested in (with plus addressing)
local,domain = get_base_submission_message_address().split('@')
if not re.match(r'^{}\+[a-zA-Z0-9_\-]{}@{}'.format(local,'{16}',domain),to):
return None

try:
to_message = Message.objects.get(reply_to=to)
except Message.DoesNotExist:
log('Error finding matching message ({})'.format(to))
return None

try:
submission = to_message.manualevents.first().submission
except:
log('Error processing message ({})'.format(to))
return None

if not submission:
log('Error processing message - no submission ({})'.format(to))
return None

parts = pyzmail.parse.get_mail_parts(message)
body=''
for part in parts:
if part.is_body == 'text/plain' and part.disposition == None:
payload, used_charset = pyzmail.decode_text(part.get_payload(), part.charset, None)
body = body + payload + '\n'

by = Person.objects.get(name="(System)")
msg = submit_message_from_message(message, body, by)

desc = "Email: received message - manual post - {}-{}".format(
submission.name,
submission.rev)

submission_email_event = SubmissionEmailEvent.objects.create(
submission = submission,
desc = desc,
msgtype = 'msgin',
by = by,
message = msg,
in_reply_to = to_message
)

save_submission_email_attachments(submission_email_event, parts)

log("Received submission email from %s" % msg.frm)
return msg


def add_submission_email(request, remote_ip, name, rev, submission_pk, message, by, msgtype):
"""Add email to submission history"""

#in_reply_to = form.cleaned_data['in_reply_to']
# create Message
parts = pyzmail.parse.get_mail_parts(message)
body=''
for part in parts:
if part.is_body == 'text/plain' and part.disposition == None:
payload, used_charset = pyzmail.decode_text(part.get_payload(), part.charset, None)
body = body + payload + '\n'

msg = submit_message_from_message(message, body, by)

if (submission_pk != None):
# Must exist - we're adding a message to an existing submission
submission = Submission.objects.get(pk=submission_pk)
else:
# Must not exist
submissions = Submission.objects.filter(name=name,rev=rev).exclude(state_id='cancel')
if submissions.count() > 0:
raise ValidationError("Submission {} already exists".format(name))

# create Submission using the name
try:
submission = Submission.objects.create(
state_id="waiting-for-draft",
remote_ip=remote_ip,
name=name,
rev=rev,
title=name,
note="",
submission_date=date_today(),
replaces="",
)
from ietf.submit.utils import create_submission_event, docevent_from_submission
desc = "Submission created for rev {} in response to email".format(rev)
create_submission_event(request,
submission,
desc)
docevent_from_submission(submission, desc)
except Exception as e:
log("Exception: %s\n" % e)
raise

if msgtype == 'msgin':
rs = "Received"
else:
rs = "Sent"

desc = "{} message - manual post - {}-{}".format(rs, name, rev)
submission_email_event = SubmissionEmailEvent.objects.create(
desc = desc,
submission = submission,
msgtype = msgtype,
by = by,
message = msg)
#in_reply_to = in_reply_to

save_submission_email_attachments(submission_email_event, parts)
return submission, submission_email_event


def submit_message_from_message(message,body,by=None):
"""Returns a ietf.message.models.Message. msg=email.Message
A copy of mail.message_from_message with different body handling
"""
if not by:
by = Person.objects.get(name="(System)")
msg = Message.objects.create(
by = by,
subject = message.get('subject',''),
frm = message.get('from',''),
to = message.get('to',''),
cc = message.get('cc',''),
bcc = message.get('bcc',''),
reply_to = message.get('reply_to',''),
body = body,
time = utc_from_string(message.get('date', '')),
content_type = message.get('content_type', 'text/plain'),
)
return msg

def save_submission_email_attachments(submission_email_event, parts):
for part in parts:
if part.disposition != 'attachment':
continue

if part.type == 'text/plain':
payload, used_charset = pyzmail.decode_text(part.get_payload(),
part.charset,
None)
encoding = ""
else:
# Need a better approach - for the moment we'll just handle these
# and encode as base64
payload = base64.b64encode(part.get_payload())
encoding = "base64"

#name = submission_email_event.submission.name

MessageAttachment.objects.create(message = submission_email_event.message,
content_type = part.type,
encoding = encoding,
filename=part.filename,
body=payload)
32 changes: 0 additions & 32 deletions ietf/submit/management/commands/manualpost_email.py

This file was deleted.

0 comments on commit a00dfc0

Please sign in to comment.