mirror of
https://github.com/zulip/zulip.git
synced 2025-11-04 22:13:26 +00:00
emails: Add a FromAddress class to control access to certain settings emails.
No change in behavior. Also makes the first step towards converting all uses of settings.ZULIP_ADMINISTRATOR and settings.NOREPLY_EMAIL_ADDRESS to FromAddress.*. Once everything is converted, it will be easier to ensure that future development doesn't break backwards compatibility with the old style of settings emails.
This commit is contained in:
@@ -29,7 +29,7 @@ from zerver.lib.message import (
|
|||||||
)
|
)
|
||||||
from zerver.lib.realm_icon import realm_icon_url
|
from zerver.lib.realm_icon import realm_icon_url
|
||||||
from zerver.lib.retention import move_message_to_archive
|
from zerver.lib.retention import move_message_to_archive
|
||||||
from zerver.lib.send_email import send_email
|
from zerver.lib.send_email import send_email, FromAddress
|
||||||
from zerver.models import Realm, RealmEmoji, Stream, UserProfile, UserActivity, \
|
from zerver.models import Realm, RealmEmoji, Stream, UserProfile, UserActivity, \
|
||||||
RealmDomain, \
|
RealmDomain, \
|
||||||
Subscription, Recipient, Message, Attachment, UserMessage, RealmAuditLog, \
|
Subscription, Recipient, Message, Attachment, UserMessage, RealmAuditLog, \
|
||||||
@@ -640,8 +640,7 @@ def do_start_email_change_process(user_profile, new_email):
|
|||||||
activation_url = EmailChangeConfirmation.objects.get_link_for_object(obj, host=user_profile.realm.host)
|
activation_url = EmailChangeConfirmation.objects.get_link_for_object(obj, host=user_profile.realm.host)
|
||||||
context = {'realm': user_profile.realm, 'old_email': old_email, 'new_email': new_email,
|
context = {'realm': user_profile.realm, 'old_email': old_email, 'new_email': new_email,
|
||||||
'activate_url': activation_url}
|
'activate_url': activation_url}
|
||||||
send_email('zerver/emails/confirm_new_email', new_email, from_address=settings.ZULIP_ADMINISTRATOR.split()[-1],
|
send_email('zerver/emails/confirm_new_email', new_email, from_address=FromAddress.SUPPORT, context=context)
|
||||||
context=context)
|
|
||||||
|
|
||||||
def compute_irc_user_fullname(email):
|
def compute_irc_user_fullname(email):
|
||||||
# type: (NonBinaryStr) -> NonBinaryStr
|
# type: (NonBinaryStr) -> NonBinaryStr
|
||||||
@@ -3054,8 +3053,7 @@ def do_send_confirmation_email(invitee, referrer, body):
|
|||||||
"""
|
"""
|
||||||
activation_url = Confirmation.objects.get_link_for_object(invitee, host=referrer.realm.host)
|
activation_url = Confirmation.objects.get_link_for_object(invitee, host=referrer.realm.host)
|
||||||
context = {'referrer': referrer, 'custom_body': body, 'activate_url': activation_url}
|
context = {'referrer': referrer, 'custom_body': body, 'activate_url': activation_url}
|
||||||
send_email('zerver/emails/invitation', invitee.email, from_address=settings.ZULIP_ADMINISTRATOR.split()[-1],
|
send_email('zerver/emails/invitation', invitee.email, from_address=FromAddress.SUPPORT, context=context)
|
||||||
context=context)
|
|
||||||
|
|
||||||
def is_inactive(email):
|
def is_inactive(email):
|
||||||
# type: (Text) -> None
|
# type: (Text) -> None
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ from django.template import loader
|
|||||||
from django.utils.timezone import now as timezone_now
|
from django.utils.timezone import now as timezone_now
|
||||||
from zerver.decorator import statsd_increment
|
from zerver.decorator import statsd_increment
|
||||||
from zerver.lib.send_email import send_future_email, display_email, \
|
from zerver.lib.send_email import send_future_email, display_email, \
|
||||||
send_email_from_dict
|
send_email_from_dict, FromAddress
|
||||||
from zerver.lib.queue import queue_json_publish
|
from zerver.lib.queue import queue_json_publish
|
||||||
from zerver.models import (
|
from zerver.models import (
|
||||||
Recipient,
|
Recipient,
|
||||||
@@ -26,6 +26,7 @@ from zerver.models import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
import datetime
|
import datetime
|
||||||
|
from email.utils import formataddr
|
||||||
import re
|
import re
|
||||||
import subprocess
|
import subprocess
|
||||||
import ujson
|
import ujson
|
||||||
@@ -398,7 +399,7 @@ def enqueue_welcome_emails(email, name):
|
|||||||
from_address = settings.WELCOME_EMAIL_SENDER['email']
|
from_address = settings.WELCOME_EMAIL_SENDER['email']
|
||||||
else:
|
else:
|
||||||
from_name = None
|
from_name = None
|
||||||
from_address = settings.ZULIP_ADMINISTRATOR.split()[-1]
|
from_address = FromAddress.SUPPORT
|
||||||
|
|
||||||
user_profile = get_user_profile_by_email(email)
|
user_profile = get_user_profile_by_email(email)
|
||||||
unsubscribe_link = one_click_unsubscribe_link(user_profile, "welcome")
|
unsubscribe_link = one_click_unsubscribe_link(user_profile, "welcome")
|
||||||
|
|||||||
@@ -10,6 +10,10 @@ import ujson
|
|||||||
|
|
||||||
from typing import Any, Dict, Iterable, List, Mapping, Optional, Text
|
from typing import Any, Dict, Iterable, List, Mapping, Optional, Text
|
||||||
|
|
||||||
|
class FromAddress(object):
|
||||||
|
SUPPORT = parseaddr(settings.ZULIP_ADMINISTRATOR)[1]
|
||||||
|
NOREPLY = parseaddr(settings.NOREPLY_EMAIL_ADDRESS)[1]
|
||||||
|
|
||||||
def display_email(user):
|
def display_email(user):
|
||||||
# type: (UserProfile) -> Text
|
# type: (UserProfile) -> Text
|
||||||
# Change to '%s <%s>' % (user.full_name, user.email) once
|
# Change to '%s <%s>' % (user.full_name, user.email) once
|
||||||
@@ -33,7 +37,7 @@ def build_email(template_prefix, to_email, from_name=None, from_address=None,
|
|||||||
if from_name is None:
|
if from_name is None:
|
||||||
from_name = "Zulip"
|
from_name = "Zulip"
|
||||||
if from_address is None:
|
if from_address is None:
|
||||||
from_address = parseaddr(settings.NOREPLY_EMAIL_ADDRESS)[1]
|
from_address = FromAddress.NOREPLY
|
||||||
from_email = formataddr((from_name, from_address))
|
from_email = formataddr((from_name, from_address))
|
||||||
reply_to = None
|
reply_to = None
|
||||||
if reply_to_email is not None:
|
if reply_to_email is not None:
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ from zerver.lib.actions import (
|
|||||||
get_stream,
|
get_stream,
|
||||||
do_create_realm,
|
do_create_realm,
|
||||||
)
|
)
|
||||||
from zerver.lib.send_email import display_email, send_email, send_future_email
|
from zerver.lib.send_email import display_email, send_email, send_future_email, FromAddress
|
||||||
from zerver.lib.initial_password import initial_password
|
from zerver.lib.initial_password import initial_password
|
||||||
from zerver.lib.actions import (
|
from zerver.lib.actions import (
|
||||||
do_deactivate_realm,
|
do_deactivate_realm,
|
||||||
@@ -743,7 +743,7 @@ so we didn't send them an invitation. We did send invitations to everyone else!"
|
|||||||
with self.settings(EMAIL_BACKEND='django.core.mail.backends.console.EmailBackend'):
|
with self.settings(EMAIL_BACKEND='django.core.mail.backends.console.EmailBackend'):
|
||||||
send_future_email(
|
send_future_email(
|
||||||
"zerver/emails/invitation_reminder", data["email"],
|
"zerver/emails/invitation_reminder", data["email"],
|
||||||
from_address=settings.ZULIP_ADMINISTRATOR.split()[-1], context=context)
|
from_address=FromAddress.SUPPORT, context=context)
|
||||||
email_jobs_to_deliver = ScheduledJob.objects.filter(
|
email_jobs_to_deliver = ScheduledJob.objects.filter(
|
||||||
type=ScheduledJob.EMAIL,
|
type=ScheduledJob.EMAIL,
|
||||||
scheduled_timestamp__lte=timezone_now())
|
scheduled_timestamp__lte=timezone_now())
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ from zerver.models import UserProfile, Realm, PreregistrationUser, \
|
|||||||
name_changes_disabled, email_to_username, \
|
name_changes_disabled, email_to_username, \
|
||||||
completely_open, get_unique_open_realm, email_allowed_for_realm, \
|
completely_open, get_unique_open_realm, email_allowed_for_realm, \
|
||||||
get_realm, get_realm_by_email_domain, get_system_bot
|
get_realm, get_realm_by_email_domain, get_system_bot
|
||||||
from zerver.lib.send_email import send_email, send_email_to_user
|
from zerver.lib.send_email import send_email, send_email_to_user, FromAddress
|
||||||
from zerver.lib.events import do_events_register
|
from zerver.lib.events import do_events_register
|
||||||
from zerver.lib.actions import do_change_password, do_change_full_name, do_change_is_admin, \
|
from zerver.lib.actions import do_change_password, do_change_full_name, do_change_is_admin, \
|
||||||
do_activate_user, do_create_user, do_create_realm, set_default_streams, \
|
do_activate_user, do_create_user, do_create_realm, set_default_streams, \
|
||||||
@@ -313,7 +313,7 @@ def send_registration_completion_email(email, request, realm_creation=False):
|
|||||||
"""
|
"""
|
||||||
prereg_user = create_preregistration_user(email, request, realm_creation)
|
prereg_user = create_preregistration_user(email, request, realm_creation)
|
||||||
activation_url = Confirmation.objects.get_link_for_object(prereg_user, host=request.get_host())
|
activation_url = Confirmation.objects.get_link_for_object(prereg_user, host=request.get_host())
|
||||||
send_email('zerver/emails/confirm_registration', email, from_address=settings.ZULIP_ADMINISTRATOR.split()[-1],
|
send_email('zerver/emails/confirm_registration', email, from_address=FromAddress.SUPPORT,
|
||||||
context={'activate_url': activation_url})
|
context={'activate_url': activation_url})
|
||||||
if settings.DEVELOPMENT and realm_creation:
|
if settings.DEVELOPMENT and realm_creation:
|
||||||
request.session['confirmation_key'] = {'confirmation_key': activation_url.split('/')[-1]}
|
request.session['confirmation_key'] = {'confirmation_key': activation_url.split('/')[-1]}
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ from zerver.lib.actions import do_change_password, \
|
|||||||
do_regenerate_api_key, do_change_avatar_fields, do_set_user_display_setting, \
|
do_regenerate_api_key, do_change_avatar_fields, do_set_user_display_setting, \
|
||||||
validate_email, do_change_user_email, do_start_email_change_process
|
validate_email, do_change_user_email, do_start_email_change_process
|
||||||
from zerver.lib.avatar import avatar_url
|
from zerver.lib.avatar import avatar_url
|
||||||
from zerver.lib.send_email import send_email, display_email
|
from zerver.lib.send_email import send_email, display_email, FromAddress
|
||||||
from zerver.lib.i18n import get_available_language_codes
|
from zerver.lib.i18n import get_available_language_codes
|
||||||
from zerver.lib.response import json_success, json_error
|
from zerver.lib.response import json_success, json_error
|
||||||
from zerver.lib.upload import upload_avatar_image
|
from zerver.lib.upload import upload_avatar_image
|
||||||
@@ -52,7 +52,7 @@ def confirm_email_change(request, confirmation_key):
|
|||||||
'new_email': new_email,
|
'new_email': new_email,
|
||||||
}
|
}
|
||||||
send_email('zerver/emails/notify_change_in_email', old_email,
|
send_email('zerver/emails/notify_change_in_email', old_email,
|
||||||
from_address=settings.ZULIP_ADMINISTRATOR.split()[-1], context=context)
|
from_address=FromAddress.SUPPORT, context=context)
|
||||||
|
|
||||||
ctx = {
|
ctx = {
|
||||||
'confirmed': confirmed,
|
'confirmed': confirmed,
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ from zerver.lib.actions import do_send_confirmation_email, \
|
|||||||
render_incoming_message, do_update_embedded_data
|
render_incoming_message, do_update_embedded_data
|
||||||
from zerver.lib.url_preview import preview as url_preview
|
from zerver.lib.url_preview import preview as url_preview
|
||||||
from zerver.lib.digest import handle_digest_email
|
from zerver.lib.digest import handle_digest_email
|
||||||
from zerver.lib.send_email import send_future_email, send_email_from_dict
|
from zerver.lib.send_email import send_future_email, send_email_from_dict, FromAddress
|
||||||
from zerver.lib.email_mirror import process_message as mirror_email
|
from zerver.lib.email_mirror import process_message as mirror_email
|
||||||
from zerver.decorator import JsonableError
|
from zerver.decorator import JsonableError
|
||||||
from zerver.tornado.socket import req_redis_key
|
from zerver.tornado.socket import req_redis_key
|
||||||
@@ -180,7 +180,7 @@ class ConfirmationEmailWorker(QueueProcessingWorker):
|
|||||||
send_future_email(
|
send_future_email(
|
||||||
"zerver/emails/invitation_reminder",
|
"zerver/emails/invitation_reminder",
|
||||||
data["email"],
|
data["email"],
|
||||||
from_address=settings.ZULIP_ADMINISTRATOR.split()[-1],
|
from_address=FromAddress.SUPPORT,
|
||||||
context=context,
|
context=context,
|
||||||
delay=datetime.timedelta(days=2))
|
delay=datetime.timedelta(days=2))
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user