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--install.sh1
-rw-r--r--main.go16
-rw-r--r--web/service/inbound.go45
-rw-r--r--web/service/xray.go3
4 files changed, 62 insertions, 3 deletions
diff --git a/install.sh b/install.sh
index df74a0cf..22ea186a 100644
--- a/install.sh
+++ b/install.sh
@@ -70,6 +70,7 @@ install_base() {
#This function will be called when user installed x-ui out of sercurity
config_after_install() {
+ /usr/local/x-ui/x-ui migrate
echo -e "${yellow}Install/update finished! For security it's recommended to modify panel settings ${plain}"
read -p "Do you want to continue with the modification [y/n]? ": config_confirm
if [[ x"${config_confirm}" == x"y" || x"${config_confirm}" == x"Y" ]]; then
diff --git a/main.go b/main.go
index 710b80d4..54ff6bf3 100644
--- a/main.go
+++ b/main.go
@@ -204,6 +204,19 @@ func updateSetting(port int, username string, password string) {
}
}
+func migrateDb() {
+ inboundService := service.InboundService{}
+
+ err := database.InitDB(config.GetDBPath())
+ if err != nil {
+ log.Fatal(err)
+ }
+ fmt.Println("Start migrating database...")
+ inboundService.MigrationRequirements()
+ inboundService.RemoveOrphanedTraffics()
+ fmt.Println("Migration done!")
+}
+
func removeSecret() {
err := database.InitDB(config.GetDBPath())
if err != nil {
@@ -265,6 +278,7 @@ func main() {
fmt.Println("Commands:")
fmt.Println(" run run web panel")
fmt.Println(" v2-ui migrate form v2-ui")
+ fmt.Println(" migrate migrate form other/old x-ui")
fmt.Println(" setting set settings")
}
@@ -282,6 +296,8 @@ func main() {
return
}
runWebServer()
+ case "migrate":
+ migrateDb()
case "v2-ui":
err := v2uiCmd.Parse(os.Args[2:])
if err != nil {
diff --git a/web/service/inbound.go b/web/service/inbound.go
index fac6fc47..3f736470 100644
--- a/web/service/inbound.go
+++ b/web/service/inbound.go
@@ -528,14 +528,17 @@ func (s *InboundService) adjustTraffics(tx *gorm.DB, dbClientTraffics []*xray.Cl
if err != nil {
return nil, err
}
+
inbounds[inbound_index].Settings = string(modifiedSettings)
+ }
}
err = tx.Save(inbounds).Error
if err != nil {
logger.Warning("AddClientTraffic update inbounds ", err)
logger.Error(inbounds)
- }
+ }
}
+
return dbClientTraffics, nil
}
@@ -778,3 +781,43 @@ func (s *InboundService) SearchInbounds(query string) ([]*model.Inbound, error)
}
return inbounds, nil
}
+func (s *InboundService) MigrationRequirements() {
+ db := database.GetDB()
+ var inbounds []*model.Inbound
+ err := db.Model(model.Inbound{}).Where("protocol IN (?)", []string{"vmess", "vless", "trojan"}).Find(&inbounds).Error
+ if err != nil && err != gorm.ErrRecordNotFound {
+ return
+ }
+ for inbound_index := range inbounds {
+ settings := map[string]interface{}{}
+ json.Unmarshal([]byte(inbounds[inbound_index].Settings), &settings)
+ clients, ok := settings["clients"].([]interface{})
+ if ok {
+ var newClients []interface{}
+ for client_index := range clients {
+ c := clients[client_index].(map[string]interface{})
+
+ // Add email='' if it is not exists
+ if _, ok := c["email"]; !ok {
+ c["email"] = ""
+ }
+
+ // Remove "flow": "xtls-rprx-direct"
+ if _, ok := c["flow"]; ok {
+ if c["flow"] == "xtls-rprx-direct" {
+ c["flow"] = ""
+ }
+ }
+ newClients = append(newClients, interface{}(c))
+ }
+ settings["clients"] = newClients
+ modifiedSettings, err := json.MarshalIndent(settings, "", " ")
+ if err != nil {
+ return
+ }
+
+ inbounds[inbound_index].Settings = string(modifiedSettings)
+ }
+ }
+ db.Save(inbounds)
+}
diff --git a/web/service/xray.go b/web/service/xray.go
index 9c23f7a4..6008a493 100644
--- a/web/service/xray.go
+++ b/web/service/xray.go
@@ -69,7 +69,6 @@ func (s *XrayService) GetXrayConfig() (*xray.Config, error) {
}
s.inboundService.DisableInvalidClients()
- s.inboundService.RemoveOrphanedTraffics()
inbounds, err := s.inboundService.GetAllInbounds()
if err != nil {
@@ -124,7 +123,7 @@ func (s *XrayService) GetXrayConfig() (*xray.Config, error) {
}
settings["clients"] = final_clients
- modifiedSettings, err := json.Marshal(settings)
+ modifiedSettings, err := json.MarshalIndent(settings, "", " ")
if err != nil {
return nil, err
}