feat: ddns 功能调用逻辑

This commit is contained in:
Mmx233
2022-12-08 16:30:29 +08:00
parent 7dc89fcf68
commit 2a386ff049
7 changed files with 100 additions and 0 deletions

View File

@@ -1,6 +1,7 @@
package controllers
import (
"github.com/Mmx233/BitSrunLoginGo/dns"
"github.com/Mmx233/BitSrunLoginGo/global"
"github.com/Mmx233/BitSrunLoginGo/util"
BitSrun "github.com/Mmx233/BitSrunLoginGo/v1"
@@ -10,6 +11,8 @@ import (
// Login 登录逻辑
func Login(localAddr net.Addr, debugOutput bool) error {
// 登录状态检查
conf := &BitSrun.Conf{
Https: global.Config.Settings.Basic.Https,
LoginInfo: BitSrun.LoginInfo{
@@ -41,6 +44,8 @@ func Login(localAddr net.Addr, debugOutput bool) error {
log.Debugln("认证客户端 ip: ", ip)
// 登录执行
if online {
output("已登录~")
@@ -55,5 +60,21 @@ func Login(localAddr net.Addr, debugOutput bool) error {
log.Infoln("登录成功~")
}
// DDNS
enable, _ := global.Config.Settings.DDNS["enable"]
if open, _ := enable.(bool); open {
provider, _ := global.Config.Settings.DDNS["provider"]
providerStr, _ := provider.(string)
if providerStr == "" {
log.Warnln("DDNS 模块 dns 运营商不能为空")
return nil
}
delete(global.Config.Settings.DDNS, "provider")
_ = dns.Run(providerStr, ip, global.Config.Settings.DDNS)
}
return nil
}

14
dns/aliyun/aliyun.go Normal file
View File

@@ -0,0 +1,14 @@
package aliyun
import (
"github.com/Mmx233/BitSrunLoginGo/dns/models"
"github.com/Mmx233/BitSrunLoginGo/dns/util"
)
type DnsProvider struct {
}
func New(conf map[string]interface{}) (models.DnsProvider, error) {
var p DnsProvider
return &p, util.DecodeConfig(conf, &p)
}

41
dns/initer.go Normal file
View File

@@ -0,0 +1,41 @@
package dns
import (
"github.com/Mmx233/BitSrunLoginGo/dns/aliyun"
"github.com/Mmx233/BitSrunLoginGo/dns/models"
"github.com/mitchellh/mapstructure"
log "github.com/sirupsen/logrus"
)
func Run(provider, ip string, conf map[string]interface{}) error {
var meta models.BasicConfig
e := mapstructure.Decode(conf, &meta)
if e != nil {
log.Warnf("解析 DDNS 配置失败:%v", e)
return e
}
// 配置解析
var dns models.DnsProvider
switch provider {
case "aliyun":
dns, e = aliyun.New(meta.Other)
default:
log.Warnf("DDNS 模块 dns 运营商 %s 不支持", provider)
return nil
}
if e != nil {
log.Warnf("解析 DDNS 配置失败:%v", e)
return e
}
// 修改 dns 记录
if e = dns.SetDomainRecord(meta.Domain, ip); e != nil {
log.Warnf("设置 dns 解析记录失败:%v", e)
return e
}
return nil
}

6
dns/models/config.go Normal file
View File

@@ -0,0 +1,6 @@
package models
type BasicConfig struct {
Domain string `mapstructure:"domain"`
Other map[string]interface{} `mapstructure:",remain"`
}

5
dns/models/interface.go Normal file
View File

@@ -0,0 +1,5 @@
package models
type DnsProvider interface {
SetDomainRecord(domain, ip string) error
}

9
dns/util/config.go Normal file
View File

@@ -0,0 +1,9 @@
package util
import (
"github.com/mitchellh/mapstructure"
)
func DecodeConfig(conf map[string]interface{}, output interface{}) error {
return mapstructure.Decode(conf, output)
}

View File

@@ -39,6 +39,10 @@ func readConfig() {
Log: srunModels.Log{
FilePath: "./",
},
DDNS: map[string]interface{}{
"enable": false,
"provider": "",
},
})
//生成配置文件