Skip to content

Commit

Permalink
Renvoi d'email de confirmation
Browse files Browse the repository at this point in the history
  • Loading branch information
DevHugo committed May 11, 2015
1 parent 25ebb65 commit a4c7903
Show file tree
Hide file tree
Showing 10 changed files with 187 additions and 32 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/**
* Display the form for recorvering a password.
* Used by recovering password and send again validation email functionality.
*/
(function($, undefined){
"use strict";
Expand All @@ -8,7 +8,7 @@
else
$("#form-email").removeClass("hidden");

$("[data-forgot-password-button=email]").on("click", function(e) {
$("[data-email-button=email]").on("click", function(e) {
$("#form-email").toggleClass("hidden");
$("#form-username").addClass("hidden");

Expand All @@ -22,7 +22,7 @@
else
$("#form-username").removeClass("hidden");

$("[data-forgot-password-button=username]").on("click", function(e) {
$("[data-username-button=username]").on("click", function(e) {
$("#form-username").toggleClass("hidden");
$("#form-email").addClass("hidden");

Expand Down
4 changes: 2 additions & 2 deletions templates/member/forgot_password/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,8 @@

<p>Comment souhaitez vous retrouvez votre mot de passe ?
<ul>
<li><a href="#" data-forgot-password-button="email">En saisissant votre adresse de courriel</a></li>
<li><a href="#" data-forgot-password-button="username">En saisissant votre nom d'utilisateur</a></li>
<li><a href="#" data-email-button="email">En saisissant votre adresse de courriel</a></li>
<li><a href="#" data-username-button="username">En saisissant votre nom d'utilisateur</a></li>
</ul>
</p>
{% endblocktrans %}
Expand Down
9 changes: 9 additions & 0 deletions templates/member/login.html
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,15 @@
<div class="content-col-2">
<h2>{% trans "Connexion classique" %}</h2>
{% crispy form %}
<p>
<a href="{% url "zds.member.views.forgot_password" %}" class="form-sub-link">
Mot de passe oublié ?
</a>
<br />
<a href="{% url "send-validation-email" %}" class="form-sub-link">
Vous n'avez pas reçu le mail d'activation ?
</a>
</p>
</div>
<div class="content-col-2">
<h2>{% trans "Connexion via réseaux sociaux" %}</h2>
Expand Down
49 changes: 49 additions & 0 deletions templates/member/register/send_validation_email.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
{% extends "member/base.html" %}
{% load crispy_forms_tags %}
{% load i18n %}


{% block title %}
{% trans "Renvois de l'email de confirmation" %}
{% endblock %}



{% block headline %}
{% trans "Renvois de l'email de confirmation" %}
{% endblock %}



{% block breadcrumb %}
<li>{% trans "Envois d'un email de confirmation" %}</li>
{% endblock %}


{% block content %}

{% if not user.is_authenticated %}
{% if error %}
{{ error }}
{% endif %}

{% blocktrans %}
<p>
Vous n'avez pas reçu le mail de confirmation ? nous pouvons vous le renvoyer, nous avons
besoin des informations suivantes : saisissez votre nom d'utilisateur ou votre adresse de courriel
dans les champs ci-dessous.
</p>

<p>Comment souhaitez vous retrouvez votre mot de passe ?
<ul>
<li><a href="#" data-email-button="email">En saisissant votre adresse de courriel</a></li>
<li><a href="#" data-username-button="username">En saisissant votre nom d'utilisateur</a></li>
</ul>
</p>
{% endblocktrans %}

{% crispy form %}
{% else %}
<p>{% trans "Vous êtes connecté" %}</p>
{% endif %}
{% endblock %}
27 changes: 27 additions & 0 deletions templates/member/register/send_validation_email_success.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
{% extends "member/register/base.html" %}
{% load i18n %}


{% block title %}
{% trans "Renvois de l'email de confirmation" %}
{% endblock %}



{% block headline %}
{% trans "Renvois de l'email de confirmation" %}
{% endblock %}



{% block breadcrumb %}
<li>{% trans "Renvois de l'email de confirmation" %}</li>
{% endblock %}



{% block content %}
<p>
{% trans "Vous allez recevoir un courriel contenant le lien d'activation. Veuillez cliquer sur celui-ci avant toute tentative de connexion" %}.
</p>
{% endblock %}
13 changes: 5 additions & 8 deletions zds/member/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ def __init__(self, profile, *args, **kwargs):

class LoginForm(forms.Form):
"""
The login form, including the "remember me" checkbox and the "password forget" link.
The login form, including the "remember me" checkbox.
"""
username = forms.CharField(
label=_(u"Nom d'utilisateur"),
Expand Down Expand Up @@ -91,9 +91,7 @@ def __init__(self, next=None, *args, **kwargs):
HTML('{% csrf_token %}'),
ButtonHolder(
StrictButton(_(u'Se connecter'), type='submit'),
),
HTML(u'<a href="{% url "zds.member.views.forgot_password" %}" '
u'class="form-sub-link">Mot de passe oublié ?</a>'),
)
)


Expand Down Expand Up @@ -466,8 +464,7 @@ def clean(self):
return cleaned_data


# TODO Asks for a new password --> Requires a better name
class ForgotPasswordForm(forms.Form):
class UsernameAndEmailForm(forms.Form):
username = forms.CharField(
label=_(u'Nom d\'utilisateur'),
required=False
Expand All @@ -479,7 +476,7 @@ class ForgotPasswordForm(forms.Form):
)

def __init__(self, *args, **kwargs):
super(ForgotPasswordForm, self).__init__(*args, **kwargs)
super(UsernameAndEmailForm, self).__init__(*args, **kwargs)
self.helper = FormHelper()
self.helper.form_class = 'content-wrapper'
self.helper.form_method = 'post'
Expand All @@ -502,7 +499,7 @@ def __init__(self, *args, **kwargs):
)

def clean(self):
cleaned_data = super(ForgotPasswordForm, self).clean()
cleaned_data = super(UsernameAndEmailForm, self).clean()

# Clean data
username = cleaned_data.get('username')
Expand Down
20 changes: 10 additions & 10 deletions zds/member/tests/tests_forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
from zds.member.factories import ProfileFactory, NonAsciiProfileFactory
from zds.member.forms import LoginForm, RegisterForm, \
MiniProfileForm, ProfileForm, ChangeUserForm, \
ChangePasswordForm, ForgotPasswordForm, NewPasswordForm, \
KarmaForm
ChangePasswordForm, NewPasswordForm, \
KarmaForm, UsernameAndEmailForm

stringof77chars = "abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789-----"
stringof129chars = u'http://www.01234567890123456789123456789' \
Expand Down Expand Up @@ -440,63 +440,63 @@ def test_valid_forgot_password_form(self):
'username': self.user1.user.username,
'email': ''
}
form = ForgotPasswordForm(data=data)
form = UsernameAndEmailForm(data=data)
self.assertTrue(form.is_valid())

def test_non_valid_non_ascii_forgot_password_form(self):
data = {
'username': self.userNonAscii.user.username,
'email': ''
}
form = ForgotPasswordForm(data=data)
form = UsernameAndEmailForm(data=data)
self.assertTrue(form.is_valid())

def test_non_valid_non_ascii_email_forgot_password_form(self):
data = {
'username': '',
'email': self.userNonAscii.user.email
}
form = ForgotPasswordForm(data=data)
form = UsernameAndEmailForm(data=data)
self.assertTrue(form.is_valid())

def test_valid_email_forgot_password_form(self):
data = {
'email': self.user1.user.email,
'username': ''
}
form = ForgotPasswordForm(data=data)
form = UsernameAndEmailForm(data=data)
self.assertTrue(form.is_valid())

def test_empty_name_forgot_password_form(self):
data = {
'username': '',
'email': ''
}
form = ForgotPasswordForm(data=data)
form = UsernameAndEmailForm(data=data)
self.assertFalse(form.is_valid())

def test_full_forgot_password_form(self):
data = {
'username': 'John Doe',
'email': 'john.doe@gmail.com'
}
form = ForgotPasswordForm(data=data)
form = UsernameAndEmailForm(data=data)
self.assertFalse(form.is_valid())

def test_unknow_username_forgot_password_form(self):
data = {
'username': 'John Doe',
'email': ''
}
form = ForgotPasswordForm(data=data)
form = UsernameAndEmailForm(data=data)
self.assertFalse(form.is_valid())

def test_unknow_email_forgot_password_form(self):
data = {
'email': 'john.doe@gmail.com',
'username': ''
}
form = ForgotPasswordForm(data=data)
form = UsernameAndEmailForm(data=data)
self.assertFalse(form.is_valid())


Expand Down
36 changes: 34 additions & 2 deletions zds/member/tests/tests_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -427,7 +427,7 @@ def test_unregister(self):
def test_forgot_password(self):
"""To test nominal scenario of a lost password."""

# Empty the test outbox
# empty the test outbox
mail.outbox = []

result = self.client.post(
Expand All @@ -443,7 +443,7 @@ def test_forgot_password(self):
# check email has been sent
self.assertEquals(len(mail.outbox), 1)

# clic on the link which has been sent in mail
# click on the link which has been sent in mail
user = User.objects.get(username=self.mas.user.username)

token = TokenForgotPassword.objects.get(user=user)
Expand All @@ -453,6 +453,38 @@ def test_forgot_password(self):

self.assertEqual(result.status_code, 200)

def test_send_email_validation(self):
"""To test nominal scenario of a email validation."""

# create a non activate user
profile = ProfileFactory()
profile.is_active = 0
profile.save()

# empty the test outbox
mail.outbox = []

result = self.client.post(
reverse('send-validation-email'),
{
'username': profile.user.username,
'email': '',
},
follow=False)

self.assertEqual(result.status_code, 200)

# check email has been sent
self.assertEquals(len(mail.outbox), 1)

# click on the link which has been sent in mail
token = TokenRegister.objects.get(user=profile.user)
result = self.client.get(
settings.ZDS_APP['site']['url'] + token.get_absolute_url(),
follow=False)

self.assertEqual(result.status_code, 200)

def test_sanctions(self):
"""
Test various sanctions.
Expand Down
3 changes: 2 additions & 1 deletion zds/member/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
from django.conf.urls import patterns, url

from views import MemberList, MemberDetail, UpdateMember, UpdateAvatarMember, UpdatePasswordMember, \
UpdateUsernameEmailMember, RegisterView
UpdateUsernameEmailMember, RegisterView, SendValidationEmailView

urlpatterns = patterns('',
#list
Expand Down Expand Up @@ -40,6 +40,7 @@
url(r'^deconnexion/$', 'zds.member.views.logout_view'),
url(r'^inscription/$', RegisterView.as_view(), name='register-member'),
url(r'^reinitialisation/$', 'zds.member.views.forgot_password'),
url(r'^email_validation/$', SendValidationEmailView.as_view(), name='send-validation-email'),
url(r'^new_password/$', 'zds.member.views.new_password'),
url(r'^activation/$', 'zds.member.views.active_account'),
url(r'^envoi_jeton/$', 'zds.member.views.generate_token_account'),
Expand Down
Loading

0 comments on commit a4c7903

Please sign in to comment.