summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/xenolf/lego/providers/dns/dnsimple
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/xenolf/lego/providers/dns/dnsimple')
-rw-r--r--vendor/github.com/xenolf/lego/providers/dns/dnsimple/dnsimple.go180
-rw-r--r--vendor/github.com/xenolf/lego/providers/dns/dnsimple/dnsimple_test.go140
2 files changed, 0 insertions, 320 deletions
diff --git a/vendor/github.com/xenolf/lego/providers/dns/dnsimple/dnsimple.go b/vendor/github.com/xenolf/lego/providers/dns/dnsimple/dnsimple.go
deleted file mode 100644
index e3fea79ec..000000000
--- a/vendor/github.com/xenolf/lego/providers/dns/dnsimple/dnsimple.go
+++ /dev/null
@@ -1,180 +0,0 @@
-// Package dnsimple implements a DNS provider for solving the DNS-01 challenge
-// using dnsimple DNS.
-package dnsimple
-
-import (
- "fmt"
- "os"
- "strconv"
- "strings"
-
- "github.com/dnsimple/dnsimple-go/dnsimple"
- "github.com/xenolf/lego/acme"
-)
-
-// DNSProvider is an implementation of the acme.ChallengeProvider interface.
-type DNSProvider struct {
- client *dnsimple.Client
-}
-
-// NewDNSProvider returns a DNSProvider instance configured for dnsimple.
-// Credentials must be passed in the environment variables: DNSIMPLE_OAUTH_TOKEN.
-//
-// See: https://developer.dnsimple.com/v2/#authentication
-func NewDNSProvider() (*DNSProvider, error) {
- accessToken := os.Getenv("DNSIMPLE_OAUTH_TOKEN")
- baseUrl := os.Getenv("DNSIMPLE_BASE_URL")
-
- return NewDNSProviderCredentials(accessToken, baseUrl)
-}
-
-// NewDNSProviderCredentials uses the supplied credentials to return a
-// DNSProvider instance configured for dnsimple.
-func NewDNSProviderCredentials(accessToken, baseUrl string) (*DNSProvider, error) {
- if accessToken == "" {
- return nil, fmt.Errorf("DNSimple OAuth token is missing")
- }
-
- client := dnsimple.NewClient(dnsimple.NewOauthTokenCredentials(accessToken))
- client.UserAgent = "lego"
-
- if baseUrl != "" {
- client.BaseURL = baseUrl
- }
-
- return &DNSProvider{client: client}, nil
-}
-
-// Present creates a TXT record to fulfil the dns-01 challenge.
-func (c *DNSProvider) Present(domain, token, keyAuth string) error {
- fqdn, value, ttl := acme.DNS01Record(domain, keyAuth)
-
- zoneName, err := c.getHostedZone(domain)
-
- if err != nil {
- return err
- }
-
- accountID, err := c.getAccountID()
- if err != nil {
- return err
- }
-
- recordAttributes := c.newTxtRecord(zoneName, fqdn, value, ttl)
- _, err = c.client.Zones.CreateRecord(accountID, zoneName, *recordAttributes)
- if err != nil {
- return fmt.Errorf("DNSimple API call failed: %v", err)
- }
-
- return nil
-}
-
-// CleanUp removes the TXT record matching the specified parameters.
-func (c *DNSProvider) CleanUp(domain, token, keyAuth string) error {
- fqdn, _, _ := acme.DNS01Record(domain, keyAuth)
-
- records, err := c.findTxtRecords(domain, fqdn)
- if err != nil {
- return err
- }
-
- accountID, err := c.getAccountID()
- if err != nil {
- return err
- }
-
- for _, rec := range records {
- _, err := c.client.Zones.DeleteRecord(accountID, rec.ZoneID, rec.ID)
- if err != nil {
- return err
- }
- }
-
- return nil
-}
-
-func (c *DNSProvider) getHostedZone(domain string) (string, error) {
- authZone, err := acme.FindZoneByFqdn(acme.ToFqdn(domain), acme.RecursiveNameservers)
- if err != nil {
- return "", err
- }
-
- accountID, err := c.getAccountID()
- if err != nil {
- return "", err
- }
-
- zoneName := acme.UnFqdn(authZone)
-
- zones, err := c.client.Zones.ListZones(accountID, &dnsimple.ZoneListOptions{NameLike: zoneName})
- if err != nil {
- return "", fmt.Errorf("DNSimple API call failed: %v", err)
- }
-
- var hostedZone dnsimple.Zone
- for _, zone := range zones.Data {
- if zone.Name == zoneName {
- hostedZone = zone
- }
- }
-
- if hostedZone.ID == 0 {
- return "", fmt.Errorf("Zone %s not found in DNSimple for domain %s", authZone, domain)
-
- }
-
- return hostedZone.Name, nil
-}
-
-func (c *DNSProvider) findTxtRecords(domain, fqdn string) ([]dnsimple.ZoneRecord, error) {
- zoneName, err := c.getHostedZone(domain)
- if err != nil {
- return nil, err
- }
-
- accountID, err := c.getAccountID()
- if err != nil {
- return nil, err
- }
-
- recordName := c.extractRecordName(fqdn, zoneName)
-
- result, err := c.client.Zones.ListRecords(accountID, zoneName, &dnsimple.ZoneRecordListOptions{Name: recordName, Type: "TXT", ListOptions: dnsimple.ListOptions{}})
- if err != nil {
- return []dnsimple.ZoneRecord{}, fmt.Errorf("DNSimple API call has failed: %v", err)
- }
-
- return result.Data, nil
-}
-
-func (c *DNSProvider) newTxtRecord(zoneName, fqdn, value string, ttl int) *dnsimple.ZoneRecord {
- name := c.extractRecordName(fqdn, zoneName)
-
- return &dnsimple.ZoneRecord{
- Type: "TXT",
- Name: name,
- Content: value,
- TTL: ttl,
- }
-}
-
-func (c *DNSProvider) extractRecordName(fqdn, domain string) string {
- name := acme.UnFqdn(fqdn)
- if idx := strings.Index(name, "."+domain); idx != -1 {
- return name[:idx]
- }
- return name
-}
-
-func (c *DNSProvider) getAccountID() (string, error) {
- whoamiResponse, err := c.client.Identity.Whoami()
- if err != nil {
- return "", err
- }
-
- if whoamiResponse.Data.Account == nil {
- return "", fmt.Errorf("DNSimple user tokens are not supported, please use an account token.")
- }
-
- return strconv.Itoa(whoamiResponse.Data.Account.ID), nil
-}
diff --git a/vendor/github.com/xenolf/lego/providers/dns/dnsimple/dnsimple_test.go b/vendor/github.com/xenolf/lego/providers/dns/dnsimple/dnsimple_test.go
deleted file mode 100644
index bd35790d7..000000000
--- a/vendor/github.com/xenolf/lego/providers/dns/dnsimple/dnsimple_test.go
+++ /dev/null
@@ -1,140 +0,0 @@
-package dnsimple
-
-import (
- "os"
- "testing"
- "time"
-
- "github.com/stretchr/testify/assert"
-)
-
-var (
- dnsimpleLiveTest bool
- dnsimpleOauthToken string
- dnsimpleDomain string
- dnsimpleBaseUrl string
-)
-
-func init() {
- dnsimpleOauthToken = os.Getenv("DNSIMPLE_OAUTH_TOKEN")
- dnsimpleDomain = os.Getenv("DNSIMPLE_DOMAIN")
- dnsimpleBaseUrl = "https://api.sandbox.dnsimple.com"
-
- if len(dnsimpleOauthToken) > 0 && len(dnsimpleDomain) > 0 {
- baseUrl := os.Getenv("DNSIMPLE_BASE_URL")
-
- if baseUrl != "" {
- dnsimpleBaseUrl = baseUrl
- }
-
- dnsimpleLiveTest = true
- }
-}
-
-func restoreDNSimpleEnv() {
- os.Setenv("DNSIMPLE_OAUTH_TOKEN", dnsimpleOauthToken)
- os.Setenv("DNSIMPLE_BASE_URL", dnsimpleBaseUrl)
-}
-
-//
-// NewDNSProvider
-//
-
-func TestNewDNSProviderValid(t *testing.T) {
- defer restoreDNSimpleEnv()
-
- os.Setenv("DNSIMPLE_OAUTH_TOKEN", "123")
- provider, err := NewDNSProvider()
-
- assert.NotNil(t, provider)
- assert.Equal(t, "lego", provider.client.UserAgent)
- assert.NoError(t, err)
-}
-
-func TestNewDNSProviderValidWithBaseUrl(t *testing.T) {
- defer restoreDNSimpleEnv()
-
- os.Setenv("DNSIMPLE_OAUTH_TOKEN", "123")
- os.Setenv("DNSIMPLE_BASE_URL", "https://api.dnsimple.test")
- provider, err := NewDNSProvider()
-
- assert.NotNil(t, provider)
- assert.NoError(t, err)
-
- assert.Equal(t, provider.client.BaseURL, "https://api.dnsimple.test")
-}
-
-func TestNewDNSProviderInvalidWithMissingOauthToken(t *testing.T) {
- if dnsimpleLiveTest {
- t.Skip("skipping test in live mode")
- }
-
- defer restoreDNSimpleEnv()
-
- provider, err := NewDNSProvider()
-
- assert.Nil(t, provider)
- assert.EqualError(t, err, "DNSimple OAuth token is missing")
-}
-
-//
-// NewDNSProviderCredentials
-//
-
-func TestNewDNSProviderCredentialsValid(t *testing.T) {
- provider, err := NewDNSProviderCredentials("123", "")
-
- assert.NotNil(t, provider)
- assert.Equal(t, "lego", provider.client.UserAgent)
- assert.NoError(t, err)
-}
-
-func TestNewDNSProviderCredentialsValidWithBaseUrl(t *testing.T) {
- provider, err := NewDNSProviderCredentials("123", "https://api.dnsimple.test")
-
- assert.NotNil(t, provider)
- assert.NoError(t, err)
-
- assert.Equal(t, provider.client.BaseURL, "https://api.dnsimple.test")
-}
-
-func TestNewDNSProviderCredentialsInvalidWithMissingOauthToken(t *testing.T) {
- provider, err := NewDNSProviderCredentials("", "")
-
- assert.Nil(t, provider)
- assert.EqualError(t, err, "DNSimple OAuth token is missing")
-}
-
-//
-// Present
-//
-
-func TestLiveDNSimplePresent(t *testing.T) {
- if !dnsimpleLiveTest {
- t.Skip("skipping live test")
- }
-
- provider, err := NewDNSProviderCredentials(dnsimpleOauthToken, dnsimpleBaseUrl)
- assert.NoError(t, err)
-
- err = provider.Present(dnsimpleDomain, "", "123d==")
- assert.NoError(t, err)
-}
-
-//
-// Cleanup
-//
-
-func TestLiveDNSimpleCleanUp(t *testing.T) {
- if !dnsimpleLiveTest {
- t.Skip("skipping live test")
- }
-
- time.Sleep(time.Second * 1)
-
- provider, err := NewDNSProviderCredentials(dnsimpleOauthToken, dnsimpleBaseUrl)
- assert.NoError(t, err)
-
- err = provider.CleanUp(dnsimpleDomain, "", "123d==")
- assert.NoError(t, err)
-}