def run(name, port): """start v2ray with a selected node. """ servers = subscribe.get_servers(name) menu = TerminalMenu(servers, title=name) index = menu.show() node = subscribe.get_node(index, name) existing_unit = utils.read_from_json(systemd.SYSTEMD_UNIT).get("unit", "") existing_config = utils.read_from_json(config.V2RAY_CONFIG_FILE) if existing_config != node: systemd.stop(existing_unit) config.update_config(node, port) if not systemd.is_active(existing_unit): unit = systemd.start(["v2ray", "-config", config.V2RAY_CONFIG_FILE]) utils.write_to_json(unit, systemd.SYSTEMD_UNIT)
def _remove_servers(name=DEFAULT_SUBSCRIBE, all_subs=False): all_servers = utils.read_from_json(SERVER_CONFIG) if all_subs: all_servers.clear() else: all_servers.pop(name, None) utils.write_to_json(all_servers, SERVER_CONFIG)
def _remove_subscribe(name=DEFAULT_SUBSCRIBE, all_subs=False): all_subscribes = utils.read_from_json(SUBSCRIBE_CONFIG) if all_subs: all_subscribes.clear() else: all_subscribes.pop(name, None) utils.write_to_json(all_subscribes, SUBSCRIBE_CONFIG)
def stop(): """stop v2ray """ unit = utils.read_from_json(systemd.SYSTEMD_UNIT).get("unit", "") if systemd.is_active(unit): systemd.stop(unit) click.echo("Stopped")
def get_servers(name=DEFAULT_SUBSCRIBE, all_subs=False): all_servers = utils.read_from_json(SERVER_CONFIG) if not all_servers: click.echo("No servers found, please add and update subscribe first!") sys.exit(1) if all_subs: return [node["ps"] for node in [sub for sub in all_servers]] else: return [node["ps"] for node in all_servers[name]]
def list_servers(name=DEFAULT_SUBSCRIBE, all_subs=False): all_servers = utils.read_from_json(SERVER_CONFIG) if not all_servers: click.echo("No servers found, please add and update subscribe first!") sys.exit(1) if all_subs: for name, nodes in all_servers.items(): _list_server(name, nodes) else: _list_server(name, all_servers[name])
def get_node(index, name=DEFAULT_SUBSCRIBE): all_servers = utils.read_from_json(SERVER_CONFIG) try: servers = all_servers[name] except KeyError: click.echo("No subscribe named %s found!" % name) sys.exit(1) node = servers[index] click.echo("switch to node:") utils.ping(name=name, index=index, all_servers=all_servers) return node
def update_subscribe(name=DEFAULT_SUBSCRIBE, all_subs=False): all_subscribe = utils.read_from_json(SUBSCRIBE_CONFIG) if all_subs: _update_all_subscribe(all_subscribe) else: try: url = all_subscribe[name] except KeyError: click.echo("No subscribe named %s found!" % name) sys.exit(1) parser_subscribe(url, name=name) list_servers(name=name, all_subs=all_subs)
def get_node(index, name=DEFAULT_SUBSCRIBE): all_servers = utils.read_from_json(SERVER_CONFIG) try: servers = all_servers[name] except KeyError: click.echo("No subscribe named %s found!" % name) sys.exit(1) try: utils.check_index(index) node = servers[index - 1] click.echo("switch to node:") utils.ping(name=name, index=index, all_servers=all_servers) except IndexError: click.echo("Invalid index: %s, please check it." % index) sys.exit(1) return node
def parser_subscribe(url, name=DEFAULT_SUBSCRIBE): try: resp = requests.get(url) except requests.exceptions.ConnectionError: click.echo("Can't parse the url, please check your network or make" " sure you entered the correct URL!") sys.exit(1) nodes = base64.b64decode(resp.content).splitlines() servers = [] for node in nodes: node = utils.byte2str(node).replace("vmess://", "") node = utils.byte2str(base64.b64decode(node)) servers.append(json.loads(node)) all_servers = utils.read_from_json(SERVER_CONFIG) all_servers.update({name: servers}) utils.write_to_json(all_servers, SERVER_CONFIG)
def parser_subscribe(url, name=DEFAULT_SUBSCRIBE): try: req = Request(url, headers={'User-Agent': 'Mozilla/5.0'}) resp = urlopen(req) except URLError: click.echo("Can't parse the url, please check your network or make" " sure you entered the correct URL!") sys.exit(1) nodes = base64.b64decode(resp.read()).splitlines() servers = [] for node in nodes: node = utils.byte2str(node).replace("vmess://", "") node = utils.byte2str(base64.b64decode(node)) servers.append(json.loads(node)) all_servers = utils.read_from_json(SERVER_CONFIG) all_servers.update({name: servers}) utils.write_to_json(all_servers, SERVER_CONFIG)
def list_subscribe(): subscribe = utils.read_from_json(SUBSCRIBE_CONFIG) click.echo("Subscribes:") for name, url in subscribe.items(): click.echo("%s: %s" % (name, url))
def add_subscribe(url, name=DEFAULT_SUBSCRIBE): subscribe = utils.read_from_json(SUBSCRIBE_CONFIG) subscribe.update({name: url}) utils.write_to_json(subscribe, SUBSCRIBE_CONFIG) click.echo("Added subscribe: %s" % url)