Exemple #1
0
    def test_can_get_user_by_email(self):
        self.db.query(User).delete()

        user = UserFactory.create()

        loaded_user = User.by_email(user.email, self.db)
        expect(loaded_user.id).to_equal(user.id)

        invalid_user = User.by_email('*****@*****.**', self.db)
        expect(invalid_user).to_be_null()
Exemple #2
0
    def test_can_update_locale(self):
        user = UserFactory.create(locale='es_ES')

        loaded_user = User.by_email(user.email, self.db)
        expect(loaded_user.id).to_equal(user.id)
        expect(loaded_user.locale).to_equal('es_ES')

        User.update_locale(self.db, user, 'pt_BR')

        loaded_user = User.by_email(user.email, self.db)
        expect(loaded_user.id).to_equal(user.id)
        expect(loaded_user.locale).to_equal('pt_BR')
Exemple #3
0
    def test_can_authenticate_inexistent_user(self):
        with patch.object(AuthenticateHandler,
                          'authenticate_on_google') as auth_mock:
            result = gen.Future()
            result.set_result({
                'email': '*****@*****.**',
                'fullname': 'Test',
                'id': '12345'
            })
            auth_mock.return_value = result
            try:
                response = yield self.anonymous_fetch('/authenticate',
                                                      method='POST',
                                                      body=dumps({
                                                          'provider':
                                                          'GooglePlus',
                                                          'access_token':
                                                          'VALID-TOKEN',
                                                      }))
            except HTTPError, e:
                response = e.response

            user = User.by_email('*****@*****.**', self.db)
            expect(response.code).to_equal(200)
            expect(loads(response.body)['first_login']).to_be_true()
            expect(loads(response.body)['authenticated']).to_be_true()
            expect(user).not_to_be_null()
Exemple #4
0
    def authenticate(self, provider, access_token):
        '''
        Authenticate user with the given access_token on the specific
        provider method. If it returns the user data, try to fetch the user
        on the database or create user if it doesn`t exist and then return
        the user object. Otherwise, returns None, meaning invalid
        authentication parameters.
        '''

        if provider == u'GooglePlus':
            oauth_user = yield self.authenticate_on_google(access_token)
        else:
            oauth_user = None

        if oauth_user:
            db = self.application.db
            user = User.by_email(oauth_user['email'], db)
            if user:
                user.last_login = datetime.utcnow()
                db.flush()
                db.commit()  # FIXME, test if commit() is necessary
                user.first_login = False
            else:
                user = User.add_user(db, oauth_user['fullname'],
                                     oauth_user['email'], provider,
                                     datetime.utcnow())
                user.first_login = True
        else:
            user = None

        raise gen.Return(user)
Exemple #5
0
    def authenticate(self, provider, access_token):
        '''
        Authenticate user with the given access_token on the specific
        provider method. If it returns the user data, try to fetch the user
        on the database or create user if it doesn`t exist and then return
        the user object. Otherwise, returns None, meaning invalid
        authentication parameters.
        '''

        if provider == u'GooglePlus':
            oauth_user = yield self.authenticate_on_google(access_token)
        else:
            oauth_user = None

        if oauth_user:
            db = self.application.db
            user = User.by_email(oauth_user['email'], db)
            if user:
                user.last_login = datetime.utcnow()
                db.flush()
                db.commit()  # FIXME, test if commit() is necessary
                user.first_login = False
            else:
                user = User.add_user(
                    db, oauth_user['fullname'], oauth_user['email'], provider,
                    datetime.utcnow()
                )
                user.first_login = True
        else:
            user = None

        raise gen.Return(user)
Exemple #6
0
 def get_authenticated_user(self):
     authenticated, payload = self.is_authenticated()
     if authenticated:
         user_email = payload['sub']
         user = User.by_email(user_email, self.db)
         return user
     else:
         return None
Exemple #7
0
 def get_authenticated_user(self):
     authenticated, payload = self.is_authenticated()
     if authenticated:
         user_email = payload['sub']
         user = User.by_email(user_email, self.db)
         return user
     else:
         return None
