You've already forked ddns-updater
56 lines
1.2 KiB
Go
56 lines
1.2 KiB
Go
|
|
package dns_providers
|
||
|
|
|
||
|
|
import (
|
||
|
|
"context"
|
||
|
|
"time"
|
||
|
|
|
||
|
|
"github.com/levelzerotechnology/directadmin-go"
|
||
|
|
"github.com/mkelcik/cloudflare-ddns-update/internal"
|
||
|
|
)
|
||
|
|
|
||
|
|
const (
|
||
|
|
DirectadminTag = "directadmin"
|
||
|
|
)
|
||
|
|
|
||
|
|
type Directadmin struct {
|
||
|
|
Client *directadmin.UserContext
|
||
|
|
Context context.Context
|
||
|
|
Config internal.Config
|
||
|
|
}
|
||
|
|
|
||
|
|
func (d *Directadmin) UpdateRecord(hostname string, ip string, old_ip string) error {
|
||
|
|
|
||
|
|
result := GetDomainParts(hostname)
|
||
|
|
|
||
|
|
a := directadmin.DNSRecord{Name: result.Name, Ttl: 300, Type: "A", Value: old_ip}
|
||
|
|
b := directadmin.DNSRecord{Name: result.Name, Ttl: 300, Type: "A", Value: ip}
|
||
|
|
|
||
|
|
err := d.Client.UpdateDNSRecord(result.Domain, a, b)
|
||
|
|
if err != nil {
|
||
|
|
return err
|
||
|
|
}
|
||
|
|
return nil
|
||
|
|
}
|
||
|
|
|
||
|
|
func (d *Directadmin) NewClient(server_url string, username string, key string) {
|
||
|
|
api, err := directadmin.New(server_url, 5*time.Second, false, false)
|
||
|
|
if err != nil {
|
||
|
|
panic(err)
|
||
|
|
}
|
||
|
|
|
||
|
|
userCtx, err := api.LoginAsUser(username, key)
|
||
|
|
if err != nil {
|
||
|
|
panic(err)
|
||
|
|
}
|
||
|
|
|
||
|
|
d.Client = userCtx
|
||
|
|
}
|
||
|
|
|
||
|
|
func NewDirectAdminProvider(ctx context.Context, config internal.Config) *Directadmin {
|
||
|
|
c := &Directadmin{}
|
||
|
|
c.Context = ctx
|
||
|
|
c.Config = config
|
||
|
|
c.NewClient(config.DirectadminUrl, config.DirectadminUsername, config.DirectadminKey)
|
||
|
|
return c
|
||
|
|
}
|