From b9f4fb8340e8a51741255d26b3a18f07a8269705 Mon Sep 17 00:00:00 2001 From: M03ED <50927468+M03ED@users.noreply.github.com> Date: Sat, 1 Aug 2026 20:57:34 +0300 Subject: [PATCH] sync node with upstream --- .gitlab-ci.yml | 41 +++ Dockerfile | 3 +- Dockerfile.xray | 3 +- Makefile | 5 +- backend/xray/api/account.go | 1 + backend/xray/api/wireguard_account.go | 61 ++++ backend/xray/api/wireguard_account_test.go | 69 ++++ backend/xray/api/wireguard_key.go | 31 ++ backend/xray/config.go | 47 ++- backend/xray/user.go | 27 +- common/service.pb.go | 347 ++++++++++----------- common/service.proto | 1 + go.mod | 31 +- go.sum | 62 ++-- 14 files changed, 507 insertions(+), 222 deletions(-) create mode 100644 .gitlab-ci.yml create mode 100644 backend/xray/api/wireguard_account.go create mode 100644 backend/xray/api/wireguard_account_test.go create mode 100644 backend/xray/api/wireguard_key.go diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..34dc476 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,41 @@ +stages: + - verify + - docker + +variables: + GOTOOLCHAIN: auto + GOFLAGS: "-mod=readonly" + +go-verify: + image: golang:1.26.3 + stage: verify + script: + - test -z "$(gofmt -l backend/xray/api/account.go backend/xray/api/wireguard_account.go backend/xray/api/wireguard_key.go backend/xray/api/wireguard_account_test.go backend/xray/config.go backend/xray/user.go common/service.pb.go)" + - go mod download + - apt-get update + - apt-get install -y --no-install-recommends curl openssl + - curl -L https://github.com/PasarGuard/scripts/raw/main/install_core.sh | bash -s -- --tag v26.7.11 --os linux --arch 64 + - make generate_server_cert + - make generate_client_cert + - go vet ./... + - go test ./... -p 1 + +go-race-wireguard: + image: golang:1.26.3 + stage: verify + script: + - apt-get update + - apt-get install -y --no-install-recommends gcc + - CGO_ENABLED=1 go test -race ./backend/wireguard + +docker-build: + image: docker:27.5.1 + stage: docker + services: + - name: docker:27.5.1-dind + command: ["--tls=false"] + variables: + DOCKER_HOST: tcp://docker:2375 + DOCKER_TLS_CERTDIR: "" + script: + - docker build --build-arg XRAY_TAG=v26.7.11 --tag "$CI_REGISTRY_IMAGE/node:$CI_COMMIT_SHA" . diff --git a/Dockerfile b/Dockerfile index 57cf757..4030d73 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,6 +2,7 @@ FROM --platform=$BUILDPLATFORM golang:1.26.3-alpine AS builder ARG TARGETOS ARG TARGETARCH +ARG XRAY_TAG=v26.7.11 RUN apk update && apk add --no-cache make @@ -12,7 +13,7 @@ RUN go mod download COPY . . RUN CGO_ENABLED=0 GOOS=${TARGETOS} GOARCH=${TARGETARCH} make NAME=main build -RUN GOOS=${TARGETOS} GOARCH=${TARGETARCH} make install_xray +RUN GOOS=${TARGETOS} GOARCH=${TARGETARCH} XRAY_TAG=${XRAY_TAG} make install_xray FROM alpine:latest diff --git a/Dockerfile.xray b/Dockerfile.xray index da97c4a..45bd9e1 100644 --- a/Dockerfile.xray +++ b/Dockerfile.xray @@ -2,6 +2,7 @@ FROM --platform=$BUILDPLATFORM golang:1.26.3-alpine AS builder ARG TARGETOS ARG TARGETARCH +ARG XRAY_TAG=v26.7.11 RUN apk update && apk add --no-cache make @@ -12,7 +13,7 @@ RUN go mod download COPY . . RUN CGO_ENABLED=0 GOOS=${TARGETOS} GOARCH=${TARGETARCH} make NAME=main build -RUN GOOS=${TARGETOS} GOARCH=${TARGETARCH} make install_xray +RUN GOOS=${TARGETOS} GOARCH=${TARGETARCH} XRAY_TAG=${XRAY_TAG} make install_xray FROM alpine:latest diff --git a/Makefile b/Makefile index 742d64b..fe0e1d4 100644 --- a/Makefile +++ b/Makefile @@ -6,6 +6,7 @@ MAIN = ./cmd/node PREFIX ?= $(shell go env GOPATH) XRAY_OS ?= XRAY_ARCH ?= +XRAY_TAG ?= v26.7.11 # Map GOARCH to installer arch flag (pure make vars to avoid shell leakage) XRAY_ARCH_MAP_amd64 = 64 XRAY_ARCH_MAP_386 = 32 @@ -125,9 +126,9 @@ ifeq ($(UNAME_S),Linux) if [ "$(DISTRO)" = "debian" ] || [ "$(DISTRO)" = "ubuntu" ] || \ [ "$(DISTRO)" = "centos" ] || [ "$(DISTRO)" = "rhel" ] || [ "$(DISTRO)" = "fedora" ] || \ [ "$(DISTRO)" = "arch" ]; then \ - curl -L https://github.com/PasarGuard/scripts/raw/main/install_core.sh | sudo bash -s -- $(XRAY_INSTALL_ARGS); \ + curl -L https://github.com/PasarGuard/scripts/raw/main/install_core.sh | sudo bash -s -- --tag $(XRAY_TAG) $(XRAY_INSTALL_ARGS); \ else \ - curl -L https://github.com/PasarGuard/scripts/raw/main/install_core.sh | bash -s -- $(XRAY_INSTALL_ARGS); \ + curl -L https://github.com/PasarGuard/scripts/raw/main/install_core.sh | bash -s -- --tag $(XRAY_TAG) $(XRAY_INSTALL_ARGS); \ fi else diff --git a/backend/xray/api/account.go b/backend/xray/api/account.go index efaee4a..8af03be 100644 --- a/backend/xray/api/account.go +++ b/backend/xray/api/account.go @@ -205,4 +205,5 @@ type ProxySettings struct { Shadowsocks *ShadowsocksTcpAccount Shadowsocks2022 *ShadowsocksAccount Hysteria *HysteriaAccount + Wireguard *WireguardAccount } diff --git a/backend/xray/api/wireguard_account.go b/backend/xray/api/wireguard_account.go new file mode 100644 index 0000000..b8094cd --- /dev/null +++ b/backend/xray/api/wireguard_account.go @@ -0,0 +1,61 @@ +package api + +import ( + "fmt" + + "github.com/xtls/xray-core/common/serial" + "github.com/xtls/xray-core/proxy/wireguard" + + "github.com/pasarguard/node/common" +) + +// WireguardAccount is an Xray UserManager WireGuard peer. +type WireguardAccount struct { + BaseAccount + PublicKey string `json:"publicKey"` + PreSharedKey string `json:"preSharedKey,omitempty"` + AllowedIPs []string `json:"allowedIPs"` +} + +func (wa *WireguardAccount) Message() (*serial.TypedMessage, error) { + return ToTypedMessage(&wireguard.PeerConfig{ + PublicKey: wa.PublicKey, + PreSharedKey: wa.PreSharedKey, + AllowedIps: wa.AllowedIPs, + }) +} + +func NewWireguardAccount(user *common.User) (*WireguardAccount, error) { + wg := user.GetProxies().GetWireguard() + if wg == nil || wg.GetPublicKey() == "" { + return nil, fmt.Errorf("wireguard public_key is required") + } + + pubHex, err := WireguardKeyToHex(wg.GetPublicKey()) + if err != nil { + return nil, fmt.Errorf("wireguard public_key: %w", err) + } + + pskHex := "" + if psk := wg.GetPreSharedKey(); psk != "" { + pskHex, err = WireguardKeyToHex(psk) + if err != nil { + return nil, fmt.Errorf("wireguard pre_shared_key: %w", err) + } + } + + allowed := wg.GetPeerIps() + if len(allowed) == 0 { + return nil, fmt.Errorf("wireguard peer_ips is required") + } + + return &WireguardAccount{ + BaseAccount: BaseAccount{ + Email: user.GetEmail(), + Level: 0, + }, + PublicKey: pubHex, + PreSharedKey: pskHex, + AllowedIPs: allowed, + }, nil +} diff --git a/backend/xray/api/wireguard_account_test.go b/backend/xray/api/wireguard_account_test.go new file mode 100644 index 0000000..fde77cc --- /dev/null +++ b/backend/xray/api/wireguard_account_test.go @@ -0,0 +1,69 @@ +package api + +import ( + "encoding/base64" + "strings" + "testing" + + "github.com/pasarguard/node/common" + "github.com/xtls/xray-core/proxy/wireguard" + "google.golang.org/protobuf/proto" +) + +func TestWireguardKeyToHex(t *testing.T) { + raw := strings.Repeat("\x11", 32) + want := strings.Repeat("11", 32) + encoded := base64.StdEncoding.EncodeToString([]byte(raw)) + + for _, tc := range []struct { + name string + key string + want string + }{ + {"base64", encoded, want}, + {"hex", want, want}, + } { + t.Run(tc.name, func(t *testing.T) { + got, err := WireguardKeyToHex(tc.key) + if err != nil || got != tc.want { + t.Fatalf("WireguardKeyToHex() = %q, %v; want %q, nil", got, err, tc.want) + } + }) + } +} + +func TestWireguardKeyToHexRejectsInvalidKeys(t *testing.T) { + for _, key := range []string{"", "not-a-key", base64.StdEncoding.EncodeToString([]byte("short")), strings.Repeat("z", 64)} { + if got, err := WireguardKeyToHex(key); err == nil || got != "" { + t.Fatalf("WireguardKeyToHex(%q) = %q, %v; want empty result and error", key, got, err) + } + } +} + +func TestNewWireguardAccountNormalizesPSKAndMessage(t *testing.T) { + publicKey := base64.StdEncoding.EncodeToString([]byte(strings.Repeat("P", 32))) + psk := base64.StdEncoding.EncodeToString([]byte(strings.Repeat("S", 32))) + account, err := NewWireguardAccount(&common.User{ + Email: "user@example.test", + Proxies: &common.Proxy{Wireguard: &common.Wireguard{ + PublicKey: publicKey, PreSharedKey: psk, PeerIps: []string{"10.0.0.2/32"}, + }}, + }) + if err != nil { + t.Fatal(err) + } + if account.GetEmail() != "user@example.test" || account.PreSharedKey != strings.Repeat("53", 32) { + t.Fatalf("account = %#v", account) + } + message, err := account.Message() + if err != nil { + t.Fatal(err) + } + peer := new(wireguard.PeerConfig) + if err := proto.Unmarshal(message.Value, peer); err != nil { + t.Fatal(err) + } + if peer.PreSharedKey != account.PreSharedKey { + t.Fatalf("peer message = %#v, want PSK %q", peer, account.PreSharedKey) + } +} diff --git a/backend/xray/api/wireguard_key.go b/backend/xray/api/wireguard_key.go new file mode 100644 index 0000000..473ec96 --- /dev/null +++ b/backend/xray/api/wireguard_key.go @@ -0,0 +1,31 @@ +package api + +import ( + "encoding/base64" + "encoding/hex" + "fmt" + "strings" +) + +// WireguardKeyToHex normalizes a WireGuard key from base64 (panel) or hex (Xray API) to hex. +func WireguardKeyToHex(key string) (string, error) { + key = strings.TrimSpace(key) + if key == "" { + return "", fmt.Errorf("empty wireguard key") + } + + if len(key) == 64 { + if _, err := hex.DecodeString(key); err == nil { + return key, nil + } + } + + raw, err := base64.StdEncoding.DecodeString(key) + if err != nil { + return "", fmt.Errorf("invalid wireguard key encoding: %w", err) + } + if len(raw) != 32 { + return "", fmt.Errorf("invalid wireguard key length: %d", len(raw)) + } + return hex.EncodeToString(raw), nil +} diff --git a/backend/xray/config.go b/backend/xray/config.go index 8199a75..fb6a1be 100644 --- a/backend/xray/config.go +++ b/backend/xray/config.go @@ -25,6 +25,7 @@ const ( Trojan = "trojan" Shadowsocks = "shadowsocks" Hysteria = "hysteria" + Wireguard = "wireguard" ) type Config struct { @@ -98,7 +99,11 @@ func (c *Config) buildInboundUpdates(users []*common.User) (map[string]*Inbound, if isActive { update.accounts = append(update.accounts, account) } else { - update.removeEmailSet[userEmail] = struct{}{} + removeEmail := userEmail + if inbound.Protocol == Wireguard && settings.Wireguard != nil { + removeEmail = settings.Wireguard.GetEmail() + } + update.removeEmailSet[removeEmail] = struct{}{} } } } @@ -199,6 +204,21 @@ func (i *Inbound) syncUsers(users []*common.User) { i.clients[user.GetEmail()] = api.NewHysteriaAccount(user) } } + + case Wireguard: + for _, user := range users { + if user.GetProxies().GetWireguard() == nil { + continue + } + if slices.Contains(user.Inbounds, i.Tag) { + account, err := api.NewWireguardAccount(user) + if err != nil { + log.Println("error for user", user.GetEmail(), ":", err) + continue + } + i.clients[account.GetEmail()] = account + } + } } } @@ -235,6 +255,9 @@ func (i *Inbound) updateUser(account api.Account) { case *api.HysteriaAccount: i.clients[email] = a + + case *api.WireguardAccount: + i.clients[email] = a } } @@ -291,6 +314,13 @@ func (i *Inbound) updateUsers(accounts []api.Account, removeEmails []string) { i.clients[account.GetEmail()] = a } } + + case Wireguard: + for _, account := range accounts { + if a, ok := account.(*api.WireguardAccount); ok { + i.clients[account.GetEmail()] = a + } + } } for _, email := range removeEmails { @@ -326,7 +356,11 @@ func (c *Config) ToBytes() ([]byte, error) { } if len(i.clients) == 0 { - i.Settings["clients"] = []any{} + if i.Protocol == Wireguard { + i.Settings["peers"] = []any{} + } else { + i.Settings["clients"] = []any{} + } continue } @@ -386,6 +420,15 @@ func (c *Config) ToBytes() ([]byte, error) { } } i.Settings["clients"] = clients + + case Wireguard: + peers := make([]*api.WireguardAccount, 0, len(i.clients)) + for _, account := range i.clients { + if wgAccount, ok := account.(*api.WireguardAccount); ok { + peers = append(peers, wgAccount) + } + } + i.Settings["peers"] = peers } } diff --git a/backend/xray/user.go b/backend/xray/user.go index 671622b..e9e6f90 100644 --- a/backend/xray/user.go +++ b/backend/xray/user.go @@ -40,6 +40,12 @@ func setupUserAccount(user *common.User) (api.ProxySettings, error) { settings.Hysteria = api.NewHysteriaAccount(user) } + if user.GetProxies().GetWireguard() != nil { + if wgAccount, err := api.NewWireguardAccount(user); err == nil { + settings.Wireguard = wgAccount + } + } + return settings, nil } @@ -114,6 +120,12 @@ func isActiveInbound(inbound *Inbound, inbounds []string, settings api.ProxySett return nil, false } return settings.Hysteria, true + + case Wireguard: + if settings.Wireguard == nil { + return nil, false + } + return settings.Wireguard, true } } return nil, false @@ -140,17 +152,24 @@ func (x *Xray) SyncUser(ctx context.Context, user *common.User) error { continue } - _ = handler.RemoveInboundUser(ctx, inbound.Tag, user.Email) account, isActive := isActiveInbound(inbound, userInbounds, proxySetting) if isActive { inbound.updateUser(account) + if inbound.Protocol != Wireguard { + _ = handler.RemoveInboundUser(ctx, inbound.Tag, user.GetEmail()) + } err = handler.AddInboundUser(ctx, inbound.Tag, accountForAPI(inbound, account)) if err != nil { log.Println(err) errMessage.WriteString("\n" + err.Error()) } } else { - inbound.removeUser(user.GetEmail()) + removeEmail := user.GetEmail() + if inbound.Protocol == Wireguard && proxySetting.Wireguard != nil { + removeEmail = proxySetting.Wireguard.GetEmail() + } + _ = handler.RemoveInboundUser(ctx, inbound.Tag, removeEmail) + inbound.removeUser(removeEmail) } } @@ -236,7 +255,9 @@ func (x *Xray) UpdateUsers(ctx context.Context, users []*common.User) error { } for _, account := range update.accounts { - _ = handler.RemoveInboundUser(ctx, tag, account.GetEmail()) + if inbound.Protocol != Wireguard { + _ = handler.RemoveInboundUser(ctx, tag, account.GetEmail()) + } if err := handler.AddInboundUser(ctx, tag, accountForAPI(inbound, account)); err != nil { log.Println(err) errMessage.WriteString("\n" + err.Error()) diff --git a/common/service.pb.go b/common/service.pb.go index a4b9a8d..d079f8e 100644 --- a/common/service.pb.go +++ b/common/service.pb.go @@ -1205,6 +1205,7 @@ type Wireguard struct { state protoimpl.MessageState `protogen:"open.v1"` PublicKey string `protobuf:"bytes,1,opt,name=public_key,json=publicKey,proto3" json:"public_key,omitempty"` PeerIps []string `protobuf:"bytes,2,rep,name=peer_ips,json=peerIps,proto3" json:"peer_ips,omitempty"` + PreSharedKey string `protobuf:"bytes,3,opt,name=pre_shared_key,json=preSharedKey,proto3" json:"pre_shared_key,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -1253,6 +1254,13 @@ func (x *Wireguard) GetPeerIps() []string { return nil } +func (x *Wireguard) GetPreSharedKey() string { + if x != nil { + return x.PreSharedKey + } + return "" +} + type Hysteria struct { state protoimpl.MessageState `protogen:"open.v1"` Auth string `protobuf:"bytes,1,opt,name=auth,proto3" json:"auth,omitempty"` @@ -2084,183 +2092,168 @@ func (x *OverrideBalancerTargetRequest) GetTarget() string { var File_common_service_proto protoreflect.FileDescriptor const file_common_service_proto_rawDesc = "" + - "\n" + - "\x14common/service.proto\x12\aservice\"\a\n" + - "\x05Empty\"r\n" + - "\x10BaseInfoResponse\x12\x18\n" + - "\astarted\x18\x01 \x01(\bR\astarted\x12!\n" + - "\fcore_version\x18\x02 \x01(\tR\vcoreVersion\x12!\n" + - "\fnode_version\x18\x03 \x01(\tR\vnodeVersion\"\xba\x01\n" + - "\aBackend\x12(\n" + - "\x04type\x18\x01 \x01(\x0e2\x14.service.BackendTypeR\x04type\x12\x16\n" + - "\x06config\x18\x02 \x01(\tR\x06config\x12#\n" + - "\x05users\x18\x03 \x03(\v2\r.service.UserR\x05users\x12\x1d\n" + - "\n" + - "keep_alive\x18\x04 \x01(\x04R\tkeepAlive\x12)\n" + - "\x10exclude_inbounds\x18\x05 \x03(\tR\x0fexcludeInbounds\"\x1d\n" + - "\x03Log\x12\x16\n" + - "\x06detail\x18\x01 \x01(\tR\x06detail\"X\n" + - "\x04Stat\x12\x12\n" + - "\x04name\x18\x01 \x01(\tR\x04name\x12\x12\n" + - "\x04type\x18\x02 \x01(\tR\x04type\x12\x12\n" + - "\x04link\x18\x03 \x01(\tR\x04link\x12\x14\n" + - "\x05value\x18\x04 \x01(\x03R\x05value\"3\n" + - "\fStatResponse\x12#\n" + - "\x05stats\x18\x01 \x03(\v2\r.service.StatR\x05stats\"^\n" + - "\vStatRequest\x12\x12\n" + - "\x04name\x18\x01 \x01(\tR\x04name\x12\x14\n" + - "\x05reset\x18\x02 \x01(\bR\x05reset\x12%\n" + - "\x04type\x18\x03 \x01(\x0e2\x11.service.StatTypeR\x04type\">\n" + - "\x12OnlineStatResponse\x12\x12\n" + - "\x04name\x18\x01 \x01(\tR\x04name\x12\x14\n" + - "\x05value\x18\x02 \x01(\x03R\x05value\"\xa6\x01\n" + - "\x19StatsOnlineIpListResponse\x12\x12\n" + - "\x04name\x18\x01 \x01(\tR\x04name\x12=\n" + - "\x03ips\x18\x02 \x03(\v2+.service.StatsOnlineIpListResponse.IpsEntryR\x03ips\x1a6\n" + - "\bIpsEntry\x12\x10\n" + - "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + - "\x05value\x18\x02 \x01(\x03R\x05value:\x028\x01\"\xbf\x01\n" + - "\aLatency\x12\x12\n" + - "\x04name\x18\x01 \x01(\tR\x04name\x12\x14\n" + - "\x05alive\x18\x02 \x01(\bR\x05alive\x12\x14\n" + - "\x05delay\x18\x03 \x01(\x03R\x05delay\x12\x12\n" + - "\x04link\x18\x04 \x01(\tR\x04link\x12$\n" + - "\x0elast_seen_time\x18\x05 \x01(\x03R\flastSeenTime\x12\"\n" + - "\rlast_try_time\x18\x06 \x01(\x03R\vlastTryTime\x12\x16\n" + - "\x06source\x18\a \x01(\tR\x06source\"$\n" + - "\x0eLatencyRequest\x12\x12\n" + - "\x04name\x18\x01 \x01(\tR\x04name\"A\n" + - "\x0fLatencyResponse\x12.\n" + - "\tlatencies\x18\x01 \x03(\v2\x10.service.LatencyR\tlatencies\"\xac\x02\n" + - "\x14BackendStatsResponse\x12#\n" + - "\rnum_goroutine\x18\x01 \x01(\rR\fnumGoroutine\x12\x15\n" + - "\x06num_gc\x18\x02 \x01(\rR\x05numGc\x12\x14\n" + - "\x05alloc\x18\x03 \x01(\x04R\x05alloc\x12\x1f\n" + - "\vtotal_alloc\x18\x04 \x01(\x04R\n" + - "totalAlloc\x12\x10\n" + - "\x03sys\x18\x05 \x01(\x04R\x03sys\x12\x18\n" + - "\amallocs\x18\x06 \x01(\x04R\amallocs\x12\x14\n" + - "\x05frees\x18\a \x01(\x04R\x05frees\x12!\n" + - "\flive_objects\x18\b \x01(\x04R\vliveObjects\x12$\n" + - "\x0epause_total_ns\x18\t \x01(\x04R\fpauseTotalNs\x12\x16\n" + - "\x06uptime\x18\n" + - " \x01(\rR\x06uptime\"\x93\x02\n" + - "\x13SystemStatsResponse\x12\x1b\n" + - "\tmem_total\x18\x01 \x01(\x04R\bmemTotal\x12\x19\n" + - "\bmem_used\x18\x02 \x01(\x04R\amemUsed\x12\x1b\n" + - "\tcpu_cores\x18\x03 \x01(\x04R\bcpuCores\x12\x1b\n" + - "\tcpu_usage\x18\x04 \x01(\x01R\bcpuUsage\x128\n" + - "\x18incoming_bandwidth_speed\x18\x05 \x01(\x04R\x16incomingBandwidthSpeed\x128\n" + - "\x18outgoing_bandwidth_speed\x18\x06 \x01(\x04R\x16outgoingBandwidthSpeed\x12\x16\n" + - "\x06uptime\x18\a \x01(\x04R\x06uptime\"\x17\n" + - "\x05Vmess\x12\x0e\n" + - "\x02id\x18\x01 \x01(\tR\x02id\"+\n" + - "\x05Vless\x12\x0e\n" + - "\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n" + - "\x04flow\x18\x02 \x01(\tR\x04flow\"$\n" + - "\x06Trojan\x12\x1a\n" + - "\bpassword\x18\x01 \x01(\tR\bpassword\"A\n" + - "\vShadowsocks\x12\x1a\n" + - "\bpassword\x18\x01 \x01(\tR\bpassword\x12\x16\n" + - "\x06method\x18\x02 \x01(\tR\x06method\"E\n" + - "\tWireguard\x12\x1d\n" + - "\n" + - "public_key\x18\x01 \x01(\tR\tpublicKey\x12\x19\n" + - "\bpeer_ips\x18\x02 \x03(\tR\apeerIps\"\x1e\n" + - "\bHysteria\x12\x12\n" + - "\x04auth\x18\x01 \x01(\tR\x04auth\"\x95\x02\n" + - "\x05Proxy\x12$\n" + - "\x05vmess\x18\x01 \x01(\v2\x0e.service.VmessR\x05vmess\x12$\n" + - "\x05vless\x18\x02 \x01(\v2\x0e.service.VlessR\x05vless\x12'\n" + - "\x06trojan\x18\x03 \x01(\v2\x0f.service.TrojanR\x06trojan\x126\n" + - "\vshadowsocks\x18\x04 \x01(\v2\x14.service.ShadowsocksR\vshadowsocks\x120\n" + - "\twireguard\x18\x05 \x01(\v2\x12.service.WireguardR\twireguard\x12-\n" + - "\bhysteria\x18\x06 \x01(\v2\x11.service.HysteriaR\bhysteria\"b\n" + - "\x04User\x12\x14\n" + - "\x05email\x18\x01 \x01(\tR\x05email\x12(\n" + - "\aproxies\x18\x02 \x01(\v2\x0e.service.ProxyR\aproxies\x12\x1a\n" + - "\binbounds\x18\x03 \x03(\tR\binbounds\",\n" + - "\x05Users\x12#\n" + - "\x05users\x18\x01 \x03(\v2\r.service.UserR\x05users\"[\n" + - "\n" + - "UsersChunk\x12#\n" + - "\x05users\x18\x01 \x03(\v2\r.service.UserR\x05users\x12\x14\n" + - "\x05index\x18\x02 \x01(\x04R\x05index\x12\x12\n" + - "\x04last\x18\x03 \x01(\bR\x04last\"K\n" + - "\vRoutingRule\x12!\n" + - "\foutbound_tag\x18\x01 \x01(\tR\voutboundTag\x12\x19\n" + - "\brule_tag\x18\x02 \x01(\tR\aruleTag\"B\n" + - "\x14RoutingRulesResponse\x12*\n" + - "\x05rules\x18\x01 \x03(\v2\x14.service.RoutingRuleR\x05rules\"'\n" + - "\x13BalancerInfoRequest\x12\x10\n" + - "\x03tag\x18\x01 \x01(\tR\x03tag\"j\n" + - "\x14BalancerInfoResponse\x12'\n" + - "\x0foverride_target\x18\x01 \x01(\tR\x0eoverrideTarget\x12)\n" + - "\x10principle_target\x18\x02 \x03(\tR\x0fprincipleTarget\"\xba\x03\n" + - "\x10TestRouteRequest\x12\x1f\n" + - "\vinbound_tag\x18\x01 \x01(\tR\n" + - "inboundTag\x12\x18\n" + - "\anetwork\x18\x02 \x01(\tR\anetwork\x12\x1b\n" + - "\ttarget_ip\x18\x03 \x01(\tR\btargetIp\x12#\n" + - "\rtarget_domain\x18\x04 \x01(\tR\ftargetDomain\x12\x1f\n" + - "\vtarget_port\x18\x05 \x01(\rR\n" + - "targetPort\x12\x1a\n" + - "\bprotocol\x18\x06 \x01(\tR\bprotocol\x12\x12\n" + - "\x04user\x18\a \x01(\tR\x04user\x12I\n" + - "\n" + - "attributes\x18\b \x03(\v2).service.TestRouteRequest.AttributesEntryR\n" + - "attributes\x12'\n" + - "\x0ffield_selectors\x18\t \x03(\tR\x0efieldSelectors\x12%\n" + - "\x0epublish_result\x18\n" + - " \x01(\bR\rpublishResult\x1a=\n" + - "\x0fAttributesEntry\x12\x10\n" + - "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + - "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\xc0\x01\n" + - "\vRouteResult\x12!\n" + - "\foutbound_tag\x18\x01 \x01(\tR\voutboundTag\x12.\n" + - "\x13outbound_group_tags\x18\x02 \x03(\tR\x11outboundGroupTags\x12\x1f\n" + - "\vinbound_tag\x18\x03 \x01(\tR\n" + - "inboundTag\x12\x18\n" + - "\anetwork\x18\x04 \x01(\tR\anetwork\x12#\n" + - "\rtarget_domain\x18\x05 \x01(\tR\ftargetDomain\"N\n" + - "\x15AddRoutingRuleRequest\x12\x12\n" + - "\x04rule\x18\x01 \x01(\tR\x04rule\x12!\n" + - "\fshould_reset\x18\x02 \x01(\bR\vshouldReset\"5\n" + - "\x18RemoveRoutingRuleRequest\x12\x19\n" + - "\brule_tag\x18\x01 \x01(\tR\aruleTag\"Z\n" + - "\x1dOverrideBalancerTargetRequest\x12!\n" + - "\fbalancer_tag\x18\x01 \x01(\tR\vbalancerTag\x12\x16\n" + - "\x06target\x18\x02 \x01(\tR\x06target*&\n" + - "\vBackendType\x12\b\n" + - "\x04XRAY\x10\x00\x12\r\n" + - "\tWIREGUARD\x10\x01*_\n" + - "\bStatType\x12\r\n" + - "\tOutbounds\x10\x00\x12\f\n" + - "\bOutbound\x10\x01\x12\f\n" + - "\bInbounds\x10\x02\x12\v\n" + - "\aInbound\x10\x03\x12\r\n" + - "\tUsersStat\x10\x04\x12\f\n" + - "\bUserStat\x10\x052\xdc\t\n" + - "\vNodeService\x126\n" + - "\x05Start\x12\x10.service.Backend\x1a\x19.service.BaseInfoResponse\"\x00\x12(\n" + - "\x04Stop\x12\x0e.service.Empty\x1a\x0e.service.Empty\"\x00\x12:\n" + - "\vGetBaseInfo\x12\x0e.service.Empty\x1a\x19.service.BaseInfoResponse\"\x00\x12+\n" + - "\aGetLogs\x12\x0e.service.Empty\x1a\f.service.Log\"\x000\x01\x12@\n" + - "\x0eGetSystemStats\x12\x0e.service.Empty\x1a\x1c.service.SystemStatsResponse\"\x00\x12B\n" + - "\x0fGetBackendStats\x12\x0e.service.Empty\x1a\x1d.service.BackendStatsResponse\"\x00\x129\n" + - "\bGetStats\x12\x14.service.StatRequest\x1a\x15.service.StatResponse\"\x00\x12J\n" + - "\x13GetOutboundsLatency\x12\x17.service.LatencyRequest\x1a\x18.service.LatencyResponse\"\x00\x12I\n" + - "\x12GetUserOnlineStats\x12\x14.service.StatRequest\x1a\x1b.service.OnlineStatResponse\"\x00\x12V\n" + - "\x18GetUserOnlineIpListStats\x12\x14.service.StatRequest\x1a\".service.StatsOnlineIpListResponse\"\x00\x12-\n" + - "\bSyncUser\x12\r.service.User\x1a\x0e.service.Empty\"\x00(\x01\x12-\n" + - "\tSyncUsers\x12\x0e.service.Users\x1a\x0e.service.Empty\"\x00\x12;\n" + - "\x10SyncUsersChunked\x12\x13.service.UsersChunk\x1a\x0e.service.Empty\"\x00(\x01\x12C\n" + - "\x10ListRoutingRules\x12\x0e.service.Empty\x1a\x1d.service.RoutingRulesResponse\"\x00\x12P\n" + - "\x0fGetBalancerInfo\x12\x1c.service.BalancerInfoRequest\x1a\x1d.service.BalancerInfoResponse\"\x00\x12>\n" + - "\tTestRoute\x12\x19.service.TestRouteRequest\x1a\x14.service.RouteResult\"\x00\x12B\n" + - "\x0eAddRoutingRule\x12\x1e.service.AddRoutingRuleRequest\x1a\x0e.service.Empty\"\x00\x12H\n" + - "\x11RemoveRoutingRule\x12!.service.RemoveRoutingRuleRequest\x1a\x0e.service.Empty\"\x00\x12R\n" + - "\x16OverrideBalancerTarget\x12&.service.OverrideBalancerTargetRequest\x1a\x0e.service.Empty\"\x00B#Z!github.com/pasarguard/node/commonb\x06proto3" + "\x0a\x14common/service.proto\x12\x07service\"" + + "\x07\x0a\x05Empty\"r\x0a\x10BaseInfoResponse\x12\x18\x0a\x07" + + "started\x18\x01 \x01(\x08R\x07started\x12!\x0a\x0ccore_v" + + "ersion\x18\x02 \x01(\x09R\x0bcoreVersion\x12!\x0a\x0cnod" + + "e_version\x18\x03 \x01(\x09R\x0bnodeVersion\"\xba\x01\x0a" + + "\x07Backend\x12(\x0a\x04type\x18\x01 \x01(\x0e2\x14.service" + + ".BackendTypeR\x04type\x12\x16\x0a\x06config\x18\x02 \x01" + + "(\x09R\x06config\x12#\x0a\x05users\x18\x03 \x03(\x0b2\x0d.serv" + + "ice.UserR\x05users\x12\x1d\x0a\x0akeep_alive\x18\x04 " + + "\x01(\x04R\x09keepAlive\x12)\x0a\x10exclude_inboun" + + "ds\x18\x05 \x03(\x09R\x0fexcludeInbounds\"\x1d\x0a\x03Log" + + "\x12\x16\x0a\x06detail\x18\x01 \x01(\x09R\x06detail\"X\x0a\x04Stat" + + "\x12\x12\x0a\x04name\x18\x01 \x01(\x09R\x04name\x12\x12\x0a\x04type\x18\x02 \x01" + + "(\x09R\x04type\x12\x12\x0a\x04link\x18\x03 \x01(\x09R\x04link\x12\x14\x0a\x05" + + "value\x18\x04 \x01(\x03R\x05value\"3\x0a\x0cStatRespon" + + "se\x12#\x0a\x05stats\x18\x01 \x03(\x0b2\x0d.service.Stat" + + "R\x05stats\"^\x0a\x0bStatRequest\x12\x12\x0a\x04name\x18\x01" + + " \x01(\x09R\x04name\x12\x14\x0a\x05reset\x18\x02 \x01(\x08R\x05reset" + + "\x12%\x0a\x04type\x18\x03 \x01(\x0e2\x11.service.StatTyp" + + "eR\x04type\">\x0a\x12OnlineStatResponse\x12\x12\x0a" + + "\x04name\x18\x01 \x01(\x09R\x04name\x12\x14\x0a\x05value\x18\x02 \x01(\x03" + + "R\x05value\"\xa6\x01\x0a\x19StatsOnlineIpListRes" + + "ponse\x12\x12\x0a\x04name\x18\x01 \x01(\x09R\x04name\x12=\x0a\x03ips" + + "\x18\x02 \x03(\x0b2+.service.StatsOnlineIpLi" + + "stResponse.IpsEntryR\x03ips\x1a6\x0a\x08IpsE" + + "ntry\x12\x10\x0a\x03key\x18\x01 \x01(\x09R\x03key\x12\x14\x0a\x05value\x18" + + "\x02 \x01(\x03R\x05value:\x028\x01\"\xbf\x01\x0a\x07Latency\x12\x12\x0a\x04" + + "name\x18\x01 \x01(\x09R\x04name\x12\x14\x0a\x05alive\x18\x02 \x01(\x08R" + + "\x05alive\x12\x14\x0a\x05delay\x18\x03 \x01(\x03R\x05delay\x12\x12\x0a\x04" + + "link\x18\x04 \x01(\x09R\x04link\x12$\x0a\x0elast_seen_ti" + + "me\x18\x05 \x01(\x03R\x0clastSeenTime\x12\"\x0a\x0dlast_t" + + "ry_time\x18\x06 \x01(\x03R\x0blastTryTime\x12\x16\x0a\x06so" + + "urce\x18\x07 \x01(\x09R\x06source\"$\x0a\x0eLatencyReq" + + "uest\x12\x12\x0a\x04name\x18\x01 \x01(\x09R\x04name\"A\x0a\x0fLate" + + "ncyResponse\x12.\x0a\x09latencies\x18\x01 \x03(\x0b2\x10" + + ".service.LatencyR\x09latencies\"\xac\x02\x0a\x14" + + "BackendStatsResponse\x12#\x0a\x0dnum_goro" + + "utine\x18\x01 \x01(\x0dR\x0cnumGoroutine\x12\x15\x0a\x06num" + + "_gc\x18\x02 \x01(\x0dR\x05numGc\x12\x14\x0a\x05alloc\x18\x03 \x01(\x04R" + + "\x05alloc\x12\x1f\x0a\x0btotal_alloc\x18\x04 \x01(\x04R\x0atot" + + "alAlloc\x12\x10\x0a\x03sys\x18\x05 \x01(\x04R\x03sys\x12\x18\x0a\x07mal" + + "locs\x18\x06 \x01(\x04R\x07mallocs\x12\x14\x0a\x05frees\x18\x07 \x01" + + "(\x04R\x05frees\x12!\x0a\x0clive_objects\x18\x08 \x01(\x04R" + + "\x0bliveObjects\x12$\x0a\x0epause_total_ns\x18\x09" + + " \x01(\x04R\x0cpauseTotalNs\x12\x16\x0a\x06uptime\x18\x0a \x01" + + "(\x0dR\x06uptime\"\x93\x02\x0a\x13SystemStatsRespon" + + "se\x12\x1b\x0a\x09mem_total\x18\x01 \x01(\x04R\x08memTotal\x12" + + "\x19\x0a\x08mem_used\x18\x02 \x01(\x04R\x07memUsed\x12\x1b\x0a\x09cp" + + "u_cores\x18\x03 \x01(\x04R\x08cpuCores\x12\x1b\x0a\x09cpu_u" + + "sage\x18\x04 \x01(\x01R\x08cpuUsage\x128\x0a\x18incoming" + + "_bandwidth_speed\x18\x05 \x01(\x04R\x16incoming" + + "BandwidthSpeed\x128\x0a\x18outgoing_bandw" + + "idth_speed\x18\x06 \x01(\x04R\x16outgoingBandwi" + + "dthSpeed\x12\x16\x0a\x06uptime\x18\x07 \x01(\x04R\x06uptime" + + "\"\x17\x0a\x05Vmess\x12\x0e\x0a\x02id\x18\x01 \x01(\x09R\x02id\"+\x0a\x05Vle" + + "ss\x12\x0e\x0a\x02id\x18\x01 \x01(\x09R\x02id\x12\x12\x0a\x04flow\x18\x02 \x01(\x09" + + "R\x04flow\"$\x0a\x06Trojan\x12\x1a\x0a\x08password\x18\x01 \x01" + + "(\x09R\x08password\"A\x0a\x0bShadowsocks\x12\x1a\x0a\x08p" + + "assword\x18\x01 \x01(\x09R\x08password\x12\x16\x0a\x06metho" + + "d\x18\x02 \x01(\x09R\x06method\"k\x0a\x09Wireguard\x12\x1d\x0a\x0a" + + "public_key\x18\x01 \x01(\x09R\x09publicKey\x12\x19\x0a\x08p" + + "eer_ips\x18\x02 \x03(\x09R\x07peerIps\x12$\x0a\x0epre_sh" + + "ared_key\x18\x03 \x01(\x09R\x0cpreSharedKey\"\x1e\x0a\x08" + + "Hysteria\x12\x12\x0a\x04auth\x18\x01 \x01(\x09R\x04auth\"\x95\x02\x0a" + + "\x05Proxy\x12$\x0a\x05vmess\x18\x01 \x01(\x0b2\x0e.service." + + "VmessR\x05vmess\x12$\x0a\x05vless\x18\x02 \x01(\x0b2\x0e.se" + + "rvice.VlessR\x05vless\x12'\x0a\x06trojan\x18\x03 \x01" + + "(\x0b2\x0f.service.TrojanR\x06trojan\x126\x0a\x0bs" + + "hadowsocks\x18\x04 \x01(\x0b2\x14.service.Shado" + + "wsocksR\x0bshadowsocks\x120\x0a\x09wireguard" + + "\x18\x05 \x01(\x0b2\x12.service.WireguardR\x09wire" + + "guard\x12-\x0a\x08hysteria\x18\x06 \x01(\x0b2\x11.servic" + + "e.HysteriaR\x08hysteria\"b\x0a\x04User\x12\x14\x0a\x05" + + "email\x18\x01 \x01(\x09R\x05email\x12(\x0a\x07proxies\x18\x02 " + + "\x01(\x0b2\x0e.service.ProxyR\x07proxies\x12\x1a\x0a\x08" + + "inbounds\x18\x03 \x03(\x09R\x08inbounds\",\x0a\x05User" + + "s\x12#\x0a\x05users\x18\x01 \x03(\x0b2\x0d.service.UserR" + + "\x05users\"[\x0a\x0aUsersChunk\x12#\x0a\x05users\x18\x01 " + + "\x03(\x0b2\x0d.service.UserR\x05users\x12\x14\x0a\x05ind" + + "ex\x18\x02 \x01(\x04R\x05index\x12\x12\x0a\x04last\x18\x03 \x01(\x08R\x04l" + + "ast\"K\x0a\x0bRoutingRule\x12!\x0a\x0coutbound_t" + + "ag\x18\x01 \x01(\x09R\x0boutboundTag\x12\x19\x0a\x08rule_ta" + + "g\x18\x02 \x01(\x09R\x07ruleTag\"B\x0a\x14RoutingRules" + + "Response\x12*\x0a\x05rules\x18\x01 \x03(\x0b2\x14.servic" + + "e.RoutingRuleR\x05rules\"'\x0a\x13Balancer" + + "InfoRequest\x12\x10\x0a\x03tag\x18\x01 \x01(\x09R\x03tag\"j\x0a" + + "\x14BalancerInfoResponse\x12'\x0a\x0foverrid" + + "e_target\x18\x01 \x01(\x09R\x0eoverrideTarget\x12)" + + "\x0a\x10principle_target\x18\x02 \x03(\x09R\x0fprinci" + + "pleTarget\"\xba\x03\x0a\x10TestRouteRequest\x12\x1f" + + "\x0a\x0binbound_tag\x18\x01 \x01(\x09R\x0ainboundTag\x12" + + "\x18\x0a\x07network\x18\x02 \x01(\x09R\x07network\x12\x1b\x0a\x09tar" + + "get_ip\x18\x03 \x01(\x09R\x08targetIp\x12#\x0a\x0dtarget" + + "_domain\x18\x04 \x01(\x09R\x0ctargetDomain\x12\x1f\x0a\x0bt" + + "arget_port\x18\x05 \x01(\x0dR\x0atargetPort\x12\x1a\x0a\x08" + + "protocol\x18\x06 \x01(\x09R\x08protocol\x12\x12\x0a\x04user" + + "\x18\x07 \x01(\x09R\x04user\x12I\x0a\x0aattributes\x18\x08 \x03(\x0b" + + "2).service.TestRouteRequest.Attr" + + "ibutesEntryR\x0aattributes\x12'\x0a\x0ffield" + + "_selectors\x18\x09 \x03(\x09R\x0efieldSelectors" + + "\x12%\x0a\x0epublish_result\x18\x0a \x01(\x08R\x0dpublis" + + "hResult\x1a=\x0a\x0fAttributesEntry\x12\x10\x0a\x03ke" + + "y\x18\x01 \x01(\x09R\x03key\x12\x14\x0a\x05value\x18\x02 \x01(\x09R\x05val" + + "ue:\x028\x01\"\xc0\x01\x0a\x0bRouteResult\x12!\x0a\x0coutbou" + + "nd_tag\x18\x01 \x01(\x09R\x0boutboundTag\x12.\x0a\x13out" + + "bound_group_tags\x18\x02 \x03(\x09R\x11outbound" + + "GroupTags\x12\x1f\x0a\x0binbound_tag\x18\x03 \x01(\x09R\x0a" + + "inboundTag\x12\x18\x0a\x07network\x18\x04 \x01(\x09R\x07net" + + "work\x12#\x0a\x0dtarget_domain\x18\x05 \x01(\x09R\x0ctar" + + "getDomain\"N\x0a\x15AddRoutingRuleReque" + + "st\x12\x12\x0a\x04rule\x18\x01 \x01(\x09R\x04rule\x12!\x0a\x0cshould" + + "_reset\x18\x02 \x01(\x08R\x0bshouldReset\"5\x0a\x18Rem" + + "oveRoutingRuleRequest\x12\x19\x0a\x08rule_ta" + + "g\x18\x01 \x01(\x09R\x07ruleTag\"Z\x0a\x1dOverrideBala" + + "ncerTargetRequest\x12!\x0a\x0cbalancer_ta" + + "g\x18\x01 \x01(\x09R\x0bbalancerTag\x12\x16\x0a\x06target\x18\x02" + + " \x01(\x09R\x06target*&\x0a\x0bBackendType\x12\x08\x0a\x04X" + + "RAY\x10\x00\x12\x0d\x0a\x09WIREGUARD\x10\x01*_\x0a\x08StatType" + + "\x12\x0d\x0a\x09Outbounds\x10\x00\x12\x0c\x0a\x08Outbound\x10\x01\x12\x0c\x0a" + + "\x08Inbounds\x10\x02\x12\x0b\x0a\x07Inbound\x10\x03\x12\x0d\x0a\x09User" + + "sStat\x10\x04\x12\x0c\x0a\x08UserStat\x10\x052\xdc\x09\x0a\x0bNodeSe" + + "rvice\x126\x0a\x05Start\x12\x10.service.Backend" + + "\x1a\x19.service.BaseInfoResponse\"\x00\x12(\x0a" + + "\x04Stop\x12\x0e.service.Empty\x1a\x0e.service." + + "Empty\"\x00\x12:\x0a\x0bGetBaseInfo\x12\x0e.service" + + ".Empty\x1a\x19.service.BaseInfoRespons" + + "e\"\x00\x12+\x0a\x07GetLogs\x12\x0e.service.Empty\x1a\x0c" + + ".service.Log\"\x000\x01\x12@\x0a\x0eGetSystemSta" + + "ts\x12\x0e.service.Empty\x1a\x1c.service.Sys" + + "temStatsResponse\"\x00\x12B\x0a\x0fGetBackend" + + "Stats\x12\x0e.service.Empty\x1a\x1d.service." + + "BackendStatsResponse\"\x00\x129\x0a\x08GetSta" + + "ts\x12\x14.service.StatRequest\x1a\x15.servi" + + "ce.StatResponse\"\x00\x12J\x0a\x13GetOutbound" + + "sLatency\x12\x17.service.LatencyReques" + + "t\x1a\x18.service.LatencyResponse\"\x00\x12I\x0a" + + "\x12GetUserOnlineStats\x12\x14.service.St" + + "atRequest\x1a\x1b.service.OnlineStatRe" + + "sponse\"\x00\x12V\x0a\x18GetUserOnlineIpListS" + + "tats\x12\x14.service.StatRequest\x1a\".ser" + + "vice.StatsOnlineIpListResponse\"\x00" + + "\x12-\x0a\x08SyncUser\x12\x0d.service.User\x1a\x0e.se" + + "rvice.Empty\"\x00(\x01\x12-\x0a\x09SyncUsers\x12\x0e.s" + + "ervice.Users\x1a\x0e.service.Empty\"\x00\x12;" + + "\x0a\x10SyncUsersChunked\x12\x13.service.Use" + + "rsChunk\x1a\x0e.service.Empty\"\x00(\x01\x12C\x0a\x10L" + + "istRoutingRules\x12\x0e.service.Empty\x1a" + + "\x1d.service.RoutingRulesResponse\"\x00" + + "\x12P\x0a\x0fGetBalancerInfo\x12\x1c.service.Ba" + + "lancerInfoRequest\x1a\x1d.service.Bala" + + "ncerInfoResponse\"\x00\x12>\x0a\x09TestRoute\x12" + + "\x19.service.TestRouteRequest\x1a\x14.ser" + + "vice.RouteResult\"\x00\x12B\x0a\x0eAddRouting" + + "Rule\x12\x1e.service.AddRoutingRuleReq" + + "uest\x1a\x0e.service.Empty\"\x00\x12H\x0a\x11Remove" + + "RoutingRule\x12!.service.RemoveRout" + + "ingRuleRequest\x1a\x0e.service.Empty\"\x00" + + "\x12R\x0a\x16OverrideBalancerTarget\x12&.ser" + + "vice.OverrideBalancerTargetReque" + + "st\x1a\x0e.service.Empty\"\x00B#Z!github.c" + + "om/pasarguard/node/commonb\x06proto" + + "3" var ( file_common_service_proto_rawDescOnce sync.Once diff --git a/common/service.proto b/common/service.proto index 486396e..f44f0f5 100644 --- a/common/service.proto +++ b/common/service.proto @@ -131,6 +131,7 @@ message Shadowsocks { message Wireguard { string public_key = 1; repeated string peer_ips = 2; + string pre_shared_key = 3; } message Hysteria { diff --git a/go.mod b/go.mod index 4c18ba4..bbea92c 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/joho/godotenv v1.5.1 github.com/shirou/gopsutil/v4 v4.26.6 github.com/vishvananda/netlink v1.3.1 - github.com/xtls/xray-core v1.260327.0 + github.com/xtls/xray-core v1.260327.1-0.20260717222851-6e3322d21914 golang.org/x/sys v0.47.0 golang.zx2c4.com/wireguard/wgctrl v0.0.0-20241231184526-a9ab2273dd10 google.golang.org/grpc v1.82.1 @@ -18,8 +18,8 @@ require ( require ( github.com/andybalholm/brotli v1.1.0 // indirect - github.com/apernet/quic-go v0.59.1-0.20260217092621-db4786c77a22 // indirect - github.com/cloudflare/circl v1.6.3 // indirect + github.com/apernet/quic-go v0.59.1-0.20260425001925-6c6cc9bcb716 // indirect + github.com/cloudflare/circl v1.6.4 // indirect github.com/ebitengine/purego v0.10.0 // indirect github.com/go-ole/go-ole v1.3.0 // indirect github.com/google/btree v1.1.2 // indirect @@ -28,35 +28,42 @@ require ( github.com/josharian/native v1.1.0 // indirect github.com/juju/ratelimit v1.0.2 // indirect github.com/klauspost/compress v1.17.8 // indirect - github.com/klauspost/cpuid/v2 v2.3.0 // indirect + github.com/klauspost/cpuid/v2 v2.4.0 // indirect github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect github.com/mdlayher/genetlink v1.3.2 // indirect github.com/mdlayher/netlink v1.7.2 // indirect github.com/mdlayher/socket v0.5.1 // indirect github.com/miekg/dns v1.1.72 // indirect - github.com/pires/go-proxyproto v0.11.0 // indirect + github.com/pion/dtls/v3 v3.1.4 // indirect + github.com/pion/logging v0.2.4 // indirect + github.com/pion/stun/v3 v3.1.6 // indirect + github.com/pion/transport/v4 v4.0.2 // indirect + github.com/pires/go-proxyproto v0.15.0 // indirect github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 // indirect github.com/quic-go/qpack v0.6.0 // indirect github.com/refraction-networking/utls v1.8.3-0.20260301010127-aa6edf4b11af // indirect + github.com/robfig/cron/v3 v3.0.1 // indirect github.com/rogpeppe/go-internal v1.14.1 // indirect github.com/sagernet/sing v0.5.1 // indirect github.com/sagernet/sing-shadowsocks v0.2.7 // indirect github.com/tklauser/go-sysconf v0.3.16 // indirect github.com/tklauser/numcpus v0.11.0 // indirect github.com/vishvananda/netns v0.0.5 // indirect + github.com/wlynxg/anet v0.0.5 // indirect github.com/xtls/reality v0.0.0-20260322125925-9234c772ba8f // indirect github.com/yusufpapurcu/wmi v1.2.4 // indirect go4.org/netipx v0.0.0-20231129151722-fdeea329fbba // indirect - golang.org/x/crypto v0.52.0 // indirect + golang.org/x/crypto v0.54.0 // indirect golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842 // indirect - golang.org/x/mod v0.35.0 // indirect - golang.org/x/net v0.54.0 // indirect - golang.org/x/sync v0.20.0 // indirect - golang.org/x/text v0.37.0 // indirect - golang.org/x/time v0.12.0 // indirect - golang.org/x/tools v0.44.0 // indirect + golang.org/x/mod v0.37.0 // indirect + golang.org/x/net v0.57.0 // indirect + golang.org/x/sync v0.22.0 // indirect + golang.org/x/text v0.40.0 // indirect + golang.org/x/time v0.14.0 // indirect + golang.org/x/tools v0.47.0 // indirect golang.zx2c4.com/wintun v0.0.0-20230126152724-0fa3db229ce2 // indirect golang.zx2c4.com/wireguard v0.0.0-20250521234502-f333402bd9cb // indirect + golang.zx2c4.com/wireguard/windows v1.0.1 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20260414002931-afd174a4e478 // indirect gvisor.dev/gvisor v0.0.0-20260122175437-89a5d21be8f0 // indirect lukechampine.com/blake3 v1.4.1 // indirect diff --git a/go.sum b/go.sum index b89e408..b1ac3b4 100644 --- a/go.sum +++ b/go.sum @@ -2,15 +2,15 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/andybalholm/brotli v1.1.0 h1:eLKJA0d02Lf0mVpIDgYnqXcUn0GqVmEFny3VuID1U3M= github.com/andybalholm/brotli v1.1.0/go.mod h1:sms7XGricyQI9K10gOSf56VKKWS4oLer58Q+mhRPtnY= -github.com/apernet/quic-go v0.59.1-0.20260217092621-db4786c77a22 h1:00ziBGnLWQEcR9LThDwvxOznJJquJ9bYUdmBFnawLMU= -github.com/apernet/quic-go v0.59.1-0.20260217092621-db4786c77a22/go.mod h1:Npbg8qBtAZlsAB3FWmqwlVh5jtVG6a4DlYsOylUpvzA= +github.com/apernet/quic-go v0.59.1-0.20260425001925-6c6cc9bcb716 h1:J1O+xpLuJWkdYbw5JPGwBqIHs2J8tiEP7Py9lPqkN2I= +github.com/apernet/quic-go v0.59.1-0.20260425001925-6c6cc9bcb716/go.mod h1:Npbg8qBtAZlsAB3FWmqwlVh5jtVG6a4DlYsOylUpvzA= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cloudflare/circl v1.6.3 h1:9GPOhQGF9MCYUeXyMYlqTR6a5gTrgR/fBLXvUgtVcg8= -github.com/cloudflare/circl v1.6.3/go.mod h1:2eXP6Qfat4O/Yhh8BznvKnJ+uzEoTQ6jVKJRn81BiS4= +github.com/cloudflare/circl v1.6.4 h1:pOXuDTCEYyzydgUpQ0CQz3LsinKjiSk6nNP5Lt5K64U= +github.com/cloudflare/circl v1.6.4/go.mod h1:YxarevkLlbaHuWsxG6vmYNWBEsSp4pnp7j+4VljMavY= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= @@ -67,8 +67,8 @@ github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU= github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= -github.com/klauspost/cpuid/v2 v2.3.0 h1:S4CRMLnYUhGeDFDqkGriYKdfoFlDnMtqTiI/sFzhA9Y= -github.com/klauspost/cpuid/v2 v2.3.0/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0= +github.com/klauspost/cpuid/v2 v2.4.0 h1:S6Hrbc7+ywsr0r+RLapfGBHfyefhCTwEh3A0tV913Dw= +github.com/klauspost/cpuid/v2 v2.4.0/go.mod h1:19jmZ9mjzoF//ddRSUsv0zfBTJWh3QJh9FNxZTMrGxU= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= @@ -92,8 +92,16 @@ github.com/mikioh/ipaddr v0.0.0-20190404000644-d465c8ab6721/go.mod h1:Ickgr2WtCL github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8= github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= -github.com/pires/go-proxyproto v0.11.0 h1:gUQpS85X/VJMdUsYyEgyn59uLJvGqPhJV5YvG68wXH4= -github.com/pires/go-proxyproto v0.11.0/go.mod h1:ZKAAyp3cgy5Y5Mo4n9AlScrkCZwUy0g3Jf+slqQVcuU= +github.com/pion/dtls/v3 v3.1.4 h1:QhvtMflMfu9Kf0RcDC5BJBle4caPskByrKQR6uuYqpY= +github.com/pion/dtls/v3 v3.1.4/go.mod h1:cr/qotLISUw/9C1m83ZPNZtj9WnXkYLpfCptPqbkInc= +github.com/pion/logging v0.2.4 h1:tTew+7cmQ+Mc1pTBLKH2puKsOvhm32dROumOZ655zB8= +github.com/pion/logging v0.2.4/go.mod h1:DffhXTKYdNZU+KtJ5pyQDjvOAh/GsNSyv1lbkFbe3so= +github.com/pion/stun/v3 v3.1.6 h1:WnhsD0eHCiwCfKNkVx0VJJwr2Y3eV4Ueih3KJ+dfZy8= +github.com/pion/stun/v3 v3.1.6/go.mod h1:zRUghXSQU32Lx5orJsz3uYMkIihweXb3mu5gIns02fs= +github.com/pion/transport/v4 v4.0.2 h1:ifYlPqNwsy6aKQ9y8yzxXlHae5431ZrH2avkD/Rn6Tk= +github.com/pion/transport/v4 v4.0.2/go.mod h1:06hFI+jCFcok2X2MekVufNZ/uzNZXivGBPfviSVcjgM= +github.com/pires/go-proxyproto v0.15.0 h1:dTshmNbFm/D+0+sbrxUuddPOZ5Y0B7c5NhtsBkm6LqI= +github.com/pires/go-proxyproto v0.15.0/go.mod h1:OXsCrKwrK2tXS9YrI5tkHx5xaQlO8FH3lFW76orFh24= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= @@ -104,6 +112,8 @@ github.com/quic-go/qpack v0.6.0 h1:g7W+BMYynC1LbYLSqRt8PBg5Tgwxn214ZZR34VIOjz8= github.com/quic-go/qpack v0.6.0/go.mod h1:lUpLKChi8njB4ty2bFLX2x4gzDqXwUpaO1DP9qMDZII= github.com/refraction-networking/utls v1.8.3-0.20260301010127-aa6edf4b11af h1:er2acxbi3N1nvEq6HXHUAR1nTWEJmQfqiGR8EVT9rfs= github.com/refraction-networking/utls v1.8.3-0.20260301010127-aa6edf4b11af/go.mod h1:jkSOEkLqn+S/jtpEHPOsVv/4V4EVnelwbMQl4vCWXAM= +github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs= +github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= github.com/sagernet/sing v0.5.1 h1:mhL/MZVq0TjuvHcpYcFtmSD1BFOxZ/+8ofbNZcg1k1Y= @@ -129,10 +139,12 @@ github.com/vishvananda/netlink v1.3.1 h1:3AEMt62VKqz90r0tmNhog0r/PpWKmrEShJU0wJW github.com/vishvananda/netlink v1.3.1/go.mod h1:ARtKouGSTGchR8aMwmkzC0qiNPrrWO5JS/XMVl45+b4= github.com/vishvananda/netns v0.0.5 h1:DfiHV+j8bA32MFM7bfEunvT8IAqQ/NzSJHtcmW5zdEY= github.com/vishvananda/netns v0.0.5/go.mod h1:SpkAiCQRtJ6TvvxPnOSyH3BMl6unz3xZlaprSwhNNJM= +github.com/wlynxg/anet v0.0.5 h1:J3VJGi1gvo0JwZ/P1/Yc/8p63SoW98B5dHkYDmpgvvU= +github.com/wlynxg/anet v0.0.5/go.mod h1:eay5PRQr7fIVAMbTbchTnO9gG65Hg/uYGdc7mguHxoA= github.com/xtls/reality v0.0.0-20260322125925-9234c772ba8f h1:iy2JRioxmUpoJ3SzbFPyTxHZMbR/rSHP7dOOgYaq1O8= github.com/xtls/reality v0.0.0-20260322125925-9234c772ba8f/go.mod h1:DsJblcWDGt76+FVqBVwbwRhxyyNJsGV48gJLch0OOWI= -github.com/xtls/xray-core v1.260327.0 h1:g4TzxMwyPrxslZh6uD+FiG3lXKTrnNO+b4ky2OhogHE= -github.com/xtls/xray-core v1.260327.0/go.mod h1:OXMlhBloFry8mw0KwWLWLd3RQyXJzEYsCGlgsX36h60= +github.com/xtls/xray-core v1.260327.1-0.20260717222851-6e3322d21914 h1:0CsKmqovoq9ozr7kfcfbuqCPMY9RDJcW9Q2M4kcGEEE= +github.com/xtls/xray-core v1.260327.1-0.20260717222851-6e3322d21914/go.mod h1:wukQoBGnQ6GaLTGuKwv8rCTgf80QxPj+6iznDZHQEWo= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0= @@ -160,8 +172,8 @@ go4.org/netipx v0.0.0-20231129151722-fdeea329fbba/go.mod h1:PLyyIXexvUFg3Owu6p/W golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.52.0 h1:RMs7fP2rXdep0CftQlK8Uf+kibLm7qkCcradZWYz988= -golang.org/x/crypto v0.52.0/go.mod h1:1QgfPxDqh0T2M/elOJtp9RvuR95kVjir0e6/BvEmGbc= +golang.org/x/crypto v0.54.0 h1:YLIA59K4fiNzHzjnZt2tUJQjQtUWfWbeHBqKtk3eScw= +golang.org/x/crypto v0.54.0/go.mod h1:KWL8ny2AZdGR2cWmzeHrp2azQPGogOv+HeQaVEXC2dk= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842 h1:vr/HnozRka3pE4EsMEg1lgkXJkTFJCVUX+S/ZT6wYzM= golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842/go.mod h1:XtvwrStGgqGPLc4cjQfWqZHG1YFdYs6swckp8vpsjnc= @@ -171,8 +183,8 @@ golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHl golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.35.0 h1:Ww1D637e6Pg+Zb2KrWfHQUnH2dQRLBQyAtpr/haaJeM= -golang.org/x/mod v0.35.0/go.mod h1:+GwiRhIInF8wPm+4AoT6L0FA1QWAad3OMdTRx4tFYlU= +golang.org/x/mod v0.37.0 h1:vF1DjpVEshcIqoEaauuHebaLk1O1forxjxBaVn884JQ= +golang.org/x/mod v0.37.0/go.mod h1:m8S8VeM9r4dzDwjrKO0a1sZP3YjeMamRRlD+fmR2Q/0= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -181,16 +193,16 @@ golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.54.0 h1:2zJIZAxAHV/OHCDTCOHAYehQzLfSXuf/5SoL/Dv6w/w= -golang.org/x/net v0.54.0/go.mod h1:Sj4oj8jK6XmHpBZU/zWHw3BV3abl4Kvi+Ut7cQcY+cQ= +golang.org/x/net v0.57.0 h1:K5+3DljvIuDG9/Jv9rvyMywYNFCQ9RSUY6OOTTkT+tE= +golang.org/x/net v0.57.0/go.mod h1:KpXc8iv+r3XplLAG/f7Jsf9RPszJzdR0f58q9vGOuEU= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4= -golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= +golang.org/x/sync v0.22.0 h1:SZjpbeLmrCk4xhRSZFNZW5gFUeCeFgjekvI/+gfScek= +golang.org/x/sync v0.22.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -206,10 +218,10 @@ golang.org/x/sys v0.47.0 h1:o7XGOvZQCADBQQ4Y7VNq2dRWQR7JmOUW8Kxx4ZsNgWs= golang.org/x/sys v0.47.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.37.0 h1:Cqjiwd9eSg8e0QAkyCaQTNHFIIzWtidPahFWR83rTrc= -golang.org/x/text v0.37.0/go.mod h1:a5sjxXGs9hsn/AJVwuElvCAo9v8QYLzvavO5z2PiM38= -golang.org/x/time v0.12.0 h1:ScB/8o8olJvc+CQPWrK3fPZNfh7qgwCrY0zJmoEQLSE= -golang.org/x/time v0.12.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg= +golang.org/x/text v0.40.0 h1:Ub2Z6/xjgF1WrYQz2nuITOEegKFtiIy+rieRJ5lHZKs= +golang.org/x/text v0.40.0/go.mod h1:hpnzDAfGV753zIKo+wk3u1bVKCGPbrnF7+7LBF/UHVY= +golang.org/x/time v0.14.0 h1:MRx4UaLrDotUKUdCIqzPC48t1Y9hANFKIRpNx+Te8PI= +golang.org/x/time v0.14.0/go.mod h1:eL/Oa2bBBK0TkX57Fyni+NgnyQQN4LitPmob2Hjnqw4= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= @@ -219,8 +231,8 @@ golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.44.0 h1:UP4ajHPIcuMjT1GqzDWRlalUEoY+uzoZKnhOjbIPD2c= -golang.org/x/tools v0.44.0/go.mod h1:KA0AfVErSdxRZIsOVipbv3rQhVXTnlU6UhKxHd1seDI= +golang.org/x/tools v0.47.0 h1:7Kn5x/d1svx/PzryTsqeoZN4TZwqeH5pGWjefhLi/1Q= +golang.org/x/tools v0.47.0/go.mod h1:dFHnyTvFWY212G+h7ZY4Vsp/K3U4/7W9TyVaAul8uCA= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -231,6 +243,8 @@ golang.zx2c4.com/wireguard v0.0.0-20250521234502-f333402bd9cb h1:whnFRlWMcXI9d+Z golang.zx2c4.com/wireguard v0.0.0-20250521234502-f333402bd9cb/go.mod h1:rpwXGsirqLqN2L0JDJQlwOboGHmptD5ZD6T2VmcqhTw= golang.zx2c4.com/wireguard/wgctrl v0.0.0-20241231184526-a9ab2273dd10 h1:3GDAcqdIg1ozBNLgPy4SLT84nfcBjr6rhGtXYtrkWLU= golang.zx2c4.com/wireguard/wgctrl v0.0.0-20241231184526-a9ab2273dd10/go.mod h1:T97yPqesLiNrOYxkwmhMI0ZIlJDm+p0PMR8eRVeR5tQ= +golang.zx2c4.com/wireguard/windows v1.0.1 h1:eOxiDVbywPC+ZQqvdCK7x+ZwWXKbYv50TtH8ysFIbw8= +golang.zx2c4.com/wireguard/windows v1.0.1/go.mod h1:+fbT3FFdX4zzYDLwJh5+HPEcNN/3HyNdzhNSVsQM+zs= gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4= gonum.org/v1/gonum v0.17.0/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=