Skip to content

Commit 485216d

Browse files
authored
Remove dead email-mieco/ email gateway (WT-1315) (#17294)
The static Netlify build of `future.mozilla.org` POSTed its contact form to this endpoint so bedrock could relay it as email. That site was retired long ago, leaving the view, form, template and tests as dead code.
1 parent faaafa3 commit 485216d

5 files changed

Lines changed: 0 additions & 193 deletions

File tree

bedrock/mozorg/forms.py

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
from datetime import datetime
77
from random import randrange
88

9-
from django import forms
109
from django.forms import widgets
1110
from django.urls import reverse
1211
from django.utils.safestring import mark_safe
@@ -75,20 +74,3 @@ class TelInput(widgets.TextInput):
7574

7675
class NumberInput(widgets.TextInput):
7776
input_type = "number"
78-
79-
80-
class MiecoEmailForm(forms.Form):
81-
"""
82-
A form class used to validate the data coming from the MIECO site.
83-
"""
84-
85-
MESSAGE_ID_CHOICES = (
86-
("innovations", "innovations"),
87-
("mieco", "mieco"),
88-
)
89-
90-
name = forms.CharField(required=False, max_length=100)
91-
email = forms.EmailField()
92-
interests = forms.CharField(required=False, max_length=100)
93-
description = forms.CharField(required=False, max_length=750)
94-
message_id = forms.ChoiceField(required=False, choices=MESSAGE_ID_CHOICES)

bedrock/mozorg/templates/mozorg/emails/mieco-email.txt

Lines changed: 0 additions & 9 deletions
This file was deleted.

bedrock/mozorg/tests/test_views.py

Lines changed: 0 additions & 101 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,8 @@
22
# License, v. 2.0. If a copy of the MPL was not distributed with this
33
# file, You can obtain one at https://mozilla.org/MPL/2.0/.
44

5-
import json
65
from unittest.mock import patch
76

8-
from django.core import mail
97
from django.http.response import HttpResponse
108
from django.test import override_settings
119
from django.test.client import RequestFactory
@@ -167,102 +165,3 @@ def test_webvision_redirect(self):
167165
resp = self.client.get(path, follow=True, headers={"accept-language": "en"})
168166
self.assertEqual(resp.redirect_chain[0], ("/about/webvision/", 301))
169167
self.assertEqual(resp.redirect_chain[1], ("/en-US/about/webvision/", 302))
170-
171-
172-
class TestMiecoEmail(TestCase):
173-
def setUp(self):
174-
self.factory = RequestFactory()
175-
self.view = views.mieco_email_form
176-
with self.activate_locale("en-US"):
177-
self.url = reverse("mozorg.email_mieco")
178-
179-
self.data = {
180-
"name": "The Dude",
181-
"email": "foo@bar.com",
182-
"interests": "abiding, bowling",
183-
"description": "The rug really tied the room together.",
184-
}
185-
186-
def tearDown(self):
187-
mail.outbox = []
188-
189-
def test_not_post(self):
190-
resp = self.client.get(self.url)
191-
self.assertEqual(resp.status_code, 400)
192-
self.assertEqual(resp.text, '{"error": 400, "message": "Only POST requests are allowed"}')
193-
self.assertIn("Access-Control-Allow-Origin", resp.headers)
194-
self.assertIn("Access-Control-Allow-Headers", resp.headers)
195-
196-
def test_bad_json(self):
197-
resp = self.client.post(self.url, content_type="application/json", data='{{"bad": "json"}')
198-
self.assertEqual(resp.status_code, 400)
199-
self.assertEqual(resp.text, '{"error": 400, "message": "Error decoding JSON"}')
200-
self.assertIn("Access-Control-Allow-Origin", resp.headers)
201-
self.assertIn("Access-Control-Allow-Headers", resp.headers)
202-
203-
def test_invalid_email(self):
204-
resp = self.client.post(self.url, content_type="application/json", data='{"email": "foo@bar"}')
205-
self.assertEqual(resp.status_code, 400)
206-
self.assertEqual(resp.text, '{"error": 400, "message": "Invalid form data"}')
207-
self.assertIn("Access-Control-Allow-Origin", resp.headers)
208-
self.assertIn("Access-Control-Allow-Headers", resp.headers)
209-
210-
def test_invalid_message_id(self):
211-
self.data["message_id"] = "the-dude"
212-
resp = self.client.post(self.url, content_type="application/json", data=json.dumps(self.data))
213-
self.assertEqual(resp.status_code, 400)
214-
self.assertEqual(resp.text, '{"error": 400, "message": "Invalid form data"}')
215-
self.assertIn("Access-Control-Allow-Origin", resp.headers)
216-
self.assertIn("Access-Control-Allow-Headers", resp.headers)
217-
218-
@patch("bedrock.mozorg.views.render_to_string", return_value="rendered")
219-
@patch("bedrock.mozorg.views.EmailMessage")
220-
def test_success(self, mock_emailMessage, mock_render_to_string):
221-
resp = self.client.post(self.url, content_type="application/json", data=json.dumps(self.data))
222-
223-
self.assertEqual(resp.status_code, 200)
224-
mock_emailMessage.assert_called_once_with(
225-
views.MIECO_EMAIL_SUBJECT["mieco"], "rendered", views.MIECO_EMAIL_SENDER, views.MIECO_EMAIL_TO["mieco"]
226-
)
227-
self.assertEqual(resp.text, '{"status": "ok"}')
228-
self.assertIn("Access-Control-Allow-Origin", resp.headers)
229-
self.assertIn("Access-Control-Allow-Headers", resp.headers)
230-
231-
@patch("bedrock.mozorg.views.render_to_string", return_value="rendered")
232-
@patch("bedrock.mozorg.views.EmailMessage")
233-
def test_success_mieco(self, mock_emailMessage, mock_render_to_string):
234-
self.data["message_id"] = "mieco"
235-
resp = self.client.post(self.url, content_type="application/json", data=json.dumps(self.data))
236-
237-
self.assertEqual(resp.status_code, 200)
238-
mock_emailMessage.assert_called_once_with(
239-
views.MIECO_EMAIL_SUBJECT["mieco"], "rendered", views.MIECO_EMAIL_SENDER, views.MIECO_EMAIL_TO["mieco"]
240-
)
241-
self.assertEqual(resp.text, '{"status": "ok"}')
242-
self.assertIn("Access-Control-Allow-Origin", resp.headers)
243-
self.assertIn("Access-Control-Allow-Headers", resp.headers)
244-
245-
@patch("bedrock.mozorg.views.render_to_string", return_value="rendered")
246-
@patch("bedrock.mozorg.views.EmailMessage")
247-
def test_success_innovations(self, mock_emailMessage, mock_render_to_string):
248-
self.data["message_id"] = "innovations"
249-
resp = self.client.post(self.url, content_type="application/json", data=json.dumps(self.data))
250-
251-
self.assertEqual(resp.status_code, 200)
252-
mock_emailMessage.assert_called_once_with(
253-
views.MIECO_EMAIL_SUBJECT["innovations"], "rendered", views.MIECO_EMAIL_SENDER, views.MIECO_EMAIL_TO["innovations"]
254-
)
255-
self.assertEqual(resp.text, '{"status": "ok"}')
256-
self.assertIn("Access-Control-Allow-Origin", resp.headers)
257-
self.assertIn("Access-Control-Allow-Headers", resp.headers)
258-
259-
def test_outbox(self):
260-
resp = self.client.post(self.url, content_type="application/json", data=json.dumps(self.data))
261-
self.assertEqual(resp.status_code, 200)
262-
self.assertEqual(len(mail.outbox), 1)
263-
264-
email = mail.outbox[0]
265-
self.assertIn(f"Name: {self.data['name']}", email.body)
266-
self.assertIn(f"E-mail: {self.data['email']}", email.body)
267-
self.assertIn(f"Interests: {self.data['interests']}", email.body)
268-
self.assertIn(f"Message:\n{self.data['description']}", email.body)

bedrock/mozorg/urls.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,6 @@
140140
name="mozorg.about.webvision.full",
141141
),
142142
page("analytics-tests/", "mozorg/analytics-tests/ga-index.html"),
143-
path("email-mieco/", views.mieco_email_form, name="mozorg.email_mieco"),
144143
path("antiharassment-tool/", views.anti_harassment_tool_view, name="mozorg.antiharassment-tool"),
145144
page("rise25/nominate/", "mozorg/rise25/landing.html"),
146145
redirect("advertising/formats/", "/advertising/solutions/", prepend_locale=False),

