def parse_dyp(conf_settings): dyp = Dyport() if "detour" in conf_settings: dynamic_port_tag = conf_settings["detour"]["to"] for detour_list in conf_inboundDetour: if "tag" in detour_list and detour_list["tag"] == dynamic_port_tag: dyp.aid = detour_list["settings"]["default"]["alterId"] dyp.status = True break return dyp
def parse_group(self, part_json, group_index, local_ip): dyp, quic, end_port, tfo, header, tls, path, host, conf_ip = Dyport(), None, None, None, "", "", "", "", local_ip protocol = part_json["protocol"] if protocol == 'dokodemo-door' or (protocol == "vmess" and "streamSettings" not in part_json): return conf_settings = part_json["settings"] port_info = str(part_json["port"]).split("-", 2) if len(port_info) == 2: port, end_port = port_info else: port = port_info[0] if "detour" in conf_settings: dynamic_port_tag = conf_settings["detour"]["to"] for inbound in self.config["inbounds"]: if "tag" in inbound and inbound["tag"] == dynamic_port_tag: dyp.aid = inbound["settings"]["default"]["alterId"] dyp.status = True break if protocol == "vmess" or protocol == "socks": conf_stream = part_json["streamSettings"] tls = conf_stream["security"] if "sockopt" in conf_stream and "tcpFastOpen" in conf_stream["sockopt"]: tfo = "开启" if conf_stream["sockopt"]["tcpFastOpen"] else "关闭" if conf_stream["httpSettings"]: path = conf_stream["httpSettings"]["path"] elif conf_stream["wsSettings"]: host = conf_stream["wsSettings"]["headers"]["Host"] path = conf_stream["wsSettings"]["path"] elif conf_stream["tcpSettings"]: host = conf_stream["tcpSettings"]["header"]["request"]["headers"]["Host"] header = "http" if (tls == "tls"): conf_ip = Config().get_data('domain') if conf_stream["network"] == "kcp" and "header" in conf_stream["kcpSettings"]: header = conf_stream["kcpSettings"]["header"]["type"] if conf_stream["network"] == "quic" and conf_stream["quicSettings"]: quic_settings = conf_stream["quicSettings"] quic = Quic(quic_settings["security"], quic_settings["key"], quic_settings["header"]["type"]) group = Group(conf_ip, port, end_port=end_port, tls=tls, tfo=tfo, dyp=dyp, index=group_index) if protocol == "shadowsocks": self.user_number = self.user_number + 1 email = conf_settings["email"] if 'email' in conf_settings else '' ss = SS(self.user_number, conf_settings["password"], conf_settings["method"], email) group.node_list.append(ss) group.protocol = ss.__class__.__name__ return group elif protocol == "vmess": clients=conf_settings["clients"] elif protocol == "socks": clients=conf_settings["accounts"] elif protocol == "mtproto": clients=conf_settings["users"] for client in clients: email, node = "", None self.user_number = self.user_number + 1 if "email" in client and client["email"]: email = client["email"] if protocol == "vmess": node = Vmess(client["id"], client["alterId"], conf_stream["network"], self.user_number, path=path, host=host, header=header, email=email, quic=quic) elif protocol == "socks": node = Socks(self.user_number, client["pass"], user_info=client["user"]) elif protocol == "mtproto": node = Mtproto(self.user_number, client["secret"], user_info=email) if not group.protocol: group.protocol = node.__class__.__name__ group.node_list.append(node) return group