1
0
mirror of https://github.com/go-acme/lego.git synced 2025-07-16 03:44:18 +02:00

googledomains: provider deprecation (#2554)

This commit is contained in:
Ludovic Fernandez
2025-07-02 22:03:17 +02:00
committed by GitHub
parent 9531f9e9c9
commit 08316e47a6
3 changed files with 12 additions and 200 deletions

View File

@ -2,17 +2,12 @@
package googledomains
import (
"context"
"errors"
"fmt"
"net/http"
"time"
"github.com/go-acme/lego/v4/challenge"
"github.com/go-acme/lego/v4/challenge/dns01"
"github.com/go-acme/lego/v4/platform/config/env"
"google.golang.org/api/acmedns/v1"
"google.golang.org/api/option"
)
// Environment variables names.
@ -37,103 +32,29 @@ type Config struct {
// NewDefaultConfig returns a default configuration for the DNSProvider.
func NewDefaultConfig() *Config {
return &Config{
PropagationTimeout: env.GetOrDefaultSecond(EnvPropagationTimeout, 2*time.Minute),
PollingInterval: env.GetOrDefaultSecond(EnvPollingInterval, dns01.DefaultPollingInterval),
HTTPClient: &http.Client{
Timeout: env.GetOrDefaultSecond(EnvHTTPTimeout, 30*time.Second),
},
}
return &Config{}
}
type DNSProvider struct {
config *Config
acmedns *acmedns.Service
}
type DNSProvider struct{}
// NewDNSProvider returns the Google Domains DNS provider with a default configuration.
func NewDNSProvider() (*DNSProvider, error) {
values, err := env.Get(EnvAccessToken)
if err != nil {
return nil, fmt.Errorf("googledomains: %w", err)
}
config := NewDefaultConfig()
config.AccessToken = values[EnvAccessToken]
return NewDNSProviderConfig(config)
return NewDNSProviderConfig(&Config{})
}
// NewDNSProviderConfig returns the Google Domains DNS provider with the provided config.
func NewDNSProviderConfig(config *Config) (*DNSProvider, error) {
if config == nil {
return nil, errors.New("googledomains: the configuration of the DNS provider is nil")
}
if config.AccessToken == "" {
return nil, errors.New("googledomains: access token is missing")
}
service, err := acmedns.NewService(context.Background(), option.WithHTTPClient(config.HTTPClient))
if err != nil {
return nil, fmt.Errorf("googledomains: error creating acme dns service: %w", err)
}
return &DNSProvider{
config: config,
acmedns: service,
}, nil
func NewDNSProviderConfig(_ *Config) (*DNSProvider, error) {
return nil, errors.New("googledomains: provider has shut down")
}
func (d *DNSProvider) Present(domain, token, keyAuth string) error {
zone, err := dns01.FindZoneByFqdn(dns01.ToFqdn(domain))
if err != nil {
return fmt.Errorf("googledomains: could not find zone for domain %q: %w", domain, err)
}
rotateReq := acmedns.RotateChallengesRequest{
AccessToken: d.config.AccessToken,
RecordsToAdd: []*acmedns.AcmeTxtRecord{getAcmeTxtRecord(domain, keyAuth)},
KeepExpiredRecords: false,
}
call := d.acmedns.AcmeChallengeSets.RotateChallenges(zone, &rotateReq)
_, err = call.Do()
if err != nil {
return fmt.Errorf("googledomains: error adding challenge for domain %s: %w", domain, err)
}
func (d *DNSProvider) Present(_, _, _ string) error {
return nil
}
func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
zone, err := dns01.FindZoneByFqdn(dns01.ToFqdn(domain))
if err != nil {
return fmt.Errorf("googledomains: could not find zone for domain %q: %w", domain, err)
}
rotateReq := acmedns.RotateChallengesRequest{
AccessToken: d.config.AccessToken,
RecordsToRemove: []*acmedns.AcmeTxtRecord{getAcmeTxtRecord(domain, keyAuth)},
KeepExpiredRecords: false,
}
call := d.acmedns.AcmeChallengeSets.RotateChallenges(zone, &rotateReq)
_, err = call.Do()
if err != nil {
return fmt.Errorf("googledomains: error cleaning up challenge for domain %s: %w", domain, err)
}
func (d *DNSProvider) CleanUp(_, _, _ string) error {
return nil
}
func (d *DNSProvider) Timeout() (timeout, interval time.Duration) {
return d.config.PropagationTimeout, d.config.PollingInterval
}
func getAcmeTxtRecord(domain, keyAuth string) *acmedns.AcmeTxtRecord {
challengeInfo := dns01.GetChallengeInfo(domain, keyAuth)
return &acmedns.AcmeTxtRecord{
Fqdn: challengeInfo.EffectiveFQDN,
Digest: challengeInfo.Value,
}
return dns01.DefaultPropagationTimeout, dns01.DefaultPollingInterval
}

View File

@ -1,6 +1,8 @@
Name = "Google Domains"
Description = ''''''
URL = "https://domains.google"
Description = '''
The Google Domains DNS provider has shut down.
'''
URL = "https://github.com/go-acme/lego/issues/2553"
Code = "googledomains"
Since = "v4.11.0"

View File

@ -1,111 +0,0 @@
package googledomains
import (
"testing"
"github.com/go-acme/lego/v4/platform/tester"
"github.com/stretchr/testify/require"
)
const envDomain = envNamespace + "DOMAIN"
var envTest = tester.NewEnvTest(EnvAccessToken).
WithDomain(envDomain).
WithLiveTestRequirements(EnvAccessToken, envDomain)
func TestNewDNSProvider(t *testing.T) {
testCases := []struct {
desc string
envVars map[string]string
expected string
}{
{
desc: "success",
envVars: map[string]string{
EnvAccessToken: "abc",
},
expected: "",
},
{
desc: "missing credentials",
envVars: map[string]string{},
expected: "googledomains: some credentials information are missing: GOOGLE_DOMAINS_ACCESS_TOKEN",
},
}
for _, test := range testCases {
t.Run(test.desc, func(t *testing.T) {
defer envTest.RestoreEnv()
envTest.ClearEnv()
envTest.Apply(test.envVars)
p, err := NewDNSProvider()
if test.expected == "" {
require.NoError(t, err)
require.NotNil(t, p)
} else {
require.Error(t, err)
require.Contains(t, err.Error(), test.expected)
}
})
}
}
func TestNewDNSProviderConfig(t *testing.T) {
testCases := []struct {
desc string
accessToken string
expected string
}{
{
desc: "success",
accessToken: "abc",
},
{
desc: "missing credentials",
expected: "googledomains: access token is missing",
},
}
for _, test := range testCases {
t.Run(test.desc, func(t *testing.T) {
config := NewDefaultConfig()
config.AccessToken = test.accessToken
p, err := NewDNSProviderConfig(config)
if test.expected == "" {
require.NoError(t, err)
require.NotNil(t, p)
require.NotNil(t, p.config)
} else {
require.EqualError(t, err, test.expected)
}
})
}
}
func TestLivePresent(t *testing.T) {
if !envTest.IsLiveTest() {
t.Skip("skipping live test")
}
envTest.RestoreEnv()
provider, err := NewDNSProvider()
require.NoError(t, err)
err = provider.Present(envTest.GetDomain(), "", "123d==")
require.NoError(t, err)
}
func TestLiveCleanUp(t *testing.T) {
if !envTest.IsLiveTest() {
t.Skip("skipping live test")
}
envTest.RestoreEnv()
provider, err := NewDNSProvider()
require.NoError(t, err)
err = provider.CleanUp(envTest.GetDomain(), "", "123d==")
require.NoError(t, err)
}