3232
3333# Copyright The IETF Trust 2007, All Rights Reserved
3434
35- from django . template import RequestContext
36- from django . shortcuts import render_to_response
37- from django . contrib . auth . decorators import login_required
38- from django .http import HttpResponseRedirect , HttpResponse
35+ import datetime
36+ import hashlib
37+
38+ from django .conf import settings
3939from django .contrib .auth import REDIRECT_FIELD_NAME , authenticate , login
40+ from django .contrib .auth .decorators import login_required
4041from django .contrib .auth .models import User
41- from django .conf import settings
42+ from django .http import HttpResponseRedirect , HttpResponse , Http404
43+ from django .shortcuts import render_to_response
44+ from django .template import RequestContext
45+ from django .utils import simplejson
4246from django .utils .http import urlquote
4347
48+ from ietf .ietfauth .forms import (RegistrationForm , PasswordForm ,
49+ RecoverPasswordForm )
50+
51+
52+ def index (request ):
53+ return render_to_response ('registration/index.html' , context_instance = RequestContext (request ))
54+
55+
4456def url_login (request , user , passwd ):
4557 user = authenticate (username = user , password = passwd )
4658 redirect_to = request .REQUEST .get (REDIRECT_FIELD_NAME , '' )
4759 if user is not None :
4860 if user .is_active :
4961 login (request , user )
5062 return HttpResponseRedirect ('/accounts/loggedin/?%s=%s' % (REDIRECT_FIELD_NAME , urlquote (redirect_to )))
51- return HttpResponse ("Not authenticated?" , status = 500 )
63+ return HttpResponse ("Not authenticated?" , status = 500 )
64+
5265
5366def ietf_login (request ):
5467 if not request .user .is_authenticated ():
@@ -58,6 +71,7 @@ def ietf_login(request):
5871 request .session .set_test_cookie ()
5972 return HttpResponseRedirect ('/accounts/loggedin/?%s=%s' % (REDIRECT_FIELD_NAME , urlquote (redirect_to )))
6073
74+
6175def ietf_loggedin (request ):
6276 if not request .session .test_cookie_worked ():
6377 return HttpResponse ("You need to enable cookies" )
@@ -66,24 +80,102 @@ def ietf_loggedin(request):
6680 if not redirect_to or '//' in redirect_to or ' ' in redirect_to :
6781 redirect_to = settings .LOGIN_REDIRECT_URL
6882 return HttpResponseRedirect (redirect_to )
69-
83+
84+
7085@login_required
7186def profile (request ):
7287 if settings .USE_DB_REDESIGN_PROXY_CLASSES :
7388 from person .models import Person
7489 from group .models import Role
75-
90+
7691 roles = []
7792 person = None
7893 try :
7994 person = request .user .get_profile ()
8095 roles = Role .objects .filter (email__person = person ).distinct ()
8196 except Person .DoesNotExist :
8297 pass
83-
98+
8499 return render_to_response ('registration/profileREDESIGN.html' ,
85100 dict (roles = roles ,
86101 person = person ),
87102 context_instance = RequestContext (request ))
88-
103+
89104 return render_to_response ('registration/profile.html' , context_instance = RequestContext (request ))
105+
106+
107+ def create_account (request ):
108+ success = False
109+ if request .method == 'POST' :
110+ form = RegistrationForm (request .POST )
111+ if form .is_valid ():
112+ form .save ()
113+ success = True
114+ else :
115+ form = RegistrationForm ()
116+ return render_to_response ('registration/create.html' ,
117+ {'form' : form ,
118+ 'success' : success },
119+ context_instance = RequestContext (request ))
120+
121+
122+ def confirm_account (request , username , date , realm , registration_hash ):
123+ valid = hashlib .md5 ('%s%s%s%s' % (settings .SECRET_KEY , date , username , realm )).hexdigest () == registration_hash
124+ if not valid :
125+ raise Http404
126+ request_date = datetime .date (int (date [:4 ]), int (date [4 :6 ]), int (date [6 :]))
127+ if datetime .date .today () > (request_date + datetime .timedelta (days = settings .DAYS_TO_EXPIRE_REGISTRATION_LINK )):
128+ raise Http404
129+ success = False
130+ if request .method == 'POST' :
131+ form = PasswordForm (request .POST , username = username )
132+ if form .is_valid ():
133+ form .save ()
134+ success = True
135+ else :
136+ form = PasswordForm (username = username )
137+ return render_to_response ('registration/confirm.html' ,
138+ {'form' : form , 'email' : username , 'success' : success },
139+ context_instance = RequestContext (request ))
140+
141+
142+ def password_reset_view (request ):
143+ success = False
144+ if request .method == 'POST' :
145+ form = RecoverPasswordForm (request .POST )
146+ if form .is_valid ():
147+ form .save ()
148+ success = True
149+ else :
150+ form = RecoverPasswordForm ()
151+ return render_to_response ('registration/password_reset.html' ,
152+ {'form' : form ,
153+ 'success' : success },
154+ context_instance = RequestContext (request ))
155+
156+
157+ def confirm_password_reset (request , username , date , realm , reset_hash ):
158+ valid = hashlib .md5 ('%s%s%s%s' % (settings .SECRET_KEY , date , username , realm )).hexdigest () == reset_hash
159+ if not valid :
160+ raise Http404
161+ success = False
162+ if request .method == 'POST' :
163+ form = PasswordForm (request .POST , update_user = True , username = username )
164+ if form .is_valid ():
165+ form .save ()
166+ success = True
167+ else :
168+ form = PasswordForm (username = username )
169+ return render_to_response ('registration/change_password.html' ,
170+ {'form' : form ,
171+ 'success' : success ,
172+ 'username' : username },
173+ context_instance = RequestContext (request ))
174+
175+
176+ def ajax_check_username (request ):
177+ username = request .GET .get ('username' , '' )
178+ error = False
179+ if User .objects .filter (username = username ).count ():
180+ error = 'This email is already in use'
181+ return HttpResponse (simplejson .dumps ({'error' : error }), mimetype = 'text/plain' )
0 commit comments