summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/xenolf/lego/providers/dns/azure
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/xenolf/lego/providers/dns/azure')
-rw-r--r--vendor/github.com/xenolf/lego/providers/dns/azure/azure.go151
-rw-r--r--vendor/github.com/xenolf/lego/providers/dns/azure/azure_test.go89
2 files changed, 0 insertions, 240 deletions
diff --git a/vendor/github.com/xenolf/lego/providers/dns/azure/azure.go b/vendor/github.com/xenolf/lego/providers/dns/azure/azure.go
deleted file mode 100644
index 6a30b318a..000000000
--- a/vendor/github.com/xenolf/lego/providers/dns/azure/azure.go
+++ /dev/null
@@ -1,151 +0,0 @@
-// Package azure implements a DNS provider for solving the DNS-01
-// challenge using azure DNS.
-// Azure doesn't like trailing dots on domain names, most of the acme code does.
-package azure
-
-import (
- "fmt"
- "os"
- "time"
-
- "github.com/Azure/azure-sdk-for-go/arm/dns"
-
- "strings"
-
- "github.com/Azure/go-autorest/autorest"
- "github.com/Azure/go-autorest/autorest/adal"
- "github.com/Azure/go-autorest/autorest/azure"
- "github.com/Azure/go-autorest/autorest/to"
- "github.com/xenolf/lego/acme"
-)
-
-// DNSProvider is an implementation of the acme.ChallengeProvider interface
-type DNSProvider struct {
- clientId string
- clientSecret string
- subscriptionId string
- tenantId string
- resourceGroup string
-}
-
-// NewDNSProvider returns a DNSProvider instance configured for azure.
-// Credentials must be passed in the environment variables: AZURE_CLIENT_ID,
-// AZURE_CLIENT_SECRET, AZURE_SUBSCRIPTION_ID, AZURE_TENANT_ID, AZURE_RESOURCE_GROUP
-func NewDNSProvider() (*DNSProvider, error) {
- clientId := os.Getenv("AZURE_CLIENT_ID")
- clientSecret := os.Getenv("AZURE_CLIENT_SECRET")
- subscriptionId := os.Getenv("AZURE_SUBSCRIPTION_ID")
- tenantId := os.Getenv("AZURE_TENANT_ID")
- resourceGroup := os.Getenv("AZURE_RESOURCE_GROUP")
- return NewDNSProviderCredentials(clientId, clientSecret, subscriptionId, tenantId, resourceGroup)
-}
-
-// NewDNSProviderCredentials uses the supplied credentials to return a
-// DNSProvider instance configured for azure.
-func NewDNSProviderCredentials(clientId, clientSecret, subscriptionId, tenantId, resourceGroup string) (*DNSProvider, error) {
- if clientId == "" || clientSecret == "" || subscriptionId == "" || tenantId == "" || resourceGroup == "" {
- return nil, fmt.Errorf("Azure configuration missing")
- }
-
- return &DNSProvider{
- clientId: clientId,
- clientSecret: clientSecret,
- subscriptionId: subscriptionId,
- tenantId: tenantId,
- resourceGroup: resourceGroup,
- }, nil
-}
-
-// Timeout returns the timeout and interval to use when checking for DNS
-// propagation. Adjusting here to cope with spikes in propagation times.
-func (c *DNSProvider) Timeout() (timeout, interval time.Duration) {
- return 120 * time.Second, 2 * time.Second
-}
-
-// Present creates a TXT record to fulfil the dns-01 challenge
-func (c *DNSProvider) Present(domain, token, keyAuth string) error {
- fqdn, value, _ := acme.DNS01Record(domain, keyAuth)
- zone, err := c.getHostedZoneID(fqdn)
- if err != nil {
- return err
- }
-
- rsc := dns.NewRecordSetsClient(c.subscriptionId)
- spt, err := c.newServicePrincipalTokenFromCredentials(azure.PublicCloud.ResourceManagerEndpoint)
- rsc.Authorizer = autorest.NewBearerAuthorizer(spt)
-
- relative := toRelativeRecord(fqdn, acme.ToFqdn(zone))
- rec := dns.RecordSet{
- Name: &relative,
- RecordSetProperties: &dns.RecordSetProperties{
- TTL: to.Int64Ptr(60),
- TxtRecords: &[]dns.TxtRecord{dns.TxtRecord{Value: &[]string{value}}},
- },
- }
- _, err = rsc.CreateOrUpdate(c.resourceGroup, zone, relative, dns.TXT, rec, "", "")
-
- if err != nil {
- return err
- }
-
- return nil
-}
-
-// Returns the relative record to the domain
-func toRelativeRecord(domain, zone string) string {
- return acme.UnFqdn(strings.TrimSuffix(domain, zone))
-}
-
-// CleanUp removes the TXT record matching the specified parameters
-func (c *DNSProvider) CleanUp(domain, token, keyAuth string) error {
- fqdn, _, _ := acme.DNS01Record(domain, keyAuth)
-
- zone, err := c.getHostedZoneID(fqdn)
- if err != nil {
- return err
- }
-
- relative := toRelativeRecord(fqdn, acme.ToFqdn(zone))
- rsc := dns.NewRecordSetsClient(c.subscriptionId)
- spt, err := c.newServicePrincipalTokenFromCredentials(azure.PublicCloud.ResourceManagerEndpoint)
- rsc.Authorizer = autorest.NewBearerAuthorizer(spt)
- _, err = rsc.Delete(c.resourceGroup, zone, relative, dns.TXT, "")
- if err != nil {
- return err
- }
-
- return nil
-}
-
-// Checks that azure has a zone for this domain name.
-func (c *DNSProvider) getHostedZoneID(fqdn string) (string, error) {
- authZone, err := acme.FindZoneByFqdn(fqdn, acme.RecursiveNameservers)
- if err != nil {
- return "", err
- }
-
- // Now we want to to Azure and get the zone.
- spt, err := c.newServicePrincipalTokenFromCredentials(azure.PublicCloud.ResourceManagerEndpoint)
-
- dc := dns.NewZonesClient(c.subscriptionId)
- dc.Authorizer = autorest.NewBearerAuthorizer(spt)
-
- zone, err := dc.Get(c.resourceGroup, acme.UnFqdn(authZone))
-
- if err != nil {
- return "", err
- }
-
- // zone.Name shouldn't have a trailing dot(.)
- return to.String(zone.Name), nil
-}
-
-// NewServicePrincipalTokenFromCredentials creates a new ServicePrincipalToken using values of the
-// passed credentials map.
-func (c *DNSProvider) newServicePrincipalTokenFromCredentials(scope string) (*adal.ServicePrincipalToken, error) {
- oauthConfig, err := adal.NewOAuthConfig(azure.PublicCloud.ActiveDirectoryEndpoint, c.tenantId)
- if err != nil {
- panic(err)
- }
- return adal.NewServicePrincipalToken(*oauthConfig, c.clientId, c.clientSecret, scope)
-}
diff --git a/vendor/github.com/xenolf/lego/providers/dns/azure/azure_test.go b/vendor/github.com/xenolf/lego/providers/dns/azure/azure_test.go
deleted file mode 100644
index db55f578a..000000000
--- a/vendor/github.com/xenolf/lego/providers/dns/azure/azure_test.go
+++ /dev/null
@@ -1,89 +0,0 @@
-package azure
-
-import (
- "os"
- "testing"
- "time"
-
- "github.com/stretchr/testify/assert"
-)
-
-var (
- azureLiveTest bool
- azureClientID string
- azureClientSecret string
- azureSubscriptionID string
- azureTenantID string
- azureResourceGroup string
- azureDomain string
-)
-
-func init() {
- azureClientID = os.Getenv("AZURE_CLIENT_ID")
- azureClientSecret = os.Getenv("AZURE_CLIENT_SECRET")
- azureSubscriptionID = os.Getenv("AZURE_SUBSCRIPTION_ID")
- azureTenantID = os.Getenv("AZURE_TENANT_ID")
- azureResourceGroup = os.Getenv("AZURE_RESOURCE_GROUP")
- azureDomain = os.Getenv("AZURE_DOMAIN")
- if len(azureClientID) > 0 && len(azureClientSecret) > 0 {
- azureLiveTest = true
- }
-}
-
-func restoreAzureEnv() {
- os.Setenv("AZURE_CLIENT_ID", azureClientID)
- os.Setenv("AZURE_SUBSCRIPTION_ID", azureSubscriptionID)
-}
-
-func TestNewDNSProviderValid(t *testing.T) {
- if !azureLiveTest {
- t.Skip("skipping live test (requires credentials)")
- }
- os.Setenv("AZURE_CLIENT_ID", "")
- _, err := NewDNSProviderCredentials(azureClientID, azureClientSecret, azureSubscriptionID, azureTenantID, azureResourceGroup)
- assert.NoError(t, err)
- restoreAzureEnv()
-}
-
-func TestNewDNSProviderValidEnv(t *testing.T) {
- if !azureLiveTest {
- t.Skip("skipping live test (requires credentials)")
- }
- os.Setenv("AZURE_CLIENT_ID", "other")
- _, err := NewDNSProvider()
- assert.NoError(t, err)
- restoreAzureEnv()
-}
-
-func TestNewDNSProviderMissingCredErr(t *testing.T) {
- os.Setenv("AZURE_SUBSCRIPTION_ID", "")
- _, err := NewDNSProvider()
- assert.EqualError(t, err, "Azure configuration missing")
- restoreAzureEnv()
-}
-
-func TestLiveAzurePresent(t *testing.T) {
- if !azureLiveTest {
- t.Skip("skipping live test")
- }
-
- provider, err := NewDNSProviderCredentials(azureClientID, azureClientSecret, azureSubscriptionID, azureTenantID, azureResourceGroup)
- assert.NoError(t, err)
-
- err = provider.Present(azureDomain, "", "123d==")
- assert.NoError(t, err)
-}
-
-func TestLiveAzureCleanUp(t *testing.T) {
- if !azureLiveTest {
- t.Skip("skipping live test")
- }
-
- provider, err := NewDNSProviderCredentials(azureClientID, azureClientSecret, azureSubscriptionID, azureTenantID, azureResourceGroup)
- time.Sleep(time.Second * 1)
-
- assert.NoError(t, err)
-
- err = provider.CleanUp(azureDomain, "", "123d==")
- assert.NoError(t, err)
-}