def __init__(self, server, port, ssl=True, tails=True, cache=False): self.server = server self.port = port self.ssl = ssl self.tails = tails self.cache = cache self.dm = DirectoryManager()
def write(self): dm = DirectoryManager() f = dm.get_claim_report_path() l = dm.get_claim_report_latest_symlink_path() print("") FileManager.write_text(f, str(self)) FileManager.symlink(f, l) print(REPORT_STR % f)
def write(self): dm = DirectoryManager() f = dm.get_direct_query_report_path(self.coin['id']) l = dm.get_direct_query_report_latest_symlink_path(self.coin['id']) print("") FileManager.write_text(f, str(self)) FileManager.symlink(f, l) print(REPORT_STR % (self.name, f))
class ElectrumQuery(object): def __init__(self, server, port, ssl=True, tails=True, cache=False): self.server = server self.port = port self.ssl = ssl self.tails = tails self.cache = cache self.dm = DirectoryManager() def _create_socket(self): s = (socks.create_connection( (self.server, self.port), proxy_type=socks.SOCKS5, proxy_addr="127.0.0.1", proxy_port=9050) if self.tails else socket.create_connection( (self.server, self.port))) self.socket = ssl.wrap_socket(s) if self.ssl else s print("opened connection to: %s" % chill_yellow_str("%s:%d" % (self.server, self.port))) def _destroy_socket(self): self.socket.close() print("closed connection to: %s" % chill_yellow_str("%s:%d" % (self.server, self.port))) def _query_id_str(self, msg): return "%s:%s/%s" % (self.server, self.port, msg) def query(self, method, params): params = [params] if type(params) is not list else params msg = json.dumps({ "id": 0, "method": method, "params": params }, sort_keys=True) qid = self._query_id_str(msg) print("Electrum fetch: %s" % chill_yellow_str(qid)) if self.cache and self.dm.is_query_cached(qid): cache_file = self.dm.get_query_cache_path(qid) return FileManager.read_json_info(cache_file) self._create_socket() self.socket.send(msg.encode() + b'\n') response = json.loads(self.socket.recv(RECV_MAX)[:-1].decode()) self._destroy_socket() if self.cache: cache_file = self.dm.get_query_cache_path(qid) FileManager.write_text(cache_file, json.dumps(response)) return response
def _text_dl(self, url): if ".onion" in url: print("tor fetch: %s" % chill_green_str(url)) else: print("web fetch: %s" % chill_yellow_str(url)) dm = DirectoryManager() if self.cache and dm.is_query_cached(url): cache_file = dm.get_query_cache_path(url) return FileManager.read_text(cache_file) t = self._request(url) if self.cache: cache_file = dm.get_query_cache_path(url) FileManager.write_text(cache_file, t) return t
def _check_captcha(self, r, url): if r.status_code != 403: print("got status code %d from query to %s" % (r.status_code, url)) return if "captcha" not in r.text: print("Got 403 status from %s, but it doesn't seem to be a " "captcha issue (which sometimes occurs). " "this is unexpected what to do. If you can, please file " "an issue on the project github. Text of " "response: %s" % (url, r.text)) return dm = DirectoryManager() cache_file = dm.get_query_cache_path(url) if "blockchainbdgpzk" in url: msg = BI_CAPTCHA_MSG % (red_str("ERROR:"), url, chill_green_str(cache_file)) else: msg = CAPTCHA_MSG % (red_str("ERROR:"), url, chill_green_str(cache_file)) print(msg) sys.exit("*** could not fetch data at url - rejected")
def __init__(self): super().__init__() dm = DirectoryManager() f = dm.get_forkdrop_file() ff = FileManager.read_json_info(f) self.update(ff)
class ElectrumQuery(object): def __init__(self, server, port, ssl=True, tails=True, cache=False): self.server = server self.port = port self.ssl = ssl self.tails = tails self.cache = cache self.dm = DirectoryManager() def _create_socket(self): s = (socks.create_connection( (self.server, self.port), proxy_type=socks.SOCKS5, proxy_addr="127.0.0.1", proxy_port=9050) if self.tails else socket.create_connection( (self.server, self.port))) self.socket = ssl.wrap_socket(s) if self.ssl else s print("opened connection to: %s" % chill_yellow_str("%s:%d" % (self.server, self.port))) def _destroy_socket(self): self.socket.close() print("closed connection to: %s" % chill_yellow_str("%s:%d" % (self.server, self.port))) def _query_id_str(self, msg): return "%s:%s/%s" % (self.server, self.port, msg) def _recv_line(self): # electrum terminates response with a newline data = b'' while True: packet = self.socket.recv(RECV_MAX) #print("packet: %s" % packet) data += packet if int(packet[-1]) == 10: return data def query(self, method, params): params = [params] if type(params) is not list else params msg = json.dumps({ "id": 0, "method": method, "params": params }, sort_keys=True) qid = self._query_id_str(msg) if ".onion" in self.server: print("Electrum fetch: %s" % chill_green_str(qid)) else: print("Electrum fetch: %s" % chill_yellow_str(qid)) if self.cache and self.dm.is_query_cached(qid): cache_file = self.dm.get_query_cache_path(qid) return FileManager.read_json_info(cache_file) self._create_socket() self.socket.send(msg.encode() + b'\n') msg = self._recv_line() response = json.loads(msg.decode()) self._destroy_socket() if 'error' in response.keys(): sys.exit("*** Error from Electrum server: %s" % json.dumps(response, sort_keys=True)) if self.cache: cache_file = self.dm.get_query_cache_path(qid) FileManager.write_text(cache_file, json.dumps(response)) return response
def symlink(tgt_path, sym_path): dm = DirectoryManager() os.symlink(tgt_path, dm.get_tmp_symlink_path()) os.rename(dm.get_tmp_symlink_path(), sym_path) print_chill_green("symlinked %s" % sym_path)