Skip to content

Conversation

@joestr
Copy link
Contributor

@joestr joestr commented Jun 19, 2025

Adds a DNS provider for DynDnsFree.de

@ldez ldez self-requested a review June 19, 2025 08:23
@ldez
Copy link
Member

ldez commented Jun 19, 2025

Hello, in order for a PR adding a DNS provider to be accepted, you have to:

  • add a description to your PR
  • be able to maintain this provider
  • have a homogeneous design with the other providers
  • add tests (units)
make test
  • add tests ("live")
    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)
    time.Sleep(2 * time.Second)
    err = provider.CleanUp(envTest.GetDomain(), "", "123d==")
    require.NoError(t, err)
    }
make test
make generate-dns
  • be able to do: (and put the output of this command to a comment in your PR)
rm -rf .lego

./lego -m [email protected] --dns YOUR_PROVIDER_NAME -d '*.example.com' -d example.com -s https://acme-staging-v02.api.letsencrypt.org/directory run

Note the wildcard domain is important.

make checks
  • do go mod tidy

@ldez ldez changed the title Feature: Add DynDnsFree.de as a DNS provider Add DynDnsFree.de as a DNS provider Jun 19, 2025
@ldez ldez changed the title Add DynDnsFree.de as a DNS provider Add DNS provider for DynDnsFree.de Jun 19, 2025
@ldez ldez added the waiting-for/contrib-feedback Awaiting feedback from the contributor. label Jun 19, 2025
@joestr
Copy link
Contributor Author

