reCoreD-UI/models/domain.go

57 lines
1.5 KiB
Go
Raw Normal View History

2024-04-03 09:05:12 +00:00
package models
2024-04-09 03:36:34 +00:00
import (
"fmt"
"strings"
2024-04-09 13:16:19 +00:00
dns "github.com/cloud66-oss/coredns_mysql"
2024-04-09 03:36:34 +00:00
)
2024-04-03 09:05:12 +00:00
type Domain struct {
ID int `gorm:"primaryKey" json:"id"`
DomainName string `gorm:"unique,not null,size:255" json:"domain_name"`
//SOA Info
MainDNS string `gorm:"not null,size:255" json:"main_dns"`
AdminEmail string `gorm:"not null,size:255" json:"admin_email"`
SerialNumber int64 `gorm:"not null,default:1" json:"serial_number"`
RefreshInterval uint32 `gorm:"not null,size:255,default:\"86400\"" json:"refresh_interval"`
RetryInterval uint32 `gorm:"not null,size:255,default:\"7200\"" json:"retry_interval"`
ExpiryPeriod uint32 `gorm:"not null,size:255,default:\"3600000\"" json:"expiry_period"`
NegativeTtl uint32 `gorm:"not null,size:255,default:\"86400\"" json:"negative_ttl"`
}
2024-04-10 06:56:15 +00:00
func (d Domain) EmailSOAForamt() string {
2024-04-08 23:58:27 +00:00
s := strings.Split(d.AdminEmail, "@")
s[0] = strings.Replace(s[0], ".", "\\", -1)
2024-04-10 06:56:15 +00:00
if !strings.HasSuffix(s[1], ".") {
s[1] = fmt.Sprintf("%s.", s[1])
}
2024-04-08 23:58:27 +00:00
return strings.Join(s, ".")
2024-04-03 09:05:12 +00:00
}
2024-04-09 03:36:34 +00:00
2024-04-10 06:56:15 +00:00
func (d Domain) WithDotEnd() string {
2024-04-09 03:36:34 +00:00
if strings.HasSuffix(d.DomainName, ".") {
return d.DomainName
} else {
return fmt.Sprintf("%s.", d.DomainName)
}
}
2024-04-09 13:16:19 +00:00
func (d *Domain) GenerateSOA() dns.SOARecord {
2024-04-10 06:56:15 +00:00
var ns string
if !strings.HasSuffix(d.MainDNS, ".") {
ns = fmt.Sprintf("%s.", d.MainDNS)
} else {
ns = d.MainDNS
}
2024-04-09 13:16:19 +00:00
return dns.SOARecord{
2024-04-10 06:56:15 +00:00
Ns: ns,
2024-04-09 13:16:19 +00:00
MBox: d.EmailSOAForamt(),
Refresh: d.RefreshInterval,
Retry: d.RetryInterval,
Expire: d.ExpiryPeriod,
MinTtl: d.NegativeTtl,
}
}