bedrock/mozorg/views.py

Lines changed: 0 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,15 @@
22
# License, v. 2.0. If a copy of the MPL was not distributed with this
33
# file, You can obtain one at https://mozilla.org/MPL/2.0/.
44

5-
import json
6-
75
from django.conf import settings
8-
from django.core.mail import EmailMessage
96
from django.http import Http404
107
from django.shortcuts import render as django_render
11-
from django.template.loader import render_to_string
128
from django.views.decorators.http import require_safe
139
from django.views.generic import TemplateView
1410

15-
from jsonview.decorators import json_view
1611
from product_details import product_details
1712

1813
from bedrock.mozorg.credits import CreditsFile
19-
from bedrock.mozorg.forms import MiecoEmailForm
2014
from bedrock.mozorg.models import WebvisionDoc
2115
from bedrock.newsletter.forms import NewsletterFooterForm
2216
from lib import l10n_utils
@@ -198,64 +192,6 @@ def get_context_data(self, **kwargs):
198192
return context
199193

200194

201-
MIECO_EMAIL_SUBJECT = {"mieco": "MIECO Interest Form", "innovations": "Innovations Interest Form"}
202-
MIECO_EMAIL_SENDER = settings.DEFAULT_FROM_EMAIL
203-
MIECO_EMAIL_TO = {
204-
"mieco": ["mieco@mozilla.com"],
205-
"innovations": ["innovations@mozilla.com"],
206-
}
207-
208-
209-
@json_view
210-
def mieco_email_form(request):
211-
"""
212-
This form accepts a POST request from future.mozilla.org/mieco and will send
213-
an email with the data included in the email.
214-
"""
215-
CORS_HEADERS = {
216-
"Access-Control-Allow-Origin": "https://future.mozilla.org",
217-
"Access-Control-Allow-Headers": "accept, accept-encoding, content-type, dnt, origin, user-agent, x-csrftoken, x-requested-with",
218-
}
219-
220-
if request.method == "OPTIONS":
221-
return {}, 200, CORS_HEADERS
222-
223-
if request.method != "POST":
224-
return {"error": 400, "message": "Only POST requests are allowed"}, 400, CORS_HEADERS
225-
226-
try:
227-
json_data = json.loads(request.body.decode("utf-8"))
228-
except json.decoder.JSONDecodeError:
229-
return {"error": 400, "message": "Error decoding JSON"}, 400, CORS_HEADERS
230-
231-
form = MiecoEmailForm(
232-
{
233-
"email": json_data.get("email", ""),
234-
"name": json_data.get("name", ""),
235-
"interests": json_data.get("interests", ""),
236-
"description": json_data.get("description", ""),
237-
"message_id": json_data.get("message_id", ""),
238-
}
239-
)
240-
241-
if not form.is_valid():
242-
return {"error": 400, "message": "Invalid form data"}, 400, CORS_HEADERS
243-
244-
message_id = form.cleaned_data.pop("message_id") or "mieco"
245-
email_to = MIECO_EMAIL_TO[message_id]
246-
email_msg = render_to_string("mozorg/emails/mieco-email.txt", {"data": form.cleaned_data}, request=request)
247-
email_sub = MIECO_EMAIL_SUBJECT[message_id]
248-
249-
email = EmailMessage(email_sub, email_msg, MIECO_EMAIL_SENDER, email_to)
250-
251-
try:
252-
email.send()
253-
except Exception as e:
254-
return {"error": 400, "message": str(e)}, 400, CORS_HEADERS
255-
256-
return {"status": "ok"}, 200, CORS_HEADERS
257-
258-
259195
@require_safe
260196
def anti_harassment_tool_view(request):
261197
locale = l10n_utils.get_locale(request)

0 commit comments

Comments
 (0)