From 08f813d670d6c2bcf0df03aed86cab5419cf1779 Mon Sep 17 00:00:00 2001 From: mdipierro Date: Thu, 20 Jun 2013 16:44:16 -0500 Subject: [PATCH] resynced recent patches, sorry for the mess --- VERSION | 2 +- .../login_methods/browserid_account.py | 18 +++++++++------ gluon/dal.py | 22 +++++++++---------- gluon/globals.py | 2 +- gluon/tools.py | 5 +++-- 5 files changed, 27 insertions(+), 22 deletions(-) diff --git a/VERSION b/VERSION index fda8a927..0dd10107 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -Version 2.5.1-stable+timestamp.2013.06.18.07.44.05 +Version 2.5.1-stable+timestamp.2013.06.20.16.43.32 diff --git a/gluon/contrib/login_methods/browserid_account.py b/gluon/contrib/login_methods/browserid_account.py index c3ccb38c..8214276f 100644 --- a/gluon/contrib/login_methods/browserid_account.py +++ b/gluon/contrib/login_methods/browserid_account.py @@ -9,7 +9,7 @@ thanks and credits to the web2py community - This custom authenticator allows web2py to authenticate using browserid (https://browserid.org/) + This custom authenticator allows web2py to authenticate using browserid (https://login.persona.org/) BrowserID is a project by Mozilla Labs (http://mozillalabs.com/) to Know how browserid works please visit http://identity.mozilla.com/post/7616727542/introducing-browserid-a-better-way-to-sign-in @@ -39,10 +39,10 @@ class BrowserID(object): audience="", assertion_post_url="", prompt="BrowserID Login", - issuer="browserid.org", - verify_url="https://browserid.org/verify", - browserid_js="https://browserid.org/include.js", - browserid_button="https://browserid.org/i/sign_in_red.png", + issuer="login.persona.org", + verify_url="https://login.persona.org/verify", + browserid_js="https://login.persona.org/include.js", + browserid_button="https://login.persona.org/i/sign_in_red.png", crypto_js="https://crypto-js.googlecode.com/files/2.2.0-crypto-md5.js", on_login_failure=None, ): @@ -76,9 +76,13 @@ class BrowserID(object): if j["status"] == "okay" and j["audience"] == audience and j['issuer'] == issuer and j['expires'] >= epoch_time: return dict(email=j['email']) elif self.on_login_failure: - redirect('http://google.com') + #print "status: ", j["status"]=="okay", j["status"] + #print "audience:", j["audience"]==audience, j["audience"], audience + #print "issuer: ", j["issuer"]==issuer, j["issuer"], issuer + #print "expires: ", j["expires"] >= epoch_time, j["expires"], epoch_time + redirect(self.on_login_failure) else: - redirect('http://google.com') + redirect('https://login.persona.org') return None def login_form(self): diff --git a/gluon/dal.py b/gluon/dal.py index 7d0190aa..890c0e62 100644 --- a/gluon/dal.py +++ b/gluon/dal.py @@ -476,7 +476,7 @@ def quote_keyword(a,keyword='timestamp'): regex = re.compile('\.keyword(?=\w)') a = regex.sub('."%s"' % keyword,a) return a - + if 'google' in DRIVERS: is_jdbc = False @@ -1188,7 +1188,7 @@ class BaseAdapter(ConnectionPool): self.file_delete(table._dbt) logfile.write('success!\n') - def _insert(self, table, fields): + def _insert(self, table, fields): if fields: keys = ','.join(f.name for f, v in fields) values = ','.join(self.expand(v, f.type) for f, v in fields) @@ -1309,7 +1309,7 @@ class BaseAdapter(ConnectionPool): return ftype in ('integer','boolean','double','bigint') or \ ftype.startswith('decimal') - def REPLACE(self, first, (second, third)): + def REPLACE(self, first, (second, third)): return 'REPLACE(%s,%s,%s)' % (self.expand(first,'string'), self.expand(second,'string'), self.expand(third,'string')) @@ -1614,7 +1614,7 @@ class BaseAdapter(ConnectionPool): sql_t = ', '.join([self.table_alias(t) for t in excluded + \ tables_to_merge.keys()]) if joint: - sql_t += ' %s %s' % (command, + sql_t += ' %s %s' % (command, ','.join([self.table_alias(t) for t in joint])) for t in joinon: sql_t += ' %s %s' % (command, t) @@ -1629,7 +1629,7 @@ class BaseAdapter(ConnectionPool): for t in ijoinon: sql_t += ' %s %s' % (icommand, t) if joint: - sql_t += ' %s %s' % (command, + sql_t += ' %s %s' % (command, ','.join([self.table_alias(t) for t in joint])) for t in joinon: sql_t += ' %s %s' % (command, t) @@ -1807,7 +1807,7 @@ class BaseAdapter(ConnectionPool): if field_is_type('list:string'): obj = map(str,obj) else: - obj = map(int,obj) + obj = map(int,[o for o in obj if o != '']) # we don't want to bar_encode json objects if isinstance(obj, (list, tuple)) and (not fieldtype == "json"): obj = bar_encode(obj) @@ -3047,7 +3047,7 @@ class OracleAdapter(BaseAdapter): END IF; SELECT %(sequence_name)s.nextval INTO :NEW.%(id)s FROM DUAL; END; - """ % dict(trigger_name=trigger_name, tablename=tablename, + """ % dict(trigger_name=trigger_name, tablename=tablename, sequence_name=sequence_name,id=id_name)) def lastrowid(self,table): @@ -8021,7 +8021,7 @@ def index(): ofile.write('END') def import_from_csv_file(self, ifile, id_map=None, null='', - unique='uuid', map_tablenames=None, + unique='uuid', map_tablenames=None, ignore_missing_tables=False, *args, **kwargs): #if id_map is None: id_map={} @@ -8041,7 +8041,7 @@ def index(): tablename = map_tablenames.get(tablename,tablename) if tablename is not None and tablename in self.tables: self[tablename].import_from_csv_file( - ifile, id_map, null, unique, id_offset, + ifile, id_map, null, unique, id_offset, *args, **kwargs) elif tablename is None or ignore_missing_tables: # skip all non-empty lines @@ -8484,7 +8484,7 @@ class Table(object): def __repr__(self): return '' % (self._tablename,','.join(self.fields())) - def __str__(self): + def __str__(self): if self._ot is not None: if 'Oracle' in str(type(self._db._adapter)): # <<< patch return '%s %s' % (self._ot, self._tablename) # <<< patch @@ -10194,7 +10194,7 @@ class Rows(object): return len(self.records) def __getslice__(self, a, b): - return Rows(self.db,self.records[a:b],self.colnames) + return Rows(self.db,self.records[a:b],self.colnames,compact=self.compact) def __getitem__(self, i): row = self.records[i] diff --git a/gluon/globals.py b/gluon/globals.py index ac76607d..f4f0eb71 100644 --- a/gluon/globals.py +++ b/gluon/globals.py @@ -499,7 +499,7 @@ class Session(Storage): masterapp=None, clear_session=False ): - + if request is None: request = current.request if response is None: diff --git a/gluon/tools.py b/gluon/tools.py index fe00ee70..b8e9a360 100644 --- a/gluon/tools.py +++ b/gluon/tools.py @@ -969,6 +969,7 @@ class Auth(object): new_password='New password', old_password='Old password', group_description='Group uniquely assigned to user %(id)s', + logging_enabled = True, register_log='User %(id)s Registered', login_log='User %(id)s Logged-in', login_failed_log=None, @@ -1739,7 +1740,7 @@ class Auth(object): auth.log_event(description='this happened', origin='auth') """ - if not description: + if not self.settings.logging_enabled or not description: return elif self.is_logged_in(): user_id = self.user.id @@ -1845,7 +1846,7 @@ class Auth(object): """ from gluon.settings import global_settings if global_settings.web2py_runtime_gae: - user = Row(self.db.auth_user._filter_fields(user, id=True)) + user = Row(self.settings.table_user._filter_fields(user, id=True)) delattr(user,'password') else: user = Row(user)