def authenticate(self, environ, identity): log.info('In authenticate()') def set_error(msg): log.info(msg) err = 1 environ['FAS_AUTH_ERROR'] = err # HTTPForbidden ? err_app = HTTPFound(err_goto + '?' + 'came_from=' + quote_plus(came_from)) environ['repoze.who.application'] = err_app err_goto = '/login' default_came_from = '/' if 'SCRIPT_NAME' in environ: sn = environ['SCRIPT_NAME'] err_goto = sn + err_goto default_came_from = sn + default_came_from query = parse_dict_querystring(environ) form = parse_formvars(environ) form.update(query) came_from = form.get('came_from', default_came_from) try: auth_params = { 'username': identity['login'], 'password': identity['password'] } except KeyError: try: auth_params = {'session_id': identity['session_id']} except: # On error we return None which means that auth failed set_error('Parameters for authenticating not found') return None try: user_data = self._retrieve_user_info(environ, auth_params) except AuthError as e: set_error('Authentication failed: %s' % exception_to_bytes(e)) log.warning(e) return None except Exception as e: set_error('Unknown auth failure: %s' % exception_to_bytes(e)) return None if user_data: try: del user_data[1]['password'] environ['CSRF_AUTH_SESSION_ID'] = user_data[0] return user_data[1]['username'] except ValueError: set_error('user information from fas not in expected format!') return None except Exception: pass set_error('An unknown error happened when trying to log you in.' ' Please try again.') return None
def test_exception_to_bytes_custom(self): # If given custom functions, then we should not mangle c = [ lambda e: converters.to_bytes(e.args[0], encoding='euc_jp'), lambda e: converters.to_bytes(e, encoding='euc_jp') ] tools.eq_( converters.exception_to_bytes(self.exceptions['euc_jpn'], converters=c), self.euc_jp_japanese) c.extend(converters.EXCEPTION_CONVERTERS) tools.eq_( converters.exception_to_bytes(self.exceptions['euc_jpn'], converters=c), self.euc_jp_japanese) c = [ lambda e: converters.to_bytes(e.args[0], encoding='latin1'), lambda e: converters.to_bytes(e, encoding='latin1') ] tools.eq_( converters.exception_to_bytes(self.exceptions['latin1_spanish'], converters=c), self.latin1_spanish) c.extend(converters.EXCEPTION_CONVERTERS) tools.eq_( converters.exception_to_bytes(self.exceptions['latin1_spanish'], converters=c), self.latin1_spanish)
def authenticate(self, environ, identity): log.info('In authenticate()') def set_error(msg): log.info(msg) err = 1 environ['FAS_AUTH_ERROR'] = err # HTTPForbidden ? err_app = HTTPFound(err_goto + '?' + 'came_from=' + quote_plus(came_from)) environ['repoze.who.application'] = err_app err_goto = '/login' default_came_from = '/' if 'SCRIPT_NAME' in environ: sn = environ['SCRIPT_NAME'] err_goto = sn + err_goto default_came_from = sn + default_came_from query = parse_dict_querystring(environ) form = parse_formvars(environ) form.update(query) came_from = form.get('came_from', default_came_from) try: auth_params = {'username': identity['login'], 'password': identity['password']} except KeyError: try: auth_params = {'session_id': identity['session_id']} except: # On error we return None which means that auth failed set_error('Parameters for authenticating not found') return None try: user_data = self._retrieve_user_info(environ, auth_params) except AuthError as e: set_error('Authentication failed: %s' % exception_to_bytes(e)) log.warning(e) return None except Exception as e: set_error('Unknown auth failure: %s' % exception_to_bytes(e)) return None if user_data: try: del user_data[1]['password'] environ['CSRF_AUTH_SESSION_ID'] = user_data[0] return user_data[1]['username'] except ValueError: set_error('user information from fas not in expected format!') return None except Exception: pass set_error('An unknown error happened when trying to log you in.' ' Please try again.') return None
def test_exception_to_bytes_with_bytes(self): tools.eq_(converters.exception_to_bytes(self.exceptions['utf8_jpn']), self.utf8_japanese) tools.eq_( converters.exception_to_bytes(self.exceptions['utf8_spanish']), self.utf8_spanish) tools.eq_( converters.exception_to_bytes(self.exceptions['latin1_spanish']), self.latin1_spanish) tools.eq_(converters.exception_to_bytes(self.exceptions['euc_jpn']), self.euc_jp_japanese)
def test_exception_to_bytes_custom(self): # If given custom functions, then we should not mangle c = [lambda e: converters.to_bytes(e, encoding='euc_jp')] tools.ok_(converters.exception_to_bytes(self.exceptions['euc_jpn'], converters=c) == self.euc_jp_japanese) c.extend(converters.EXCEPTION_CONVERTERS) tools.ok_(converters.exception_to_bytes(self.exceptions['euc_jpn'], converters=c) == self.euc_jp_japanese) c = [lambda e: converters.to_bytes(e, encoding='latin1')] tools.ok_(converters.exception_to_bytes(self.exceptions['latin1_spanish'], converters=c) == self.latin1_spanish) c.extend(converters.EXCEPTION_CONVERTERS) tools.ok_(converters.exception_to_bytes(self.exceptions['latin1_spanish'], converters=c) == self.latin1_spanish)
def sane_unicode_and_exception_handling(script): """ Exit 1 on failure, and 2 on error. Print the traceback assuming UTF-8. """ # Simulates python3's defaulting to utf-8 output so we don't get confusing # `UnicodeEncodeError`s when printing unicode characters: from kitchen.text.converters import getwriter, exception_to_bytes, to_bytes if sys.stdout.encoding is None: sys.stdout = getwriter('utf8')(sys.stdout) if sys.stderr.encoding is None: sys.stderr = getwriter('utf8')(sys.stderr) try: yield except Exception as e: # pylint: disable=W0703 error_message = exception_to_bytes(e) if not error_message and isinstance(e, AssertionError): error_message = traceback.extract_tb(sys.exc_info()[2])[-1][3] sys.stdout.write("FAIL: %s: %s: %s\n" % (script, type(e).__name__, error_message)) # This is a hack to allow printing exceptions that have unicode messages # attached to them. The default behaviour of Python 2.7 is to replace # unicode charactors with \x023-like backslash escapes. Instead we # format them as utf-8 bytes # # It's not thread-safe, but will only be called at the end of execution: traceback._some_str = to_bytes # pylint: disable=protected-access traceback.print_exc(file=sys.stderr) # 1 is failure and 2 is error if isinstance(e, (stbt.UITestFailure, AssertionError)): sys.exit(1) # Failure else: sys.exit(2) # Error
def authenticate(self, environ, identity): log.info('In authenticate()') def set_error(msg): log.info(msg) err = 1 environ['FAS_AUTH_ERROR'] = err # HTTPForbidden ? err_app = HTTPFound(err_goto + '?' + 'came_from=' + quote_plus(came_from)) environ['repoze.who.application'] = err_app err_goto = '/login' default_came_from = '/' if 'SCRIPT_NAME' in environ: sn = environ['SCRIPT_NAME'] err_goto = sn + err_goto default_came_from = sn + default_came_from query = parse_dict_querystring(environ) form = parse_formvars(environ) form.update(query) came_from = form.get('came_from', default_came_from) try: auth_params = { 'username': identity['login'], 'password': identity['password'] } except KeyError: try: auth_params = {'session_id': identity['session_id']} except: # On error we return None which means that auth failed set_error('Parameters for authenticating not found') return None try: user_data = self._retrieve_user_info(environ, auth_params) except AuthError, e: set_error('Authentication failed: %s' % exception_to_bytes(e)) log.warning(e) return None
def authenticate(self, environ, identity): log.info(b_('In authenticate()')) def set_error(msg): log.info(msg) err = 1 environ['FAS_AUTH_ERROR'] = err # HTTPForbidden ? err_app = HTTPFound(err_goto + '?' + 'came_from=' + quote_plus(came_from)) environ['repoze.who.application'] = err_app err_goto = '/login' default_came_from = '/' if 'SCRIPT_NAME' in environ: sn = environ['SCRIPT_NAME'] err_goto = sn + err_goto default_came_from = sn + default_came_from query = parse_dict_querystring(environ) form = parse_formvars(environ) form.update(query) came_from = form.get('came_from', default_came_from) try: auth_params = {'username': identity['login'], 'password': identity['password']} except KeyError: try: auth_params = {'session_id': identity['session_id']} except: # On error we return None which means that auth failed set_error(b_('Parameters for authenticating not found')) return None try: user_data = self._retrieve_user_info(environ, auth_params) except AuthError, e: set_error(b_('Authentication failed: %s') % exception_to_bytes(e)) log.warning(e) return None
def test_exception_to_bytes_with_unicode(self): tools.eq_(converters.exception_to_bytes(self.exceptions['u_jpn']), self.utf8_japanese) tools.eq_(converters.exception_to_bytes(self.exceptions['u_spanish']), self.utf8_spanish)
def test_exception_to_bytes_with_bytes(self): tools.eq_(converters.exception_to_bytes(self.exceptions['utf8_jpn']), self.utf8_japanese) tools.eq_(converters.exception_to_bytes(self.exceptions['utf8_spanish']), self.utf8_spanish) tools.eq_(converters.exception_to_bytes(self.exceptions['latin1_spanish']), self.latin1_spanish) tools.eq_(converters.exception_to_bytes(self.exceptions['euc_jpn']), self.euc_jp_japanese)
except KeyError: try: auth_params = {'session_id': identity['session_id']} except: # On error we return None which means that auth failed set_error(b_('Parameters for authenticating not found')) return None try: user_data = self._retrieve_user_info(environ, auth_params) except AuthError, e: set_error(b_('Authentication failed: %s') % exception_to_bytes(e)) log.warning(e) return None except Exception, e: set_error(b_('Unknown auth failure: %s') % exception_to_bytes(e)) return None if user_data: try: del user_data[1]['password'] environ['CSRF_AUTH_SESSION_ID'] = user_data[0] return user_data[1]['username'] except ValueError: set_error(b_('user information from fas not in expected format!')) return None except Exception, e: pass set_error(b_('An unknown error happened when trying to log you in.' ' Please try again.')) return None
except KeyError: try: auth_params = {'session_id': identity['session_id']} except: # On error we return None which means that auth failed set_error('Parameters for authenticating not found') return None try: user_data = self._retrieve_user_info(environ, auth_params) except AuthError, e: set_error('Authentication failed: %s' % exception_to_bytes(e)) log.warning(e) return None except Exception, e: set_error('Unknown auth failure: %s' % exception_to_bytes(e)) return None if user_data: try: del user_data[1]['password'] environ['CSRF_AUTH_SESSION_ID'] = user_data[0] return user_data[1]['username'] except ValueError: set_error('user information from fas not in expected format!') return None except Exception, e: pass set_error('An unknown error happened when trying to log you in.' ' Please try again.') return None