Sfoglia il codice sorgente

fix(warp): persist client_id so WARP outbound gets reserved bytes (#4781)

RegWarp now stores config.client_id from the Cloudflare registration, and WarpModal sources the reserved bytes from the live config response (falling back to stored creds). Previously reservedFor read an always-missing client_id, producing an empty reserved array.
MHSanaei 2 giorni fa
parent
commit
3657ed55dc
2 ha cambiato i file con 7 aggiunte e 1 eliminazioni
  1. 2 1
      frontend/src/pages/xray/overrides/WarpModal.tsx
  2. 5 0
      web/service/warp.go

+ 2 - 1
frontend/src/pages/xray/overrides/WarpModal.tsx

@@ -38,6 +38,7 @@ interface WarpConfig {
   model?: string;
   enabled?: boolean;
   config?: {
+    client_id?: string;
     interface?: { addresses?: { v4?: string; v6?: string } };
     peers?: { public_key?: string; endpoint?: { host?: string } }[];
   };
@@ -99,7 +100,7 @@ export default function WarpModal({
         mtu: 1420,
         secretKey: data?.private_key,
         address: addressesFor(cfg.interface?.addresses || {}),
-        reserved: reservedFor(data?.client_id),
+        reserved: reservedFor(cfg.client_id ?? data?.client_id),
         domainStrategy: 'ForceIP',
         peers: [{ publicKey: peer.public_key, endpoint: peer.endpoint?.host }],
         noKernelTun: false,

+ 5 - 0
web/service/warp.go

@@ -106,6 +106,11 @@ func (s *WarpService) RegWarp(secretKey string, publicKey string) (string, error
 		"license_key":  license,
 		"private_key":  secretKey,
 	}
+	if config, ok := rsp["config"].(map[string]any); ok {
+		if clientID, ok := config["client_id"].(string); ok {
+			warpData["client_id"] = clientID
+		}
+	}
 	warpJSON, err := json.MarshalIndent(warpData, "", "  ")
 	if err != nil {
 		return "", err