-
Notifications
You must be signed in to change notification settings - Fork 0
/
signup.py
99 lines (80 loc) · 3.37 KB
/
signup.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
from handlers import BaseHandler
from lib import utils as u
from lib.DB.user import User
class Signup(BaseHandler):
"""Validate user registration."""
def render_signup(self, username="", error_username="", password="",
error_password="", verify="", error_verify="", email="",
error_email=""):
self.render('signup-form.html', username=username,
error_username=error_username, password=password,
error_password=error_password, verify=verify,
error_verify=error_verify, email=email,
error_email=error_email)
def get(self):
self.render_signup()
def post(self):
have_error = False
self.username = self.request.get('username')
self.password = self.request.get('password')
self.verify = self.request.get('verify')
self.email = self.request.get('email')
# Build up dict of error messages to rerender form with on
# error case (always include username and e-mail, never pw)
error_params = {'username': self.username, 'email': self.email}
# If statements will set have_error=True if validation
# procedures return False
if not u.valid_username(self.username):
error_params['error_username'] = "That's not a valid username."
have_error = True
# We can either have an invalid pw or the pw's don't match up
if not u.valid_password(self.password):
error_params['error_password'] = "That wasn't a valid password."
have_error = True
elif self.password != self.verify:
error_params['error_verify'] = "Your passwords didn't match."
have_error = True
if not u.valid_email(self.email):
error_params['error_email'] = "That's not a valid e-mail."
have_error = True
if have_error:
self.render_signup(**error_params)
else:
self.welcome()
def welcome(self, *a, **kw):
raise NotImplementedError
class QuerySignup(Signup):
"""Redirect to QueryWelcome."""
def welcome(self):
self.redirect('/welcome?username=' + self.username)
class QueryWelcome(BaseHandler):
"""Validate user from query parameter."""
def get(self):
username = self.request.get('username')
if u.valid_username(username):
self.render('welcome.html', username=username)
else:
self.redirect('/signup')
class dbSignup(Signup):
"""Store hashed + salted user to datastore."""
def welcome(self):
user = User.by_name(self.username)
# Make sure the user doesn't already exist
if user:
error_username = "That user already exists."
self.render_signup(username=self.username,
error_username=error_username, email=self.email)
else:
# Store user and set user_id cookie
user = User.register(self.username, self.password, self.email)
user.put()
self.login(user)
self.redirect('/db-welcome')
class dbWelcome(Signup):
"""Validate user from user_id cookie."""
def get(self):
# Check for user_id cookie
if self.user:
self.render('welcome.html', username=self.user.name)
else:
self.redirect('/db-signup')