Exemple #8
0
    def test_can_save_user_locale(self):
        user = UserFactory.create(locale='pt_BR')

        loaded_user = User.by_email(user.email, self.db)
        expect(loaded_user.id).to_equal(user.id)
        expect(loaded_user.locale).to_equal('pt_BR')

        response = yield self.authenticated_fetch('/users/locale/',
                                                  user_email=user.email,
                                                  method='POST',
                                                  body=dumps(
                                                      {'locale': 'es_ES'}))

        expect(response.code).to_equal(200)
        expect(loads(response.body)).to_equal('OK')

        loaded_user = User.by_email(user.email, self.db)
        expect(loaded_user.id).to_equal(user.id)
        expect(loaded_user.locale).to_equal('es_ES')
Exemple #9
0
    def test_can_save_user_locale(self):
        user = UserFactory.create(locale='pt_BR')

        loaded_user = User.by_email(user.email, self.db)
        expect(loaded_user.id).to_equal(user.id)
        expect(loaded_user.locale).to_equal('pt_BR')

        response = yield self.authenticated_fetch(
            '/users/locale/',
            user_email=user.email,
            method='POST',
            body=dumps({'locale': 'es_ES'})
        )

        expect(response.code).to_equal(200)
        expect(loads(response.body)).to_equal('OK')

        loaded_user = User.by_email(user.email, self.db)
        expect(loaded_user.id).to_equal(user.id)
        expect(loaded_user.locale).to_equal('es_ES')
Exemple #10
0
    def test_authenticate(self, datetime_mock):
        dt = datetime(2014, 2, 14, 15, 0, 30)
        datetime_mock.now.return_value = dt

        self.db.query(User).delete()

        UserFactory(email='*****@*****.**')

        mock_response = Mock(
            code=200,
            body='{"issued_to": "000", "email": "*****@*****.**"}'
        )

        def handle_request(url, handler, proxy_host, proxy_port):
            handler(mock_response)

        fetch_mock = Mock()
        fetch_mock.side_effect = handle_request

        config = Config()
        config.GOOGLE_CLIENT_ID = '000'

        access_token = '111'

        User.authenticate(
            access_token,
            fetch_mock,
            self.db,
            config,
            callback=self.stop
        )

        response = self.wait()

        expect(response).to_be_like({
            'status': 200,
            'user': {
                'is_superuser': True,
                'fullname': u'Marcelo Jorge Vieira',
                'last_login': dt,
                'email': u'*****@*****.**'
            }
        })

        loaded_user = User.by_email('*****@*****.**', self.db)
        expect(loaded_user.last_login).to_equal(dt)
Exemple #11
0
        def handle(code, body):
            if code > 399:
                callback(({
                    'reason': 'Error',
                    'status': code,
                    'details': body
                }))
                return

            data = loads(body)

            # Verify that the access token is valid for this app.
            if data.get('issued_to') != config.GOOGLE_CLIENT_ID:
                callback({
                    'status': 401,
                    'reason': "Token's client ID does not match app's.",
                })
                return

            user_email = data.get('email')

            from holmes.models import User

            user = User.by_email(user_email, db)
            if user:
                user.last_login = datetime.datetime.now()
                db.flush()
                db.commit()
                callback({
                    'status': 200,
                    'user': user.to_dict()
                })
                return

            callback({
                'status': 403,
                'reason': 'Unauthorized user'
            })
            return
Exemple #12
0
    def test_can_authenticate_inexistent_user(self):
        with patch.object(AuthenticateHandler, 'authenticate_on_google') as auth_mock:
            result = gen.Future()
            result.set_result({
                'email': '*****@*****.**',
                'fullname': 'Test',
                'id': '12345'
            })
            auth_mock.return_value = result
            try:
                response = yield self.anonymous_fetch(
                    '/authenticate', method='POST', body=dumps({
                        'provider': 'GooglePlus',
                        'access_token': 'VALID-TOKEN',
                    })
                )
            except HTTPError, e:
                response = e.response

            user = User.by_email('*****@*****.**', self.db)
            expect(response.code).to_equal(200)
            expect(loads(response.body)['first_login']).to_be_true()
            expect(loads(response.body)['authenticated']).to_be_true()
            expect(user).not_to_be_null()