diff --git a/cli/server/dns.go b/cli/server/dns.go new file mode 100644 index 00000000..b3037834 --- /dev/null +++ b/cli/server/dns.go @@ -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: "", + 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: "", + 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: "", + 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: "", + 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: "", + Subcommands: []*cli.Command{ + serverDnsListCommand, + serverDnsRemoveCommand, + serverDnsAddCommand, + serverDnsUpdateCommand, + }, +} diff --git a/cli/server/server.go b/cli/server/server.go index dca39bad..02aa0d9f 100644 --- a/cli/server/server.go +++ b/cli/server/server.go @@ -22,5 +22,6 @@ the connections to those servers. serverAddCommand, serverListCommand, serverRemoveCommand, + serverDnsCommand, }, } diff --git a/go.mod b/go.mod index 58014a3d..71ff0428 100644 --- a/go.mod +++ b/go.mod @@ -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 diff --git a/go.sum b/go.sum index 4a798915..fac8183c 100644 --- a/go.sum +++ b/go.sum @@ -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= diff --git a/pkg/dns/gandi.go b/pkg/dns/gandi.go new file mode 100644 index 00000000..20cd913e --- /dev/null +++ b/pkg/dns/gandi.go @@ -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 +}