Merge pull request #222 from charleslaw/master
Various Minor Auth Additions
This commit is contained in:
+48
-14
@@ -883,6 +883,7 @@ class Auth(object):
|
|||||||
auth_manager_role=None,
|
auth_manager_role=None,
|
||||||
login_captcha=None,
|
login_captcha=None,
|
||||||
register_captcha=None,
|
register_captcha=None,
|
||||||
|
pre_registration_div=None,
|
||||||
retrieve_username_captcha=None,
|
retrieve_username_captcha=None,
|
||||||
retrieve_password_captcha=None,
|
retrieve_password_captcha=None,
|
||||||
captcha=None,
|
captcha=None,
|
||||||
@@ -913,6 +914,7 @@ class Auth(object):
|
|||||||
use_username=False,
|
use_username=False,
|
||||||
login_email_validate=True,
|
login_email_validate=True,
|
||||||
login_userfield=None,
|
login_userfield=None,
|
||||||
|
multi_login=False,
|
||||||
logout_onlogout=None,
|
logout_onlogout=None,
|
||||||
register_fields=None,
|
register_fields=None,
|
||||||
register_verify_password=True,
|
register_verify_password=True,
|
||||||
@@ -942,6 +944,9 @@ class Auth(object):
|
|||||||
access_denied='Insufficient privileges',
|
access_denied='Insufficient privileges',
|
||||||
registration_verifying='Registration needs verification',
|
registration_verifying='Registration needs verification',
|
||||||
registration_pending='Registration is pending approval',
|
registration_pending='Registration is pending approval',
|
||||||
|
email_taken='This email already has an account',
|
||||||
|
invalid_username='Invalid username',
|
||||||
|
username_taken='Username already taken',
|
||||||
login_disabled='Login disabled by administrator',
|
login_disabled='Login disabled by administrator',
|
||||||
logged_in='Logged in',
|
logged_in='Logged in',
|
||||||
email_sent='Email sent',
|
email_sent='Email sent',
|
||||||
@@ -956,7 +961,7 @@ class Auth(object):
|
|||||||
invalid_password='Invalid password',
|
invalid_password='Invalid password',
|
||||||
is_empty="Cannot be empty",
|
is_empty="Cannot be empty",
|
||||||
mismatched_password="Password fields don't match",
|
mismatched_password="Password fields don't match",
|
||||||
verify_email='Click on the link %(link)s to verify your email',
|
verify_email='Welcome %(username)s! Click on the link %(link)s to verify your email',
|
||||||
verify_email_subject='Email verification',
|
verify_email_subject='Email verification',
|
||||||
username_sent='Your username was emailed to you',
|
username_sent='Your username was emailed to you',
|
||||||
new_password_sent='A new password was emailed to you',
|
new_password_sent='A new password was emailed to you',
|
||||||
@@ -1651,7 +1656,8 @@ class Auth(object):
|
|||||||
min_length=settings.password_min_length)
|
min_length=settings.password_min_length)
|
||||||
is_unique_email = [
|
is_unique_email = [
|
||||||
IS_EMAIL(error_message=self.messages.invalid_email),
|
IS_EMAIL(error_message=self.messages.invalid_email),
|
||||||
IS_NOT_IN_DB(db, '%s.email' % settings.table_user_name)]
|
IS_NOT_IN_DB(db, '%s.email' % settings.table_user_name,
|
||||||
|
error_message=self.messages.email_taken)]
|
||||||
if not settings.email_case_sensitive:
|
if not settings.email_case_sensitive:
|
||||||
is_unique_email.insert(1, IS_LOWER())
|
is_unique_email.insert(1, IS_LOWER())
|
||||||
if not settings.table_user_name in db.tables:
|
if not settings.table_user_name in db.tables:
|
||||||
@@ -1660,8 +1666,10 @@ class Auth(object):
|
|||||||
settings.table_user_name, []) + signature_list
|
settings.table_user_name, []) + signature_list
|
||||||
if username or settings.cas_provider:
|
if username or settings.cas_provider:
|
||||||
is_unique_username = \
|
is_unique_username = \
|
||||||
[IS_MATCH('[\w\.\-]+', strict=True),
|
[IS_MATCH('[\w\.\-]+', strict=True,
|
||||||
IS_NOT_IN_DB(db, '%s.username' % settings.table_user_name)]
|
error_message=self.messages.invalid_username),
|
||||||
|
IS_NOT_IN_DB(db, '%s.username' % settings.table_user_name,
|
||||||
|
error_message=self.messages.username_taken)]
|
||||||
if not settings.username_case_sensitive:
|
if not settings.username_case_sensitive:
|
||||||
is_unique_username.insert(1, IS_LOWER())
|
is_unique_username.insert(1, IS_LOWER())
|
||||||
db.define_table(
|
db.define_table(
|
||||||
@@ -2162,12 +2170,6 @@ class Auth(object):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
table_user = self.table_user()
|
table_user = self.table_user()
|
||||||
if self.settings.login_userfield:
|
|
||||||
username = self.settings.login_userfield
|
|
||||||
elif 'username' in table_user.fields:
|
|
||||||
username = 'username'
|
|
||||||
else:
|
|
||||||
username = 'email'
|
|
||||||
settings = self.settings
|
settings = self.settings
|
||||||
if 'username' in table_user.fields or \
|
if 'username' in table_user.fields or \
|
||||||
not settings.login_email_validate:
|
not settings.login_email_validate:
|
||||||
@@ -2178,8 +2180,6 @@ class Auth(object):
|
|||||||
tmpvalidator = IS_EMAIL(error_message=self.messages.invalid_email)
|
tmpvalidator = IS_EMAIL(error_message=self.messages.invalid_email)
|
||||||
if not settings.email_case_sensitive:
|
if not settings.email_case_sensitive:
|
||||||
tmpvalidator = [IS_LOWER(), tmpvalidator]
|
tmpvalidator = [IS_LOWER(), tmpvalidator]
|
||||||
old_requires = table_user[username].requires
|
|
||||||
table_user[username].requires = tmpvalidator
|
|
||||||
|
|
||||||
request = current.request
|
request = current.request
|
||||||
response = current.response
|
response = current.response
|
||||||
@@ -2222,6 +2222,21 @@ class Auth(object):
|
|||||||
|
|
||||||
user = None # default
|
user = None # default
|
||||||
|
|
||||||
|
|
||||||
|
#Setup the default field used for the form
|
||||||
|
multi_login = False
|
||||||
|
if self.settings.login_userfield:
|
||||||
|
username = self.settings.login_userfield
|
||||||
|
else:
|
||||||
|
if 'username' in table_user.fields:
|
||||||
|
username = 'username'
|
||||||
|
else:
|
||||||
|
username = 'email'
|
||||||
|
if self.settings.multi_login:
|
||||||
|
multi_login = True
|
||||||
|
old_requires = table_user[username].requires
|
||||||
|
table_user[username].requires = tmpvalidator
|
||||||
|
|
||||||
# do we use our own login form, or from a central source?
|
# do we use our own login form, or from a central source?
|
||||||
if settings.login_form == self:
|
if settings.login_form == self:
|
||||||
form = SQLFORM(
|
form = SQLFORM(
|
||||||
@@ -2279,7 +2294,18 @@ class Auth(object):
|
|||||||
|
|
||||||
accepted_form = True
|
accepted_form = True
|
||||||
# check for username in db
|
# check for username in db
|
||||||
user = table_user(**{username: form.vars[username]})
|
if multi_login:
|
||||||
|
entered_username = form.vars[username]
|
||||||
|
if entered_username.find('@') < 0:
|
||||||
|
#no @, look for a username
|
||||||
|
#TODO: Is this still true?
|
||||||
|
#NOTE: @ is no allowed for usernames, so a username will
|
||||||
|
# never have an @ symbol unless an admin made it
|
||||||
|
user = table_user(**{'username': entered_username})
|
||||||
|
else:
|
||||||
|
user = table_user(**{'email': entered_username})
|
||||||
|
else:
|
||||||
|
user = table_user(**{username: form.vars[username]})
|
||||||
if user:
|
if user:
|
||||||
# user in db, check if registration pending or disabled
|
# user in db, check if registration pending or disabled
|
||||||
temp_user = user
|
temp_user = user
|
||||||
@@ -2491,6 +2517,7 @@ class Auth(object):
|
|||||||
if item:
|
if item:
|
||||||
form.custom.widget.password_two = \
|
form.custom.widget.password_two = \
|
||||||
INPUT(_name="password_two", _type="password",
|
INPUT(_name="password_two", _type="password",
|
||||||
|
_class="password",
|
||||||
requires=IS_EXPR(
|
requires=IS_EXPR(
|
||||||
'value==%s' %
|
'value==%s' %
|
||||||
repr(request.vars.get(passfield, None)),
|
repr(request.vars.get(passfield, None)),
|
||||||
@@ -2514,6 +2541,12 @@ class Auth(object):
|
|||||||
addrow(form, captcha.label, captcha,
|
addrow(form, captcha.label, captcha,
|
||||||
captcha.comment, self.settings.formstyle, 'captcha__row')
|
captcha.comment, self.settings.formstyle, 'captcha__row')
|
||||||
|
|
||||||
|
#Add a message if specified
|
||||||
|
if self.settings.pre_registration_div:
|
||||||
|
addrow(form, '',
|
||||||
|
DIV(_id="pre-reg", *self.settings.pre_registration_div),
|
||||||
|
'', formstyle, '')
|
||||||
|
|
||||||
table_user.registration_key.default = key = web2py_uuid()
|
table_user.registration_key.default = key = web2py_uuid()
|
||||||
if form.accepts(request, session if self.csrf_prevention else None,
|
if form.accepts(request, session if self.csrf_prevention else None,
|
||||||
formname='register',
|
formname='register',
|
||||||
@@ -2536,7 +2569,8 @@ class Auth(object):
|
|||||||
to=form.vars.email,
|
to=form.vars.email,
|
||||||
subject=self.messages.verify_email_subject,
|
subject=self.messages.verify_email_subject,
|
||||||
message=self.messages.verify_email
|
message=self.messages.verify_email
|
||||||
% dict(key=key, link=link)):
|
% dict(key=key, link=link,
|
||||||
|
username=form.vars[username])):
|
||||||
self.db.rollback()
|
self.db.rollback()
|
||||||
response.flash = self.messages.unable_send_email
|
response.flash = self.messages.unable_send_email
|
||||||
return form
|
return form
|
||||||
|
|||||||
Reference in New Issue
Block a user