fix old link removal on inbound tag change #633

This commit is contained in:
Alireza Ahmadi
2025-06-13 00:57:32 +02:00
parent 4dabe656c9
commit 92c742987e
6 changed files with 119 additions and 123 deletions
+45 -16
View File
@@ -11,6 +11,7 @@ import (
type TlsService struct {
InboundService
ServicesService
}
func (s *TlsService) GetAll() ([]model.Tls, error) {
@@ -24,52 +25,80 @@ func (s *TlsService) GetAll() ([]model.Tls, error) {
return tlsConfig, nil
}
func (s *TlsService) Save(tx *gorm.DB, action string, data json.RawMessage) ([]uint, []uint, error) {
func (s *TlsService) Save(tx *gorm.DB, action string, data json.RawMessage, hostname string) error {
var err error
var inboundIds []uint
var serviceIds []uint
switch action {
case "new", "edit":
var tls model.Tls
err = json.Unmarshal(data, &tls)
if err != nil {
return nil, nil, err
return err
}
err = tx.Save(&tls).Error
if err != nil {
return nil, nil, err
return err
}
err = tx.Model(model.Inbound{}).Select("id").Where("tls_id = ?", tls.Id).Scan(&inboundIds).Error
if err != nil {
return nil, nil, err
if action == "edit" {
var inbounds []model.Inbound
err = tx.Model(model.Inbound{}).Preload("Tls").Where("tls_id = ?", tls.Id).Find(&inbounds).Error
if err != nil {
return err
}
if len(inbounds) > 0 {
err = s.ClientService.UpdateLinksByInboundChange(tx, &inbounds, hostname, "")
if err != nil {
return err
}
var inboundIds []uint
for _, inbound := range inbounds {
inboundIds = append(inboundIds, inbound.Id)
}
err = s.InboundService.UpdateOutJsons(tx, inboundIds, hostname)
if err != nil {
return common.NewError("unable to update out_json of inbounds: ", err.Error())
}
err = s.InboundService.RestartInbounds(tx, inboundIds)
if err != nil {
return err
}
}
var serviceIds []uint
err = tx.Model(model.Service{}).Where("tls_id = ?", tls.Id).Scan(&serviceIds).Error
if err != nil {
return err
}
if len(serviceIds) > 0 {
err = s.ServicesService.RestartServices(tx, serviceIds)
if err != nil {
return err
}
}
}
err = tx.Model(model.Service{}).Where("tls_id = ?", tls.Id).Scan(&serviceIds).Error
return serviceIds, inboundIds, nil
case "del":
var id uint
err = json.Unmarshal(data, &id)
if err != nil {
return nil, nil, err
return err
}
var inboundCount int64
err = tx.Model(model.Inbound{}).Where("tls_id = ?", id).Count(&inboundCount).Error
if err != nil {
return nil, nil, err
return err
}
var serviceCount int64
err = tx.Model(model.Service{}).Where("tls_id = ?", id).Count(&serviceCount).Error
if err != nil {
return nil, nil, err
return err
}
if inboundCount > 0 || serviceCount > 0 {
return nil, nil, common.NewError("tls in use")
return common.NewError("tls in use")
}
err = tx.Where("id = ?", id).Delete(model.Tls{}).Error
if err != nil {
return nil, nil, err
return err
}
}
return nil, nil, nil
return nil
}