1+ import datetime
2+ import hashlib
3+ import subprocess
4+
5+ from django import forms
6+ from django .conf import settings
7+ from django .contrib .auth .models import User
8+ from django .contrib .auth .forms import PasswordResetForm
9+ from django .contrib .sites .models import Site
10+ from django .utils .translation import ugettext , ugettext_lazy as _
11+
12+ from ietf .utils .mail import send_mail
13+ from ietf .utils import debug
14+ #from redesign.person.models import Person, Email
15+
16+
17+ class RegistrationForm (forms .Form ):
18+
19+ email = forms .EmailField (label = "Your email" )
20+ realm = 'IETF'
21+ expire = 3
22+
23+ def save (self , * args , ** kwargs ):
24+ self .send_email ()
25+ return True
26+
27+ def send_email (self ):
28+ domain = Site .objects .get_current ().domain
29+ subject = 'Confirm registration at %s' % domain
30+ from_email = settings .DEFAULT_FROM_EMAIL
31+ to_email = self .cleaned_data ['email' ]
32+ today = datetime .date .today ().strftime ('%Y%m%d' )
33+ auth = hashlib .md5 ('%s%s%s%s' % (settings .SECRET_KEY , today , to_email , self .realm )).hexdigest ()
34+ context = {
35+ 'domain' : domain ,
36+ 'today' : today ,
37+ 'realm' : self .realm ,
38+ 'auth' : auth ,
39+ 'username' : to_email ,
40+ 'expire' : settings .DAYS_TO_EXPIRE_REGISTRATION_LINK ,
41+ }
42+ send_mail (None , to_email , from_email , subject , 'registration/creation_email.txt' , context )
43+
44+ def clean_email (self ):
45+ email = self .cleaned_data .get ('email' , '' )
46+ if not email :
47+ return email
48+ # if User.objects.filter(username=email).count():
49+ # raise forms.ValidationError(_('Email already in use'))
50+ return email
51+
52+
53+ class RecoverPasswordForm (RegistrationForm ):
54+
55+ realm = 'IETF'
56+
57+ def send_email (self ):
58+ domain = Site .objects .get_current ().domain
59+ subject = 'Password reset at %s' % domain
60+ from_email = settings .DEFAULT_FROM_EMAIL
61+ today = datetime .date .today ().strftime ('%Y%m%d' )
62+ to_email = self .cleaned_data ['email' ]
63+ today = datetime .date .today ().strftime ('%Y%m%d' )
64+ auth = hashlib .md5 ('%s%s%s%s' % (settings .SECRET_KEY , today , to_email , self .realm )).hexdigest ()
65+ context = {
66+ 'domain' : domain ,
67+ 'today' : today ,
68+ 'realm' : self .realm ,
69+ 'auth' : auth ,
70+ 'username' : to_email ,
71+ 'expire' : settings .DAYS_TO_EXPIRE_REGISTRATION_LINK ,
72+ }
73+ send_mail (None , to_email , from_email , subject , 'registration/password_reset_email.txt' , context )
74+
75+
76+ class PasswordForm (forms .Form ):
77+
78+ password1 = forms .CharField (label = _ ("Password" ), widget = forms .PasswordInput )
79+ password2 = forms .CharField (label = _ ("Password confirmation" ), widget = forms .PasswordInput ,
80+ help_text = _ ("Enter the same password as above, for verification." ))
81+
82+ def __init__ (self , * args , ** kwargs ):
83+ self .username = kwargs .pop ('username' )
84+ self .update_user = kwargs .pop ('update_user' , False )
85+ super (PasswordForm , self ).__init__ (* args , ** kwargs )
86+
87+ def clean_password2 (self ):
88+ password1 = self .cleaned_data .get ("password1" , "" )
89+ password2 = self .cleaned_data ["password2" ]
90+ if password1 != password2 :
91+ raise forms .ValidationError (_ ("The two password fields didn't match." ))
92+ return password2
93+
94+ def get_password (self ):
95+ return self .cleaned_data .get ('password1' )
96+
97+ def create_user (self ):
98+ # user = User.objects.create(username=self.username,
99+ # email=self.username)
100+ # person = Person.objects.create(user=user,
101+ # name=self.username,
102+ # ascii=self.username)
103+ # Email.objects.create(person=person,
104+ # address=self.username)
105+ # return user
106+ return None
107+
108+ def get_user (self ):
109+ return User .objects .get (username = self .username )
110+
111+ @debug .trace
112+ def save (self ):
113+ # if self.update_user:
114+ # user = self.get_user()
115+ # else:
116+ # user = self.create_user()
117+ # user.set_password(self.get_password())
118+ # user.save()
119+ # return user
120+ debug .show ("[settings.HTPASSWD_COMMAND, settings.HTPASSWD_FILE, self.username, self.get_password()]" )
121+ p = subprocess .Popen ([settings .HTPASSWD_COMMAND , "-b" , settings .HTPASSWD_FILE , self .username , self .get_password ()], stdout = subprocess .PIPE , stderr = subprocess .PIPE )
122+ stdout , stderr = p .communicate ()
123+ debug .show ('stdout' )
124+ debug .show ('stderr' )
125+ return p .returncode
0 commit comments