Added ability to use the submission API with active secondary email addresses. Fixes issue #2639.
- Legacy-Id: 17383
This commit is contained in:
parent
af6ca37513
commit
b4d7dd131a
24
changelog
24
changelog
|
@ -1,3 +1,27 @@
|
||||||
|
ietfdb (6.119.1) ietf; urgency=medium
|
||||||
|
|
||||||
|
**Py2/3 fixes, Change to use the "requests" lib instead of urlopen()**
|
||||||
|
|
||||||
|
* Py2/3 compatibility tweaks for pyflakes.
|
||||||
|
|
||||||
|
* Changed some cases of urlopen() to use requests.get()
|
||||||
|
|
||||||
|
* Python3 is more ticklish about comparing strings to None than Py2.
|
||||||
|
Fixed an issue with this in generate_sort_key() for document searches.
|
||||||
|
|
||||||
|
* Fixed a Py2/3 issue in the pyflakes management command, and tweaked the
|
||||||
|
verbose output format.
|
||||||
|
|
||||||
|
* Merged back production changes to two scripts indirectly called by
|
||||||
|
/a/www/www6s/scripts/run-ietf-report, through
|
||||||
|
/a/www/www6s/scripts/run-report.
|
||||||
|
|
||||||
|
* Changed the release script to not pick up other email addresses than
|
||||||
|
those of contributors from the release notes.
|
||||||
|
|
||||||
|
-- Henrik Levkowetz <henrik@levkowetz.com> 03 Mar 2020 11:23:46 +0000
|
||||||
|
|
||||||
|
|
||||||
ietfdb (6.119.0) ietf; urgency=medium
|
ietfdb (6.119.0) ietf; urgency=medium
|
||||||
|
|
||||||
**Improved email handling, and roundup of Py2/3 conversion issues**
|
**Improved email handling, and roundup of Py2/3 conversion issues**
|
||||||
|
|
|
@ -35,7 +35,7 @@ from ietf.meeting.factories import MeetingFactory
|
||||||
from ietf.message.models import Message
|
from ietf.message.models import Message
|
||||||
from ietf.name.models import FormalLanguageName
|
from ietf.name.models import FormalLanguageName
|
||||||
from ietf.person.models import Person
|
from ietf.person.models import Person
|
||||||
from ietf.person.factories import UserFactory, PersonFactory
|
from ietf.person.factories import UserFactory, PersonFactory, EmailFactory
|
||||||
from ietf.submit.models import Submission, Preapproval
|
from ietf.submit.models import Submission, Preapproval
|
||||||
from ietf.submit.mail import add_submission_email, process_response_email
|
from ietf.submit.mail import add_submission_email, process_response_email
|
||||||
from ietf.utils.mail import outbox, empty_outbox, get_payload
|
from ietf.utils.mail import outbox, empty_outbox, get_payload
|
||||||
|
@ -1773,6 +1773,26 @@ class ApiSubmitTests(TestCase):
|
||||||
expected = "Upload of %s OK, confirmation requests sent to:\n %s" % (name, author.formatted_email().replace('\n',''))
|
expected = "Upload of %s OK, confirmation requests sent to:\n %s" % (name, author.formatted_email().replace('\n',''))
|
||||||
self.assertContains(r, expected, status_code=200)
|
self.assertContains(r, expected, status_code=200)
|
||||||
|
|
||||||
|
def test_api_submit_secondary_email_active(self):
|
||||||
|
person = PersonFactory()
|
||||||
|
email = EmailFactory(person=person)
|
||||||
|
r, author, name = self.post_submission('00', author=person, email=email.address)
|
||||||
|
for expected in [
|
||||||
|
"Upload of %s OK, confirmation requests sent to:" % (name, ),
|
||||||
|
author.formatted_email().replace('\n',''),
|
||||||
|
]:
|
||||||
|
self.assertContains(r, expected, status_code=200)
|
||||||
|
|
||||||
|
def test_api_submit_secondary_email_inactive(self):
|
||||||
|
person = PersonFactory()
|
||||||
|
prim = person.email()
|
||||||
|
prim.primary = True
|
||||||
|
prim.save()
|
||||||
|
email = EmailFactory(person=person, active=False)
|
||||||
|
r, author, name = self.post_submission('00', author=person, email=email.address)
|
||||||
|
expected = "No such user: %s" % email.address
|
||||||
|
self.assertContains(r, expected, status_code=400)
|
||||||
|
|
||||||
def test_api_submit_no_user(self):
|
def test_api_submit_no_user(self):
|
||||||
email='nonexistant.user@example.org'
|
email='nonexistant.user@example.org'
|
||||||
r, author, name = self.post_submission('00', email=email)
|
r, author, name = self.post_submission('00', email=email)
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# Copyright The IETF Trust 2011-2019, All Rights Reserved
|
# Copyright The IETF Trust 2011-2020, All Rights Reserved
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
|
||||||
|
@ -30,7 +30,7 @@ from ietf.group.utils import group_features_group_filter
|
||||||
from ietf.ietfauth.utils import has_role, role_required
|
from ietf.ietfauth.utils import has_role, role_required
|
||||||
from ietf.mailtrigger.utils import gather_address_lists
|
from ietf.mailtrigger.utils import gather_address_lists
|
||||||
from ietf.message.models import Message, MessageAttachment
|
from ietf.message.models import Message, MessageAttachment
|
||||||
from ietf.person.models import Person
|
from ietf.person.models import Person, Email
|
||||||
from ietf.submit.forms import ( SubmissionManualUploadForm, SubmissionAutoUploadForm, AuthorForm,
|
from ietf.submit.forms import ( SubmissionManualUploadForm, SubmissionAutoUploadForm, AuthorForm,
|
||||||
SubmitterForm, EditSubmissionForm, PreapprovalForm, ReplacesForm, SubmissionEmailForm, MessageModelForm )
|
SubmitterForm, EditSubmissionForm, PreapprovalForm, ReplacesForm, SubmissionEmailForm, MessageModelForm )
|
||||||
from ietf.submit.mail import ( send_full_url, send_manual_post_request, add_submission_email, get_reply_to )
|
from ietf.submit.mail import ( send_full_url, send_manual_post_request, add_submission_email, get_reply_to )
|
||||||
|
@ -106,10 +106,25 @@ def api_submit(request):
|
||||||
username = form.cleaned_data['user']
|
username = form.cleaned_data['user']
|
||||||
user = User.objects.filter(username=username)
|
user = User.objects.filter(username=username)
|
||||||
if user.count() == 0:
|
if user.count() == 0:
|
||||||
return err(400, "No such user: %s" % username)
|
# See if a secondary login was being used
|
||||||
if user.count() > 1:
|
email = Email.objects.filter(address=username, active=True)
|
||||||
|
# The error messages don't talk about 'email', as the field we're
|
||||||
|
# looking at is still the 'username' field.
|
||||||
|
if email.count() == 0:
|
||||||
|
return err(400, "No such user: %s" % username)
|
||||||
|
elif email.count() > 1:
|
||||||
|
return err(500, "Multiple matching accounts for %s" % username)
|
||||||
|
email = email.first()
|
||||||
|
if not hasattr(email, 'person'):
|
||||||
|
return err(400, "No person matches %s" % username)
|
||||||
|
person = email.person
|
||||||
|
if not hasattr(person, 'user'):
|
||||||
|
return err(400, "No user matches: %s" % username)
|
||||||
|
user = person.user
|
||||||
|
elif user.count() > 1:
|
||||||
return err(500, "Multiple matching accounts for %s" % username)
|
return err(500, "Multiple matching accounts for %s" % username)
|
||||||
user = user.first()
|
else:
|
||||||
|
user = user.first()
|
||||||
if not hasattr(user, 'person'):
|
if not hasattr(user, 'person'):
|
||||||
return err(400, "No person with username %s" % username)
|
return err(400, "No person with username %s" % username)
|
||||||
|
|
||||||
|
@ -133,7 +148,7 @@ def api_submit(request):
|
||||||
if errors:
|
if errors:
|
||||||
raise ValidationError(errors)
|
raise ValidationError(errors)
|
||||||
|
|
||||||
if not user.username.lower() in [ a['email'].lower() for a in authors ]:
|
if not username.lower() in [ a['email'].lower() for a in authors ]:
|
||||||
raise ValidationError('Submitter %s is not one of the document authors' % user.username)
|
raise ValidationError('Submitter %s is not one of the document authors' % user.username)
|
||||||
|
|
||||||
submission.submitter = user.person.formatted_email()
|
submission.submitter = user.person.formatted_email()
|
||||||
|
|
Loading…
Reference in a new issue