possibly faster auth
This commit is contained in:
@@ -1 +1 @@
|
|||||||
Version 2.00.0 (2012-08-27 11:07:47) dev
|
Version 2.00.0 (2012-08-27 12:02:48) dev
|
||||||
|
|||||||
+227
-239
@@ -799,6 +799,141 @@ def addrow(form, a, b, c, style, _id, position=-1):
|
|||||||
|
|
||||||
|
|
||||||
class Auth(object):
|
class Auth(object):
|
||||||
|
|
||||||
|
default_settings = {
|
||||||
|
'hideerror': False,
|
||||||
|
'password_min_length': 4,
|
||||||
|
'cas_maps': None,
|
||||||
|
'reset_password_requires_verification': False,
|
||||||
|
'registration_requires_verification': False,
|
||||||
|
'registration_requires_approval': False,
|
||||||
|
'login_after_registration': False,
|
||||||
|
'login_after_password_change': True,
|
||||||
|
'alternate_requires_registration': False,
|
||||||
|
'create_user_groups': "user_%(id)s",
|
||||||
|
'everybody_group_id': None,
|
||||||
|
'login_captcha': None,
|
||||||
|
'register_captcha': None,
|
||||||
|
'retrieve_username_captcha': None,
|
||||||
|
'retrieve_password_captcha': None,
|
||||||
|
'captcha': None,
|
||||||
|
'expiration': 3600, # one hour
|
||||||
|
'long_expiration': 3600*30*24, # one month
|
||||||
|
'remember_me_form': True,
|
||||||
|
'allow_basic_login': False,
|
||||||
|
'allow_basic_login_only': False,
|
||||||
|
'on_failed_authentication': lambda x: redirect(x),
|
||||||
|
'formstyle': 'table3cols',
|
||||||
|
'label_separator': ': ',
|
||||||
|
'password_field': 'password',
|
||||||
|
'table_user_name': 'auth_user',
|
||||||
|
'table_group_name': 'auth_group',
|
||||||
|
'table_membership_name': 'auth_membership',
|
||||||
|
'table_permission_name': 'auth_permission',
|
||||||
|
'table_event_name': 'auth_event',
|
||||||
|
'table_cas_name': 'auth_cas',
|
||||||
|
'table_user': None,
|
||||||
|
'table_group': None,
|
||||||
|
'table_membership': None,
|
||||||
|
'table_permission': None,
|
||||||
|
'table_event': None,
|
||||||
|
'table_cas': None,
|
||||||
|
'showid': False,
|
||||||
|
'login_email_validate': True,
|
||||||
|
'login_userfield': None,
|
||||||
|
'logout_onlogout': None,
|
||||||
|
'register_fields': None,
|
||||||
|
'register_verify_password': True,
|
||||||
|
'profile_fields': None,
|
||||||
|
'email_case_sensitive': True,
|
||||||
|
'username_case_sensitive': True,
|
||||||
|
}
|
||||||
|
# ## these are messages that can be customized
|
||||||
|
default_messages = {
|
||||||
|
'login_button': 'Login',
|
||||||
|
'register_button': 'Register',
|
||||||
|
'password_reset_button': 'Request reset password',
|
||||||
|
'password_change_button': 'Change password',
|
||||||
|
'profile_save_button': 'Save profile',
|
||||||
|
'submit_button': 'Submit',
|
||||||
|
'verify_password': 'Verify Password',
|
||||||
|
'delete_label': 'Check to delete',
|
||||||
|
'function_disabled': 'Function disabled',
|
||||||
|
'access_denied': 'Insufficient privileges',
|
||||||
|
'registration_verifying': 'Registration needs verification',
|
||||||
|
'registration_pending': 'Registration is pending approval',
|
||||||
|
'login_disabled': 'Login disabled by administrator',
|
||||||
|
'logged_in': 'Logged in',
|
||||||
|
'email_sent': 'Email sent',
|
||||||
|
'unable_to_send_email': 'Unable to send email',
|
||||||
|
'email_verified': 'Email verified',
|
||||||
|
'logged_out': 'Logged out',
|
||||||
|
'registration_successful': 'Registration successful',
|
||||||
|
'invalid_email': 'Invalid email',
|
||||||
|
'unable_send_email': 'Unable to send email',
|
||||||
|
'invalid_login': 'Invalid login',
|
||||||
|
'invalid_user': 'Invalid user',
|
||||||
|
'invalid_password': 'Invalid password',
|
||||||
|
'is_empty': "Cannot be empty",
|
||||||
|
'mismatched_password': "Password fields don't match",
|
||||||
|
'verify_email': 'Click on the link %(link)s to verify your email',
|
||||||
|
'verify_email_subject': 'Email verification',
|
||||||
|
'username_sent': 'Your username was emailed to you',
|
||||||
|
'new_password_sent': 'A new password was emailed to you',
|
||||||
|
'password_changed': 'Password changed',
|
||||||
|
'retrieve_username': 'Your username is: %(username)s',
|
||||||
|
'retrieve_username_subject': 'Username retrieve',
|
||||||
|
'retrieve_password': 'Your password is: %(password)s',
|
||||||
|
'retrieve_password_subject': 'Password retrieve',
|
||||||
|
'reset_password': \
|
||||||
|
'Click on the link %(link)s to reset your password',
|
||||||
|
'reset_password_subject': 'Password reset',
|
||||||
|
'invalid_reset_password': 'Invalid reset password',
|
||||||
|
'profile_updated': 'Profile updated',
|
||||||
|
'new_password': 'New password',
|
||||||
|
'old_password': 'Old password',
|
||||||
|
'group_description': 'Group uniquely assigned to user %(id)s',
|
||||||
|
'register_log': 'User %(id)s Registered',
|
||||||
|
'login_log': 'User %(id)s Logged-in',
|
||||||
|
'login_failed_log': None,
|
||||||
|
'logout_log': 'User %(id)s Logged-out',
|
||||||
|
'profile_log': 'User %(id)s Profile updated',
|
||||||
|
'verify_email_log': 'User %(id)s Verification email sent',
|
||||||
|
'retrieve_username_log': 'User %(id)s Username retrieved',
|
||||||
|
'retrieve_password_log': 'User %(id)s Password retrieved',
|
||||||
|
'reset_password_log': 'User %(id)s Password reset',
|
||||||
|
'change_password_log': 'User %(id)s Password changed',
|
||||||
|
'add_group_log': 'Group %(group_id)s created',
|
||||||
|
'del_group_log': 'Group %(group_id)s deleted',
|
||||||
|
'add_membership_log': None,
|
||||||
|
'del_membership_log': None,
|
||||||
|
'has_membership_log': None,
|
||||||
|
'add_permission_log': None,
|
||||||
|
'del_permission_log': None,
|
||||||
|
'has_permission_log': None,
|
||||||
|
'impersonate_log': 'User %(id)s is impersonating %(other_id)s',
|
||||||
|
'label_first_name': 'First name',
|
||||||
|
'label_last_name': 'Last name',
|
||||||
|
'label_username': 'Username',
|
||||||
|
'label_email': 'E-mail',
|
||||||
|
'label_password': 'Password',
|
||||||
|
'label_registration_key': 'Registration key',
|
||||||
|
'label_reset_password_key': 'Reset Password key',
|
||||||
|
'label_registration_id': 'Registration identifier',
|
||||||
|
'label_role': 'Role',
|
||||||
|
'label_description': 'Description',
|
||||||
|
'label_user_id': 'User ID',
|
||||||
|
'label_group_id': 'Group ID',
|
||||||
|
'label_name': 'Name',
|
||||||
|
'label_table_name': 'Object or table name',
|
||||||
|
'label_record_id': 'Record ID',
|
||||||
|
'label_time_stamp': 'Timestamp',
|
||||||
|
'label_client_ip': 'Client IP',
|
||||||
|
'label_origin': 'Origin',
|
||||||
|
'label_remember_me': "Remember me (for 30 days)",
|
||||||
|
'verify_password_comment': 'please input your password again',
|
||||||
|
}
|
||||||
|
|
||||||
"""
|
"""
|
||||||
Class for authentication, authorization, role based access control.
|
Class for authentication, authorization, role based access control.
|
||||||
|
|
||||||
@@ -895,10 +1030,11 @@ class Auth(object):
|
|||||||
open(filename,'w').write(key)
|
open(filename,'w').write(key)
|
||||||
return key
|
return key
|
||||||
|
|
||||||
def url(self, f=None, args=None, vars=None):
|
def url(self, f=None, args=None, vars=None, scheme=False):
|
||||||
if args is None: args=[]
|
if args is None: args=[]
|
||||||
if vars is None: vars={}
|
if vars is None: vars={}
|
||||||
return URL(c=self.settings.controller, f=f, args=args, vars=vars)
|
return URL(c=self.settings.controller,
|
||||||
|
f=f, args=args, vars=vars,scheme=scheme)
|
||||||
|
|
||||||
def here(self):
|
def here(self):
|
||||||
return URL(args=current.request.args,vars=current.request.vars)
|
return URL(args=current.request.args,vars=current.request.vars)
|
||||||
@@ -934,223 +1070,67 @@ class Auth(object):
|
|||||||
else:
|
else:
|
||||||
self.user = None
|
self.user = None
|
||||||
session.auth = None
|
session.auth = None
|
||||||
settings = self.settings = Settings()
|
|
||||||
|
|
||||||
# ## what happens after login?
|
# ## what happens after login?
|
||||||
|
|
||||||
self.next = current.request.vars._next
|
self.next = current.request.vars._next
|
||||||
if isinstance(self.next,(list,tuple)):
|
if isinstance(self.next,(list,tuple)):
|
||||||
self.next = self.next[0]
|
self.next = self.next[0]
|
||||||
|
url_index = URL(controller,'index')
|
||||||
|
url_login = URL(controller,function,args='login')
|
||||||
# ## what happens after registration?
|
# ## what happens after registration?
|
||||||
|
|
||||||
settings.hideerror = False
|
settings = self.settings = Settings()
|
||||||
settings.password_min_length = 4
|
settings.update(Auth.default_settings)
|
||||||
settings.cas_domains = [request.env.http_host]
|
settings.update({
|
||||||
settings.cas_provider = cas_provider
|
'cas_domains': [request.env.http_host],
|
||||||
settings.cas_actions = {'login':'login',
|
'cas_provider': cas_provider,
|
||||||
'validate':'validate',
|
'cas_actions': {'login':'login',
|
||||||
'servicevalidate':'serviceValidate',
|
'validate':'validate',
|
||||||
'proxyvalidate':'proxyValidate',
|
'servicevalidate':'serviceValidate',
|
||||||
'logout':'logout'}
|
'proxyvalidate':'proxyValidate',
|
||||||
settings.cas_maps = None
|
'logout':'logout'},
|
||||||
settings.extra_fields = {}
|
'extra_fields': {},
|
||||||
settings.actions_disabled = []
|
'actions_disabled': [],
|
||||||
settings.reset_password_requires_verification = False
|
'controller': controller,
|
||||||
settings.registration_requires_verification = False
|
'function': function,
|
||||||
settings.registration_requires_approval = False
|
'login_url': url_login,
|
||||||
settings.login_after_registration = False
|
'logged_url': URL(controller, function, args='profile'),
|
||||||
settings.login_after_password_change = True
|
'download_url': URL(controller,'download'),
|
||||||
settings.alternate_requires_registration = False
|
'mailer': (mailer==True) and Mail() or mailer,
|
||||||
settings.create_user_groups = "user_%(id)s"
|
'on_failed_authorization': \
|
||||||
settings.everybody_group_id = None
|
URL(controller,function, args='not_authorized'),
|
||||||
|
'login_next': url_index,
|
||||||
settings.controller = controller
|
'login_onvalidation': [],
|
||||||
settings.function = function
|
'login_onaccept': [],
|
||||||
settings.login_url = self.url(function, args='login')
|
'login_methods': [self],
|
||||||
settings.logged_url = self.url(function, args='profile')
|
'login_form': self,
|
||||||
settings.download_url = self.url('download')
|
'logout_next': url_index,
|
||||||
settings.mailer = (mailer==True) and Mail() or mailer
|
'logout_onlogout': None,
|
||||||
settings.login_captcha = None
|
'register_next': url_index,
|
||||||
settings.register_captcha = None
|
'register_onvalidation': [],
|
||||||
settings.retrieve_username_captcha = None
|
'register_onaccept': [],
|
||||||
settings.retrieve_password_captcha = None
|
'verify_email_next': url_login,
|
||||||
settings.captcha = None
|
'verify_email_onaccept': [],
|
||||||
settings.expiration = 3600 # one hour
|
'profile_next': url_index,
|
||||||
settings.long_expiration = 3600*30*24 # one month
|
'profile_onvalidation': [],
|
||||||
settings.remember_me_form = True
|
'profile_onaccept': [],
|
||||||
settings.allow_basic_login = False
|
'retrieve_username_next': url_index,
|
||||||
settings.allow_basic_login_only = False
|
'retrieve_password_next': url_index,
|
||||||
settings.on_failed_authorization = \
|
'request_reset_password_next': url_login,
|
||||||
self.url(function, args='not_authorized')
|
'reset_password_next': url_index,
|
||||||
|
'change_password_next': url_index,
|
||||||
settings.on_failed_authentication = lambda x: redirect(x)
|
'change_password_onvalidation': [],
|
||||||
|
'change_password_onaccept': [],
|
||||||
settings.formstyle = 'table3cols'
|
'retrieve_password_onvalidation': [],
|
||||||
settings.label_separator = ': '
|
'reset_password_onvalidation': [],
|
||||||
|
'reset_password_onaccept': [],
|
||||||
# ## table names to be used
|
'hmac_key': hmac_key,
|
||||||
|
})
|
||||||
settings.password_field = 'password'
|
|
||||||
settings.table_user_name = 'auth_user'
|
|
||||||
settings.table_group_name = 'auth_group'
|
|
||||||
settings.table_membership_name = 'auth_membership'
|
|
||||||
settings.table_permission_name = 'auth_permission'
|
|
||||||
settings.table_event_name = 'auth_event'
|
|
||||||
settings.table_cas_name = 'auth_cas'
|
|
||||||
|
|
||||||
# ## if none, they will be created, unless DAL(lazy_tables=True)!!!
|
|
||||||
|
|
||||||
settings.table_user = None
|
|
||||||
settings.table_group = None
|
|
||||||
settings.table_membership = None
|
|
||||||
settings.table_permission = None
|
|
||||||
settings.table_event = None
|
|
||||||
settings.table_cas = None
|
|
||||||
|
|
||||||
# ##
|
|
||||||
|
|
||||||
settings.showid = False
|
|
||||||
|
|
||||||
# ## these should be functions or lambdas
|
|
||||||
|
|
||||||
settings.login_next = self.url('index')
|
|
||||||
settings.login_onvalidation = []
|
|
||||||
settings.login_onaccept = []
|
|
||||||
settings.login_methods = [self]
|
|
||||||
settings.login_form = self
|
|
||||||
settings.login_email_validate = True
|
|
||||||
settings.login_userfield = None
|
|
||||||
|
|
||||||
settings.logout_next = self.url('index')
|
|
||||||
settings.logout_onlogout = None
|
|
||||||
|
|
||||||
settings.register_next = self.url('index')
|
|
||||||
settings.register_onvalidation = []
|
|
||||||
settings.register_onaccept = []
|
|
||||||
settings.register_fields = None
|
|
||||||
settings.register_verify_password = True
|
|
||||||
|
|
||||||
settings.verify_email_next = self.url(function, args='login')
|
|
||||||
settings.verify_email_onaccept = []
|
|
||||||
|
|
||||||
settings.profile_next = self.url('index')
|
|
||||||
settings.profile_onvalidation = []
|
|
||||||
settings.profile_onaccept = []
|
|
||||||
settings.profile_fields = None
|
|
||||||
settings.retrieve_username_next = self.url('index')
|
|
||||||
settings.retrieve_password_next = self.url('index')
|
|
||||||
settings.request_reset_password_next = \
|
|
||||||
self.url(function,args='login')
|
|
||||||
settings.reset_password_next = self.url('index')
|
|
||||||
|
|
||||||
settings.change_password_next = self.url('index')
|
|
||||||
settings.change_password_onvalidation = []
|
|
||||||
settings.change_password_onaccept = []
|
|
||||||
|
|
||||||
settings.retrieve_password_onvalidation = []
|
|
||||||
settings.reset_password_onvalidation = []
|
|
||||||
settings.reset_password_onaccept = []
|
|
||||||
|
|
||||||
settings.email_case_sensitive = True
|
|
||||||
settings.username_case_sensitive = True
|
|
||||||
|
|
||||||
settings.hmac_key = hmac_key
|
|
||||||
settings.lock_keys = True
|
settings.lock_keys = True
|
||||||
|
|
||||||
# ## these are messages that can be customized
|
# ## these are messages that can be customized
|
||||||
messages = self.messages = Messages(current.T)
|
messages = self.messages = Messages(current.T)
|
||||||
messages.login_button = 'Login'
|
messages.update(Auth.default_messages)
|
||||||
messages.register_button = 'Register'
|
|
||||||
messages.password_reset_button = 'Request reset password'
|
|
||||||
messages.password_change_button = 'Change password'
|
|
||||||
messages.profile_save_button = 'Save profile'
|
|
||||||
messages.submit_button = 'Submit'
|
|
||||||
messages.verify_password = 'Verify Password'
|
|
||||||
messages.delete_label = 'Check to delete'
|
|
||||||
messages.function_disabled = 'Function disabled'
|
|
||||||
messages.access_denied = 'Insufficient privileges'
|
|
||||||
messages.registration_verifying = 'Registration needs verification'
|
|
||||||
messages.registration_pending = 'Registration is pending approval'
|
|
||||||
messages.login_disabled = 'Login disabled by administrator'
|
|
||||||
messages.logged_in = 'Logged in'
|
|
||||||
messages.email_sent = 'Email sent'
|
|
||||||
messages.unable_to_send_email = 'Unable to send email'
|
|
||||||
messages.email_verified = 'Email verified'
|
|
||||||
messages.logged_out = 'Logged out'
|
|
||||||
messages.registration_successful = 'Registration successful'
|
|
||||||
messages.invalid_email = 'Invalid email'
|
|
||||||
messages.unable_send_email = 'Unable to send email'
|
|
||||||
messages.invalid_login = 'Invalid login'
|
|
||||||
messages.invalid_user = 'Invalid user'
|
|
||||||
messages.invalid_password = 'Invalid password'
|
|
||||||
messages.is_empty = "Cannot be empty"
|
|
||||||
messages.mismatched_password = "Password fields don't match"
|
|
||||||
messages.verify_email = \
|
|
||||||
'Click on the link ' + \
|
|
||||||
URL('default','user',args='verify_email',scheme=True) + \
|
|
||||||
'/%(key)s to verify your email'
|
|
||||||
messages.verify_email_subject = 'Email verification'
|
|
||||||
messages.username_sent = 'Your username was emailed to you'
|
|
||||||
messages.new_password_sent = 'A new password was emailed to you'
|
|
||||||
messages.password_changed = 'Password changed'
|
|
||||||
messages.retrieve_username = 'Your username is: %(username)s'
|
|
||||||
messages.retrieve_username_subject = 'Username retrieve'
|
|
||||||
messages.retrieve_password = 'Your password is: %(password)s'
|
|
||||||
messages.retrieve_password_subject = 'Password retrieve'
|
|
||||||
messages.reset_password = \
|
|
||||||
'Click on the link ' + \
|
|
||||||
URL('default','user',args='reset_password',scheme=True) + \
|
|
||||||
'/%(key)s to reset your password'
|
|
||||||
messages.reset_password_subject = 'Password reset'
|
|
||||||
messages.invalid_reset_password = 'Invalid reset password'
|
|
||||||
messages.profile_updated = 'Profile updated'
|
|
||||||
messages.new_password = 'New password'
|
|
||||||
messages.old_password = 'Old password'
|
|
||||||
messages.group_description = \
|
|
||||||
'Group uniquely assigned to user %(id)s'
|
|
||||||
|
|
||||||
messages.register_log = 'User %(id)s Registered'
|
|
||||||
messages.login_log = 'User %(id)s Logged-in'
|
|
||||||
messages.login_failed_log = None
|
|
||||||
messages.logout_log = 'User %(id)s Logged-out'
|
|
||||||
messages.profile_log = 'User %(id)s Profile updated'
|
|
||||||
messages.verify_email_log = 'User %(id)s Verification email sent'
|
|
||||||
messages.retrieve_username_log = 'User %(id)s Username retrieved'
|
|
||||||
messages.retrieve_password_log = 'User %(id)s Password retrieved'
|
|
||||||
messages.reset_password_log = 'User %(id)s Password reset'
|
|
||||||
messages.change_password_log = 'User %(id)s Password changed'
|
|
||||||
messages.add_group_log = 'Group %(group_id)s created'
|
|
||||||
messages.del_group_log = 'Group %(group_id)s deleted'
|
|
||||||
messages.add_membership_log = None
|
|
||||||
messages.del_membership_log = None
|
|
||||||
messages.has_membership_log = None
|
|
||||||
messages.add_permission_log = None
|
|
||||||
messages.del_permission_log = None
|
|
||||||
messages.has_permission_log = None
|
|
||||||
messages.impersonate_log = 'User %(id)s is impersonating %(other_id)s'
|
|
||||||
|
|
||||||
messages.label_first_name = 'First name'
|
|
||||||
messages.label_last_name = 'Last name'
|
|
||||||
messages.label_username = 'Username'
|
|
||||||
messages.label_email = 'E-mail'
|
|
||||||
messages.label_password = 'Password'
|
|
||||||
messages.label_registration_key = 'Registration key'
|
|
||||||
messages.label_reset_password_key = 'Reset Password key'
|
|
||||||
messages.label_registration_id = 'Registration identifier'
|
|
||||||
messages.label_role = 'Role'
|
|
||||||
messages.label_description = 'Description'
|
|
||||||
messages.label_user_id = 'User ID'
|
|
||||||
messages.label_group_id = 'Group ID'
|
|
||||||
messages.label_name = 'Name'
|
|
||||||
messages.label_table_name = 'Object or table name'
|
|
||||||
messages.label_record_id = 'Record ID'
|
|
||||||
messages.label_time_stamp = 'Timestamp'
|
|
||||||
messages.label_client_ip = 'Client IP'
|
|
||||||
messages.label_origin = 'Origin'
|
|
||||||
messages.label_remember_me = "Remember me (for 30 days)"
|
|
||||||
messages['T'] = current.T
|
|
||||||
messages.verify_password_comment = 'please input your password again'
|
|
||||||
messages.lock_keys = True
|
messages.lock_keys = True
|
||||||
|
|
||||||
# for "remember me" option
|
# for "remember me" option
|
||||||
@@ -1339,37 +1319,39 @@ class Auth(object):
|
|||||||
settings = self.settings
|
settings = self.settings
|
||||||
request = current.request
|
request = current.request
|
||||||
T = current.T
|
T = current.T
|
||||||
def lazy_user (auth = self): return auth.user_id
|
|
||||||
reference_user = 'reference %s' % settings.table_user_name
|
reference_user = 'reference %s' % settings.table_user_name
|
||||||
|
def lazy_user (auth = self):
|
||||||
|
return auth.user_id
|
||||||
def represent(id,record=None,s=settings):
|
def represent(id,record=None,s=settings):
|
||||||
try:
|
try:
|
||||||
user = s.table_user(id)
|
user = s.table_user(id)
|
||||||
return '%(first_name)s %(last_name)s' % user
|
return '%(first_name)s %(last_name)s' % user
|
||||||
except: return id
|
except:
|
||||||
self.signature = db.Table(self.db,'auth_signature',
|
return id
|
||||||
Field('is_active','boolean',
|
self.signature = db.Table(
|
||||||
default=True,
|
self.db,'auth_signature',
|
||||||
readable=False, writable=False,
|
Field('is_active','boolean',
|
||||||
label=T('Is Active')),
|
default=True,
|
||||||
Field('created_on','datetime',
|
readable=False, writable=False,
|
||||||
default=request.now,
|
label=T('Is Active')),
|
||||||
writable=False, readable=False,
|
Field('created_on','datetime',
|
||||||
label=T('Created On')),
|
default=request.now,
|
||||||
Field('created_by',
|
writable=False, readable=False,
|
||||||
reference_user,
|
label=T('Created On')),
|
||||||
default=lazy_user, represent=represent,
|
Field('created_by',
|
||||||
writable=False, readable=False,
|
reference_user,
|
||||||
label=T('Created By')),
|
default=lazy_user, represent=represent,
|
||||||
Field('modified_on','datetime',
|
writable=False, readable=False,
|
||||||
update=request.now,default=request.now,
|
label=T('Created By')),
|
||||||
writable=False,readable=False,
|
Field('modified_on','datetime',
|
||||||
label=T('Modified On')),
|
update=request.now,default=request.now,
|
||||||
Field('modified_by',
|
writable=False,readable=False,
|
||||||
reference_user,represent=represent,
|
label=T('Modified On')),
|
||||||
default=lazy_user,update=lazy_user,
|
Field('modified_by',
|
||||||
writable=False,readable=False,
|
reference_user,represent=represent,
|
||||||
label=T('Modified By')))
|
default=lazy_user,update=lazy_user,
|
||||||
|
writable=False,readable=False,
|
||||||
|
label=T('Modified By')))
|
||||||
|
|
||||||
def define_tables(self, username=False, signature=None,
|
def define_tables(self, username=False, signature=None,
|
||||||
migrate=True, fake_migrate=False):
|
migrate=True, fake_migrate=False):
|
||||||
@@ -2137,11 +2119,14 @@ class Auth(object):
|
|||||||
if self.settings.everybody_group_id:
|
if self.settings.everybody_group_id:
|
||||||
self.add_membership(self.settings.everybody_group_id, form.vars.id)
|
self.add_membership(self.settings.everybody_group_id, form.vars.id)
|
||||||
if self.settings.registration_requires_verification:
|
if self.settings.registration_requires_verification:
|
||||||
|
link = self.url('user',args=('verify_email',key),scheme=True)
|
||||||
|
|
||||||
if not self.settings.mailer or \
|
if not self.settings.mailer or \
|
||||||
not self.settings.mailer.send(to=form.vars.email,
|
not self.settings.mailer.send(
|
||||||
subject=self.messages.verify_email_subject,
|
to=form.vars.email,
|
||||||
message=self.messages.verify_email
|
subject=self.messages.verify_email_subject,
|
||||||
% dict(key=key)):
|
message=self.messages.verify_email \
|
||||||
|
% dict(key=key,link=link)):
|
||||||
self.db.rollback()
|
self.db.rollback()
|
||||||
response.flash = self.messages.unable_send_email
|
response.flash = self.messages.unable_send_email
|
||||||
return form
|
return form
|
||||||
@@ -2511,11 +2496,14 @@ class Auth(object):
|
|||||||
|
|
||||||
def email_reset_password(self,user):
|
def email_reset_password(self,user):
|
||||||
reset_password_key = str(int(time.time()))+'-' + web2py_uuid()
|
reset_password_key = str(int(time.time()))+'-' + web2py_uuid()
|
||||||
|
link = self.url('user',
|
||||||
|
args=('reset_password',reset_password_key),
|
||||||
|
scheme=True)
|
||||||
if self.settings.mailer.send(
|
if self.settings.mailer.send(
|
||||||
to=user.email,
|
to=user.email,
|
||||||
subject=self.messages.reset_password_subject,
|
subject=self.messages.reset_password_subject,
|
||||||
message=self.messages.reset_password % \
|
message=self.messages.reset_password % \
|
||||||
dict(key=reset_password_key)):
|
dict(key=reset_password_key,link=link)):
|
||||||
user.update_record(reset_password_key=reset_password_key)
|
user.update_record(reset_password_key=reset_password_key)
|
||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
|||||||
Reference in New Issue
Block a user