model

package
v0.0.0-...-8d00b3e Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 27, 2025 License: GPL-2.0 Imports: 24 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func CreateService

func CreateService(conf string) error

CreateService 用于在Linux系统上创建并启动ddns-go服务。 该函数会检查当前系统是否为Linux,并确保配置文件和目标服务文件不存在。 然后,它会创建必要的目录,复制配置文件,并生成systemd服务文件。 最后,函数会重载systemd配置,启用并启动ddns-go服务。

参数:

  • conf: 配置文件的路径,该文件将被复制到/etc/ddns-go/config.toml。

返回值:

  • error: 如果过程中出现任何错误,返回相应的错误信息;否则返回nil。

func GenerateConfigTemplate

func GenerateConfigTemplate(outputPath string) error

GenerateConfigTemplate 生成配置文件模板

func GetDefaultTemplatePath

func GetDefaultTemplatePath() string

GetDefaultTemplatePath 获取默认模板文件路径

func GetEnvDebug

func GetEnvDebug() bool

GetEnvDebug 判断是否设置debug

func GetEnvIP6Url

func GetEnvIP6Url() string

GetEnvIP6Url 获取环境变量中的IPv6 API地址,如果未设置或长度不足,则返回默认的IPv6 API地址。 该函数首先从环境变量中读取名为 "UrlIp6Api" 的值,如果该值不存在或长度小于等于10, 则使用默认的IPv6 API地址 "http://ipv6.liumou.site:22011/api"。 返回值:

string: 返回获取到的IPv6 API地址。

func GetEnvSec

func GetEnvSec() int

GetEnvSec 从环境变量中获取 "Sec" 的值,并将其转换为整数。 如果转换后的值大于 0,则返回该值;否则返回默认值 60。 返回值:

int: 从环境变量中获取的秒数,若无效则返回默认值 60。

func RemoveStrNone

func RemoveStrNone(txt string) string

RemoveStrNone 函数用于移除字符串中的所有空白字符(包括空格、制表符、换行符等)。 该函数通过正则表达式匹配所有空白字符,并将其替换为空字符串。

参数:

  • txt: 输入的字符串,可能包含空白字符。

返回值:

  • string: 移除所有空白字符后的字符串。

Types

type AutoGenerated

type AutoGenerated struct {
	Response struct {
		RecordCountInfo struct {
			SubdomainCount int `json:"SubdomainCount"`
			ListCount      int `json:"ListCount"`
			TotalCount     int `json:"TotalCount"`
		} `json:"RecordCountInfo"`
		RecordList []struct {
			RecordID      int    `json:"RecordId"`
			Value         string `json:"Value"`
			Status        string `json:"Status"`
			UpdatedOn     string `json:"UpdatedOn"`
			Name          string `json:"Name"`
			Line          string `json:"Line"`
			LineID        string `json:"LineId"`
			Type          string `json:"Type"`
			MonitorStatus string `json:"MonitorStatus"`
			Remark        string `json:"Remark"`
			TTL           int    `json:"TTL"`
			Mx            int    `json:"MX"`
		} `json:"RecordList"`
		RequestID string `json:"RequestId"`
	} `json:"Response"`
}

AutoGenerated 定义对应的结构体

type DomainConfig

type DomainConfig struct {
	Domain struct {
		Domain string `json:"Domain"` // 域名
		Sub    string `json:"Sub"`    // 子域名
		Sub4   string `json:"Sub4"`   // 子域名V4
		Sub6   string `json:"Sub6"`   // 子域名V6
		Remark string `json:"Remark"` // 备注
		Type   string `json:"Type"`   // 解析类型
	}
	Login struct {
		Id  string `json:"Id"`  // 账号
		Key string `json:"Key"` // 密钥
	}
	Option struct {
		Delete bool `json:"delete"` // 是否删除已存在的记录再添加
	}
}

DomainConfig 定义对应的结构体

type DomainInfo

type DomainInfo struct {
	Sub      string // 子域名
	Ip       string // 解析值
	RecordId int    // RecordId
	Type     string // 解析类型
	DomainId int    // 域名ID
}

type EthInfo

