Skip to content

Commit

Permalink
🐛 修复 base64 下服务器取值错误的问题 (#13)
Browse files Browse the repository at this point in the history
  • Loading branch information
Well2333 authored Sep 12, 2023
1 parent 46aa649 commit 50f9253
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 30 deletions.
76 changes: 47 additions & 29 deletions LiteClashProMan/subscribe/base64.py
Original file line number Diff line number Diff line change
@@ -1,50 +1,68 @@
import base64
import json
from typing import TypedDict

from .clash import SS, Vmess


def ss(sub: str) -> "SS":
"""Format the ShadowSocks proxy like ss://{base64encode}#{name}@{server}:{port}"""
ci_pa, se_po = sub[5:].split("#")
base64_encoded, name_and_other = sub[5:].split("#")

ci_pa = base64.b64decode(f"{ci_pa}===").decode().split("@")[0]
ci, pa = ci_pa.split(":")
cipher_password, server_and_port = (
base64.b64decode(f"{base64_encoded}===").decode().split("@")
)
cipher, password = cipher_password.split(":")

se, po = se_po.split("@")[1].split(":")
na = "JMS-" + se.split(".")[0]
server, port = server_and_port.split(":")
name = "JMS-" + name_and_other.split("@")[1].split(".")[0]

return SS(
**{
"name": na,
"server": se,
"type": "ss",
"port": int(po),
"cipher": ci,
"password": pa,
"udp": True,
}
name=name,
server=server,
type="ss",
port=int(port),
cipher=cipher,
password=password,
udp=True,
)


class VmessRaw(TypedDict):
ps: str
port: str
id: str
aid: int
net: str
type: str
tls: str
add: str


def vmess(sub: str) -> "Vmess":
"""Format the Vmess proxy like vmess://{base64encode}"""
vmess = json.loads(base64.b64decode(f"{sub[8:]}===").decode())

se = str(vmess["ps"]).split("@")[1].split(":")[0]
na = "JMS-" + se.split(".")[0]
decoded_sub = base64.b64decode(f"{sub[8:]}===").decode()
vmess_raw = json.loads(decoded_sub)

server_address = vmess_raw["add"]
port = int(vmess_raw["port"])
uuid = vmess_raw["id"]
alter_id = vmess_raw["aid"]
tls_enabled = vmess_raw["tls"] != "none"

se_name = str(vmess_raw["ps"]).split("@")[1].split(":")[0]
name = "JMS-" + se_name.split(".")[0]

return Vmess(
**{
"name": na,
"server": se,
"port": int(vmess["port"]),
"type": "vmess",
"uuid": vmess["id"],
"alterId": vmess["aid"],
"cipher": "auto",
"tls": vmess["tls"] != "none",
"skip-cert-verify": True,
"udp": True,
}
name=name,
server=server_address,
port=port,
type="vmess",
uuid=uuid,
alterId=alter_id,
cipher="auto",
tls=tls_enabled,
skip_cert_verify=True,
udp=False,
)
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@

[project]
name = "LiteClashProMan"
version = "0.5.0"
version = "0.5.1"
description = "生成并更新 clash 配置文件,并提供 http 下载和规则文件镜像下载。"
authors = [
{name = "Well404", email = "[email protected]"},
Expand Down

0 comments on commit 50f9253

Please sign in to comment.