diff --git a/apps/member/models.py b/apps/member/models.py index 3cf92ff1dc796ce85bc976116de78a9a4648f3e6..462b23fd855eddf385665510abd5e32ed78731a7 100644 --- a/apps/member/models.py +++ b/apps/member/models.py @@ -7,8 +7,13 @@ from django.conf import settings from django.contrib.auth.models import User from django.core.exceptions import ValidationError from django.db import models +from django.template import loader from django.urls import reverse, reverse_lazy +from django.utils.encoding import force_bytes +from django.utils.http import urlsafe_base64_encode from django.utils.translation import gettext_lazy as _ + +from member.tokens import account_activation_token from note.models import MembershipTransaction @@ -62,6 +67,19 @@ class Profile(models.Model): def get_absolute_url(self): return reverse('user_detail', args=(self.pk,)) + def send_email_validation_link(self): + subject = "Activate your Note Kfet account" + message = loader.render_to_string('registration/account_activation_email.html', + { + 'user': self.user, + 'domain': "nk20.ynerant.fr", + 'site_name': "La Note Kfet", + 'protocol': 'https', + 'token': account_activation_token.make_token(self.user), + 'uid': urlsafe_base64_encode(force_bytes(self.user.pk)).decode('UTF-8'), + }) + self.user.email_user(subject, message) + class Club(models.Model): """ diff --git a/apps/member/views.py b/apps/member/views.py index f1df5a47c6413941a6f6547ea188765e4ae35d35..0d12839414da76cfd4500631f7d2b10a1192d661 100644 --- a/apps/member/views.py +++ b/apps/member/views.py @@ -9,16 +9,13 @@ from django.conf import settings from django.contrib.auth.mixins import LoginRequiredMixin from django.contrib.auth.models import User from django.contrib.auth.views import LoginView -from django.contrib.sites.shortcuts import get_current_site from django.core.exceptions import ValidationError from django.db.models import Q from django.forms import HiddenInput from django.shortcuts import redirect, resolve_url -from django.template import loader from django.urls import reverse_lazy from django.utils.decorators import method_decorator -from django.utils.encoding import force_bytes -from django.utils.http import urlsafe_base64_decode, urlsafe_base64_encode +from django.utils.http import urlsafe_base64_decode from django.utils.translation import gettext_lazy as _ from django.views.decorators.csrf import csrf_protect from django.views.generic import CreateView, DetailView, UpdateView, TemplateView @@ -49,11 +46,11 @@ class CustomLoginView(LoginView): class UserCreateView(CreateView): """ - Une vue pour inscrire un utilisateur et lui créer un profile + Une vue pour inscrire un utilisateur et lui créer un profil """ form_class = SignUpForm - success_url = reverse_lazy('login') + success_url = reverse_lazy('member:login') template_name = 'member/signup.html' second_form = ProfileForm @@ -77,18 +74,9 @@ class UserCreateView(CreateView): user.profile = profile_form.save(commit=False) user.save() user.profile.save() - site = get_current_site(self.request) - subject = "Activate your {} account".format(site.name) - message = loader.render_to_string('registration/account_activation_email.html', - { - 'user': user, - 'domain': site.domain, - 'site_name': "La Note Kfet", - 'protocol': 'https', - 'token': account_activation_token.make_token(user), - 'uid': urlsafe_base64_encode(force_bytes(user.pk)).decode('UTF-8'), - }) - user.email_user(subject, message) + + user.profile.send_email_validation_link() + return super().form_valid(form) @@ -195,11 +183,18 @@ class UserUpdateView(ProtectQuerysetMixin, LoginRequiredMixin, UpdateView): if similar.exists(): similar.delete() + olduser = User.objects.get(pk=form.instance.pk) + user = form.save(commit=False) profile = profile_form.save(commit=False) profile.user = user profile.save() user.save() + + if olduser.email != user.email: + user.profile.email_confirmed = False + user.profile.send_email_validation_link() + return super().form_valid(form) def get_success_url(self, **kwargs): diff --git a/templates/base.html b/templates/base.html index c44e24676fc4bcdc44ed89bc2ff252602153956e..9f1310543bc264a11b07aabf73163447d39ebd51 100644 --- a/templates/base.html +++ b/templates/base.html @@ -138,6 +138,11 @@ SPDX-License-Identifier: GPL-3.0-or-later </div> </nav> <div class="container-fluid my-3" style="max-width: 1600px;"> + {% if not user.profile.email_confirmed %} + <div class="alert alert-warning"> + {% trans "Your e-mail address is not validated. Please check your mail inbox and click on the validation link." %} + </div> + {% endif %} {% block contenttitle %}<h1>{{ title }}</h1>{% endblock %} <div id="messages"></div> {% block content %}