fix(inbounds): accept masque in the inbound protocol validator

The inbound add and update handlers bind the body into model.Inbound and
validate Protocol against a oneof list that predates MASQUE, so every
save of a MASQUE inbound from the panel or the API failed validation
even though the rest of the stack (b04039c2) handles the protocol.
Add masque to the list and regenerate the schemas and OpenAPI document
that mirror it.
This commit is contained in:
MHSanaei
2026-10-11 10:56:47 +02:00
parent da6872a3b8
commit 00aaef386f
6 changed files with 26 additions and 5 deletions
+1 -1
View File
@@ -65,7 +65,7 @@ type Inbound struct {
// Xray configuration fields
Listen string `json:"listen" form:"listen"`
Port int `json:"port" form:"port" validate:"gte=0,lte=65535" example:"443"`
Protocol Protocol `json:"protocol" form:"protocol" validate:"required,oneof=vmess vless trojan shadowsocks wireguard hysteria http mixed tunnel tun mtproto amneziawg tuic" example:"vless"`
Protocol Protocol `json:"protocol" form:"protocol" validate:"required,oneof=vmess vless trojan shadowsocks wireguard hysteria http mixed tunnel tun mtproto amneziawg tuic masque" example:"vless"`
Settings string `json:"settings" form:"settings"`
StreamSettings string `json:"streamSettings" form:"streamSettings"`
Tag string `json:"tag" form:"tag" gorm:"unique" example:"in-443-tcp"`
@@ -0,0 +1,18 @@
package middleware
import (
"testing"
"github.com/mhsanaei/3x-ui/v3/internal/database/model"
)
// The inbound add/update handlers validate the body with this validator, so a protocol
// missing from Inbound.Protocol's oneof makes every save of that protocol fail.
func TestValidateAcceptsMasqueInboundProtocol(t *testing.T) {
if err := validate.StructPartial(model.Inbound{Protocol: model.MASQUE}, "Protocol"); err != nil {
t.Fatalf("validate rejected a masque inbound: %v", err)
}
if err := validate.StructPartial(model.Inbound{Protocol: "dokodemo"}, "Protocol"); err == nil {
t.Fatal("validate accepted an unknown protocol; the oneof no longer guards it")
}
}