Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/MHSanaei/3x-ui.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--database/model/model.go2
-rw-r--r--web/controller/inbound.go12
-rw-r--r--web/service/inbound.go31
3 files changed, 37 insertions, 8 deletions
diff --git a/database/model/model.go b/database/model/model.go
index c9f9c105..e2d54436 100644
--- a/database/model/model.go
+++ b/database/model/model.go
@@ -37,7 +37,7 @@ type Inbound struct {
// config part
Listen string `json:"listen" form:"listen"`
- Port int `json:"port" form:"port" gorm:"unique"`
+ Port int `json:"port" form:"port"`
Protocol Protocol `json:"protocol" form:"protocol"`
Settings string `json:"settings" form:"settings"`
StreamSettings string `json:"streamSettings" form:"streamSettings"`
diff --git a/web/controller/inbound.go b/web/controller/inbound.go
index 123c486f..86da9813 100644
--- a/web/controller/inbound.go
+++ b/web/controller/inbound.go
@@ -85,7 +85,11 @@ func (a *InboundController) addInbound(c *gin.Context) {
}
user := session.GetLoginUser(c)
inbound.UserId = user.Id
- inbound.Tag = fmt.Sprintf("inbound-%v", inbound.Port)
+ if inbound.Listen == "" || inbound.Listen == "0.0.0.0" || inbound.Listen == "::" || inbound.Listen == "::0" {
+ inbound.Tag = fmt.Sprintf("inbound-0.0.0.0:%v", inbound.Port)
+ } else {
+ inbound.Tag = fmt.Sprintf("inbound-%v:%v", inbound.Listen, inbound.Port)
+ }
needRestart := false
inbound, needRestart, err = a.inboundService.AddInbound(inbound)
@@ -278,7 +282,11 @@ func (a *InboundController) importInbound(c *gin.Context) {
user := session.GetLoginUser(c)
inbound.Id = 0
inbound.UserId = user.Id
- inbound.Tag = fmt.Sprintf("inbound-%v", inbound.Port)
+ if inbound.Listen == "" || inbound.Listen == "0.0.0.0" || inbound.Listen == "::" || inbound.Listen == "::0" {
+ inbound.Tag = fmt.Sprintf("inbound-0.0.0.0:%v", inbound.Port)
+ } else {
+ inbound.Tag = fmt.Sprintf("inbound-%v:%v", inbound.Listen, inbound.Port)
+ }
for index := range inbound.ClientStats {
inbound.ClientStats[index].Id = 0
diff --git a/web/service/inbound.go b/web/service/inbound.go
index 30619791..2a4966ab 100644
--- a/web/service/inbound.go
+++ b/web/service/inbound.go
@@ -38,9 +38,25 @@ func (s *InboundService) GetAllInbounds() ([]*model.Inbound, error) {
return inbounds, nil
}
-func (s *InboundService) checkPortExist(port int, ignoreId int) (bool, error) {
+func (s *InboundService) checkPortExist(listen string, port int, ignoreId int) (bool, error) {
db := database.GetDB()
- db = db.Model(model.Inbound{}).Where("port = ?", port)
+ if listen == "" || listen == "0.0.0.0" || listen == "::" || listen == "::0" {
+ db = db.Model(model.Inbound{}).Where("port = ?", port)
+ } else {
+ db = db.Model(model.Inbound{}).
+ Where("port = ?", port).
+ Where(
+ db.Model(model.Inbound{}).Where(
+ "listen = ?", listen,
+ ).Or(
+ "listen = \"\"",
+ ).Or(
+ "listen = \"0.0.0.0\"",
+ ).Or(
+ "listen = \"::\"",
+ ).Or(
+ "listen = \"::0\""))
+ }
if ignoreId > 0 {
db = db.Where("id != ?", ignoreId)
}
@@ -135,7 +151,7 @@ func (s *InboundService) checkEmailExistForInbound(inbound *model.Inbound) (stri
}
func (s *InboundService) AddInbound(inbound *model.Inbound) (*model.Inbound, bool, error) {
- exist, err := s.checkPortExist(inbound.Port, 0)
+ exist, err := s.checkPortExist(inbound.Listen, inbound.Port, 0)
if err != nil {
return inbound, false, err
}
@@ -252,7 +268,7 @@ func (s *InboundService) GetInbound(id int) (*model.Inbound, error) {
}
func (s *InboundService) UpdateInbound(inbound *model.Inbound) (*model.Inbound, bool, error) {
- exist, err := s.checkPortExist(inbound.Port, inbound.Id)
+ exist, err := s.checkPortExist(inbound.Listen, inbound.Port, inbound.Id)
if err != nil {
return inbound, false, err
}
@@ -295,7 +311,12 @@ func (s *InboundService) UpdateInbound(inbound *model.Inbound) (*model.Inbound,
oldInbound.Settings = inbound.Settings
oldInbound.StreamSettings = inbound.StreamSettings
oldInbound.Sniffing = inbound.Sniffing
- oldInbound.Tag = fmt.Sprintf("inbound-%v", inbound.Port)
+ if inbound.Listen == "" || inbound.Listen == "0.0.0.0" || inbound.Listen == "::" || inbound.Listen == "::0" {
+ oldInbound.Tag = fmt.Sprintf("inbound-0.0.0.0:%v", inbound.Port)
+ } else {
+ oldInbound.Tag = fmt.Sprintf("inbound-%v:%v", inbound.Listen, inbound.Port)
+ }
+
needRestart := false
s.xrayApi.Init(p.GetAPIPort())