|
|
@@ -5,6 +5,7 @@ import (
|
|
|
"encoding/json"
|
|
|
"errors"
|
|
|
"fmt"
|
|
|
+ "net"
|
|
|
"reflect"
|
|
|
"strconv"
|
|
|
"strings"
|
|
|
@@ -717,6 +718,28 @@ func (s *SettingService) GetDefaultXrayConfig() (any, error) {
|
|
|
return jsonData, nil
|
|
|
}
|
|
|
|
|
|
+func extractHostname(host string) string {
|
|
|
+ h, _, err := net.SplitHostPort(host)
|
|
|
+ // Err is not nil means host does not contain port
|
|
|
+ if err != nil {
|
|
|
+ h = host
|
|
|
+ }
|
|
|
+
|
|
|
+ ip := net.ParseIP(h)
|
|
|
+ // If it's not an IP, return as is
|
|
|
+ if ip == nil {
|
|
|
+ return h
|
|
|
+ }
|
|
|
+
|
|
|
+ // If it's an IPv4, return as is
|
|
|
+ if ip.To4() != nil {
|
|
|
+ return h
|
|
|
+ }
|
|
|
+
|
|
|
+ // IPv6 needs bracketing
|
|
|
+ return "[" + h + "]"
|
|
|
+}
|
|
|
+
|
|
|
func (s *SettingService) GetDefaultSettings(host string) (any, error) {
|
|
|
type settingFunc func() (any, error)
|
|
|
settings := map[string]settingFunc{
|
|
|
@@ -767,7 +790,7 @@ func (s *SettingService) GetDefaultSettings(host string) (any, error) {
|
|
|
subTLS = true
|
|
|
}
|
|
|
if subDomain == "" {
|
|
|
- subDomain = strings.Split(host, ":")[0]
|
|
|
+ subDomain = extractHostname(host)
|
|
|
}
|
|
|
if subTLS {
|
|
|
subURI = "https://"
|