Exemple #1
0
    def login(self, provider, username, password):

        if not isinstance(username, basestring) or not isinstance(
                password, basestring):
            raise AuthException("Username/password not correctly specified")

        if provider == 'ptc':
            self._auth_provider = AuthPtc()
        elif provider == 'google':
            self._auth_provider = AuthGoogle()
        else:
            raise AuthException(
                "Invalid authentication provider - only ptc/google available.")

        self.log.debug('Auth provider: %s', provider)

        if not self._auth_provider.login(username, password):
            self.log.info('Login process failed')
            return False

        self.log.info('Starting RPC login sequence (app simulation)')

        # making a standard call, like it is also done by the client
        self.get_player()
        self.get_hatched_eggs()
        self.get_inventory()
        self.check_awarded_badges()
        self.download_settings(hash="4a2e9bc330dae60e7b74fc85b98868ab4700802e")

        response = self.call()

        if not response:
            self.log.info('Login failed!')
            return False

        if 'api_url' in response:
            self._api_endpoint = ('https://{}/rpc'.format(response['api_url']))
            self.log.debug('Setting API endpoint to: %s', self._api_endpoint)

        elif 'auth_ticket' in response:
            auth_ticket = response['auth_ticket']
            self._auth_provider.set_ticket([
                auth_ticket['expire_timestamp_ms'], auth_ticket['start'],
                auth_ticket['end']
            ])

        else:
            self.log.error('Login failed - unexpected server response!')
            return False

        self.log.info('Finished RPC login sequence (app simulation)')
        self.log.info('Login process completed')

        return True