def __init__ (self, scan_queue=None, dispatch_queue=None): if scan_queue is None or dispatch_queue is None: raise ValueError("missing scan/dispatch queues") self._scan_queue = scan_queue self._dispatch_queue = dispatch_queue self._user_queue = Queue() self._lock = Lock() self._threads = [] self._users = [] self._signature_lib_path = "" if sys.platform.startswith("linux"): self._signature_lib_path = pub_config["pgo_api"]["linux_signature_lib_file"] elif sys.platform.startswith("darwin"): self._signature_lib_path = pub_config["pgo_api"]["darwin_signature_lib_file"] elif sys.platform.startswith("win"): self._signature_lib_path = pub_config["pgo_api"]["win_signature_lib_file"] else: raise ValueError("un-supported system") self._num_threads = pub_config["scanner"]["num_threads"] self._min_sec_before_reauth = pub_config["scanner"]["min_sec_before_reauth"] self._max_tries = pub_config["scanner"]["max_tries_per_request"] self._sleep_sec = pub_config["scanner"]["sleep_per_try_sec"] self._scan_throttle_sec = pub_config["scanner"]["scan_throttle_sec"] self._delay_between_login_sec = pub_config["scanner"]["delay_between_login_sec"] self._boundary = private_config["location"] # automatically handle IP bans by restarting/switching vpn servers self._restart_vpn_file = pub_config["scanner"]["restart_vpn_file"] self._switch_vpn_file = pub_config["scanner"]["switch_vpn_file"] self._max_vpn_retries_before_switch = pub_config["scanner"]["max_vpn_retries_before_switch"] self._delay_between_vpn_retries = pub_config["scanner"]["delay_between_vpn_retries_sec"] self._num_vpn_retries = 0 self._last_vpn_retry = time.time() users = private_config["poke_api"]["accounts"] for user_data in users: device_info = {} device_info['device_id'] = uuid.uuid4().hex device_info['device_brand'] = "Apple" device_info['device_model'] = "iPhone" device_info['device_model_boot'] = "iPhone8,2" device_info['hardware_manufacturer'] = "Apple" device_info['hardware_model'] = "N66AP" device_info['firmware_brand'] = "iPhone OS" device_info['firmware_type'] = "9.3.3" user = PGoApi(device_info=device_info) user._last_call = 0 user._data = user_data self._users.append(user) self._user_queue.put(user) self.auth_users() self.start_threads(self._num_threads)