// Утилита для end-to-end проверки: печатает клиентскую ссылку тем же // production-кодом, который выдаёт её пользователю панели. // // Существует, чтобы у HY2XS была ровно ОДНА реализация hysteria2:// URI. // Раньше tools/test/e2e-hysteria.sh собирал ссылку собственной функцией на // bash, и дрейф любой из двух реализаций оставлял обе группы тестов зелёными. // // В production-бинарь админки не входит: это отдельный пакет, который не // импортируется приложением. // // go run ./tools/share-uri \ // --secret peer-secret --host 127.0.0.1 --port 34643 \ // --obfs gecko --obfs-password p --sni hy2xs-e2e.local [--insecure] package main import ( "flag" "fmt" "os" "hy2xs-admin/model/bo" "hy2xs-admin/service" ) func main() { secret := flag.String("secret", "", "peer connection secret (userinfo)") host := flag.String("host", "", "public host") port := flag.Int("port", 0, "public port") obfsType := flag.String("obfs", "", "obfuscation type: gecko or salamander") obfsPassword := flag.String("obfs-password", "", "obfuscation password") sni := flag.String("sni", "", "TLS SNI") remark := flag.String("remark", "", "link remark (fragment)") insecure := flag.Bool("insecure", false, "skip client-side certificate verification (test only)") flag.Parse() if *secret == "" || *host == "" || *port <= 0 || *port > 65535 { fmt.Fprintln(os.Stderr, "share-uri: --secret, --host and a valid --port are required") os.Exit(2) } fmt.Println(service.BuildHysteria2ShareURI(service.ShareURIOptions{ Secret: *secret, Host: *host, Port: *port, Obfs: bo.ObfsShareConfig{ Type: *obfsType, Password: *obfsPassword, }, SNI: *sni, Remark: *remark, Insecure: *insecure, })) }