WIP: dns support via libdns

This commit is contained in:
decentral1se 2021-10-18 20:35:43 +02:00
parent 5941ed9728
commit 7ea3df45d4
No known key found for this signature in database
GPG Key ID: 5E2EF5A63E3718CC
5 changed files with 151 additions and 0 deletions

91
cli/server/dns.go Normal file
View File

@ -0,0 +1,91 @@
package server
import (
"github.com/urfave/cli/v2"
)
var provider string
var providerFlag = &cli.StringFlag{
Name: "provider",
Value: "",
Aliases: []string{"p"},
Usage: "Choose a DNS provider (options: Gandi)",
Destination: &provider,
}
var serverDnsListCommand = &cli.Command{
Name: "list",
Usage: "List domains for a server",
Aliases: []string{"ls"},
ArgsUsage: "<domain>",
Flags: []cli.Flag{
providerFlag,
},
Description: `
`,
Action: func(c *cli.Context) error {
// domainName := internal.ValidateDomain(c)
return nil
},
}
var serverDnsRemoveCommand = &cli.Command{
Name: "remove",
Usage: "Remove domains for a server",
Aliases: []string{"rm"},
ArgsUsage: "<domain>",
Flags: []cli.Flag{
providerFlag,
},
Description: `
`,
Action: func(c *cli.Context) error {
// domainName := internal.ValidateDomain(c)
return nil
},
}
var serverDnsAddCommand = &cli.Command{
Name: "add",
Usage: "Add domains for a server",
Aliases: []string{"a"},
ArgsUsage: "<domain>",
Flags: []cli.Flag{
providerFlag,
},
Description: `
`,
Action: func(c *cli.Context) error {
// domainName := internal.ValidateDomain(c)
return nil
},
}
var serverDnsUpdateCommand = &cli.Command{
Name: "update",
Usage: "Update domains for a server",
Aliases: []string{"u"},
ArgsUsage: "<domain>",
Flags: []cli.Flag{
providerFlag,
},
Description: `
`,
Action: func(c *cli.Context) error {
// domainName := internal.ValidateDomain(c)
return nil
},
}
var serverDnsCommand = &cli.Command{
Name: "dns",
Aliases: []string{"d"},
Usage: "Manage server domains",
ArgsUsage: "<command>",
Subcommands: []*cli.Command{
serverDnsListCommand,
serverDnsRemoveCommand,
serverDnsAddCommand,
serverDnsUpdateCommand,
},
}

View File

@ -22,5 +22,6 @@ the connections to those servers.
serverAddCommand,
serverListCommand,
serverRemoveCommand,
serverDnsCommand,
},
}

2
go.mod
View File

@ -32,6 +32,8 @@ require (
github.com/fvbommel/sortorder v1.0.2 // indirect
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect
github.com/gorilla/mux v1.8.0 // indirect
github.com/libdns/gandi v1.0.2
github.com/libdns/libdns v0.2.1
github.com/moby/sys/mount v0.2.0 // indirect
github.com/morikuni/aec v1.0.0 // indirect
github.com/opencontainers/runc v1.0.2 // indirect

5
go.sum
View File

@ -510,6 +510,11 @@ github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/lib/pq v0.0.0-20150723085316-0dad96c0b94f/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
github.com/libdns/gandi v1.0.2 h1:1Ts8UpI1x5PVKpOjKC7Dn4+EObndz9gm6vdZnloHSKQ=
github.com/libdns/gandi v1.0.2/go.mod h1:hxpbQKcQFgQrTS5lV4tAgn6QoL6HcCnoBJaW5nOW4Sk=
github.com/libdns/libdns v0.1.0/go.mod h1:yQCXzk1lEZmmCPa857bnk4TsOiqYasqpyOEeSObbb40=
github.com/libdns/libdns v0.2.1 h1:Wu59T7wSHRgtA0cfxC+n1c/e+O3upJGWytknkmFEDis=
github.com/libdns/libdns v0.2.1/go.mod h1:yQCXzk1lEZmmCPa857bnk4TsOiqYasqpyOEeSObbb40=
github.com/magiconair/properties v1.5.3/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
github.com/magiconair/properties v1.8.0 h1:LLgXmsheXeRoUOBOjtwPQCWIYqM/LU1ayDtDePerRcY=
github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=

52
pkg/dns/gandi.go Normal file
View File

@ -0,0 +1,52 @@
package gandi
import (
"os"
"github.com/AlecAivazis/survey/v2"
"github.com/libdns/gandi"
"github.com/libdns/libdns"
"github.com/sirupsen/logrus"
)
func getToken() (string, error) {
if token, present := os.LookupEnv("GANDI_TOKEN"); present {
return token, nil
}
logrus.Debugf("no GANDI_TOKEN in environment, asking via stdin")
var token string
prompt := &survey.Input{
Message: "Gandi API token?",
}
if err := survey.AskOne(prompt, &token); err != nil {
return "", err
}
return token, nil
}
func getProvider() (gandi.Provider, error) {
token, err := getToken()
if err != nil {
return gandi.Provider{}, err
}
return gandi.Provider{APIToken: token}, nil
}
func ListDomains() ([]libdns.Record, error) {
return []libdns.Record{}, nil
}
func RemoveDomain() (bool, error) {
return false, nil
}
func AddDomain() (bool, error) {
return false, nil
}
func UpdateDomain() (bool, error) {
return false, nil
}