diff --git a/zerver/views/__init__.py b/zerver/views/__init__.py index 66535767cd..f691d0f54c 100644 --- a/zerver/views/__init__.py +++ b/zerver/views/__init__.py @@ -32,7 +32,7 @@ from zerver.lib.actions import do_change_password, do_change_full_name, do_chang do_update_pointer, realm_user_count from zerver.lib.push_notifications import num_push_devices_for_user from zerver.forms import RegistrationForm, HomepageForm, RealmCreationForm, ToSForm, \ - CreateUserForm + CreateUserForm, FindMyTeamForm from zerver.lib.actions import is_inactive from django_auth_ldap.backend import LDAPBackend, _LDAPUser from zerver.lib.validator import check_string, check_list @@ -702,3 +702,56 @@ def json_set_muted_topics(request, user_profile, def generate_204(request): # type: (HttpRequest) -> HttpResponse return HttpResponse(content=None, status=204) + +try: + import mailer + send_mail = mailer.send_mail +except ImportError: + # no mailer app present, stick with default + pass + +def send_find_my_team_emails(user_profile): + # type: (UserProfile) -> None + text_template = 'zerver/emails/find_team/find_team_email.txt' + html_template = 'zerver/emails/find_team/find_team_email.html' + context = {'user_profile': user_profile} + text_content = loader.render_to_string(text_template, context) + html_content = loader.render_to_string(html_template, context) + sender = settings.NOREPLY_EMAIL_ADDRESS + recipients = [user_profile.email] + subject = loader.render_to_string('zerver/emails/find_team/find_team_email.subject').strip() + + send_mail(subject, text_content, sender, recipients, html_message=html_content) + +def find_my_team(request): + # type: (HttpRequest) -> HttpResponse + url = reverse('find-my-team') + + emails = [] # type: List[Text] + if request.method == 'POST': + form = FindMyTeamForm(request.POST) + if form.is_valid(): + emails = form.cleaned_data['emails'] + for user_profile in UserProfile.objects.filter(email__in=emails): + send_find_my_team_emails(user_profile) + + # Note: Show all the emails in the result otherwise this + # feature can be used to ascertain which email addresses + # are associated with Zulip. + data = urllib.parse.urlencode({'emails': ','.join(emails)}) + return redirect(url + "?" + data) + else: + form = FindMyTeamForm() + result = request.GET.get('emails') + if result: + for email in result.split(','): + try: + validators.validate_email(email) + emails.append(email) + except ValidationError: + pass + + return render_to_response('zerver/find_my_team.html', + {'form': form, 'current_url': lambda: url, + 'emails': emails}, + request=request) diff --git a/zerver/views/auth.py b/zerver/views/auth.py index 84d7effc85..324e20ba0f 100644 --- a/zerver/views/auth.py +++ b/zerver/views/auth.py @@ -12,16 +12,12 @@ from django.shortcuts import redirect from django.views.decorators.csrf import csrf_exempt from django.utils.translation import ugettext as _ from django.core import signing -from django.template import loader -from django.core.validators import validate_email -from django import forms -from django.core.mail import send_mail from six.moves import urllib from typing import Any, Dict, Optional, Tuple, Text from confirmation.models import Confirmation from zerver.forms import HomepageForm, OurAuthenticationForm, \ - WRONG_SUBDOMAIN_ERROR, FindMyTeamForm + WRONG_SUBDOMAIN_ERROR from zerver.lib.request import REQ, has_request_variables, JsonableError from zerver.lib.response import json_success, json_error @@ -31,7 +27,6 @@ from zerver.views import create_preregistration_user, get_realm_from_request, \ redirect_and_log_into_subdomain from zproject.backends import password_auth_enabled, dev_auth_enabled, google_auth_enabled from zproject.jinja2 import render_to_response -from zerver.lib.notifications import send_future_email import hashlib import hmac @@ -40,61 +35,6 @@ import logging import requests import time import ujson -import datetime -from typing import Text - -try: - import mailer - send_mail = mailer.send_mail -except ImportError: - # no mailer app present, stick with default - pass - -def send_find_my_team_emails(user_profile): - # type: (UserProfile) -> None - text_template = 'zerver/emails/find_team/find_team_email.txt' - html_template = 'zerver/emails/find_team/find_team_email.html' - context = {'user_profile': user_profile} - text_content = loader.render_to_string(text_template, context) - html_content = loader.render_to_string(html_template, context) - sender = settings.NOREPLY_EMAIL_ADDRESS - recipients = [user_profile.email] - subject = loader.render_to_string('zerver/emails/find_team/find_team_email.subject').strip() - - send_mail(subject, text_content, sender, recipients, html_message=html_content) - -def find_my_team(request): - # type: (HttpRequest) -> HttpResponse - url = reverse('find-my-team') - - emails = [] # type: List[Text] - if request.method == 'POST': - form = FindMyTeamForm(request.POST) - if form.is_valid(): - emails = form.cleaned_data['emails'] - for user_profile in UserProfile.objects.filter(email__in=emails): - send_find_my_team_emails(user_profile) - - # Note: Show all the emails in the result otherwise this - # feature can be used to ascertain which email addresses - # are associated with Zulip. - data = urllib.parse.urlencode({'emails': ','.join(emails)}) - return redirect(url + "?" + data) - else: - form = FindMyTeamForm() - result = request.GET.get('emails') - if result: - for email in result.split(','): - try: - validate_email(email) - emails.append(email) - except forms.ValidationError: - pass - - return render_to_response('zerver/find_my_team.html', - {'form': form, 'current_url': lambda: url, - 'emails': emails}, - request=request) def maybe_send_to_registration(request, email, full_name=''): # type: (HttpRequest, Text, Text) -> HttpResponse diff --git a/zproject/urls.py b/zproject/urls.py index 427d1e238e..6173cde02c 100644 --- a/zproject/urls.py +++ b/zproject/urls.py @@ -131,7 +131,7 @@ i18n_urls = [ name='landing-page'), url(r'^new-user/$', RedirectView.as_view(url='/hello', permanent=True)), url(r'^features/$', TemplateView.as_view(template_name='zerver/features.html')), - url(r'^find-my-team/$', zerver.views.auth.find_my_team, name='find-my-team'), + url(r'^find-my-team/$', zerver.views.find_my_team, name='find-my-team'), ] # If a Terms of Service is supplied, add that route