diff --git a/README.md b/README.md index 98b970c..cf1c450 100644 --- a/README.md +++ b/README.md @@ -84,6 +84,7 @@ You can change the dashboard language in the settings page (`/setting`) after th Tao Chen Spetrum Nanjing Hopefun Network Technology Co. Ltd. +Moraxyc Mingzhuo Yin Martijn Lindeman MadDogOwner diff --git a/cmd/dashboard/main.go b/cmd/dashboard/main.go index 54a839c..c9b247a 100644 --- a/cmd/dashboard/main.go +++ b/cmd/dashboard/main.go @@ -6,6 +6,7 @@ import ( "log" "net" "net/http" + "os" "strings" "time" _ "time/tzdata" @@ -33,20 +34,6 @@ var ( dashboardCliParam DashboardCliParam ) -func init() { - flag.CommandLine.ParseErrorsWhitelist.UnknownFlags = true - flag.BoolVarP(&dashboardCliParam.Version, "version", "v", false, "查看当前版本号") - flag.StringVarP(&dashboardCliParam.ConfigFile, "config", "c", "data/config.yaml", "配置文件路径") - flag.StringVar(&dashboardCliParam.DatebaseLocation, "db", "data/sqlite.db", "Sqlite3数据库文件路径") - flag.Parse() - - // 初始化 dao 包 - singleton.InitConfigFromPath(dashboardCliParam.ConfigFile) - singleton.InitTimezoneAndCache() - singleton.InitDBFromPath(dashboardCliParam.DatebaseLocation) - initSystem() -} - func initSystem() { // 初始化管理员账户 var usersCount int64 @@ -103,11 +90,23 @@ func initSystem() { // @externalDocs.description OpenAPI // @externalDocs.url https://swagger.io/resources/open-api/ func main() { + flag.CommandLine.ParseErrorsWhitelist.UnknownFlags = true + flag.BoolVarP(&dashboardCliParam.Version, "version", "v", false, "查看当前版本号") + flag.StringVarP(&dashboardCliParam.ConfigFile, "config", "c", "data/config.yaml", "配置文件路径") + flag.StringVar(&dashboardCliParam.DatebaseLocation, "db", "data/sqlite.db", "Sqlite3数据库文件路径") + flag.Parse() + if dashboardCliParam.Version { fmt.Println(singleton.Version) - return + os.Exit(0) } + // 初始化 dao 包 + singleton.InitConfigFromPath(dashboardCliParam.ConfigFile) + singleton.InitTimezoneAndCache() + singleton.InitDBFromPath(dashboardCliParam.DatebaseLocation) + initSystem() + l, err := net.Listen("tcp", fmt.Sprintf(":%d", singleton.Conf.ListenPort)) if err != nil { log.Fatal(err) diff --git a/go.mod b/go.mod index f4da6c9..ff01d36 100644 --- a/go.mod +++ b/go.mod @@ -14,8 +14,8 @@ require ( github.com/json-iterator/go v1.1.12 github.com/libdns/cloudflare v0.1.1 github.com/libdns/libdns v0.2.2 - github.com/libdns/tencentcloud v1.0.0 github.com/miekg/dns v1.1.62 + github.com/nezhahq/libdns-tencentcloud v0.0.0-20241029120103-889957240fff github.com/ory/graceful v0.1.3 github.com/oschwald/maxminddb-golang v1.13.1 github.com/patrickmn/go-cache v2.1.0+incompatible @@ -78,9 +78,9 @@ require ( github.com/spf13/afero v1.11.0 // indirect github.com/spf13/cast v1.6.0 // indirect github.com/subosito/gotenv v1.6.0 // indirect - github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.597 // indirect github.com/tidwall/match v1.1.1 // indirect github.com/tidwall/pretty v1.2.0 // indirect + github.com/tidwall/sjson v1.2.5 // indirect github.com/twitchyliquid64/golang-asm v0.15.1 // indirect github.com/ugorji/go/codec v1.2.12 // indirect go.uber.org/atomic v1.9.0 // indirect diff --git a/go.sum b/go.sum index 7f953fd..5466d56 100644 --- a/go.sum +++ b/go.sum @@ -106,8 +106,6 @@ github.com/libdns/cloudflare v0.1.1 h1:FVPfWwP8zZCqj268LZjmkDleXlHPlFU9KC4OJ3yn0 github.com/libdns/cloudflare v0.1.1/go.mod h1:9VK91idpOjg6v7/WbjkEW49bSCxj00ALesIFDhJ8PBU= github.com/libdns/libdns v0.2.2 h1:O6ws7bAfRPaBsgAYt8MDe2HcNBGC29hkZ9MX2eUSX3s= github.com/libdns/libdns v0.2.2/go.mod h1:4Bj9+5CQiNMVGf87wjX4CY3HQJypUHRuLvlsfsZqLWQ= -github.com/libdns/tencentcloud v1.0.0 h1:u4LXnYu/lu/9P5W+MCVPeSDnwI+6w+DxYhQ1wSnQOuU= -github.com/libdns/tencentcloud v1.0.0/go.mod h1:NlCgPumzUsZWSOo1+Q/Hfh8G6TNRAaTUeWQdg6LbtUI= github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= @@ -128,6 +126,8 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/nezhahq/libdns-tencentcloud v0.0.0-20241029120103-889957240fff h1:3WDsbsg3dmsRENYLUPGPTkEcWWmTvk41i+rM91AIIbY= +github.com/nezhahq/libdns-tencentcloud v0.0.0-20241029120103-889957240fff/go.mod h1:k+cDtTbUY+UV56Aqv4Ahmc9bWmhpga9JJXZlAIPKBEc= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/ory/graceful v0.1.3 h1:FaeXcHZh168WzS+bqruqWEw/HgXWLdNv2nJ+fbhxbhc= github.com/ory/graceful v0.1.3/go.mod h1:4zFz687IAF7oNHHiB586U4iL+/4aV09o/PYLE34t2bA= @@ -184,14 +184,15 @@ github.com/swaggo/gin-swagger v1.6.0 h1:y8sxvQ3E20/RCyrXeFfg60r6H0Z+SwpTjMYsMm+z github.com/swaggo/gin-swagger v1.6.0/go.mod h1:BG00cCEy294xtVpyIAHG6+e2Qzj/xKlRdOqDkvq0uzo= github.com/swaggo/swag v1.16.4 h1:clWJtd9LStiG3VeijiCfOVODP6VpHtKdQy9ELFG3s1A= github.com/swaggo/swag v1.16.4/go.mod h1:VBsHJRsDvfYvqoiMKnsdwhNV9LEMHgEDZcyVYX0sxPg= -github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.597 h1:C0GHdLTfikLVoEzfhgPfrZ7LwlG0xiCmk6iwNKE+xs0= -github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.597/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y= +github.com/tidwall/gjson v1.14.2/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= github.com/tidwall/gjson v1.18.0 h1:FIDeeyB800efLX89e5a8Y0BNH+LOngJyGrIWxG2FKQY= github.com/tidwall/gjson v1.18.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA= github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= github.com/tidwall/pretty v1.2.0 h1:RWIZEg2iJ8/g6fDDYzMpobmaoGh5OLl4AXtGUGPcqCs= github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= +github.com/tidwall/sjson v1.2.5 h1:kLy8mja+1c9jlljvWTlSazM7cKDRfJuR/bOJhcY5NcY= +github.com/tidwall/sjson v1.2.5/go.mod h1:Fvgq9kS/6ociJEDnK0Fk1cpYF4FIW6ZF7LAe+6jwd28= github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= github.com/ugorji/go v1.2.7/go.mod h1:nF9osbDWLy6bDVv/Rtoh6QgnvNDpmCalQV5urGCCS6M= diff --git a/pkg/geoip/geoip.go b/pkg/geoip/geoip.go index 6d913b9..2d254d3 100644 --- a/pkg/geoip/geoip.go +++ b/pkg/geoip/geoip.go @@ -1,9 +1,8 @@ package geoip import ( - "embed" + _ "embed" "fmt" - "log" "net" "strings" @@ -11,12 +10,7 @@ import ( ) //go:embed geoip.db -var geoDBFS embed.FS - -var ( - dbData []byte - err error -) +var db []byte type IPInfo struct { Country string `maxminddb:"country"` @@ -25,21 +19,15 @@ type IPInfo struct { ContinentName string `maxminddb:"continent_name"` } -func init() { - dbData, err = geoDBFS.ReadFile("geoip.db") - if err != nil { - log.Printf("NEZHA>> Failed to open geoip database: %v", err) - } -} - -func Lookup(ip net.IP, record *IPInfo) (string, error) { - db, err := maxminddb.FromBytes(dbData) +func Lookup(ip net.IP) (string, error) { + db, err := maxminddb.FromBytes(db) if err != nil { return "", err } defer db.Close() - err = db.Lookup(ip, record) + var record IPInfo + err = db.Lookup(ip, &record) if err != nil { return "", err } diff --git a/service/rpc/nezha.go b/service/rpc/nezha.go index 38adff0..ad4707d 100644 --- a/service/rpc/nezha.go +++ b/service/rpc/nezha.go @@ -212,10 +212,9 @@ func (s *NezhaHandler) LookupGeoIP(c context.Context, r *pb.GeoIP) (*pb.GeoIP, e } // 根据内置数据库查询 IP 地理位置 - record := &geoip.IPInfo{} ip := r.GetIp() netIP := net.ParseIP(ip) - location, err := geoip.Lookup(netIP, record) + location, err := geoip.Lookup(netIP) if err != nil { return nil, err } diff --git a/service/singleton/ddns.go b/service/singleton/ddns.go index f2ccb73..2d2cc54 100644 --- a/service/singleton/ddns.go +++ b/service/singleton/ddns.go @@ -6,7 +6,7 @@ import ( "sync" "github.com/libdns/cloudflare" - "github.com/libdns/tencentcloud" + tencentcloud "github.com/nezhahq/libdns-tencentcloud" "github.com/naiba/nezha/model" ddns2 "github.com/naiba/nezha/pkg/ddns" @@ -76,6 +76,7 @@ func GetDDNSProvidersFromProfiles(profileId []uint64, ip *ddns2.IP) ([]*ddns2.Pr if profile, ok := DDNSCache[id]; ok { profiles = append(profiles, profile) } else { + DDNSCacheLock.RUnlock() return nil, fmt.Errorf("无法找到DDNS配置 ID %d", id) } }