diff --git a/app/Utils/QuantumultX.php b/app/Utils/QuantumultX.php index de0b7fb3..53f22bb9 100644 --- a/app/Utils/QuantumultX.php +++ b/app/Utils/QuantumultX.php @@ -7,26 +7,43 @@ class QuantumultX { public static function buildVmess($uuid, $server) { - $uri = "vmess=" . $server->host . ":" . $server->port . ", method=none, password=" . $uuid . ", fast-open=false, udp-relay=false, tag=" . $server->name; - if ($server->tls) { - $tlsSettings = json_decode($server->tlsSettings); - if ($server->network === 'tcp') $uri .= ', obfs=over-tls'; - if (isset($tlsSettings->allowInsecure)) { - // Default: tls-verification=true - $uri .= ', tls-verification=' . ($tlsSettings->allowInsecure ? "false" : "true"); - } - if (isset($tlsSettings->serverName)) { - $uri .= ', obfs-host=' . $tlsSettings->serverName; + $config = [ + "vmess={$server->host}:{$server->port}", + "method=chacha20-poly1305", + "password={$uuid}", + "tag={$server->name}" + ]; + if ($server->network === 'tcp') { + if ($server->tls) { + $tlsSettings = json_decode($server->tlsSettings); + array_push($config, 'obfs=over-tls'); + if (isset($tlsSettings->allowInsecure)) { + array_push($config, $server->allow_insecure ? 'tls-verification=true' : 'tls-verification=false'); + } + if (isset($tlsSettings->serverName)) { + array_push($config, "obfs-host={$tlsSettings->serverName}"); + } } } + if ($server->network === 'ws') { - $uri .= ', obfs=' . ($server->tls ? 'wss' : 'ws'); + if ($server->tls) { + $tlsSettings = json_decode($server->tlsSettings); + array_push($config, 'obfs=wss'); + if (isset($tlsSettings->allowInsecure)) { + array_push($config, $server->allow_insecure ? 'tls-verification=true' : 'tls-verification=false'); + } + } else { + array_push($config, 'obfs=ws'); + } if ($server->networkSettings) { $wsSettings = json_decode($server->networkSettings); - if (isset($wsSettings->path)) $uri .= ', obfs-uri=' . $wsSettings->path; - if (isset($wsSettings->headers->Host)) $uri .= ', obfs-host=' . $wsSettings->headers->Host; + if (isset($wsSettings->path)) array_push($config, "obfs-uri={$wsSettings->path}"); + if (isset($wsSettings->headers->Host)) array_push($config, "obfs-host={$wsSettings->headers->Host}"); } } + + $uri = implode($config, ','); $uri .= "\r\n"; return $uri; }