diff --git a/users/forms.py b/users/forms.py index a870a6c..ed3b681 100644 --- a/users/forms.py +++ b/users/forms.py @@ -1,4 +1,10 @@ from django import forms +from django.utils.encoding import force_bytes +from django.core.mail import send_mail +from django.template import loader +from django.contrib.auth.tokens import default_token_generator +from django.utils.http import urlsafe_base64_encode +from django.contrib.sites.shortcuts import get_current_site from django.contrib.auth.models import User from .models import School @@ -24,12 +30,42 @@ class CreateUser(forms.ModelForm): 'first_name', 'last_name', 'email', - 'groups', - 'password', ] def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) - self.fields['password'].widget = forms.PasswordInput() + + def save(self, request): + user = super().save(commit=None) + user.password = '' + user.save() + site = get_current_site(request) + context = { + 'email': user.email, + 'domain': site.domain, + 'site_name': site.name, + 'uid': urlsafe_base64_encode(force_bytes(user.pk)).decode(), + 'user': user, + 'token': default_token_generator.make_token(user), + 'protocol': 'https', + } + self.send_mail(context, user.email) + return user + + def send_mail(self, context, to_email): + """ + Send a django.core.mail.EmailMultiAlternatives to `to_email`. + """ + subject = "Inscription sur Il était une fois dans l'Est" + body = loader.render_to_string("users/welcome_user.txt", context) + from_email = "noreply.festart@rezometz.org" + + send_mail( + subject, + body, + from_email, + [to_email], + fail_silently=False, + ) class EditPhone(forms.ModelForm): diff --git a/users/templates/users/welcome_user.txt b/users/templates/users/welcome_user.txt index 3313877..ba8feff 100644 --- a/users/templates/users/welcome_user.txt +++ b/users/templates/users/welcome_user.txt @@ -3,10 +3,9 @@ Bienvenue sur le site d'Il était une fois dans l'Est. Vous recevez cet email car vous avez été désigné responsable des productions vidéos pour votre école. -Votre identifiant est : {{id}} +Votre identifiant est : {{user.username}} -Rendez-vous ici : http://festart.rezometz.org/users/reset pour réinitialiser -votre mot de passe (en utilisant cette adresse email). +Rendez-vous ici : {{ protocol}}://{{ domain }}{% url 'users:password-reset-confirm' uidb64=uid token=token %} pour réinitialiser votre mot de passe. Vous pouvez retrouver l'ensemble des informations sur l'évènement ici : http://festart.rezometz.org diff --git a/users/views.py b/users/views.py index 5dea366..6ab15b8 100644 --- a/users/views.py +++ b/users/views.py @@ -17,14 +17,7 @@ from . import forms def create_user(request): user_form = forms.CreateUser(request.POST or None) if user_form.is_valid(): - u = user_form.save() - send_mail( - "Bienvenue sur Il était une fois dans l'Est.", - render_to_string("users/welcome_user.txt", {'id':u.username}), - "noreply.festart@rezometz.org", - [u.email], - fail_silently=False - ) + u = user_form.save(request) messages.success(request, "L'utilisateur {} {} a bien été créé un mail lui a été envoyé pour réinitialiser son mot de passe.".format( u.first_name, u.last_name)) return redirect(reverse('settings:index'))