Example #1
0
    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)