mirror of
https://github.com/TeaOSLab/EdgeAPI.git
synced 2025-11-10 04:20:26 +08:00
优化智能DNS相关代码
This commit is contained in:
@@ -17,9 +17,12 @@ type NSCluster struct {
|
|||||||
Udp dbs.JSON `field:"udp"` // UDP设置
|
Udp dbs.JSON `field:"udp"` // UDP设置
|
||||||
DdosProtection dbs.JSON `field:"ddosProtection"` // DDoS防护设置
|
DdosProtection dbs.JSON `field:"ddosProtection"` // DDoS防护设置
|
||||||
Hosts dbs.JSON `field:"hosts"` // DNS主机地址
|
Hosts dbs.JSON `field:"hosts"` // DNS主机地址
|
||||||
|
Soa dbs.JSON `field:"soa"` // SOA配置
|
||||||
AutoRemoteStart bool `field:"autoRemoteStart"` // 自动远程启动
|
AutoRemoteStart bool `field:"autoRemoteStart"` // 自动远程启动
|
||||||
TimeZone string `field:"timeZone"` // 时区
|
TimeZone string `field:"timeZone"` // 时区
|
||||||
Answer dbs.JSON `field:"answer"` // 应答设置
|
Answer dbs.JSON `field:"answer"` // 应答设置
|
||||||
|
SoaSerial uint64 `field:"soaSerial"` // SOA序列号
|
||||||
|
Email string `field:"email"` // 管理员邮箱
|
||||||
}
|
}
|
||||||
|
|
||||||
type NSClusterOperator struct {
|
type NSClusterOperator struct {
|
||||||
@@ -36,9 +39,12 @@ type NSClusterOperator struct {
|
|||||||
Udp any // UDP设置
|
Udp any // UDP设置
|
||||||
DdosProtection any // DDoS防护设置
|
DdosProtection any // DDoS防护设置
|
||||||
Hosts any // DNS主机地址
|
Hosts any // DNS主机地址
|
||||||
|
Soa any // SOA配置
|
||||||
AutoRemoteStart any // 自动远程启动
|
AutoRemoteStart any // 自动远程启动
|
||||||
TimeZone any // 时区
|
TimeZone any // 时区
|
||||||
Answer any // 应答设置
|
Answer any // 应答设置
|
||||||
|
SoaSerial any // SOA序列号
|
||||||
|
Email any // 管理员邮箱
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewNSClusterOperator() *NSClusterOperator {
|
func NewNSClusterOperator() *NSClusterOperator {
|
||||||
|
|||||||
@@ -45,6 +45,19 @@ func (this *NSCluster) DecodeHosts() []string {
|
|||||||
return hosts
|
return hosts
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// DecodeSOAConfig 解析SOA设置
|
||||||
|
func (this *NSCluster) DecodeSOAConfig() *dnsconfigs.NSSOAConfig {
|
||||||
|
var config = dnsconfigs.DefaultNSSOAConfig()
|
||||||
|
if IsNull(this.Soa) {
|
||||||
|
return config
|
||||||
|
}
|
||||||
|
err := json.Unmarshal(this.Soa, config)
|
||||||
|
if err != nil {
|
||||||
|
remotelogs.Error("NSCluster.DecodeSOAConfig", "decode failed: "+err.Error())
|
||||||
|
}
|
||||||
|
return config
|
||||||
|
}
|
||||||
|
|
||||||
// DecodeAnswerConfig 解析应答设置
|
// DecodeAnswerConfig 解析应答设置
|
||||||
func (this *NSCluster) DecodeAnswerConfig() *dnsconfigs.NSAnswerConfig {
|
func (this *NSCluster) DecodeAnswerConfig() *dnsconfigs.NSAnswerConfig {
|
||||||
var config = dnsconfigs.DefaultNSAnswerConfig()
|
var config = dnsconfigs.DefaultNSAnswerConfig()
|
||||||
|
|||||||
15
internal/utils/compare.go
Normal file
15
internal/utils/compare.go
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
// Copyright 2022 Liuxiangchao iwind.liu@gmail.com. All rights reserved. Official site: https://goedge.cn .
|
||||||
|
|
||||||
|
package utils
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"encoding/json"
|
||||||
|
)
|
||||||
|
|
||||||
|
// EqualConfig 使用JSON对比配置
|
||||||
|
func EqualConfig(config1 any, config2 any) bool {
|
||||||
|
config1JSON, _ := json.Marshal(config1)
|
||||||
|
config2JSON, _ := json.Marshal(config2)
|
||||||
|
return bytes.Equal(config1JSON, config2JSON)
|
||||||
|
}
|
||||||
38
internal/utils/compare_test.go
Normal file
38
internal/utils/compare_test.go
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
// Copyright 2022 Liuxiangchao iwind.liu@gmail.com. All rights reserved. Official site: https://goedge.cn .
|
||||||
|
|
||||||
|
package utils_test
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/TeaOSLab/EdgeAPI/internal/utils"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestEqualConfig(t *testing.T) {
|
||||||
|
type testType struct {
|
||||||
|
Name string `json:"name"`
|
||||||
|
Age int `json:"age"`
|
||||||
|
}
|
||||||
|
{
|
||||||
|
var c1 = &testType{
|
||||||
|
Name: "Lily",
|
||||||
|
Age: 12,
|
||||||
|
}
|
||||||
|
var c2 = &testType{
|
||||||
|
Name: "Lucy",
|
||||||
|
Age: 12,
|
||||||
|
}
|
||||||
|
t.Log(utils.EqualConfig(c1, c2))
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
var c1 = &testType{
|
||||||
|
Name: "Lily",
|
||||||
|
Age: 12,
|
||||||
|
}
|
||||||
|
var c2 = &testType{
|
||||||
|
Age: 12,
|
||||||
|
Name: "Lily",
|
||||||
|
}
|
||||||
|
t.Log(utils.EqualConfig(c1, c2))
|
||||||
|
}
|
||||||
|
}
|
||||||
12
internal/utils/email.go
Normal file
12
internal/utils/email.go
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
// Copyright 2022 Liuxiangchao iwind.liu@gmail.com. All rights reserved. Official site: https://goedge.cn .
|
||||||
|
|
||||||
|
package utils
|
||||||
|
|
||||||
|
import "regexp"
|
||||||
|
|
||||||
|
var emailReg = regexp.MustCompile(`(?i)^[a-z\d]+([._+-]*[a-z\d]+)*@([a-z\d]+[a-z\d-]*[a-z\d]+\.)+[a-z\d]+$`)
|
||||||
|
|
||||||
|
// ValidateEmail 校验电子邮箱格式
|
||||||
|
func ValidateEmail(email string) bool {
|
||||||
|
return emailReg.MatchString(email)
|
||||||
|
}
|
||||||
22
internal/utils/email_test.go
Normal file
22
internal/utils/email_test.go
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
// Copyright 2022 Liuxiangchao iwind.liu@gmail.com. All rights reserved. Official site: https://goedge.cn .
|
||||||
|
|
||||||
|
package utils_test
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/TeaOSLab/EdgeAPI/internal/utils"
|
||||||
|
"github.com/iwind/TeaGo/assert"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestValidateEmail(t *testing.T) {
|
||||||
|
var a = assert.NewAssertion(t)
|
||||||
|
a.IsTrue(utils.ValidateEmail("aaaa@gmail.com"))
|
||||||
|
a.IsTrue(utils.ValidateEmail("a.b@gmail.com"))
|
||||||
|
a.IsTrue(utils.ValidateEmail("a.b.c.d@gmail.com"))
|
||||||
|
a.IsTrue(utils.ValidateEmail("aaaa@gmail.com.cn"))
|
||||||
|
a.IsTrue(utils.ValidateEmail("hello.world.123@gmail.123.com"))
|
||||||
|
a.IsTrue(utils.ValidateEmail("10000@qq.com"))
|
||||||
|
a.IsFalse(utils.ValidateEmail("aaaa.@gmail.com"))
|
||||||
|
a.IsFalse(utils.ValidateEmail("aaaa@gmail"))
|
||||||
|
a.IsFalse(utils.ValidateEmail("aaaa@123"))
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user