mirror of
https://github.com/Buriburizaem0n/nezha_domains.git
synced 2026-02-04 20:50:06 +00:00
refactor: simplify server & service manipulation (#993)
* refactor: simplify server & service manipulation * update * fix * update for nat, ddns & notification * chore * update cron * update dependencies * use of function iterators * update default dns servers
This commit is contained in:
@@ -1,12 +1,14 @@
|
||||
package controller
|
||||
|
||||
import (
|
||||
"slices"
|
||||
"strconv"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/jinzhu/copier"
|
||||
|
||||
"github.com/nezhahq/nezha/model"
|
||||
"github.com/nezhahq/nezha/pkg/utils"
|
||||
"github.com/nezhahq/nezha/service/singleton"
|
||||
)
|
||||
|
||||
@@ -23,10 +25,9 @@ import (
|
||||
func listNAT(c *gin.Context) ([]*model.NAT, error) {
|
||||
var n []*model.NAT
|
||||
|
||||
singleton.NATListLock.RLock()
|
||||
defer singleton.NATListLock.RUnlock()
|
||||
slist := singleton.NATShared.GetSortedList()
|
||||
|
||||
if err := copier.Copy(&n, &singleton.NATList); err != nil {
|
||||
if err := copier.Copy(&n, &slist); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -52,14 +53,11 @@ func createNAT(c *gin.Context) (uint64, error) {
|
||||
return 0, err
|
||||
}
|
||||
|
||||
singleton.ServerLock.RLock()
|
||||
if server, ok := singleton.ServerList[nf.ServerID]; ok {
|
||||
if server, ok := singleton.ServerShared.Get(nf.ServerID); ok {
|
||||
if !server.HasPermission(c) {
|
||||
singleton.ServerLock.RUnlock()
|
||||
return 0, singleton.Localizer.ErrorT("permission denied")
|
||||
}
|
||||
}
|
||||
singleton.ServerLock.RUnlock()
|
||||
|
||||
uid := getUid(c)
|
||||
|
||||
@@ -74,8 +72,7 @@ func createNAT(c *gin.Context) (uint64, error) {
|
||||
return 0, newGormError("%v", err)
|
||||
}
|
||||
|
||||
singleton.OnNATUpdate(&n)
|
||||
singleton.UpdateNATList()
|
||||
singleton.NATShared.Update(&n)
|
||||
return n.ID, nil
|
||||
}
|
||||
|
||||
@@ -104,14 +101,11 @@ func updateNAT(c *gin.Context) (any, error) {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
singleton.ServerLock.RLock()
|
||||
if server, ok := singleton.ServerList[nf.ServerID]; ok {
|
||||
if server, ok := singleton.ServerShared.Get(nf.ServerID); ok {
|
||||
if !server.HasPermission(c) {
|
||||
singleton.ServerLock.RUnlock()
|
||||
return nil, singleton.Localizer.ErrorT("permission denied")
|
||||
}
|
||||
}
|
||||
singleton.ServerLock.RUnlock()
|
||||
|
||||
var n model.NAT
|
||||
if err = singleton.DB.First(&n, id).Error; err != nil {
|
||||
@@ -132,8 +126,7 @@ func updateNAT(c *gin.Context) (any, error) {
|
||||
return 0, newGormError("%v", err)
|
||||
}
|
||||
|
||||
singleton.OnNATUpdate(&n)
|
||||
singleton.UpdateNATList()
|
||||
singleton.NATShared.Update(&n)
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
@@ -154,22 +147,17 @@ func batchDeleteNAT(c *gin.Context) (any, error) {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
singleton.NATCacheRwLock.RLock()
|
||||
for _, id := range n {
|
||||
if p, ok := singleton.NATCache[singleton.NATIDToDomain[id]]; ok {
|
||||
if !p.HasPermission(c) {
|
||||
singleton.NATCacheRwLock.RUnlock()
|
||||
return nil, singleton.Localizer.ErrorT("permission denied")
|
||||
}
|
||||
}
|
||||
if !singleton.NATShared.CheckPermission(c, utils.ConvertSeq(slices.Values(n),
|
||||
func(id uint64) string {
|
||||
return singleton.NATShared.GetDomain(id)
|
||||
})) {
|
||||
return nil, singleton.Localizer.ErrorT("permission denied")
|
||||
}
|
||||
singleton.NATCacheRwLock.RUnlock()
|
||||
|
||||
if err := singleton.DB.Unscoped().Delete(&model.NAT{}, "id in (?)", n).Error; err != nil {
|
||||
return nil, newGormError("%v", err)
|
||||
}
|
||||
|
||||
singleton.OnNATDelete(n)
|
||||
singleton.UpdateNATList()
|
||||
singleton.NATShared.Delete(n)
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user