mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2026-11-15 09:35:00 +03:00
fix(inbounds): reject incompatible VLESS fallbacks and prevent Xray crashes (#7003)
Xray refuses a VLESS inbound with server decryption whenever fallbacks is non-nil, even an empty list, so an API or imported inbound with decryption and fallbacks: [] took every inbound down. Empty fallback arrays are now normalized away on add, update, config build and node push; non-empty ones are refused with decryption, enabling decryption over stored fallback rules is refused, and a legacy conflicting row holds back the running core instead of stopping it. The form, API docs and locales follow. Closes #7001.
This commit is contained in:
@@ -214,6 +214,12 @@ func (s *XrayService) GetXrayConfig() (*xray.Config, error) {
|
||||
if inbound.Protocol == model.MTProto || inbound.Protocol == model.AmneziaWG || inbound.Protocol == model.TUIC {
|
||||
continue
|
||||
}
|
||||
if err := normalizeVlessFallbacks(inbound); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if err := validateVlessManagedFallbacks(nil, inbound); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
settings := map[string]any{}
|
||||
_ = json.Unmarshal([]byte(inbound.Settings), &settings)
|
||||
flowAllowed := !inbound.DisableFlow &&
|
||||
@@ -1503,6 +1509,9 @@ func (s *XrayService) RestartXray(isForce bool) error {
|
||||
|
||||
xrayConfig, err := s.GetXrayConfig()
|
||||
if err != nil {
|
||||
if process := currentXrayProcess(); process != nil && process.IsRunning() {
|
||||
xrayState.holdBack(fmt.Sprintf("config refused: %v", err))
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user