Merge pull request #1054 from BuhtigithuB/Improve/PEP8-gluon-tools-py
Improve PEP8 gluon/tools.py
This commit is contained in:
+184
-209
@@ -272,7 +272,7 @@ class Mail(object):
|
|||||||
settings.sender = sender
|
settings.sender = sender
|
||||||
settings.login = login
|
settings.login = login
|
||||||
settings.tls = tls
|
settings.tls = tls
|
||||||
settings.timeout = 60 # seconds
|
settings.timeout = 60 # seconds
|
||||||
settings.hostname = None
|
settings.hostname = None
|
||||||
settings.ssl = False
|
settings.ssl = False
|
||||||
settings.cipher_type = None
|
settings.cipher_type = None
|
||||||
@@ -478,16 +478,16 @@ class Mail(object):
|
|||||||
text = message
|
text = message
|
||||||
html = None
|
html = None
|
||||||
|
|
||||||
if (not text is None or not html is None) and (not raw):
|
if (text is not None or html is not None) and (not raw):
|
||||||
|
|
||||||
if not text is None:
|
if text is not None:
|
||||||
if not isinstance(text, basestring):
|
if not isinstance(text, basestring):
|
||||||
text = text.read()
|
text = text.read()
|
||||||
if isinstance(text, unicode):
|
if isinstance(text, unicode):
|
||||||
text = text.encode('utf-8')
|
text = text.encode('utf-8')
|
||||||
elif not encoding == 'utf-8':
|
elif not encoding == 'utf-8':
|
||||||
text = text.decode(encoding).encode('utf-8')
|
text = text.decode(encoding).encode('utf-8')
|
||||||
if not html is None:
|
if html is not None:
|
||||||
if not isinstance(html, basestring):
|
if not isinstance(html, basestring):
|
||||||
html = html.read()
|
html = html.read()
|
||||||
if isinstance(html, unicode):
|
if isinstance(html, unicode):
|
||||||
@@ -528,9 +528,9 @@ class Mail(object):
|
|||||||
# CIPHER #
|
# CIPHER #
|
||||||
#######################################################
|
#######################################################
|
||||||
cipher_type = cipher_type or self.settings.cipher_type
|
cipher_type = cipher_type or self.settings.cipher_type
|
||||||
sign = sign if sign != None else self.settings.sign
|
sign = sign if sign is not None else self.settings.sign
|
||||||
sign_passphrase = sign_passphrase or self.settings.sign_passphrase
|
sign_passphrase = sign_passphrase or self.settings.sign_passphrase
|
||||||
encrypt = encrypt if encrypt != None else self.settings.encrypt
|
encrypt = encrypt if encrypt is not None else self.settings.encrypt
|
||||||
#######################################################
|
#######################################################
|
||||||
# GPGME #
|
# GPGME #
|
||||||
#######################################################
|
#######################################################
|
||||||
@@ -571,12 +571,12 @@ class Mail(object):
|
|||||||
c.op_sign(plain, sig, mode.DETACH)
|
c.op_sign(plain, sig, mode.DETACH)
|
||||||
sig.seek(0, 0)
|
sig.seek(0, 0)
|
||||||
# make it part of the email
|
# make it part of the email
|
||||||
payload = MIMEMultipart.MIMEMultipart('signed',
|
payload = \
|
||||||
boundary=None,
|
MIMEMultipart.MIMEMultipart('signed',
|
||||||
_subparts=None,
|
boundary=None,
|
||||||
**dict(
|
_subparts=None,
|
||||||
micalg="pgp-sha1",
|
**dict(micalg="pgp-sha1",
|
||||||
protocol="application/pgp-signature"))
|
protocol="application/pgp-signature"))
|
||||||
# insert the origin payload
|
# insert the origin payload
|
||||||
payload.attach(payload_in)
|
payload.attach(payload_in)
|
||||||
# insert the detached signature
|
# insert the detached signature
|
||||||
@@ -637,20 +637,15 @@ class Mail(object):
|
|||||||
self.error = "No sign and no encrypt is set but cipher type to x509"
|
self.error = "No sign and no encrypt is set but cipher type to x509"
|
||||||
return False
|
return False
|
||||||
import os
|
import os
|
||||||
x509_sign_keyfile = x509_sign_keyfile or\
|
x509_sign_keyfile = x509_sign_keyfile or self.settings.x509_sign_keyfile
|
||||||
self.settings.x509_sign_keyfile
|
|
||||||
|
|
||||||
x509_sign_chainfile = x509_sign_chainfile or\
|
x509_sign_chainfile = x509_sign_chainfile or self.settings.x509_sign_chainfile
|
||||||
self.settings.x509_sign_chainfile
|
|
||||||
|
|
||||||
x509_sign_certfile = x509_sign_certfile or\
|
x509_sign_certfile = x509_sign_certfile or self.settings.x509_sign_certfile or \
|
||||||
self.settings.x509_sign_certfile or\
|
x509_sign_keyfile or self.settings.x509_sign_certfile
|
||||||
x509_sign_keyfile or\
|
|
||||||
self.settings.x509_sign_certfile
|
|
||||||
|
|
||||||
# crypt certfiles could be a string or a list
|
# crypt certfiles could be a string or a list
|
||||||
x509_crypt_certfiles = x509_crypt_certfiles or\
|
x509_crypt_certfiles = x509_crypt_certfiles or self.settings.x509_crypt_certfiles
|
||||||
self.settings.x509_crypt_certfiles
|
|
||||||
|
|
||||||
x509_nocerts = x509_nocerts or\
|
x509_nocerts = x509_nocerts or\
|
||||||
self.settings.x509_nocerts
|
self.settings.x509_nocerts
|
||||||
@@ -785,7 +780,7 @@ class Mail(object):
|
|||||||
a.my_filename,
|
a.my_filename,
|
||||||
a.my_payload,
|
a.my_payload,
|
||||||
contebt_id='<attachment-%s>' % k
|
contebt_id='<attachment-%s>' % k
|
||||||
) for k,a in enumerate(attachments) if not raw]
|
) for k, a in enumerate(attachments) if not raw]
|
||||||
if attachments:
|
if attachments:
|
||||||
result = mail.send_mail(
|
result = mail.send_mail(
|
||||||
sender=sender, to=origTo,
|
sender=sender, to=origTo,
|
||||||
@@ -938,7 +933,7 @@ class Recaptcha(DIV):
|
|||||||
_type='hidden', _name='recaptcha_response_field',
|
_type='hidden', _name='recaptcha_response_field',
|
||||||
_value='manual_challenge')), _id='recaptcha')
|
_value='manual_challenge')), _id='recaptcha')
|
||||||
|
|
||||||
else: #use Google's ajax interface, needed for LOADed components
|
else: # use Google's ajax interface, needed for LOADed components
|
||||||
|
|
||||||
url_recaptcha_js = "%s/js/recaptcha_ajax.js" % server
|
url_recaptcha_js = "%s/js/recaptcha_ajax.js" % server
|
||||||
RecaptchaOptions = "var RecaptchaOptions = {%s}" % self.options
|
RecaptchaOptions = "var RecaptchaOptions = {%s}" % self.options
|
||||||
@@ -1482,38 +1477,38 @@ class Auth(object):
|
|||||||
logged_url=URL(controller, function, args='profile'),
|
logged_url=URL(controller, function, args='profile'),
|
||||||
download_url=URL(controller, 'download'),
|
download_url=URL(controller, 'download'),
|
||||||
mailer=(mailer is True) and Mail() or mailer,
|
mailer=(mailer is True) and Mail() or mailer,
|
||||||
on_failed_authorization = URL(controller, function, args='not_authorized'),
|
on_failed_authorization=URL(controller, function, args='not_authorized'),
|
||||||
login_next = url_index,
|
login_next=url_index,
|
||||||
login_onvalidation = [],
|
login_onvalidation=[],
|
||||||
login_onaccept = [],
|
login_onaccept=[],
|
||||||
login_onfail = [],
|
login_onfail=[],
|
||||||
login_methods = [self],
|
login_methods=[self],
|
||||||
login_form = self,
|
login_form=self,
|
||||||
logout_next = url_index,
|
logout_next=url_index,
|
||||||
logout_onlogout = None,
|
logout_onlogout=None,
|
||||||
register_next = url_index,
|
register_next=url_index,
|
||||||
register_onvalidation = [],
|
register_onvalidation=[],
|
||||||
register_onaccept = [],
|
register_onaccept=[],
|
||||||
verify_email_next = url_login,
|
verify_email_next=url_login,
|
||||||
verify_email_onaccept = [],
|
verify_email_onaccept=[],
|
||||||
profile_next = url_index,
|
profile_next=url_index,
|
||||||
profile_onvalidation = [],
|
profile_onvalidation=[],
|
||||||
profile_onaccept = [],
|
profile_onaccept=[],
|
||||||
retrieve_username_next = url_index,
|
retrieve_username_next=url_index,
|
||||||
retrieve_password_next = url_index,
|
retrieve_password_next=url_index,
|
||||||
request_reset_password_next = url_login,
|
request_reset_password_next=url_login,
|
||||||
reset_password_next = url_index,
|
reset_password_next=url_index,
|
||||||
change_password_next = url_index,
|
change_password_next=url_index,
|
||||||
change_password_onvalidation = [],
|
change_password_onvalidation=[],
|
||||||
change_password_onaccept = [],
|
change_password_onaccept=[],
|
||||||
retrieve_password_onvalidation = [],
|
retrieve_password_onvalidation=[],
|
||||||
request_reset_password_onvalidation = [],
|
request_reset_password_onvalidation=[],
|
||||||
request_reset_password_onaccept = [],
|
request_reset_password_onaccept=[],
|
||||||
reset_password_onvalidation = [],
|
reset_password_onvalidation=[],
|
||||||
reset_password_onaccept = [],
|
reset_password_onaccept=[],
|
||||||
hmac_key = hmac_key,
|
hmac_key=hmac_key,
|
||||||
formstyle = current.response.formstyle,
|
formstyle=current.response.formstyle,
|
||||||
label_separator = current.response.form_label_separator
|
label_separator=current.response.form_label_separator
|
||||||
)
|
)
|
||||||
settings.lock_keys = True
|
settings.lock_keys = True
|
||||||
# ## these are messages that can be customized
|
# ## these are messages that can be customized
|
||||||
@@ -1669,10 +1664,10 @@ class Auth(object):
|
|||||||
urllib.quote(
|
urllib.quote(
|
||||||
logout_next)),
|
logout_next)),
|
||||||
'icon': 'icon-off'})
|
'icon': 'icon-off'})
|
||||||
if not 'profile' in self.settings.actions_disabled:
|
if 'profile' not in self.settings.actions_disabled:
|
||||||
items.append({'name': T('Profile'), 'href': href('profile'),
|
items.append({'name': T('Profile'), 'href': href('profile'),
|
||||||
'icon': 'icon-user'})
|
'icon': 'icon-user'})
|
||||||
if not 'change_password' in self.settings.actions_disabled:
|
if 'change_password' not in self.settings.actions_disabled:
|
||||||
items.append({'name': T('Password'),
|
items.append({'name': T('Password'),
|
||||||
'href': href('change_password'),
|
'href': href('change_password'),
|
||||||
'icon': 'icon-lock'})
|
'icon': 'icon-lock'})
|
||||||
@@ -1690,10 +1685,10 @@ class Auth(object):
|
|||||||
else: # User is not logged in
|
else: # User is not logged in
|
||||||
items.append({'name': T('Log In'), 'href': href('login'),
|
items.append({'name': T('Log In'), 'href': href('login'),
|
||||||
'icon': 'icon-off'})
|
'icon': 'icon-off'})
|
||||||
if not 'register' in self.settings.actions_disabled:
|
if 'register' not in self.settings.actions_disabled:
|
||||||
items.append({'name': T('Sign Up'), 'href': href('register'),
|
items.append({'name': T('Sign Up'), 'href': href('register'),
|
||||||
'icon': 'icon-user'})
|
'icon': 'icon-user'})
|
||||||
if not 'request_reset_password' in self.settings.actions_disabled:
|
if 'request_reset_password' not in self.settings.actions_disabled:
|
||||||
items.append({'name': T('Lost password?'),
|
items.append({'name': T('Lost password?'),
|
||||||
'href': href('request_reset_password'),
|
'href': href('request_reset_password'),
|
||||||
'icon': 'icon-lock'})
|
'icon': 'icon-lock'})
|
||||||
@@ -1787,10 +1782,7 @@ class Auth(object):
|
|||||||
custom.navbar(auth.navbar(mode='bare')) or ''}}</ul>
|
custom.navbar(auth.navbar(mode='bare')) or ''}}</ul>
|
||||||
|
|
||||||
"""
|
"""
|
||||||
bare = {}
|
bare = {'prefix': prefix, 'user': user_identifier if self.user_id else None}
|
||||||
|
|
||||||
bare['prefix'] = prefix
|
|
||||||
bare['user'] = user_identifier if self.user_id else None
|
|
||||||
|
|
||||||
for i in items:
|
for i in items:
|
||||||
if i['name'] == T('Log In'):
|
if i['name'] == T('Log In'):
|
||||||
@@ -1964,7 +1956,7 @@ class Auth(object):
|
|||||||
settings.enable_tokens = enable_tokens
|
settings.enable_tokens = enable_tokens
|
||||||
if not self.signature:
|
if not self.signature:
|
||||||
self.define_signature()
|
self.define_signature()
|
||||||
if signature == True:
|
if signature:
|
||||||
signature_list = [self.signature]
|
signature_list = [self.signature]
|
||||||
elif not signature:
|
elif not signature:
|
||||||
signature_list = []
|
signature_list = []
|
||||||
@@ -1981,7 +1973,7 @@ class Auth(object):
|
|||||||
error_message=self.messages.email_taken)]
|
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 settings.table_user_name not in db.tables:
|
||||||
passfield = settings.password_field
|
passfield = settings.password_field
|
||||||
extra_fields = settings.extra_fields.get(
|
extra_fields = settings.extra_fields.get(
|
||||||
settings.table_user_name, []) + signature_list
|
settings.table_user_name, []) + signature_list
|
||||||
@@ -2056,7 +2048,7 @@ class Auth(object):
|
|||||||
fake_migrate=fake_migrate,
|
fake_migrate=fake_migrate,
|
||||||
format='%(first_name)s %(last_name)s (%(id)s)'))
|
format='%(first_name)s %(last_name)s (%(id)s)'))
|
||||||
reference_table_user = 'reference %s' % settings.table_user_name
|
reference_table_user = 'reference %s' % settings.table_user_name
|
||||||
if not settings.table_group_name in db.tables:
|
if settings.table_group_name not in db.tables:
|
||||||
extra_fields = settings.extra_fields.get(
|
extra_fields = settings.extra_fields.get(
|
||||||
settings.table_group_name, []) + signature_list
|
settings.table_group_name, []) + signature_list
|
||||||
db.define_table(
|
db.define_table(
|
||||||
@@ -2073,7 +2065,7 @@ class Auth(object):
|
|||||||
fake_migrate=fake_migrate,
|
fake_migrate=fake_migrate,
|
||||||
format='%(role)s (%(id)s)'))
|
format='%(role)s (%(id)s)'))
|
||||||
reference_table_group = 'reference %s' % settings.table_group_name
|
reference_table_group = 'reference %s' % settings.table_group_name
|
||||||
if not settings.table_membership_name in db.tables:
|
if settings.table_membership_name not in db.tables:
|
||||||
extra_fields = settings.extra_fields.get(
|
extra_fields = settings.extra_fields.get(
|
||||||
settings.table_membership_name, []) + signature_list
|
settings.table_membership_name, []) + signature_list
|
||||||
db.define_table(
|
db.define_table(
|
||||||
@@ -2087,7 +2079,7 @@ class Auth(object):
|
|||||||
migrate=self.__get_migrate(
|
migrate=self.__get_migrate(
|
||||||
settings.table_membership_name, migrate),
|
settings.table_membership_name, migrate),
|
||||||
fake_migrate=fake_migrate))
|
fake_migrate=fake_migrate))
|
||||||
if not settings.table_permission_name in db.tables:
|
if settings.table_permission_name not in db.tables:
|
||||||
extra_fields = settings.extra_fields.get(
|
extra_fields = settings.extra_fields.get(
|
||||||
settings.table_permission_name, []) + signature_list
|
settings.table_permission_name, []) + signature_list
|
||||||
db.define_table(
|
db.define_table(
|
||||||
@@ -2107,7 +2099,7 @@ class Auth(object):
|
|||||||
migrate=self.__get_migrate(
|
migrate=self.__get_migrate(
|
||||||
settings.table_permission_name, migrate),
|
settings.table_permission_name, migrate),
|
||||||
fake_migrate=fake_migrate))
|
fake_migrate=fake_migrate))
|
||||||
if not settings.table_event_name in db.tables:
|
if settings.table_event_name not in db.tables:
|
||||||
db.define_table(
|
db.define_table(
|
||||||
settings.table_event_name,
|
settings.table_event_name,
|
||||||
Field('time_stamp', 'datetime',
|
Field('time_stamp', 'datetime',
|
||||||
@@ -2131,7 +2123,7 @@ class Auth(object):
|
|||||||
fake_migrate=fake_migrate))
|
fake_migrate=fake_migrate))
|
||||||
now = current.request.now
|
now = current.request.now
|
||||||
if settings.cas_domains:
|
if settings.cas_domains:
|
||||||
if not settings.table_cas_name in db.tables:
|
if settings.table_cas_name not in db.tables:
|
||||||
db.define_table(
|
db.define_table(
|
||||||
settings.table_cas_name,
|
settings.table_cas_name,
|
||||||
Field('user_id', reference_table_user, default=None,
|
Field('user_id', reference_table_user, default=None,
|
||||||
@@ -2148,7 +2140,7 @@ class Auth(object):
|
|||||||
if settings.enable_tokens:
|
if settings.enable_tokens:
|
||||||
extra_fields = settings.extra_fields.get(
|
extra_fields = settings.extra_fields.get(
|
||||||
settings.table_token_name, []) + signature_list
|
settings.table_token_name, []) + signature_list
|
||||||
if not settings.table_token_name in db.tables:
|
if settings.table_token_name not in db.tables:
|
||||||
db.define_table(
|
db.define_table(
|
||||||
settings.table_token_name,
|
settings.table_token_name,
|
||||||
Field('user_id', reference_table_user, default=None,
|
Field('user_id', reference_table_user, default=None,
|
||||||
@@ -2235,7 +2227,7 @@ class Auth(object):
|
|||||||
break
|
break
|
||||||
if not checks:
|
if not checks:
|
||||||
return None
|
return None
|
||||||
if not 'registration_id' in keys:
|
if 'registration_id' not in keys:
|
||||||
keys['registration_id'] = keys[checks[0]]
|
keys['registration_id'] = keys[checks[0]]
|
||||||
# if we think we found the user but registration_id does not match,
|
# if we think we found the user but registration_id does not match,
|
||||||
# make new user
|
# make new user
|
||||||
@@ -2336,17 +2328,16 @@ class Auth(object):
|
|||||||
userfield = self.settings.login_userfield or 'username' \
|
userfield = self.settings.login_userfield or 'username' \
|
||||||
if 'username' in table_user.fields else 'email'
|
if 'username' in table_user.fields else 'email'
|
||||||
passfield = self.settings.password_field
|
passfield = self.settings.password_field
|
||||||
return Storage({"table_user": table_user,
|
return Storage({'table_user': table_user,
|
||||||
"userfield": userfield,
|
'userfield': userfield,
|
||||||
"passfield": passfield})
|
'passfield': passfield})
|
||||||
|
|
||||||
def login_bare(self, username, password):
|
def login_bare(self, username, password):
|
||||||
"""
|
"""
|
||||||
Logins user as specified by username (or email) and password
|
Logins user as specified by username (or email) and password
|
||||||
"""
|
"""
|
||||||
settings = self._get_login_settings()
|
settings = self._get_login_settings()
|
||||||
user = settings.table_user(**{settings.userfield: \
|
user = settings.table_user(**{settings.userfield: username})
|
||||||
username})
|
|
||||||
if user and user.get(settings.passfield, False):
|
if user and user.get(settings.passfield, False):
|
||||||
password = settings.table_user[
|
password = settings.table_user[
|
||||||
settings.passfield].validate(password)[0]
|
settings.passfield].validate(password)[0]
|
||||||
@@ -2375,8 +2366,8 @@ class Auth(object):
|
|||||||
fields[settings.passfield] = \
|
fields[settings.passfield] = \
|
||||||
settings.table_user[settings.passfield].validate(fields[settings.passfield])[0]
|
settings.table_user[settings.passfield].validate(fields[settings.passfield])[0]
|
||||||
if not fields.get(settings.userfield):
|
if not fields.get(settings.userfield):
|
||||||
raise ValueError("register_bare: " +
|
raise ValueError('register_bare: ' +
|
||||||
"userfield not provided or invalid")
|
'userfield not provided or invalid')
|
||||||
user = self.get_or_create_user(fields, login=False, get=False,
|
user = self.get_or_create_user(fields, login=False, get=False,
|
||||||
update_fields=self.settings.update_fields)
|
update_fields=self.settings.update_fields)
|
||||||
if not user:
|
if not user:
|
||||||
@@ -2396,7 +2387,7 @@ class Auth(object):
|
|||||||
session = current.session
|
session = current.session
|
||||||
db, table = self.db, self.table_cas()
|
db, table = self.db, self.table_cas()
|
||||||
session._cas_service = request.vars.service or session._cas_service
|
session._cas_service = request.vars.service or session._cas_service
|
||||||
if not request.env.http_host in self.settings.cas_domains or \
|
if request.env.http_host not in self.settings.cas_domains or \
|
||||||
not session._cas_service:
|
not session._cas_service:
|
||||||
raise HTTP(403, 'not authorized')
|
raise HTTP(403, 'not authorized')
|
||||||
|
|
||||||
@@ -2478,7 +2469,8 @@ class Auth(object):
|
|||||||
raise HTTP(200, message)
|
raise HTTP(200, message)
|
||||||
|
|
||||||
def _reset_two_factor_auth(self, session):
|
def _reset_two_factor_auth(self, session):
|
||||||
"""When two-step authentication is enabled, this function is used to
|
"""
|
||||||
|
When two-step authentication is enabled, this function is used to
|
||||||
clear the session after successfully completing second challenge
|
clear the session after successfully completing second challenge
|
||||||
or when the maximum number of tries allowed has expired.
|
or when the maximum number of tries allowed has expired.
|
||||||
"""
|
"""
|
||||||
@@ -2595,24 +2587,22 @@ class Auth(object):
|
|||||||
if settings.remember_me_form:
|
if settings.remember_me_form:
|
||||||
extra_fields = [
|
extra_fields = [
|
||||||
Field('remember_me', 'boolean', default=False,
|
Field('remember_me', 'boolean', default=False,
|
||||||
label = self.messages.label_remember_me)]
|
label=self.messages.label_remember_me)]
|
||||||
else:
|
else:
|
||||||
extra_fields = []
|
extra_fields = []
|
||||||
|
|
||||||
# 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(table_user,
|
||||||
table_user,
|
fields=[username, passfield],
|
||||||
fields=[username, passfield],
|
hidden=dict(_next=next),
|
||||||
hidden=dict(_next=next),
|
showid=settings.showid,
|
||||||
showid=settings.showid,
|
submit_button=self.messages.login_button,
|
||||||
submit_button=self.messages.login_button,
|
delete_label=self.messages.delete_label,
|
||||||
delete_label=self.messages.delete_label,
|
formstyle=settings.formstyle,
|
||||||
formstyle=settings.formstyle,
|
separator=settings.label_separator,
|
||||||
separator=settings.label_separator,
|
extra_fields=extra_fields,
|
||||||
extra_fields = extra_fields,
|
)
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
captcha = settings.login_captcha or \
|
captcha = settings.login_captcha or \
|
||||||
(settings.login_captcha != False and settings.captcha)
|
(settings.login_captcha != False and settings.captcha)
|
||||||
@@ -2631,7 +2621,7 @@ class Auth(object):
|
|||||||
entered_username = form.vars[username]
|
entered_username = form.vars[username]
|
||||||
if multi_login and '@' in entered_username:
|
if multi_login and '@' in entered_username:
|
||||||
# if '@' in username check for email, not username
|
# if '@' in username check for email, not username
|
||||||
user = table_user(email = entered_username)
|
user = table_user(email=entered_username)
|
||||||
else:
|
else:
|
||||||
user = table_user(**{username: entered_username})
|
user = table_user(**{username: entered_username})
|
||||||
if user:
|
if user:
|
||||||
@@ -2643,7 +2633,7 @@ class Auth(object):
|
|||||||
elif temp_user.registration_key in ('disabled', 'blocked'):
|
elif temp_user.registration_key in ('disabled', 'blocked'):
|
||||||
response.flash = self.messages.login_disabled
|
response.flash = self.messages.login_disabled
|
||||||
return form
|
return form
|
||||||
elif (not temp_user.registration_key is None
|
elif (temp_user.registration_key is not None
|
||||||
and temp_user.registration_key.strip()):
|
and temp_user.registration_key.strip()):
|
||||||
response.flash = \
|
response.flash = \
|
||||||
self.messages.registration_verifying
|
self.messages.registration_verifying
|
||||||
@@ -2655,7 +2645,7 @@ class Auth(object):
|
|||||||
if login_method != self and \
|
if login_method != self and \
|
||||||
login_method(request.vars[username],
|
login_method(request.vars[username],
|
||||||
request.vars[passfield]):
|
request.vars[passfield]):
|
||||||
if not self in settings.login_methods:
|
if self not in settings.login_methods:
|
||||||
# do not store password in db
|
# do not store password in db
|
||||||
form.vars[passfield] = None
|
form.vars[passfield] = None
|
||||||
user = self.get_or_create_user(
|
user = self.get_or_create_user(
|
||||||
@@ -2676,7 +2666,7 @@ class Auth(object):
|
|||||||
if login_method != self and \
|
if login_method != self and \
|
||||||
login_method(request.vars[username],
|
login_method(request.vars[username],
|
||||||
request.vars[passfield]):
|
request.vars[passfield]):
|
||||||
if not self in settings.login_methods:
|
if self not in settings.login_methods:
|
||||||
# do not store password in db
|
# do not store password in db
|
||||||
form.vars[passfield] = None
|
form.vars[passfield] = None
|
||||||
user = self.get_or_create_user(
|
user = self.get_or_create_user(
|
||||||
@@ -2692,7 +2682,7 @@ class Auth(object):
|
|||||||
self.url(args=request.args, vars=request.get_vars),
|
self.url(args=request.args, vars=request.get_vars),
|
||||||
client_side=settings.client_side)
|
client_side=settings.client_side)
|
||||||
|
|
||||||
else: # use a central authentication server
|
else: # use a central authentication server
|
||||||
cas = settings.login_form
|
cas = settings.login_form
|
||||||
cas_user = cas.get_user()
|
cas_user = cas.get_user()
|
||||||
|
|
||||||
@@ -2738,9 +2728,9 @@ class Auth(object):
|
|||||||
# form successfully, and the password has been validated, but
|
# form successfully, and the password has been validated, but
|
||||||
# the two-factor form has not been displayed or validated yet.
|
# the two-factor form has not been displayed or validated yet.
|
||||||
if session.auth_two_factor_user is None and user is not None:
|
if session.auth_two_factor_user is None and user is not None:
|
||||||
session.auth_two_factor_user = user # store the validated user and associate with this session
|
session.auth_two_factor_user = user # store the validated user and associate with this session
|
||||||
session.auth_two_factor = random.randint(100000, 999999)
|
session.auth_two_factor = random.randint(100000, 999999)
|
||||||
session.auth_two_factor_tries_left = 3 # Allow user to try up to 4 times
|
session.auth_two_factor_tries_left = 3 # Allow user to try up to 4 times
|
||||||
# TODO: Add some error checking to handle cases where email cannot be sent
|
# TODO: Add some error checking to handle cases where email cannot be sent
|
||||||
self.settings.mailer.send(
|
self.settings.mailer.send(
|
||||||
to=user.email,
|
to=user.email,
|
||||||
@@ -2772,7 +2762,8 @@ class Auth(object):
|
|||||||
self._reset_two_factor_auth(session)
|
self._reset_two_factor_auth(session)
|
||||||
else:
|
else:
|
||||||
# TODO: Limit the number of retries allowed.
|
# TODO: Limit the number of retries allowed.
|
||||||
response.flash = 'Incorrect code. {0} more attempt(s) remaining.'.format(session.auth_two_factor_tries_left)
|
response.flash = \
|
||||||
|
'Incorrect code. {0} more attempt(s) remaining.'.format(session.auth_two_factor_tries_left)
|
||||||
session.auth_two_factor_tries_left -= 1
|
session.auth_two_factor_tries_left -= 1
|
||||||
return form
|
return form
|
||||||
else:
|
else:
|
||||||
@@ -2840,7 +2831,7 @@ class Auth(object):
|
|||||||
if self.settings.renew_session_onlogout:
|
if self.settings.renew_session_onlogout:
|
||||||
current.session.renew(clear_session=not self.settings.keep_session_onlogout)
|
current.session.renew(clear_session=not self.settings.keep_session_onlogout)
|
||||||
current.session.flash = self.messages.logged_out
|
current.session.flash = self.messages.logged_out
|
||||||
if not next is None:
|
if next is not None:
|
||||||
redirect(next)
|
redirect(next)
|
||||||
|
|
||||||
def register(self,
|
def register(self,
|
||||||
@@ -2895,15 +2886,15 @@ class Auth(object):
|
|||||||
passfield = self.settings.password_field
|
passfield = self.settings.password_field
|
||||||
formstyle = self.settings.formstyle
|
formstyle = self.settings.formstyle
|
||||||
if self.settings.register_verify_password:
|
if self.settings.register_verify_password:
|
||||||
if self.settings.register_fields == None:
|
if self.settings.register_fields is None:
|
||||||
self.settings.register_fields = [f.name for f in table_user if f.writable]
|
self.settings.register_fields = [f.name for f in table_user if f.writable]
|
||||||
k = self.settings.register_fields.index("password")
|
k = self.settings.register_fields.index("password")
|
||||||
self.settings.register_fields.insert(k+1, "password_two")
|
self.settings.register_fields.insert(k+1, "password_two")
|
||||||
extra_fields = [
|
extra_fields = [
|
||||||
Field("password_two", "password", requires=IS_EQUAL_TO(
|
Field("password_two", "password",
|
||||||
request.post_vars.get(passfield, None),
|
requires=IS_EQUAL_TO(request.post_vars.get(passfield, None),
|
||||||
error_message=self.messages.mismatched_password),
|
error_message=self.messages.mismatched_password),
|
||||||
label=current.T("Confirm Password"))]
|
label=current.T("Confirm Password"))]
|
||||||
else:
|
else:
|
||||||
extra_fields = []
|
extra_fields = []
|
||||||
form = SQLFORM(table_user,
|
form = SQLFORM(table_user,
|
||||||
@@ -2914,7 +2905,7 @@ class Auth(object):
|
|||||||
delete_label=self.messages.delete_label,
|
delete_label=self.messages.delete_label,
|
||||||
formstyle=formstyle,
|
formstyle=formstyle,
|
||||||
separator=self.settings.label_separator,
|
separator=self.settings.label_separator,
|
||||||
extra_fields = extra_fields
|
extra_fields=extra_fields
|
||||||
)
|
)
|
||||||
|
|
||||||
captcha = self.settings.register_captcha or self.settings.captcha
|
captcha = self.settings.register_captcha or self.settings.captcha
|
||||||
@@ -2922,7 +2913,7 @@ 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
|
# Add a message if specified
|
||||||
if self.settings.pre_registration_div:
|
if self.settings.pre_registration_div:
|
||||||
addrow(form, '',
|
addrow(form, '',
|
||||||
DIV(_id="pre-reg", *self.settings.pre_registration_div),
|
DIV(_id="pre-reg", *self.settings.pre_registration_div),
|
||||||
@@ -3031,13 +3022,13 @@ class Auth(object):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
table_user = self.table_user()
|
table_user = self.table_user()
|
||||||
if not 'username' in table_user.fields:
|
if 'username' not in table_user.fields:
|
||||||
raise HTTP(404)
|
raise HTTP(404)
|
||||||
request = current.request
|
request = current.request
|
||||||
response = current.response
|
response = current.response
|
||||||
session = current.session
|
session = current.session
|
||||||
captcha = self.settings.retrieve_username_captcha or \
|
captcha = self.settings.retrieve_username_captcha or \
|
||||||
(self.settings.retrieve_username_captcha != False and self.settings.captcha)
|
(self.settings.retrieve_username_captcha != False and self.settings.captcha)
|
||||||
if not self.settings.mailer:
|
if not self.settings.mailer:
|
||||||
response.flash = self.messages.function_disabled
|
response.flash = self.messages.function_disabled
|
||||||
return ''
|
return ''
|
||||||
@@ -3051,7 +3042,7 @@ class Auth(object):
|
|||||||
log = self.messages['retrieve_username_log']
|
log = self.messages['retrieve_username_log']
|
||||||
old_requires = table_user.email.requires
|
old_requires = table_user.email.requires
|
||||||
table_user.email.requires = [IS_IN_DB(self.db, table_user.email,
|
table_user.email.requires = [IS_IN_DB(self.db, table_user.email,
|
||||||
error_message=self.messages.invalid_email)]
|
error_message=self.messages.invalid_email)]
|
||||||
form = SQLFORM(table_user,
|
form = SQLFORM(table_user,
|
||||||
fields=['email'],
|
fields=['email'],
|
||||||
hidden=dict(_next=next),
|
hidden=dict(_next=next),
|
||||||
@@ -3068,7 +3059,7 @@ class Auth(object):
|
|||||||
if form.accepts(request, session if self.csrf_prevention else None,
|
if form.accepts(request, session if self.csrf_prevention else None,
|
||||||
formname='retrieve_username', dbio=False,
|
formname='retrieve_username', dbio=False,
|
||||||
onvalidation=onvalidation, hideerror=self.settings.hideerror):
|
onvalidation=onvalidation, hideerror=self.settings.hideerror):
|
||||||
users = table_user._db(table_user.email==form.vars.email).select()
|
users = table_user._db(table_user.email == form.vars.email).select()
|
||||||
if not users:
|
if not users:
|
||||||
current.session.flash = \
|
current.session.flash = \
|
||||||
self.messages.invalid_email
|
self.messages.invalid_email
|
||||||
@@ -3128,7 +3119,7 @@ class Auth(object):
|
|||||||
log = self.messages['retrieve_password_log']
|
log = self.messages['retrieve_password_log']
|
||||||
old_requires = table_user.email.requires
|
old_requires = table_user.email.requires
|
||||||
table_user.email.requires = [IS_IN_DB(self.db, table_user.email,
|
table_user.email.requires = [IS_IN_DB(self.db, table_user.email,
|
||||||
error_message=self.messages.invalid_email)]
|
error_message=self.messages.invalid_email)]
|
||||||
form = SQLFORM(table_user,
|
form = SQLFORM(table_user,
|
||||||
fields=['email'],
|
fields=['email'],
|
||||||
hidden=dict(_next=next),
|
hidden=dict(_next=next),
|
||||||
@@ -3174,13 +3165,12 @@ class Auth(object):
|
|||||||
table_user.email.requires = old_requires
|
table_user.email.requires = old_requires
|
||||||
return form
|
return form
|
||||||
|
|
||||||
def confirm_registration(
|
def confirm_registration(self,
|
||||||
self,
|
next=DEFAULT,
|
||||||
next=DEFAULT,
|
onvalidation=DEFAULT,
|
||||||
onvalidation=DEFAULT,
|
onaccept=DEFAULT,
|
||||||
onaccept=DEFAULT,
|
log=DEFAULT,
|
||||||
log=DEFAULT,
|
):
|
||||||
):
|
|
||||||
"""
|
"""
|
||||||
Returns a form to confirm user registration
|
Returns a form to confirm user registration
|
||||||
"""
|
"""
|
||||||
@@ -3228,9 +3218,8 @@ class Auth(object):
|
|||||||
requires=self.table_user()[passfield].requires),
|
requires=self.table_user()[passfield].requires),
|
||||||
Field('new_password2', 'password',
|
Field('new_password2', 'password',
|
||||||
label=self.messages.verify_password,
|
label=self.messages.verify_password,
|
||||||
requires=[IS_EXPR(
|
requires=[IS_EXPR('value==%s' % repr(request.vars.new_password),
|
||||||
'value==%s' % repr(request.vars.new_password),
|
self.messages.mismatched_password)]),
|
||||||
self.messages.mismatched_password)]),
|
|
||||||
submit_button='Confirm Registration',
|
submit_button='Confirm Registration',
|
||||||
hidden=dict(_next=next),
|
hidden=dict(_next=next),
|
||||||
formstyle=self.settings.formstyle,
|
formstyle=self.settings.formstyle,
|
||||||
@@ -3262,7 +3251,7 @@ class Auth(object):
|
|||||||
if self.settings.mailer and self.settings.mailer.send(
|
if self.settings.mailer and self.settings.mailer.send(
|
||||||
to=user.email,
|
to=user.email,
|
||||||
subject=subject % d,
|
subject=subject % d,
|
||||||
message=body % d):
|
message=body % d):
|
||||||
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
|
||||||
@@ -3277,9 +3266,9 @@ class Auth(object):
|
|||||||
return HTTP(404)
|
return HTTP(404)
|
||||||
|
|
||||||
form = SQLFORM.factory(
|
form = SQLFORM.factory(
|
||||||
Field('subject','string',default=self.messages.bulk_invite_subject,requires=IS_NOT_EMPTY()),
|
Field('subject', 'string', default=self.messages.bulk_invite_subject, requires=IS_NOT_EMPTY()),
|
||||||
Field('emails','text',requires=IS_NOT_EMPTY()),
|
Field('emails', 'text', requires=IS_NOT_EMPTY()),
|
||||||
Field('message','text',default=self.messages.bulk_invite_body,requires=IS_NOT_EMPTY()),
|
Field('message', 'text', default=self.messages.bulk_invite_body, requires=IS_NOT_EMPTY()),
|
||||||
formstyle=self.settings.formstyle)
|
formstyle=self.settings.formstyle)
|
||||||
|
|
||||||
if form.process().accepted:
|
if form.process().accepted:
|
||||||
@@ -3298,9 +3287,9 @@ class Auth(object):
|
|||||||
else:
|
else:
|
||||||
emails_fail.append(email)
|
emails_fail.append(email)
|
||||||
emails_fail += emails[max_emails:]
|
emails_fail += emails[max_emails:]
|
||||||
form = DIV(H4('Emails sent'),UL(*[A(x,_href='mailto:'+x) for x in emails_sent]),
|
form = DIV(H4('Emails sent'), UL(*[A(x, _href='mailto:'+x) for x in emails_sent]),
|
||||||
H4('Emails failed'),UL(*[A(x,_href='mailto:'+x) for x in emails_fail]),
|
H4('Emails failed'), UL(*[A(x, _href='mailto:'+x) for x in emails_fail]),
|
||||||
H4('Emails existing'),UL(*[A(x,_href='mailto:'+x) for x in emails_exist]))
|
H4('Emails existing'), UL(*[A(x, _href='mailto:'+x) for x in emails_exist]))
|
||||||
return form
|
return form
|
||||||
|
|
||||||
def manage_tokens(self):
|
def manage_tokens(self):
|
||||||
@@ -3478,7 +3467,7 @@ class Auth(object):
|
|||||||
if self.settings.mailer and self.settings.mailer.send(
|
if self.settings.mailer and 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 % d):
|
message=self.messages.reset_password % d):
|
||||||
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
|
||||||
@@ -3530,15 +3519,14 @@ class Auth(object):
|
|||||||
requires[0].min_length = 0
|
requires[0].min_length = 0
|
||||||
form = SQLFORM.factory(
|
form = SQLFORM.factory(
|
||||||
Field('old_password', 'password', requires=requires,
|
Field('old_password', 'password', requires=requires,
|
||||||
label=self.messages.old_password),
|
label=self.messages.old_password),
|
||||||
Field('new_password', 'password',
|
Field('new_password', 'password',
|
||||||
label=self.messages.new_password,
|
label=self.messages.new_password,
|
||||||
requires=table_user[passfield].requires),
|
requires=table_user[passfield].requires),
|
||||||
Field('new_password2', 'password',
|
Field('new_password2', 'password',
|
||||||
label=self.messages.verify_password,
|
label=self.messages.verify_password,
|
||||||
requires=[IS_EXPR(
|
requires=[IS_EXPR('value==%s' % repr(request.vars.new_password),
|
||||||
'value==%s' % repr(request.vars.new_password),
|
self.messages.mismatched_password)]),
|
||||||
self.messages.mismatched_password)]),
|
|
||||||
submit_button=self.messages.password_change_button,
|
submit_button=self.messages.password_change_button,
|
||||||
hidden=dict(_next=next),
|
hidden=dict(_next=next),
|
||||||
formstyle=self.settings.formstyle,
|
formstyle=self.settings.formstyle,
|
||||||
@@ -3798,7 +3786,7 @@ class Auth(object):
|
|||||||
if row:
|
if row:
|
||||||
user = table_user(row.user_id)
|
user = table_user(row.user_id)
|
||||||
else:
|
else:
|
||||||
row = self.db(table_token.token==token)(table_user.id==table_token.user_id).select().first()
|
row = self.db(table_token.token == token)(table_user.id == table_token.user_id).select().first()
|
||||||
if row:
|
if row:
|
||||||
user = row[table_user._tablename]
|
user = row[table_user._tablename]
|
||||||
if user:
|
if user:
|
||||||
@@ -3977,7 +3965,7 @@ class Auth(object):
|
|||||||
rows = self.db(membership.user_id
|
rows = self.db(membership.user_id
|
||||||
== user_id).select(membership.group_id)
|
== user_id).select(membership.group_id)
|
||||||
groups = set([row.group_id for row in rows])
|
groups = set([row.group_id for row in rows])
|
||||||
if group_id and not group_id in groups:
|
if group_id and group_id not in groups:
|
||||||
return False
|
return False
|
||||||
else:
|
else:
|
||||||
groups = set([group_id])
|
groups = set([group_id])
|
||||||
@@ -4395,7 +4383,7 @@ class Crud(object):
|
|||||||
deletable = self.settings.update_deletable
|
deletable = self.settings.update_deletable
|
||||||
if message is DEFAULT:
|
if message is DEFAULT:
|
||||||
message = self.messages.record_updated
|
message = self.messages.record_updated
|
||||||
if not 'hidden' in attributes:
|
if 'hidden' not in attributes:
|
||||||
attributes['hidden'] = {}
|
attributes['hidden'] = {}
|
||||||
attributes['hidden']['_next'] = next
|
attributes['hidden']['_next'] = next
|
||||||
form = SQLFORM(
|
form = SQLFORM(
|
||||||
@@ -4420,7 +4408,7 @@ class Crud(object):
|
|||||||
if not record and captcha:
|
if not record and captcha:
|
||||||
addrow(form, captcha.label, captcha, captcha.comment,
|
addrow(form, captcha.label, captcha, captcha.comment,
|
||||||
self.settings.formstyle, 'captcha__row')
|
self.settings.formstyle, 'captcha__row')
|
||||||
if not request.extension in ('html', 'load'):
|
if request.extension not in ('html', 'load'):
|
||||||
(_session, _formname) = (None, None)
|
(_session, _formname) = (None, None)
|
||||||
else:
|
else:
|
||||||
(_session, _formname) = (
|
(_session, _formname) = (
|
||||||
@@ -4446,7 +4434,7 @@ class Crud(object):
|
|||||||
callback(ondelete, form, table._tablename)
|
callback(ondelete, form, table._tablename)
|
||||||
response.flash = message
|
response.flash = message
|
||||||
callback(onaccept, form, table._tablename)
|
callback(onaccept, form, table._tablename)
|
||||||
if not request.extension in ('html', 'load'):
|
if request.extension not in ('html', 'load'):
|
||||||
raise HTTP(200, 'RECORD CREATED/UPDATED')
|
raise HTTP(200, 'RECORD CREATED/UPDATED')
|
||||||
if isinstance(next, (list, tuple)): # fix issue with 2.6
|
if isinstance(next, (list, tuple)): # fix issue with 2.6
|
||||||
next = next[0]
|
next = next[0]
|
||||||
@@ -4454,7 +4442,7 @@ class Crud(object):
|
|||||||
next = replace_id(next, form)
|
next = replace_id(next, form)
|
||||||
session.flash = response.flash
|
session.flash = response.flash
|
||||||
redirect(next)
|
redirect(next)
|
||||||
elif not request.extension in ('html', 'load'):
|
elif request.extension not in ('html', 'load'):
|
||||||
raise HTTP(401, serializers.json(dict(errors=form.errors)))
|
raise HTTP(401, serializers.json(dict(errors=form.errors)))
|
||||||
return form
|
return form
|
||||||
|
|
||||||
@@ -4479,18 +4467,17 @@ class Crud(object):
|
|||||||
log = self.messages['create_log']
|
log = self.messages['create_log']
|
||||||
if message is DEFAULT:
|
if message is DEFAULT:
|
||||||
message = self.messages.record_created
|
message = self.messages.record_created
|
||||||
return self.update(
|
return self.update(table,
|
||||||
table,
|
None,
|
||||||
None,
|
next=next,
|
||||||
next=next,
|
onvalidation=onvalidation,
|
||||||
onvalidation=onvalidation,
|
onaccept=onaccept,
|
||||||
onaccept=onaccept,
|
log=log,
|
||||||
log=log,
|
message=message,
|
||||||
message=message,
|
deletable=False,
|
||||||
deletable=False,
|
formname=formname,
|
||||||
formname=formname,
|
**attributes
|
||||||
**attributes
|
)
|
||||||
)
|
|
||||||
|
|
||||||
def read(self, table, record):
|
def read(self, table, record):
|
||||||
if not (isinstance(table, Table) or table in self.db.tables) \
|
if not (isinstance(table, Table) or table in self.db.tables) \
|
||||||
@@ -4510,7 +4497,7 @@ class Crud(object):
|
|||||||
formstyle=self.settings.formstyle,
|
formstyle=self.settings.formstyle,
|
||||||
separator=self.settings.label_separator
|
separator=self.settings.label_separator
|
||||||
)
|
)
|
||||||
if not current.request.extension in ('html', 'load'):
|
if current.request.extension not in ('html', 'load'):
|
||||||
return table._filter_fields(form.record, id=True)
|
return table._filter_fields(form.record, id=True)
|
||||||
return form
|
return form
|
||||||
|
|
||||||
@@ -4542,19 +4529,18 @@ class Crud(object):
|
|||||||
session.flash = message
|
session.flash = message
|
||||||
redirect(next)
|
redirect(next)
|
||||||
|
|
||||||
def rows(
|
def rows(self,
|
||||||
self,
|
table,
|
||||||
table,
|
query=None,
|
||||||
query=None,
|
fields=None,
|
||||||
fields=None,
|
orderby=None,
|
||||||
orderby=None,
|
limitby=None,
|
||||||
limitby=None,
|
):
|
||||||
):
|
|
||||||
if not (isinstance(table, Table) or table in self.db.tables):
|
if not (isinstance(table, Table) or table in self.db.tables):
|
||||||
raise HTTP(404)
|
raise HTTP(404)
|
||||||
if not self.has_permission('select', table):
|
if not self.has_permission('select', table):
|
||||||
redirect(self.settings.auth.settings.on_failed_authorization)
|
redirect(self.settings.auth.settings.on_failed_authorization)
|
||||||
#if record_id and not self.has_permission('select', table):
|
# if record_id and not self.has_permission('select', table):
|
||||||
# redirect(self.settings.auth.settings.on_failed_authorization)
|
# redirect(self.settings.auth.settings.on_failed_authorization)
|
||||||
if not isinstance(table, Table):
|
if not isinstance(table, Table):
|
||||||
table = self.db[table]
|
table = self.db[table]
|
||||||
@@ -4565,7 +4551,7 @@ class Crud(object):
|
|||||||
else:
|
else:
|
||||||
fields = [table[f] if isinstance(f, str) else f for f in fields]
|
fields = [table[f] if isinstance(f, str) else f for f in fields]
|
||||||
rows = self.db(query).select(*fields, **dict(orderby=orderby,
|
rows = self.db(query).select(*fields, **dict(orderby=orderby,
|
||||||
limitby=limitby))
|
limitby=limitby))
|
||||||
return rows
|
return rows
|
||||||
|
|
||||||
def select(self,
|
def select(self,
|
||||||
@@ -4581,9 +4567,9 @@ class Crud(object):
|
|||||||
rows = self.rows(table, query, fields, orderby, limitby)
|
rows = self.rows(table, query, fields, orderby, limitby)
|
||||||
if not rows:
|
if not rows:
|
||||||
return None # Nicer than an empty table.
|
return None # Nicer than an empty table.
|
||||||
if not 'upload' in attr:
|
if 'upload' not in attr:
|
||||||
attr['upload'] = self.url('download')
|
attr['upload'] = self.url('download')
|
||||||
if not current.request.extension in ('html', 'load'):
|
if current.request.extension not in ('html', 'load'):
|
||||||
return rows.as_list()
|
return rows.as_list()
|
||||||
if not headers:
|
if not headers:
|
||||||
if isinstance(table, str):
|
if isinstance(table, str):
|
||||||
@@ -4775,8 +4761,7 @@ regex_geocode = \
|
|||||||
def geocode(address):
|
def geocode(address):
|
||||||
try:
|
try:
|
||||||
a = urllib.quote(address)
|
a = urllib.quote(address)
|
||||||
txt = fetch('http://maps.googleapis.com/maps/api/geocode/xml?sensor=false&address=%s'
|
txt = fetch('http://maps.googleapis.com/maps/api/geocode/xml?sensor=false&address=%s' % a)
|
||||||
% a)
|
|
||||||
item = regex_geocode.search(txt)
|
item = regex_geocode.search(txt)
|
||||||
(la, lo) = (float(item.group('la')), float(item.group('lo')))
|
(la, lo) = (float(item.group('la')), float(item.group('lo')))
|
||||||
return (la, lo)
|
return (la, lo)
|
||||||
@@ -5177,7 +5162,8 @@ class Service(object):
|
|||||||
|
|
||||||
# jsonrpc 2.0 error types. records the following structure {code: (message,meaning)}
|
# jsonrpc 2.0 error types. records the following structure {code: (message,meaning)}
|
||||||
jsonrpc_errors = {
|
jsonrpc_errors = {
|
||||||
-32700: ("Parse error. Invalid JSON was received by the server.", "An error occurred on the server while parsing the JSON text."),
|
-32700: ("Parse error. Invalid JSON was received by the server.",
|
||||||
|
"An error occurred on the server while parsing the JSON text."),
|
||||||
-32600: ("Invalid Request", "The JSON sent is not a valid Request object."),
|
-32600: ("Invalid Request", "The JSON sent is not a valid Request object."),
|
||||||
-32601: ("Method not found", "The method does not exist / is not available."),
|
-32601: ("Method not found", "The method does not exist / is not available."),
|
||||||
-32602: ("Invalid params", "Invalid method parameter(s)."),
|
-32602: ("Invalid params", "Invalid method parameter(s)."),
|
||||||
@@ -5186,8 +5172,7 @@ class Service(object):
|
|||||||
|
|
||||||
def serve_jsonrpc(self):
|
def serve_jsonrpc(self):
|
||||||
def return_response(id, result):
|
def return_response(id, result):
|
||||||
return serializers.json({'version': '1.1',
|
return serializers.json({'version': '1.1', 'id': id, 'result': result, 'error': None})
|
||||||
'id': id, 'result': result, 'error': None})
|
|
||||||
|
|
||||||
def return_error(id, code, message, data=None):
|
def return_error(id, code, message, data=None):
|
||||||
error = {'name': 'JSONRPCError',
|
error = {'name': 'JSONRPCError',
|
||||||
@@ -5275,7 +5260,7 @@ class Service(object):
|
|||||||
if data['jsonrpc'] != '2.0':
|
if data['jsonrpc'] != '2.0':
|
||||||
raise Service.JsonRpcException(-32603, 'Unsupported jsonrpc version "%s"' % data['jsonrpc'])
|
raise Service.JsonRpcException(-32603, 'Unsupported jsonrpc version "%s"' % data['jsonrpc'])
|
||||||
if 'id' not in iparms:
|
if 'id' not in iparms:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
@@ -5372,10 +5357,9 @@ class Service(object):
|
|||||||
response = current.response
|
response = current.response
|
||||||
procedures = self.soap_procedures
|
procedures = self.soap_procedures
|
||||||
|
|
||||||
location = "%s://%s%s" % (
|
location = "%s://%s%s" % (request.env.wsgi_url_scheme,
|
||||||
request.env.wsgi_url_scheme,
|
request.env.http_host,
|
||||||
request.env.http_host,
|
URL(r=request, f="call/soap", vars={}))
|
||||||
URL(r=request, f="call/soap", vars={}))
|
|
||||||
namespace = 'namespace' in response and response.namespace or location
|
namespace = 'namespace' in response and response.namespace or location
|
||||||
documentation = response.description or ''
|
documentation = response.description or ''
|
||||||
dispatcher = SoapDispatcher(
|
dispatcher = SoapDispatcher(
|
||||||
@@ -5429,7 +5413,7 @@ class Service(object):
|
|||||||
P(response.description),
|
P(response.description),
|
||||||
P("The following operations are available"),
|
P("The following operations are available"),
|
||||||
A("See WSDL for webservice description",
|
A("See WSDL for webservice description",
|
||||||
_href=URL(r=request, f="call/soap", vars={"WSDL":None})),
|
_href=URL(r=request, f="call/soap", vars={"WSDL": None})),
|
||||||
UL([LI(A("%s: %s" % (method, doc or ''),
|
UL([LI(A("%s: %s" % (method, doc or ''),
|
||||||
_href=URL(r=request, f="call/soap", vars={'op': method})))
|
_href=URL(r=request, f="call/soap", vars={'op': method})))
|
||||||
for method, doc in dispatcher.list_methods()]),
|
for method, doc in dispatcher.list_methods()]),
|
||||||
@@ -5674,10 +5658,10 @@ class PluginManager(object):
|
|||||||
settings = self.__getattr__(plugin)
|
settings = self.__getattr__(plugin)
|
||||||
settings.installed = True
|
settings.installed = True
|
||||||
settings.update(
|
settings.update(
|
||||||
(k, v) for k, v in defaults.items() if not k in settings)
|
(k, v) for k, v in defaults.items() if k not in settings)
|
||||||
|
|
||||||
def __getattr__(self, key):
|
def __getattr__(self, key):
|
||||||
if not key in self.__dict__:
|
if key not in self.__dict__:
|
||||||
self.__dict__[key] = Storage()
|
self.__dict__[key] = Storage()
|
||||||
return self.__dict__[key]
|
return self.__dict__[key]
|
||||||
|
|
||||||
@@ -5728,9 +5712,9 @@ class Expose(object):
|
|||||||
raise HTTP(200, open(filename, 'rb'), **current.response.headers)
|
raise HTTP(200, open(filename, 'rb'), **current.response.headers)
|
||||||
self.path = path = os.path.join(filename, '*')
|
self.path = path = os.path.join(filename, '*')
|
||||||
self.folders = [f[len(path) - 1:] for f in sorted(glob.glob(path))
|
self.folders = [f[len(path) - 1:] for f in sorted(glob.glob(path))
|
||||||
if os.path.isdir(f) and not self.isprivate(f)]
|
if os.path.isdir(f) and not self.isprivate(f)]
|
||||||
self.filenames = [f[len(path) - 1:] for f in sorted(glob.glob(path))
|
self.filenames = [f[len(path) - 1:] for f in sorted(glob.glob(path))
|
||||||
if not os.path.isdir(f) and not self.isprivate(f)]
|
if not os.path.isdir(f) and not self.isprivate(f)]
|
||||||
if 'README' in self.filenames:
|
if 'README' in self.filenames:
|
||||||
readme = open(os.path.join(filename, 'README')).read()
|
readme = open(os.path.join(filename, 'README')).read()
|
||||||
self.paragraph = MARKMIN(readme)
|
self.paragraph = MARKMIN(readme)
|
||||||
@@ -5752,10 +5736,9 @@ class Expose(object):
|
|||||||
|
|
||||||
def table_folders(self):
|
def table_folders(self):
|
||||||
if self.folders:
|
if self.folders:
|
||||||
return SPAN(H3('Folders'), TABLE(
|
return SPAN(H3('Folders'),
|
||||||
*[TR(TD(A(folder, _href=URL(args=self.args + [folder]))))
|
TABLE(*[TR(TD(A(folder, _href=URL(args=self.args + [folder]))))
|
||||||
for folder in self.folders],
|
for folder in self.folders], **dict(_class="table")))
|
||||||
**dict(_class="table")))
|
|
||||||
return ''
|
return ''
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
@@ -5774,8 +5757,7 @@ class Expose(object):
|
|||||||
TD(IMG(_src=URL(args=self.args + [f]),
|
TD(IMG(_src=URL(args=self.args + [f]),
|
||||||
_style='max-width:%spx' % width)
|
_style='max-width:%spx' % width)
|
||||||
if width and self.isimage(f) else ''))
|
if width and self.isimage(f) else ''))
|
||||||
for f in self.filenames],
|
for f in self.filenames], **dict(_class="table")))
|
||||||
**dict(_class="table")))
|
|
||||||
return ''
|
return ''
|
||||||
|
|
||||||
def xml(self):
|
def xml(self):
|
||||||
@@ -5946,7 +5928,7 @@ class Wiki(object):
|
|||||||
# define only non-existent tables
|
# define only non-existent tables
|
||||||
for key, value in table_definitions:
|
for key, value in table_definitions:
|
||||||
args = []
|
args = []
|
||||||
if not key in db.tables():
|
if key not in db.tables():
|
||||||
# look for wiki_ extra fields in auth.settings
|
# look for wiki_ extra fields in auth.settings
|
||||||
extra_fields = auth.settings.extra_fields
|
extra_fields = auth.settings.extra_fields
|
||||||
if extra_fields:
|
if extra_fields:
|
||||||
@@ -5980,8 +5962,8 @@ class Wiki(object):
|
|||||||
|
|
||||||
if (auth.user and
|
if (auth.user and
|
||||||
check_credentials(current.request, gae_login=False) and
|
check_credentials(current.request, gae_login=False) and
|
||||||
not 'wiki_editor' in auth.user_groups.values() and
|
'wiki_editor' not in auth.user_groups.values() and
|
||||||
self.settings.groups == auth.user_groups.values()):
|
self.settings.groups == auth.user_groups.values()):
|
||||||
group = db.auth_group(role='wiki_editor')
|
group = db.auth_group(role='wiki_editor')
|
||||||
gid = group.id if group else db.auth_group.insert(
|
gid = group.id if group else db.auth_group.insert(
|
||||||
role='wiki_editor')
|
role='wiki_editor')
|
||||||
@@ -5995,8 +5977,7 @@ class Wiki(object):
|
|||||||
raise HTTP(401)
|
raise HTTP(401)
|
||||||
|
|
||||||
def can_read(self, page):
|
def can_read(self, page):
|
||||||
if 'everybody' in page.can_read or not \
|
if 'everybody' in page.can_read or not self.settings.manage_permissions:
|
||||||
self.settings.manage_permissions:
|
|
||||||
return True
|
return True
|
||||||
elif self.auth.user:
|
elif self.auth.user:
|
||||||
groups = self.settings.groups
|
groups = self.settings.groups
|
||||||
@@ -6039,9 +6020,7 @@ class Wiki(object):
|
|||||||
|
|
||||||
def automenu(self):
|
def automenu(self):
|
||||||
"""adds the menu if not present"""
|
"""adds the menu if not present"""
|
||||||
if (not self.wiki_menu_items and
|
if (not self.wiki_menu_items and self.settings.controller and self.settings.function):
|
||||||
self.settings.controller and
|
|
||||||
self.settings.function):
|
|
||||||
self.wiki_menu_items = self.menu(self.settings.controller,
|
self.wiki_menu_items = self.menu(self.settings.controller,
|
||||||
self.settings.function)
|
self.settings.function)
|
||||||
current.response.menu += self.wiki_menu_items
|
current.response.menu += self.wiki_menu_items
|
||||||
@@ -6085,8 +6064,7 @@ class Wiki(object):
|
|||||||
def first_paragraph(self, page):
|
def first_paragraph(self, page):
|
||||||
if not self.can_read(page):
|
if not self.can_read(page):
|
||||||
mm = (page.body or '').replace('\r', '')
|
mm = (page.body or '').replace('\r', '')
|
||||||
ps = [p for p in mm.split('\n\n')
|
ps = [p for p in mm.split('\n\n') if not p.startswith('#') and p.strip()]
|
||||||
if not p.startswith('#') and p.strip()]
|
|
||||||
if ps:
|
if ps:
|
||||||
return ps[0]
|
return ps[0]
|
||||||
return ''
|
return ''
|
||||||
@@ -6232,10 +6210,7 @@ class Wiki(object):
|
|||||||
fragment = self.auth.db.wiki_media.id.represent
|
fragment = self.auth.db.wiki_media.id.represent
|
||||||
csv = False
|
csv = False
|
||||||
create = False
|
create = False
|
||||||
links= [
|
links = [lambda row: A('copy into source', _href='#', _onclick=script % (fragment(row.id, row)))]
|
||||||
lambda row:
|
|
||||||
A('copy into source', _href='#', _onclick=script % (fragment(row.id, row)))
|
|
||||||
]
|
|
||||||
content = SQLFORM.grid(
|
content = SQLFORM.grid(
|
||||||
self.auth.db.wiki_media.wiki_page == page.id,
|
self.auth.db.wiki_media.wiki_page == page.id,
|
||||||
orderby=self.auth.db.wiki_media.title,
|
orderby=self.auth.db.wiki_media.title,
|
||||||
@@ -6472,7 +6447,7 @@ class Wiki(object):
|
|||||||
request = current.request
|
request = current.request
|
||||||
# FIXME: This is an ugly hack to ensure a default render
|
# FIXME: This is an ugly hack to ensure a default render
|
||||||
# engine if not specified (with multiple render engines)
|
# engine if not specified (with multiple render engines)
|
||||||
if not "render" in request.post_vars:
|
if 'render' not in request.post_vars:
|
||||||
request.post_vars.render = None
|
request.post_vars.render = None
|
||||||
return render(request.post_vars)
|
return render(request.post_vars)
|
||||||
|
|
||||||
@@ -6488,7 +6463,7 @@ class Config(object):
|
|||||||
self.config.read(filename)
|
self.config.read(filename)
|
||||||
if not self.config.has_section(section):
|
if not self.config.has_section(section):
|
||||||
self.config.add_section(section)
|
self.config.add_section(section)
|
||||||
self.section = section
|
self.section = section
|
||||||
self.filename = filename
|
self.filename = filename
|
||||||
|
|
||||||
def read(self):
|
def read(self):
|
||||||
|
|||||||
Reference in New Issue
Block a user