Exemple #1
0
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)
Exemple #2
0
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)
Exemple #3
0
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)
Exemple #4
0
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")
Exemple #5
0
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]]
Exemple #6
0
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])
Exemple #7
0
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
Exemple #8
0
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)
Exemple #9
0
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
Exemple #10
0
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)
Exemple #11
0
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)
Exemple #12
0
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))
Exemple #13
0
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)