joestr commented Jun 19, 2025

  • public API documentation
    The API is not publicly documented. It is in the customer panel.
    Screenshot 2025-06-19 at 11-55-00 Acc 238872

    The TTL and life time of the TXT record are set to one hour.

  • be able to maintain this provider
    Yep. I can do that.

  • be able to do: (and put the output of this command to a comment in your PR)

    joestr@joel-vm3:~/Development/git/github.com/joestr/lego-dyndnsforfree/lego-dyndnsforfree$ export DYNDNSFREE_USERNAME="REDACTED"; export DYNDNSFREE_PASSWORD="REDACTED"; ./dist/lego -m REDACTED --dns dyndnsfree -d *.REDACTED -d REDACTED -s https://acme-staging-v02.api.letsencrypt.org/directory run
    2025/06/19 11:43:09 No key found for account REDACTED. Generating a P256 key.
    2025/06/19 11:43:09 Saved key to /home/joestr/Development/git/github.com/joestr/lego-dyndnsforfree/lego-dyndnsforfree/.lego/accounts/acme-staging-v02.api.letsencrypt.org/REDACTED/keys/REDACTED.key
    2025/06/19 11:43:10 Please review the TOS at https://letsencrypt.org/documents/LE-SA-v1.5-February-24-2025.pdf
    Do you accept the TOS? Y/n
    y
    2025/06/19 11:43:14 [INFO] acme: Registering account for REDACTED
    !!!! HEADS UP !!!!
    
    Your account credentials have been saved in your
    configuration directory at "/home/joestr/Development/git/github.com/joestr/lego-dyndnsforfree/lego-dyndnsforfree/.lego/accounts".
    
    You should make a secure backup of this folder now. This
    configuration directory will also contain certificates and
    private keys obtained from the ACME server so making regular
    backups of this folder is ideal.
    2025/06/19 11:43:14 [INFO] [*.REDACTED, REDACTED] acme: Obtaining bundled SAN certificate
    2025/06/19 11:43:15 [INFO] [*.REDACTED] AuthURL: https://acme-staging-v02.api.letsencrypt.org/acme/authz/206984114/18108076104
    2025/06/19 11:43:15 [INFO] [REDACTED] AuthURL: https://acme-staging-v02.api.letsencrypt.org/acme/authz/206984114/18108076114
    2025/06/19 11:43:15 [INFO] [*.REDACTED] acme: use dns-01 solver
    2025/06/19 11:43:15 [INFO] [REDACTED] acme: Could not find solver for: tls-alpn-01
    2025/06/19 11:43:15 [INFO] [REDACTED] acme: Could not find solver for: http-01
    2025/06/19 11:43:15 [INFO] [REDACTED] acme: use dns-01 solver
    2025/06/19 11:43:15 [INFO] [*.REDACTED] acme: Preparing to solve DNS-01
    2025/06/19 11:43:16 [INFO] [REDACTED] acme: Preparing to solve DNS-01
    2025/06/19 11:43:16 [INFO] [*.REDACTED] acme: Trying to solve DNS-01
    2025/06/19 11:43:16 [INFO] [*.REDACTED] acme: Checking DNS record propagation. [nameservers=127.0.0.53:53]
    2025/06/19 11:43:18 [INFO] Wait for propagation [timeout: 1m0s, interval: 2s]
    2025/06/19 11:43:18 [INFO] [*.REDACTED] acme: Waiting for DNS record propagation.
    2025/06/19 11:43:20 [INFO] [*.REDACTED] acme: Waiting for DNS record propagation.
    2025/06/19 11:43:23 [INFO] [*.REDACTED] acme: Waiting for DNS record propagation.
    2025/06/19 11:43:25 [INFO] [*.REDACTED] acme: Waiting for DNS record propagation.
    2025/06/19 11:43:27 [INFO] [*.REDACTED] acme: Waiting for DNS record propagation.
    2025/06/19 11:43:36 [INFO] [*.REDACTED] The server validated our request
    2025/06/19 11:43:36 [INFO] [REDACTED] acme: Trying to solve DNS-01
    2025/06/19 11:43:36 [INFO] [REDACTED] acme: Checking DNS record propagation. [nameservers=127.0.0.53:53]
    2025/06/19 11:43:38 [INFO] Wait for propagation [timeout: 1m0s, interval: 2s]
    2025/06/19 11:43:45 [INFO] [REDACTED] The server validated our request
    2025/06/19 11:43:45 [INFO] [*.REDACTED] acme: Cleaning DNS-01 challenge
    2025/06/19 11:43:45 [INFO] [REDACTED] acme: Cleaning DNS-01 challenge
    2025/06/19 11:43:45 [INFO] [*.REDACTED, REDACTED] acme: Validations succeeded; requesting certificates
    2025/06/19 11:43:46 [INFO] Wait for certificate [timeout: 30s, interval: 500ms]
    2025/06/19 11:43:48 [INFO] [*.REDACTED] Server responded with a certificate.
    joestr@joel-vm3:~/Development/git/github.com/joestr/lego-dyndnsforfree/lego-dyndnsforfree$ 

@ldez ldez removed the waiting-for/contrib-feedback Awaiting feedback from the contributor. label Jun 19, 2025
@ldez ldez added this to the unreleased milestone Jun 19, 2025
@ldez
Copy link
Member

ldez commented Jun 19, 2025

Just some notes:

  • The original code was not compiling.
  • The tests were failing.
  • There were unnecessary constants and code.
  • The design was not homogeneous with the other providers.
  • No API error management.

So either it was a bad copy-paste with no attempt to compile or run and no test execution, or it was AI-generated code.
In both cases, this should be avoided.

@joestr
Copy link
Contributor Author

joestr commented Jun 19, 2025

It was no AI slop that's for sure. It was an attempt to just get it working. I looked down how the active24 client was implemented but was unsure where to go from there and just called the URL with the parameters i had at hand.

The program did compile at first but I committed to a later point which had some cruft left in. Sorry.

Thank you for the clean up!

Copy link
Member

@ldez ldez left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@ldez ldez merged commit 7571c0b into go-acme:master Jun 19, 2025
7 checks passed
@ldez ldez modified the milestones: unreleased, v4.24 Jul 7, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Development

Successfully merging this pull request may close these issues.

2 participants