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