Utilisateur.objects.get(courriel=email)
except:
raise forms.ValidationError("Ce courriel n'existe pas dans notre base de données.")
- return email
+ return email
+
+class NewPasswordForm(forms.Form):
+ password = forms.CharField(widget=forms.PasswordInput(), required=True, label="Mot de passe")
+ password_repeat = forms.CharField(widget=forms.PasswordInput(), required=True, label="Confirmez mot de passe")
+ def clean_password_repeat(self):
+ cleaned_data = self.cleaned_data
+ password = cleaned_data.get("password")
+ password_repeat = cleaned_data.get("password_repeat")
+ if password and password_repeat:
+ if password != password_repeat:
+ raise forms.ValidationError("Les mots de passe ne concordent pas")
+ return password_repeat
ordering = ["prenom", "nom"]
class Utilisateur(Personne):
- password = models.CharField (max_length=35, verbose_name = 'Mot de passe')
+ password = models.CharField(max_length=35, verbose_name = 'Mot de passe')
FONCTION_CHOICES = (('Professeur', 'Professeur'), ('Chercheur', 'Chercheur'), ('Chercheur_independant', 'Chercheur indépendant'), ('Doctorant', 'Doctorant'))
class Chercheur(models.Model):
def __unicode__(self):
return u"%s %s" % (self.personne.nom.upper(), self.personne.prenom.title())
+
+ def fonction_display(self):
+ for f in FONCTION_CHOICES:
+ if self.fonction == f[0]:
+ return f[1]
+ return "-"
class Publication(models.Model):
id = models.AutoField(primary_key=True, db_column='id')
from django.shortcuts import render_to_response
from django.http import HttpResponseRedirect, HttpResponse
from django.template import Context, RequestContext
+from django.template.loader import get_template
from django.core.urlresolvers import reverse
from django.core.mail import send_mail
from django.conf import settings
code = hashlib.md5(u.courriel+u.password).hexdigest()
code = code[0:6]
link = "%saccounts/new_password/%s/%s/" % (settings.SITE_ROOT_URL, u.courriel, code)
+
+ variables = { 'user': u,
+ 'link': link,
+ 'SITE_ROOT_URL': settings.SITE_ROOT_URL
+ }
+ t = get_template('accounts/email_password.html')
+ content = t.render(Context(variables))
+
send_mail('Savoirs en partage: changement de mot de passe',
- 'Bonjour \n. Veuillez acceder a ce lien pour modifier votre mot de passe'+link, settings.CONTACT_EMAIL,
+ content, settings.CONTACT_EMAIL,
[u.courriel], fail_silently=False)
else:
form = SendPasswordForm()
return render_to_response ("accounts/send_password.html", \
Context (variables),
context_instance = RequestContext(request))
-
-def random_password():
- import string
- from random import choice
- chars = string.ascii_letters + string.digits
- password = "".join(choice(chars) for x in range(0,8))
- return password
-
-
+
def new_password(request, email, code):
u = Utilisateur.objects.get(courriel=email)
original_code = hashlib.md5(u.courriel+u.password).hexdigest()
original_code = original_code[0:6]
+ message=""
if(code == original_code):
- new_password = random_password()
- u.password = hashlib.md5(new_password).hexdigest()
- u.save()
+ if request.method == "POST":
+ form = NewPasswordForm(data=request.POST)
+ if form.is_valid():
+ new_password = form.cleaned_data['password']
+ u.password = hashlib.md5(new_password).hexdigest()
+ u.save()
+ message = "Votre mot de passe a été modifié."
+ else:
+ form = NewPasswordForm()
else:
return HttpResponseRedirect('/')
- variables = { 'new_password': new_password,
+ variables = { 'form': form,
+ 'message': message,
}
return render_to_response ("accounts/new_password.html", \
Context (variables),
context_instance = RequestContext(request))
-
-
+@login_required()
+def change_password(request):
+ context_instance = RequestContext(request)
+ u = context_instance['user_sep']
+ message = ""
+ if request.method == "POST":
+ form = NewPasswordForm(data=request.POST)
+ if form.is_valid():
+ new_password = form.cleaned_data['password']
+ u.password = hashlib.md5(new_password).hexdigest()
+ u.save()
+ message = "Votre mot de passe a été modifié."
+ else:
+ form = NewPasswordForm()
+ variables = { 'form': form,
+ 'message': message,
+ }
+ return render_to_response ("accounts/new_password.html", \
+ Context (variables),
+ context_instance = RequestContext(request))
+
def chercheur_login(request, template_name='registration/login.html', redirect_field_name='next'):
"Displays the login form and handles the login action."
redirect_to = request.REQUEST.get(redirect_field_name, '')
# -*- encoding: utf-8 -*-
-from chercheurs.models import Chercheur
+from chercheurs.models import Chercheur, Utilisateur
def user_chercheur(request):
user_chercheur = Chercheur.objects.none()
+ user_sep = Utilisateur.objects.none()
if request.user.is_authenticated():
try:
user_chercheur = Chercheur.objects.get(personne__courriel=request.user.email)
+ user_sep = Utilisateur.objects.get(id=user_chercheur.personne_id)
except:
pass
- return {'user_chercheur': user_chercheur}
+ return {'user_chercheur': user_chercheur,
+ 'user_sep': user_sep,}
--- /dev/null
+Bonjour {{user.prenom}} {{user.nom}},
+
+Nous avons reçu une demande de changement de mot de passe.
+
+Pour procéder à cette manoeuvre, veuillez vous rendre au lien suivant:
+
+{{link}}
+
+Si vous n'êtes pas l'initiateur de cette demande, merci d'ignorer ce message.
+
+Bien cordialement,
+
+_____________________________
+Savoirs en partage
+{{SITE_ROOT_URL}}
{% block contenu %}
-{% if form.errors %}
-<p>Login ou mot de passe invalide.</p>
-{% endif %}
-
- <div class="zone-texte">
+<h4>Connexion</h4>
+<div class="contenu-wrapper">
+ {% if form.errors %}
+ <p class="message">Login ou mot de passe invalide.</p>
+ {% endif %}
<form method="post" action="{% url chercheurs.views.chercheur_login %}">
+ <fieldset>
<table>
<tr>
<td>{{ form.username.label_tag }}</td>
<td>{{ form.password }}</td>
</tr>
</table>
-
+ <p><a href="{% url chercheurs.views.send_password %}">Mot de passe oublié ?</a></p>
<input type="submit" value="Connexion" />
<input type="hidden" name="next" value="{% if next %}{{next}}{% else %}/chercheurs/perso/{% endif %}" />
+ </fieldset>
</form>
- </div>
+</div>
{% endblock %}
{% block contenu %}
<h4>Demande de changement de mot de passe</h4>
<div class="contenu-wrapper">
- Mot de passe: <strong>{{new_password}}</strong>
+ {% if message %}
+ <span class="message">{{message}}</span>
+ <p>Cliquez <a href="{% url chercheurs.views.chercheur_login %}">ici</a> pour accéder à votre <a href="{% url chercheurs.views.chercheur_login %}">espace chercheur.</a> </p>
+ {% endif %}
+ <form method="post">
+ <fieldset>
+ <span>Veuillez saisir un nouveau mot de passe.</span>
+ {% include "table_form.html" %}
+ </fieldset>
+ <input type="submit" name="Submit" value="Envoyer" class="bouton" />
+ </form>
</div>
{% endblock %}
--- /dev/null
+{% extends "container_base.html" %}
+
+{% block contenu %}
+<h4>Demande de changement de mot de passe</h4>
+<div class="contenu-wrapper">
+ Mot de passe: <strong>{{new_password}}</strong>
+</div>
+{% endblock %}
</tr>
<tr>
<td class="label">Fonction:</td>
- <td>{{chercheur.fonction|default:"-"}}</td>
+ <td>{{chercheur.fonction_display|default:"-"}}</td>
</tr>
<tr>
<td class="label">Diplôme:</td>
</table>
</div>
+ <p><a href="{% url chercheurs.views.change_password %}">Modifier mot de passe</a></p>
</div>
{% endblock %}
+++ /dev/null
-{% extends "container_base.html" %}
-
-{% block contenu %}
-{% for d in disciplines %}
-<li>{{d}}</li>
-{% endfor %}
-
-<hr />
-
-{% for p in personnes %}
-<li>{{p}}</li>
-{% endfor %}
-
-
-{% endblock %}
<tr>
<td class="label">Fonction:</td>
- <td>{{chercheur.fonction|default:"-"}}</td>
+ <td>{{chercheur.fonction_display|default:"-"}}</td>
</tr>
<tr>
<td class="label">Diplôme:</td>
{{ field }}
{% else %}
<td{{ field.row_attrs }} class="required" style="width: 150px;">
- {{ field.label_tag }} {% if field.field.required %}<span style="color:red">*</span>{% endif %}
+ {{ field.label_tag }} {% if field.field.required %}<span style="color:red">*</span>{% endif %}
{% if field.errors %}
{{ field.errors }}
{% endif %}
(r'^accounts/login/$', 'chercheurs.views.chercheur_login', {'template_name': 'accounts/login.html'}),
(r'^accounts/logout/$', 'django.contrib.auth.views.logout', {'template_name': 'accounts/logout.html'}),
+ (r'^accounts/change_password/$', 'chercheurs.views.change_password'),
(r'^accounts/send_password/$', 'chercheurs.views.send_password'),
(r'^accounts/new_password/(.+)/(.+)/$', 'chercheurs.views.new_password'),