mirror of
https://github.com/jxxghp/MoviePilot-Plugins.git
synced 2026-06-06 07:26:46 +00:00
- 优化插件目录结构和数据结构, 解耦API层和服务层 - 添加了一些Pydantic模型, 用于校验配置 - 支持独立的订阅链接配置 - 新增覆写代理组和出站代理操作 - 支持 smart 组和代理集合 - 代理组回环检测 - 使用异步调度器 - 显示规则更改日期 - 完善了对嵌套逻辑规则和子规则的配置和验证
47 lines
1.6 KiB
Python
47 lines
1.6 KiB
Python
import binascii
|
|
from typing import Dict, Any, Optional
|
|
from urllib.parse import urlparse, unquote
|
|
|
|
from . import BaseConverter
|
|
|
|
|
|
class HttpConverter(BaseConverter):
|
|
def convert(self, link: str, names: Dict[str, int]) -> Optional[Dict[str, Any]]:
|
|
try:
|
|
parsed = urlparse(link)
|
|
server = parsed.hostname
|
|
port = parsed.port
|
|
name = self.unique_name(names, unquote(parsed.fragment or f"{server}:{port}"))
|
|
|
|
username = None
|
|
password = None
|
|
if parsed.username:
|
|
try:
|
|
# The userinfo part might be base64 encoded
|
|
decoded_userinfo = self.decode_base64(parsed.username.encode('utf-8')).decode('utf-8')
|
|
if ":" in decoded_userinfo:
|
|
username, password = decoded_userinfo.split(":", 1)
|
|
else:
|
|
username = decoded_userinfo
|
|
except (binascii.Error, UnicodeDecodeError):
|
|
# If not base64 encoded, use directly
|
|
username = parsed.username
|
|
password = parsed.password if parsed.password else ""
|
|
|
|
proxy = {
|
|
"name": name,
|
|
"type": "http",
|
|
"server": server,
|
|
"port": port,
|
|
"username": username,
|
|
"password": password,
|
|
"skip-cert-verify": True
|
|
}
|
|
|
|
if parsed.scheme == "https":
|
|
proxy["tls"] = True
|
|
|
|
return proxy
|
|
except Exception:
|
|
return None
|