def request(self, endpoint, subrequests, player_position): if not self._auth_provider or self._auth_provider.is_login() is False: raise NotLoggedInException() request_proto = self._build_main_request(subrequests, player_position) response = self._make_rpc(endpoint, request_proto) response_dict = self._parse_main_response(response, subrequests) self.check_authentication(response_dict) # some response validations if isinstance(response_dict, dict): status_code = response_dict.get('status_code', None) if status_code == 102: raise AuthTokenExpiredException() elif status_code == 52: raise ServerSideRequestThrottlingException("Request throttled by server... slow down man") elif status_code == 53: api_url = response_dict.get('api_url', None) if api_url is not None: exception = ServerApiEndpointRedirectException() exception.set_redirected_endpoint(api_url) raise exception else: raise UnexpectedResponseException() return response_dict
def request(self, endpoint, subrequests, player_position): if not self._auth_provider or self._auth_provider.is_login() is False: raise NotLoggedInException() request_proto = self._build_main_request(subrequests, player_position) response = self._make_rpc(endpoint, request_proto) response_dict = self._parse_main_response(response, subrequests) self.check_authentication(response_dict) """ some response validations """ if isinstance(response_dict, dict): status_code = response_dict.get('status_code', None) if status_code == 102: raise AuthTokenExpiredException() elif status_code == 52: raise ServerSideRequestThrottlingException("Request throttled by server... slow down man") elif status_code == 53: api_url = response_dict.get('api_url', None) if api_url is not None: exception = ServerApiEndpointRedirectException() exception.set_redirected_endpoint(api_url) raise exception else: raise UnexpectedResponseException() return response_dict
def _parse_sub_responses(self, response_proto, subrequests_list, response_proto_dict, use_dict=True): self.log.debug('Parsing sub RPC responses...') response_proto_dict['responses'] = {} if response_proto.status_code == 53: exception = ServerApiEndpointRedirectException() exception.set_redirected_endpoint(response_proto.api_url) raise exception list_len = len(subrequests_list) - 1 i = 0 for subresponse in response_proto.returns: request_entry = subrequests_list[i] if isinstance(request_entry, int): entry_id = request_entry else: entry_id = list(request_entry.items())[0][0] entry_name = RequestType.Name(entry_id) proto_name = entry_name.lower() + '_response' proto_classname = 'pogoprotos.networking.responses.' + proto_name + '_pb2.' + proto_name self.log.debug("Parsing class: %s", proto_classname) subresponse_return = None try: subresponse_extension = self.get_class(proto_classname)() except Exception as e: subresponse_extension = None error = 'Protobuf definition for {} not found'.format( proto_classname) subresponse_return = error self.log.warning(error) if subresponse_extension: try: subresponse_extension.ParseFromString(subresponse) if use_dict: subresponse_return = protobuf_to_dict( subresponse_extension) else: subresponse_return = subresponse_extension except Exception: error = "Protobuf definition for {} seems not to match".format( proto_classname) subresponse_return = error self.log.warning(error) response_proto_dict['responses'][entry_name] = subresponse_return i += 1 return response_proto_dict
def _parse_sub_responses(self, response_proto, subrequests_list, response_proto_dict): self.log.debug('Parsing sub RPC responses...') response_proto_dict['responses'] = {} if response_proto_dict.get('status_code', 1) == 53: exception = ServerApiEndpointRedirectException() exception.set_redirected_endpoint(response_proto_dict['api_url']) raise exception if 'returns' in response_proto_dict: del response_proto_dict['returns'] list_len = len(subrequests_list) - 1 i = 0 for subresponse in response_proto.returns: if i > list_len: self.log.info("Error - something strange happend...") request_entry = subrequests_list[i] if isinstance(request_entry, int): entry_id = request_entry else: entry_id = list(request_entry.items())[0][0] entry_name = RequestType.Name(entry_id) proto_name = to_camel_case(entry_name.lower()) + 'Response' proto_classname = 'POGOProtos.Networking.Responses.' + proto_name + '_pb2.' + proto_name self.log.debug("Parsing class: %s", proto_classname) subresponse_return = None try: subresponse_extension = self.get_class(proto_classname)() except Exception as e: subresponse_extension = None error = 'Protobuf definition for {} not found'.format( proto_classname) subresponse_return = error self.log.debug(error) if subresponse_extension: try: subresponse_extension.ParseFromString(subresponse) subresponse_return = protobuf_to_dict( subresponse_extension) except: error = "Protobuf definition for {} seems not to match".format( proto_classname) subresponse_return = error self.log.debug(error) response_proto_dict['responses'][entry_name] = subresponse_return i += 1 return response_proto_dict
def _parse_sub_responses(self, response_proto, subrequests_list, response_proto_dict): self.log.debug('Parsing sub RPC responses...') response_proto_dict['responses'] = {} if response_proto_dict.get('status_code', 1) == 53: exception = ServerApiEndpointRedirectException() exception.set_redirected_endpoint(response_proto_dict['api_url']) raise exception if 'returns' in response_proto_dict: del response_proto_dict['returns'] list_len = len(subrequests_list)-1 i = 0 for subresponse in response_proto.returns: if i > list_len: self.log.info("Error - something strange happend...") request_entry = subrequests_list[i] if isinstance(request_entry, int): entry_id = request_entry else: entry_id = list(request_entry.items())[0][0] entry_name = RequestType.Name(entry_id) proto_name = to_camel_case(entry_name.lower()) + 'Response' proto_classname = 'POGOProtos.Networking.Responses_pb2.' + proto_name self.log.debug("Parsing class: %s", proto_classname) subresponse_return = None try: subresponse_extension = self.get_class(proto_classname)() except Exception as e: subresponse_extension = None error = 'Protobuf definition for {} not found'.format(proto_classname) subresponse_return = error self.log.debug(error) if subresponse_extension: try: subresponse_extension.ParseFromString(subresponse) subresponse_return = protobuf_to_dict(subresponse_extension) except: error = "Protobuf definition for {} seems not to match".format(proto_classname) subresponse_return = error self.log.debug(error) response_proto_dict['responses'][entry_name] = subresponse_return i += 1 return response_proto_dict
def request(self, endpoint, subrequests, platforms, player_position, use_dict=True): if not self._auth_provider or self._auth_provider.is_login() is False: raise NotLoggedInException() self.request_proto = self.request_proto or self._build_main_request( subrequests, platforms, player_position) response = self._make_rpc(endpoint, self.request_proto) response_dict = self._parse_main_response(response, subrequests, use_dict) # some response validations if isinstance(response_dict, dict): if use_dict: status_code = response_dict.get('status_code') if ('auth_ticket' in response_dict) and ( 'expire_timestamp_ms' in response_dict['auth_ticket']): ticket = response_dict['auth_ticket'] self.check_authentication(ticket['expire_timestamp_ms'], ticket['start'], ticket['end']) else: status_code = response_dict['envelope'].status_code ticket = response_dict['envelope'].auth_ticket if ticket: self.check_authentication(ticket.expire_timestamp_ms, ticket.start, ticket.end) if status_code == 102: raise AuthTokenExpiredException elif status_code == 52: raise NianticThrottlingException( "Request throttled by server... slow down man") elif status_code == 53: api_url = response_dict.get('api_url') if api_url: exception = ServerApiEndpointRedirectException() exception.set_redirected_endpoint(api_url) raise exception else: raise UnexpectedResponseException return response_dict
def _parse_sub_responses(self, response_proto, subrequests_list, response_proto_dict, use_dict = True): self.log.debug('Parsing sub RPC responses...') response_proto_dict['responses'] = {} if response_proto.status_code == 53: exception = ServerApiEndpointRedirectException() exception.set_redirected_endpoint(response_proto.api_url) raise exception i = 0 for subresponse in response_proto.returns: entry_id, _ = subrequests_list[i] entry_name = RequestType.Name(entry_id) proto_name = entry_name.lower() + '_response' proto_classname = 'pogoprotos.networking.responses.' + proto_name + '_pb2.' + proto_name self.log.debug("Parsing class: %s", proto_classname) subresponse_return = None try: subresponse_extension = self.get_class(proto_classname)() except Exception as e: subresponse_extension = None error = 'Protobuf definition for {} not found'.format(proto_classname) subresponse_return = error self.log.warning(error) if subresponse_extension: try: subresponse_extension.ParseFromString(subresponse) if use_dict: subresponse_return = protobuf_to_dict(subresponse_extension) else: subresponse_return = subresponse_extension except Exception: error = "Protobuf definition for {} seems not to match".format(proto_classname) subresponse_return = error self.log.warning(error) response_proto_dict['responses'][entry_name] = subresponse_return i += 1 return response_proto_dict
def request(self, endpoint, subrequests, platforms, player_position, use_dict = True): if not self._auth_provider or self._auth_provider.is_login() is False: raise NotLoggedInException() self.request_proto = self.request_proto or self._build_main_request(subrequests, platforms, player_position) response = self._make_rpc(endpoint, self.request_proto) response_dict = self._parse_main_response(response, subrequests, use_dict) # some response validations if isinstance(response_dict, dict): if use_dict: status_code = response_dict.get('status_code') if ('auth_ticket' in response_dict) and ('expire_timestamp_ms' in response_dict['auth_ticket']): ticket = response_dict['auth_ticket'] self.check_authentication(ticket['expire_timestamp_ms'], ticket['start'], ticket['end']) else: status_code = response_dict['envelope'].status_code ticket = response_dict['envelope'].auth_ticket if ticket: self.check_authentication(ticket.expire_timestamp_ms, ticket.start, ticket.end) if status_code == 102: raise AuthTokenExpiredException elif status_code == 52: raise NianticThrottlingException("Request throttled by server... slow down man") elif status_code == 53: api_url = response_dict.get('api_url') if api_url: exception = ServerApiEndpointRedirectException() exception.set_redirected_endpoint(api_url) raise exception else: raise UnexpectedResponseException return response_dict