コード例 #1
0
    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
コード例 #2
0
    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)
コード例 #3
0
ファイル: faswhoplugin.py プロジェクト: rodrigc/python-fedora
    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
コード例 #4
0
 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)
コード例 #5
0
    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)
コード例 #6
0
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
コード例 #7
0
    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
コード例 #8
0
    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
コード例 #9
0
 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)
コード例 #10
0
 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)
コード例 #11
0
 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)
コード例 #12
0
        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
コード例 #13
0
        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