diff --git a/account/forms.py b/account/forms.py index 4d0366c..5c75d96 100644 --- a/account/forms.py +++ b/account/forms.py @@ -4,5 +4,15 @@ from django.conf import settings from django import forms class LoginForm(forms.Form): - username = forms.CharField(label="Nom d'utilisateur", max_length=settings.USERNAME_LENGTH) - password = forms.CharField(label="Mot de passe", widget=forms.PasswordInput) \ No newline at end of file + # no need for max_length, let's not make heavyer things that can be lighter + username = forms.CharField(label="Nom d'utilisateur") + password = forms.CharField(label="Mot de passe", widget=forms.PasswordInput) + +class InscriptionForm(forms.Form): + username = forms.CharField(label="Nom d'utilisateur", min_length=settings.USERNAME_MIN_LENGTH, max_length=settings.USERNAME_MAX_LENGTH) + email = forms.EmailField(label="E-mail") + # Should we silently truncate password or fix maximum length ? Here is a good answer : + # https://security.stackexchange.com/questions/152430/what-maximum-password-length-to-choose-when-using-bcrypt + password1 = forms.CharField(label="Mot de passe", min_length=settings.PASSWORD_MIN_LENGTH, max_length=settings.PASSWORD_MAX_LENGTH, widget=forms.PasswordInput) + password2 = forms.CharField(label="Confirmer mot de passe", min_length=settings.PASSWORD_MIN_LENGTH, max_length=settings.PASSWORD_MAX_LENGTH, widget=forms.PasswordInput) + cgu = forms.BooleanField(label="J'ai lu et j'accepte les conditions générales d'utilisations", initial=False) \ No newline at end of file diff --git a/account/urls.py b/account/urls.py index 2bc1453..08c48f4 100644 --- a/account/urls.py +++ b/account/urls.py @@ -3,7 +3,5 @@ from django.conf.urls import url import account.views as v urlpatterns = [ - url(r'^$', v.account), # Index - url(r'^login/$', v.login), - url(r'^logout/$', v.logout), + ] diff --git a/account/views.py b/account/views.py index 5021c34..3fa98ae 100644 --- a/account/views.py +++ b/account/views.py @@ -1,16 +1,19 @@ from django.shortcuts import render, redirect from django.contrib.auth import authenticate +from django.contrib.auth.models import User from django.contrib.auth import login as a_login, logout as a_logout -from account.forms import LoginForm +from account.forms import * from django.core.urlresolvers import reverse +from django.core.validators import validate_email +from django.conf import settings as s from home.views import homepage + def login(request): error = False - + form = LoginForm() if request.method == "POST": - form = LoginForm(request.POST) if form.is_valid(): username = form.cleaned_data["username"] password = form.cleaned_data["password"] @@ -20,14 +23,44 @@ def login(request): return redirect(reverse(homepage)) else: error = True - else: - form = LoginForm() - return render(request, 'account/login.html',locals()) + return render(request, 'login.html', locals()) + def logout(request): - a_logout(request) + a_logout(request) return redirect(reverse(homepage)) + +def signup(request): + error = False + form = InscriptionForm() + if request.method == "POST": + if form.is_valid(): + password1 = form.cleaned_data["password1"] + password2 = form.cleaned_data["password2"] + username = form.cleaned_data["username"] + email = form.cleaned_data["email"] + cgu = form.cleaned_data["cgu"] + if( + username.length < s.USERNAME_MIN_LENGTH or username.length > s.USERNAME_MAX_LENGTH or + password.length < s.PASSWORD_MIN_LENGTH or password.length > s.PASSWORD_MAX_LENGTH or + password1 != password2 or cgu==False + ): + error = True + return render(request, 'signup.html', locals()) + + try: + validate_email(email) + except forms.ValidationError: + error = True + return render(request, 'signup.html', locals()) + + create_user(username, email, password1) + authenticate(username, password1) + return render(request, 'home.html', locals()) + + return render(request, 'signupt.html', locals()) + def account(request): - pass \ No newline at end of file + return render(request, 'account.html') \ No newline at end of file diff --git a/planete_casio/settings.py b/planete_casio/settings.py index d84b350..d114006 100644 --- a/planete_casio/settings.py +++ b/planete_casio/settings.py @@ -145,4 +145,7 @@ STATICFILES_DIRS = ( "/home/web/planete_casio/sfiles/", ) -USERNAME_LENGTH = 30 +USERNAME_MIN_LENGTH = 3 +USERNAME_MAX_LENGTH = 30 +PASSWORD_MIN_LENGTH = 8 +PASSWORD_MAX_LENGTH = 72 # maximum number of characters for bcrypt \ No newline at end of file diff --git a/planete_casio/urls.py b/planete_casio/urls.py index 4d1fe19..a65614e 100644 --- a/planete_casio/urls.py +++ b/planete_casio/urls.py @@ -16,10 +16,14 @@ Including another URLconf from django.conf import settings from django.conf.urls import url, include from django.contrib import admin +import account.views as v urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^', include('home.urls')), url(r'^forum/', include('forum.urls')), url(r'^account/', include('account.urls')), + url(r'^login', v.login), + url(r'^logout', v.logout), + url(r'^signup', v.signup) ]