type EthInfo struct {
	Name string `json:"name"` // 网卡名称
	IP   net.IP `json:"ip"`   // 网卡IP
}

type IP

type IP struct {
	Ip                     string `json:"ip"`                     // 本次需要更新的本机IP
	IpType                 string `json:"ip_type"`                // ip类型
	Debug                  bool   `json:"debug"`                  // 是否开启Debug
	Err                    error  `json:"err"`                    // 错误信息
	Out                    string `json:"out"`                    // 命令行输出
	Pre                    string `json:"pre"`                    //
	IP4                    string `json:"IP4"`                    // ipv4
	IP6                    string `json:"IP6"`                    // ipv6
	SetV6                  bool   `json:"setV6"`                  // 是否设置ipv6
	SetV4                  bool   `json:"setV4"`                  // 是否设置ipv4
	Ip6Exists              bool   `json:"ip6Exists"`              // 是否存在IP6网络
	Ip4Exists              bool   `json:"ip4Exists"`              // 是否存在IP4网络
	UrlIp6Api              string `json:"urlIp6Api"`              // 设置IPV6接口获取地址
	SpecifyNetworkCard     bool   `json:"specifyNetworkCard"`     // 是否指定网卡
	SpecifyNetworkCardName string `json:"specifyNetworkCardName"` // 指定网卡名称
}

IP 定义对应的结构体

func (*IP) GetIp

func (i *IP) GetIp()

GetIp 获取IP地址信息 该函数会依次调用getIp6和getIp4方法,分别获取IPv6和IPv4地址信息。 该函数没有参数和返回值。

type Login

type Login struct {
	Debug          bool          `json:"debug"`          // 是否开启Debug
	IPS            IP            `json:"ips"`            // 从云端查询到的IP信息
	RecordId       int           `json:"recordId"`       // 记录id
	RecordId4      int           `json:"recordId4"`      // 记录id
	RecordId6      int           `json:"recordId6"`      // 记录id
	Value          string        `json:"value"`          // 解析值
	Exists         bool          `json:"exists"`         // 是否存在记录
	Err            error         `json:"err"`            // 错误信息
	Url            string        `json:"url"`            // 拼接域名后的完整地址
	SubList        []string      `json:"subList"`        // 子域名解析列表
	DomainInfoList []DomainInfo  `json:"domainInfoList"` // 域名信息
	Pids           Pid           `json:"Pids"`           // PID信息
	Domain         *DomainConfig `json:"Domain"`         // 域名配置
	ConfigFile     string        `json:"configFile"`     // 配置文件路径
}

func NewLogin

func NewLogin() *Login

NewLogin 初始化并返回一个指向 Login 结构体的指针。 该函数会创建一个默认配置的 Login 对象,并根据环境变量进行部分配置的覆盖。 返回的 Login 对象包含默认的域名配置、IP 配置、以及进程 ID 文件路径等信息。

func (*Login) Add

func (l *Login) Add(ip string)

Add 方法用于向腾讯云DNS服务添加一条新的解析记录。 该方法会实例化一个认证对象,并使用提供的SecretId和SecretKey进行身份验证。 然后,它会创建一个请求对象,设置必要的参数(如域名、记录类型、IP地址等), 并通过腾讯云SDK发送请求以添加记录。 如果请求成功,将输出成功信息;如果失败,将记录错误日志并可能触发panic。

func (*Login) CheckConfig

func (l *Login) CheckConfig()

CheckConfig 检查登录配置是否有效。 该函数会验证配置文件中域名、子域名、密钥对ID、密钥对SecretKey、备注信息以及解析记录类型等字段是否已正确设置。 如果发现任何字段未设置或设置不正确,函数会输出错误信息并终止程序。

func (*Login) CheckNameIsExist

func (l *Login) CheckNameIsExist(sub string) bool

CheckNameIsExist 检查给定的子名称是否存在于登录对象的子列表中。 该函数通过遍历子列表,并使用不区分大小写的比较来判断是否存在匹配项。

参数:

  • sub: 需要检查的子名称。

返回值:

  • bool: 如果子名称存在于子列表中,则返回 true;否则返回 false。

func (*Login) ConfigGet

func (l *Login) ConfigGet()

