91 lines
1.5 KiB
Go
91 lines
1.5 KiB
Go
package main
|
|
|
|
import (
|
|
"io"
|
|
"net/http"
|
|
"strings"
|
|
|
|
"github.com/go-gandi/go-gandi/config"
|
|
)
|
|
|
|
type Registration interface {
|
|
Valid() bool
|
|
Update(config.Config) (string, error)
|
|
HasSecret(string) bool
|
|
Domain() string
|
|
IP() string
|
|
}
|
|
|
|
type UserRegistration struct {
|
|
Subdomain string `yaml:"subdomain"`
|
|
Secret string `yaml:"secret"`
|
|
ip string
|
|
update bool
|
|
}
|
|
|
|
func (u *UserRegistration) Valid() bool {
|
|
return u.Subdomain != "" && u.Secret != ""
|
|
}
|
|
|
|
func (u *UserRegistration) Update(c config.Config) (string, error) {
|
|
if u.update {
|
|
u.update = false
|
|
return u.ip, nil
|
|
}
|
|
return "", nil
|
|
}
|
|
|
|
func (u *UserRegistration) HasSecret(s string) bool {
|
|
return u.Secret == s
|
|
}
|
|
|
|
func (u *UserRegistration) Domain() string {
|
|
return u.Subdomain
|
|
}
|
|
|
|
func (u *UserRegistration) IP() string {
|
|
return u.ip
|
|
}
|
|
|
|
type HostRegistration struct {
|
|
Subdomain string `yaml:"subdomain"`
|
|
ipddr string
|
|
}
|
|
|
|
func (h HostRegistration) Valid() bool {
|
|
return h.Subdomain != ""
|
|
}
|
|
|
|
func (h *HostRegistration) Update(_ config.Config) (string, error) {
|
|
resp, err := http.Get("icanhazip.com")
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
defer resp.Body.Close()
|
|
|
|
body, err := io.ReadAll(resp.Body)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
var result string
|
|
dynip := strings.TrimSpace(string(body))
|
|
if dynip != h.ipddr {
|
|
h.ipddr = dynip
|
|
result = dynip
|
|
}
|
|
return result, nil
|
|
}
|
|
|
|
func (h *HostRegistration) HasSecret(_ string) bool {
|
|
return false
|
|
}
|
|
|
|
func (h *HostRegistration) Domain() string {
|
|
return h.Subdomain
|
|
}
|
|
|
|
func (h *HostRegistration) IP() string {
|
|
return h.ipddr
|
|
}
|