ConfigGet 从配置文件中读取并解析配置信息。 该函数首先检查配置文件是否存在,如果不存在则记录错误并退出程序。 如果配置文件存在,则尝试将其解析为 TOML 格式,并将解析结果存储到 Login 结构体的 Domain 字段中。 如果解析过程中发生错误,则记录错误并退出程序。

func (*Login) Delete

func (l *Login) Delete(name string, RecordId uint64) error

Delete 删除指定域名的DNS记录。 该函数通过腾讯云SDK调用DNSPod API,删除指定域名的DNS记录。

参数:

  • name: 要删除DNS记录的域名名称,例如 "www.example.com"
  • RecordId: 要删除的DNS记录的ID

函数流程:

  1. 使用腾讯云账户的SecretId和SecretKey实例化认证对象。
  2. 配置客户端选项,指定API的访问端点。
  3. 实例化DNSPod客户端对象,用于与腾讯云API进行交互。
  4. 创建删除DNS记录的请求对象,并设置要删除的域名。
  5. 调用API删除DNS记录,并处理可能的错误。
  6. 输出API返回的JSON格式响应。

func (*Login) GetAnalyticalValue

func (l *Login) GetAnalyticalValue() error

GetAnalyticalValue 根据当前记录的ID获取对应的解析值(IP地址) 该方法遍历DomainInfoList列表,查找与当前RecordId匹配的记录 如果找到匹配记录,将记录的IP地址赋值给Login结构体的Value字段并返回nil 如果未找到匹配记录,返回错误信息"无法获取解析记录"

func (*Login) GetParseList

func (l *Login) GetParseList() error

GetParseList 获取域名解析列表并解析为结构体 该函数通过腾讯云API获取指定域名的解析记录,并将结果解析为结构体,最后将解析结果存储在Login结构体的相关字段中。 如果启用了调试模式,函数会输出调试信息。

func (*Login) GetRecordId

func (l *Login) GetRecordId(sub string)

GetRecordId 获取指定子域名的解析记录ID 该方法用于查找并设置当前子域名的解析记录ID,区分IPv4(A记录)和IPv6(AAAA记录)

func (*Login) RemoveStrNone

func (l *Login) RemoveStrNone()

RemoveStrNone 方法用于移除 Login 结构体中所有字符串字段的空格。 该方法会遍历 Login 结构体中的 Domain 和 Login 字段,并将这些字段中的字符串值中的所有空格替换为空字符串。 该方法没有参数和返回值。

func (*Login) ShowList

func (l *Login) ShowList()

ShowList 方法用于展示域名解析列表。 该方法首先调用 GetParseList 方法获取域名解析信息,然后根据调试模式决定是否输出调试日志。 最后,遍历域名信息列表并打印每个域名的子域名、类型和IP地址,然后程序退出。

func (*Login) Start

func (l *Login) Start()

Start 方法启动登录流程,负责构建域名、校验配置、获取IP地址并处理IPv4/IPv6。 参数:

  • l: 指向Login结构体的指针,包含域名、配置、IP信息等字段

返回值:

无。若出现错误,将记录日志并直接退出程序

func (*Login) Update

func (l *Login) Update(RecordId int, ip, sub string)

Update 更新记录信息 Update 函数用于更新指定记录的IP地址。 该函数首先检查当前IP地址是否与记录中的IP地址一致,如果一致则无需更新。 如果不一致,则通过腾讯云API更新指定记录的IP地址。

参数:

  • RecordId: 需要更新的记录的ID。

type Pid

type Pid struct {
	File  string `json:"file"`  // 文件路径
	Write bool   `json:"write"` // 是否写入
}

type Response

type Response struct {
	Response struct {
		RecordList []struct {
			RecordId int `json:"RecordId"`
		} `json:"RecordList"`
	} `json:"Response"`
}

Response 定义对应的结构体

type WebServer

type WebServer struct {
	// contains filtered or unexported fields
}

WebServer 结构体管理Web服务器

func NewWebServer

func NewWebServer(login *Login, port int, version string, webFS fs.FS) *WebServer

NewWebServer 创建新的Web服务器实例

func (*WebServer) Start

func (ws *WebServer) Start() error

Start 启动Web服务器

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL