chore: wrap errors. (#1070)

This commit is contained in:
Ludovic Fernandez 2020-02-27 19:14:46 +01:00 committed by GitHub
parent 9d31db300b
commit 2da1ce06ea
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
114 changed files with 584 additions and 565 deletions

View file

@ -31,12 +31,12 @@ func (a *AccountService) New(req acme.Account) (acme.ExtendedAccount, error) {
func (a *AccountService) NewEAB(accMsg acme.Account, kid string, hmacEncoded string) (acme.ExtendedAccount, error) { func (a *AccountService) NewEAB(accMsg acme.Account, kid string, hmacEncoded string) (acme.ExtendedAccount, error) {
hmac, err := base64.RawURLEncoding.DecodeString(hmacEncoded) hmac, err := base64.RawURLEncoding.DecodeString(hmacEncoded)
if err != nil { if err != nil {
return acme.ExtendedAccount{}, fmt.Errorf("acme: could not decode hmac key: %v", err) return acme.ExtendedAccount{}, fmt.Errorf("acme: could not decode hmac key: %w", err)
} }
eabJWS, err := a.core.signEABContent(a.core.GetDirectory().NewAccountURL, kid, hmac) eabJWS, err := a.core.signEABContent(a.core.GetDirectory().NewAccountURL, kid, hmac)
if err != nil { if err != nil {
return acme.ExtendedAccount{}, fmt.Errorf("acme: error signing eab content: %v", err) return acme.ExtendedAccount{}, fmt.Errorf("acme: error signing eab content: %w", err)
} }
accMsg.ExternalAccountBinding = eabJWS accMsg.ExternalAccountBinding = eabJWS

View file

@ -118,7 +118,7 @@ func (a *Core) retrievablePost(uri string, content []byte, response interface{})
func (a *Core) signedPost(uri string, content []byte, response interface{}) (*http.Response, error) { func (a *Core) signedPost(uri string, content []byte, response interface{}) (*http.Response, error) {
signedContent, err := a.jws.SignContent(uri, content) signedContent, err := a.jws.SignContent(uri, content)
if err != nil { if err != nil {
return nil, fmt.Errorf("failed to post JWS message -> failed to sign content -> %v", err) return nil, fmt.Errorf("failed to post JWS message -> failed to sign content -> %w", err)
} }
signedBody := bytes.NewBuffer([]byte(signedContent.FullSerialize())) signedBody := bytes.NewBuffer([]byte(signedContent.FullSerialize()))
@ -155,7 +155,7 @@ func (a *Core) GetDirectory() acme.Directory {
func getDirectory(do *sender.Doer, caDirURL string) (acme.Directory, error) { func getDirectory(do *sender.Doer, caDirURL string) (acme.Directory, error) {
var dir acme.Directory var dir acme.Directory
if _, err := do.Get(caDirURL, &dir); err != nil { if _, err := do.Get(caDirURL, &dir); err != nil {
return dir, fmt.Errorf("get directory at '%s': %v", caDirURL, err) return dir, fmt.Errorf("get directory at '%s': %w", caDirURL, err)
} }
if dir.NewAccountURL == "" { if dir.NewAccountURL == "" {

View file

@ -57,7 +57,7 @@ func (n *Manager) Nonce() (string, error) {
func (n *Manager) getNonce() (string, error) { func (n *Manager) getNonce() (string, error) {
resp, err := n.do.Head(n.nonceURL) resp, err := n.do.Head(n.nonceURL)
if err != nil { if err != nil {
return "", fmt.Errorf("failed to get nonce from HTTP HEAD -> %v", err) return "", fmt.Errorf("failed to get nonce from HTTP HEAD -> %w", err)
} }
return GetFromResponse(resp) return GetFromResponse(resp)
@ -71,7 +71,7 @@ func GetFromResponse(resp *http.Response) (string, error) {
nonce := resp.Header.Get("Replay-Nonce") nonce := resp.Header.Get("Replay-Nonce")
if nonce == "" { if nonce == "" {
return "", fmt.Errorf("server did not respond with a proper nonce header") return "", errors.New("server did not respond with a proper nonce header")
} }
return nonce, nil return nonce, nil

View file

@ -65,12 +65,12 @@ func (j *JWS) SignContent(url string, content []byte) (*jose.JSONWebSignature, e
signer, err := jose.NewSigner(signKey, &options) signer, err := jose.NewSigner(signKey, &options)
if err != nil { if err != nil {
return nil, fmt.Errorf("failed to create jose signer -> %v", err) return nil, fmt.Errorf("failed to create jose signer -> %w", err)
} }
signed, err := signer.Sign(content) signed, err := signer.Sign(content)
if err != nil { if err != nil {
return nil, fmt.Errorf("failed to sign content -> %v", err) return nil, fmt.Errorf("failed to sign content -> %w", err)
} }
return signed, nil return signed, nil
} }
@ -80,7 +80,7 @@ func (j *JWS) SignEABContent(url, kid string, hmac []byte) (*jose.JSONWebSignatu
jwk := jose.JSONWebKey{Key: j.privKey} jwk := jose.JSONWebKey{Key: j.privKey}
jwkJSON, err := jwk.Public().MarshalJSON() jwkJSON, err := jwk.Public().MarshalJSON()
if err != nil { if err != nil {
return nil, fmt.Errorf("acme: error encoding eab jwk key: %v", err) return nil, fmt.Errorf("acme: error encoding eab jwk key: %w", err)
} }
signer, err := jose.NewSigner( signer, err := jose.NewSigner(
@ -94,12 +94,12 @@ func (j *JWS) SignEABContent(url, kid string, hmac []byte) (*jose.JSONWebSignatu
}, },
) )
if err != nil { if err != nil {
return nil, fmt.Errorf("failed to create External Account Binding jose signer -> %v", err) return nil, fmt.Errorf("failed to create External Account Binding jose signer -> %w", err)
} }
signed, err := signer.Sign(jwkJSON) signed, err := signer.Sign(jwkJSON)
if err != nil { if err != nil {
return nil, fmt.Errorf("failed to External Account Binding sign content -> %v", err) return nil, fmt.Errorf("failed to External Account Binding sign content -> %w", err)
} }
return signed, nil return signed, nil

View file

@ -70,7 +70,7 @@ func (d *Doer) Post(url string, body io.Reader, bodyType string, response interf
func (d *Doer) newRequest(method, uri string, body io.Reader, opts ...RequestOption) (*http.Request, error) { func (d *Doer) newRequest(method, uri string, body io.Reader, opts ...RequestOption) (*http.Request, error) {
req, err := http.NewRequest(method, uri, body) req, err := http.NewRequest(method, uri, body)
if err != nil { if err != nil {
return nil, fmt.Errorf("failed to create request: %v", err) return nil, fmt.Errorf("failed to create request: %w", err)
} }
req.Header.Set("User-Agent", d.formatUserAgent()) req.Header.Set("User-Agent", d.formatUserAgent())
@ -78,7 +78,7 @@ func (d *Doer) newRequest(method, uri string, body io.Reader, opts ...RequestOpt
for _, opt := range opts { for _, opt := range opts {
err = opt(req) err = opt(req)
if err != nil { if err != nil {
return nil, fmt.Errorf("failed to create request: %v", err) return nil, fmt.Errorf("failed to create request: %w", err)
} }
} }
@ -105,7 +105,7 @@ func (d *Doer) do(req *http.Request, response interface{}) (*http.Response, erro
err = json.Unmarshal(raw, response) err = json.Unmarshal(raw, response)
if err != nil { if err != nil {
return resp, fmt.Errorf("failed to unmarshal %q to type %T: %v", raw, response, err) return resp, fmt.Errorf("failed to unmarshal %q to type %T: %w", raw, response, err)
} }
} }
@ -122,13 +122,13 @@ func checkError(req *http.Request, resp *http.Response) error {
if resp.StatusCode >= http.StatusBadRequest { if resp.StatusCode >= http.StatusBadRequest {
body, err := ioutil.ReadAll(resp.Body) body, err := ioutil.ReadAll(resp.Body)
if err != nil { if err != nil {
return fmt.Errorf("%d :: %s :: %s :: %v", resp.StatusCode, req.Method, req.URL, err) return fmt.Errorf("%d :: %s :: %s :: %w", resp.StatusCode, req.Method, req.URL, err)
} }
var errorDetails *acme.ProblemDetails var errorDetails *acme.ProblemDetails
err = json.Unmarshal(body, &errorDetails) err = json.Unmarshal(body, &errorDetails)
if err != nil { if err != nil {
return fmt.Errorf("%d ::%s :: %s :: %v :: %s", resp.StatusCode, req.Method, req.URL, err, string(body)) return fmt.Errorf("%d ::%s :: %s :: %w :: %s", resp.StatusCode, req.Method, req.URL, err, string(body))
} }
errorDetails.Method = req.Method errorDetails.Method = req.Method

View file

@ -167,7 +167,7 @@ func PEMBlock(data interface{}) *pem.Block {
func pemDecode(data []byte) (*pem.Block, error) { func pemDecode(data []byte) (*pem.Block, error) {
pemBlock, _ := pem.Decode(data) pemBlock, _ := pem.Decode(data)
if pemBlock == nil { if pemBlock == nil {
return nil, fmt.Errorf("PEM decode did not yield a valid block. Is the certificate in the right format?") return nil, errors.New("PEM decode did not yield a valid block. Is the certificate in the right format?")
} }
return pemBlock, nil return pemBlock, nil
@ -180,7 +180,7 @@ func PemDecodeTox509CSR(pem []byte) (*x509.CertificateRequest, error) {
} }
if pemBlock.Type != "CERTIFICATE REQUEST" { if pemBlock.Type != "CERTIFICATE REQUEST" {
return nil, fmt.Errorf("PEM block is not a certificate request") return nil, errors.New("PEM block is not a certificate request")
} }
return x509.ParseCertificateRequest(pemBlock.Bytes) return x509.ParseCertificateRequest(pemBlock.Bytes)

View file

@ -317,7 +317,7 @@ func (c *Certifier) Revoke(cert []byte) error {
x509Cert := certificates[0] x509Cert := certificates[0]
if x509Cert.IsCA { if x509Cert.IsCA {
return fmt.Errorf("certificate bundle starts with a CA certificate") return errors.New("certificate bundle starts with a CA certificate")
} }
revokeMsg := acme.RevokeCertMessage{ revokeMsg := acme.RevokeCertMessage{

View file

@ -93,7 +93,7 @@ func (c *Challenge) PreSolve(authz acme.Authorization) error {
err = c.provider.Present(authz.Identifier.Value, chlng.Token, keyAuth) err = c.provider.Present(authz.Identifier.Value, chlng.Token, keyAuth)
if err != nil { if err != nil {
return fmt.Errorf("[%s] acme: error presenting token: %s", domain, err) return fmt.Errorf("[%s] acme: error presenting token: %w", domain, err)
} }
return nil return nil

View file

@ -1,6 +1,7 @@
package dns01 package dns01
import ( import (
"errors"
"fmt" "fmt"
"net" "net"
"strings" "strings"
@ -98,7 +99,7 @@ func lookupNameservers(fqdn string) ([]string, error) {
zone, err := FindZoneByFqdn(fqdn) zone, err := FindZoneByFqdn(fqdn)
if err != nil { if err != nil {
return nil, fmt.Errorf("could not determine the zone: %v", err) return nil, fmt.Errorf("could not determine the zone: %w", err)
} }
r, err := dnsQuery(zone, dns.TypeNS, recursiveNameservers, true) r, err := dnsQuery(zone, dns.TypeNS, recursiveNameservers, true)
@ -115,7 +116,7 @@ func lookupNameservers(fqdn string) ([]string, error) {
if len(authoritativeNss) > 0 { if len(authoritativeNss) > 0 {
return authoritativeNss, nil return authoritativeNss, nil
} }
return nil, fmt.Errorf("could not determine authoritative nameservers") return nil, errors.New("could not determine authoritative nameservers")
} }
// FindPrimaryNsByFqdn determines the primary nameserver of the zone apex for the given fqdn // FindPrimaryNsByFqdn determines the primary nameserver of the zone apex for the given fqdn

View file

@ -51,7 +51,7 @@ func (c *Challenge) Solve(authz acme.Authorization) error {
err = c.provider.Present(authz.Identifier.Value, chlng.Token, keyAuth) err = c.provider.Present(authz.Identifier.Value, chlng.Token, keyAuth)
if err != nil { if err != nil {
return fmt.Errorf("[%s] acme: error presenting token: %v", domain, err) return fmt.Errorf("[%s] acme: error presenting token: %w", domain, err)
} }
defer func() { defer func() {
err := c.provider.CleanUp(authz.Identifier.Value, chlng.Token, keyAuth) err := c.provider.CleanUp(authz.Identifier.Value, chlng.Token, keyAuth)

View file

@ -37,7 +37,7 @@ func (s *ProviderServer) Present(domain, token, keyAuth string) error {
var err error var err error
s.listener, err = net.Listen("tcp", s.GetAddress()) s.listener, err = net.Listen("tcp", s.GetAddress())
if err != nil { if err != nil {
return fmt.Errorf("could not start HTTP server for challenge -> %v", err) return fmt.Errorf("could not start HTTP server for challenge -> %w", err)
} }
s.done = make(chan bool) s.done = make(chan bool)

View file

@ -79,7 +79,7 @@ func (c *SolverManager) chooseSolver(authz acme.Authorization) solver {
func validate(core *api.Core, domain string, chlg acme.Challenge) error { func validate(core *api.Core, domain string, chlg acme.Challenge) error {
chlng, err := core.Challenges.New(chlg.URL) chlng, err := core.Challenges.New(chlg.URL)
if err != nil { if err != nil {
return fmt.Errorf("failed to initiate challenge: %v", err) return fmt.Errorf("failed to initiate challenge: %w", err)
} }
valid, err := checkChallengeStatus(chlng) valid, err := checkChallengeStatus(chlng)

View file

@ -57,7 +57,7 @@ func (c *Challenge) Solve(authz acme.Authorization) error {
err = c.provider.Present(domain, chlng.Token, keyAuth) err = c.provider.Present(domain, chlng.Token, keyAuth)
if err != nil { if err != nil {
return fmt.Errorf("[%s] acme: error presenting token: %v", challenge.GetTargetedDomain(authz), err) return fmt.Errorf("[%s] acme: error presenting token: %w", challenge.GetTargetedDomain(authz), err)
} }
defer func() { defer func() {
err := c.provider.CleanUp(domain, chlng.Token, keyAuth) err := c.provider.CleanUp(domain, chlng.Token, keyAuth)

View file

@ -66,7 +66,7 @@ func (s *ProviderServer) Present(domain, token, keyAuth string) error {
// Create the listener with the created tls.Config. // Create the listener with the created tls.Config.
s.listener, err = tls.Listen("tcp", s.GetAddress(), tlsConf) s.listener, err = tls.Listen("tcp", s.GetAddress(), tlsConf)
if err != nil { if err != nil {
return fmt.Errorf("could not start HTTPS server for challenge -> %v", err) return fmt.Errorf("could not start HTTPS server for challenge -> %w", err)
} }
// Shut the server down when we're finished. // Shut the server down when we're finished.

View file

@ -1480,7 +1480,7 @@ func displayDNSHelp(name string) error {
} }
if ew.err != nil { if ew.err != nil {
return fmt.Errorf("error: %v", ew.err) return fmt.Errorf("error: %w", ew.err)
} }
return w.Flush() return w.Flush()

View file

@ -288,7 +288,7 @@ func goTool() (string, error) {
goBin, err := exec.LookPath("go" + exeSuffix) goBin, err := exec.LookPath("go" + exeSuffix)
if err != nil { if err != nil {
return "", fmt.Errorf("cannot find go tool: %v", err) return "", fmt.Errorf("cannot find go tool: %w", err)
} }
return goBin, nil return goBin, nil

View file

@ -56,7 +56,7 @@ func displayDNSHelp(name string) error {
} }
if ew.err != nil { if ew.err != nil {
return fmt.Errorf("error: %v", ew.err) return fmt.Errorf("error: %w", ew.err)
} }
return w.Flush() return w.Flush()

View file

@ -11,12 +11,12 @@ import (
func For(msg string, timeout, interval time.Duration, f func() (bool, error)) error { func For(msg string, timeout, interval time.Duration, f func() (bool, error)) error {
log.Infof("Wait for %s [timeout: %s, interval: %s]", msg, timeout, interval) log.Infof("Wait for %s [timeout: %s, interval: %s]", msg, timeout, interval)
var lastErr string var lastErr error
timeUp := time.After(timeout) timeUp := time.After(timeout)
for { for {
select { select {
case <-timeUp: case <-timeUp:
return fmt.Errorf("time limit exceeded: last error: %s", lastErr) return fmt.Errorf("time limit exceeded: last error: %w", lastErr)
default: default:
} }
@ -25,7 +25,7 @@ func For(msg string, timeout, interval time.Duration, f func() (bool, error)) er
return nil return nil
} }
if err != nil { if err != nil {
lastErr = err.Error() lastErr = err
} }
time.Sleep(interval) time.Sleep(interval)

View file

@ -45,7 +45,7 @@ type DNSProvider struct {
func NewDNSProvider() (*DNSProvider, error) { func NewDNSProvider() (*DNSProvider, error) {
values, err := env.Get(apiBaseEnvVar, storagePathEnvVar) values, err := env.Get(apiBaseEnvVar, storagePathEnvVar)
if err != nil { if err != nil {
return nil, fmt.Errorf("acme-dns: %v", err) return nil, fmt.Errorf("acme-dns: %w", err)
} }
client := goacmedns.NewClient(values[apiBaseEnvVar]) client := goacmedns.NewClient(values[apiBaseEnvVar])

View file

@ -49,7 +49,7 @@ type DNSProvider struct {
func NewDNSProvider() (*DNSProvider, error) { func NewDNSProvider() (*DNSProvider, error) {
values, err := env.Get("ALICLOUD_ACCESS_KEY", "ALICLOUD_SECRET_KEY") values, err := env.Get("ALICLOUD_ACCESS_KEY", "ALICLOUD_SECRET_KEY")
if err != nil { if err != nil {
return nil, fmt.Errorf("alicloud: %v", err) return nil, fmt.Errorf("alicloud: %w", err)
} }
config := NewDefaultConfig() config := NewDefaultConfig()
@ -79,7 +79,7 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) {
client, err := alidns.NewClientWithOptions(config.RegionID, conf, credential) client, err := alidns.NewClientWithOptions(config.RegionID, conf, credential)
if err != nil { if err != nil {
return nil, fmt.Errorf("alicloud: credentials failed: %v", err) return nil, fmt.Errorf("alicloud: credentials failed: %w", err)
} }
return &DNSProvider{config: config, client: client}, nil return &DNSProvider{config: config, client: client}, nil
@ -97,14 +97,14 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
zoneName, err := d.getHostedZone(domain) zoneName, err := d.getHostedZone(domain)
if err != nil { if err != nil {
return fmt.Errorf("alicloud: %v", err) return fmt.Errorf("alicloud: %w", err)
} }
recordAttributes := d.newTxtRecord(zoneName, fqdn, value) recordAttributes := d.newTxtRecord(zoneName, fqdn, value)
_, err = d.client.AddDomainRecord(recordAttributes) _, err = d.client.AddDomainRecord(recordAttributes)
if err != nil { if err != nil {
return fmt.Errorf("alicloud: API call failed: %v", err) return fmt.Errorf("alicloud: API call failed: %w", err)
} }
return nil return nil
} }
@ -115,12 +115,12 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
records, err := d.findTxtRecords(domain, fqdn) records, err := d.findTxtRecords(domain, fqdn)
if err != nil { if err != nil {
return fmt.Errorf("alicloud: %v", err) return fmt.Errorf("alicloud: %w", err)
} }
_, err = d.getHostedZone(domain) _, err = d.getHostedZone(domain)
if err != nil { if err != nil {
return fmt.Errorf("alicloud: %v", err) return fmt.Errorf("alicloud: %w", err)
} }
for _, rec := range records { for _, rec := range records {
@ -128,7 +128,7 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
request.RecordId = rec.RecordId request.RecordId = rec.RecordId
_, err = d.client.DeleteDomainRecord(request) _, err = d.client.DeleteDomainRecord(request)
if err != nil { if err != nil {
return fmt.Errorf("alicloud: %v", err) return fmt.Errorf("alicloud: %w", err)
} }
} }
return nil return nil
@ -145,7 +145,7 @@ func (d *DNSProvider) getHostedZone(domain string) (string, error) {
response, err := d.client.DescribeDomains(request) response, err := d.client.DescribeDomains(request)
if err != nil { if err != nil {
return "", fmt.Errorf("API call failed: %v", err) return "", fmt.Errorf("API call failed: %w", err)
} }
domains = append(domains, response.Domains.Domain...) domains = append(domains, response.Domains.Domain...)
@ -200,7 +200,7 @@ func (d *DNSProvider) findTxtRecords(domain, fqdn string) ([]alidns.Record, erro
result, err := d.client.DescribeDomainRecords(request) result, err := d.client.DescribeDomainRecords(request)
if err != nil { if err != nil {
return records, fmt.Errorf("API call has failed: %v", err) return records, fmt.Errorf("API call has failed: %w", err)
} }
recordName := d.extractRecordName(fqdn, zoneName) recordName := d.extractRecordName(fqdn, zoneName)

View file

@ -47,7 +47,7 @@ type DNSProvider struct {
func NewDNSProvider() (*DNSProvider, error) { func NewDNSProvider() (*DNSProvider, error) {
values, err := env.Get("AURORA_USER_ID", "AURORA_KEY") values, err := env.Get("AURORA_USER_ID", "AURORA_KEY")
if err != nil { if err != nil {
return nil, fmt.Errorf("aurora: %v", err) return nil, fmt.Errorf("aurora: %w", err)
} }
config := NewDefaultConfig() config := NewDefaultConfig()
@ -74,12 +74,12 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) {
tr, err := auroradns.NewTokenTransport(config.UserID, config.Key) tr, err := auroradns.NewTokenTransport(config.UserID, config.Key)
if err != nil { if err != nil {
return nil, fmt.Errorf("aurora: %v", err) return nil, fmt.Errorf("aurora: %w", err)
} }
client, err := auroradns.NewClient(tr.Client(), auroradns.WithBaseURL(config.BaseURL)) client, err := auroradns.NewClient(tr.Client(), auroradns.WithBaseURL(config.BaseURL))
if err != nil { if err != nil {
return nil, fmt.Errorf("aurora: %v", err) return nil, fmt.Errorf("aurora: %w", err)
} }
return &DNSProvider{ return &DNSProvider{
@ -95,7 +95,7 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
authZone, err := dns01.FindZoneByFqdn(dns01.ToFqdn(domain)) authZone, err := dns01.FindZoneByFqdn(dns01.ToFqdn(domain))
if err != nil { if err != nil {
return fmt.Errorf("aurora: could not determine zone for domain: '%s'. %s", domain, err) return fmt.Errorf("aurora: could not determine zone for domain %q: %w", domain, err)
} }
// 1. Aurora will happily create the TXT record when it is provided a fqdn, // 1. Aurora will happily create the TXT record when it is provided a fqdn,
@ -111,7 +111,7 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
zone, err := d.getZoneInformationByName(authZone) zone, err := d.getZoneInformationByName(authZone)
if err != nil { if err != nil {
return fmt.Errorf("aurora: could not create record: %v", err) return fmt.Errorf("aurora: could not create record: %w", err)
} }
record := auroradns.Record{ record := auroradns.Record{
@ -123,7 +123,7 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
newRecord, _, err := d.client.CreateRecord(zone.ID, record) newRecord, _, err := d.client.CreateRecord(zone.ID, record)
if err != nil { if err != nil {
return fmt.Errorf("aurora: could not create record: %v", err) return fmt.Errorf("aurora: could not create record: %w", err)
} }
d.recordIDsMu.Lock() d.recordIDsMu.Lock()
@ -147,7 +147,7 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
authZone, err := dns01.FindZoneByFqdn(dns01.ToFqdn(domain)) authZone, err := dns01.FindZoneByFqdn(dns01.ToFqdn(domain))
if err != nil { if err != nil {
return fmt.Errorf("could not determine zone for domain: %q. %v", domain, err) return fmt.Errorf("could not determine zone for domain %q: %w", domain, err)
} }
authZone = dns01.UnFqdn(authZone) authZone = dns01.UnFqdn(authZone)
@ -187,5 +187,5 @@ func (d *DNSProvider) getZoneInformationByName(name string) (auroradns.Zone, err
} }
} }
return auroradns.Zone{}, fmt.Errorf("could not find Zone record") return auroradns.Zone{}, errors.New("could not find Zone record")
} }

View file

@ -1,6 +1,7 @@
package autodns package autodns
import ( import (
"errors"
"fmt" "fmt"
"net/http" "net/http"
"net/url" "net/url"
@ -63,7 +64,7 @@ func (d *DNSProvider) Timeout() (timeout, interval time.Duration) {
func NewDNSProvider() (*DNSProvider, error) { func NewDNSProvider() (*DNSProvider, error) {
values, err := env.Get(envAPIUser, envAPIPassword) values, err := env.Get(envAPIUser, envAPIPassword)
if err != nil { if err != nil {
return nil, fmt.Errorf("autodns: %v", err) return nil, fmt.Errorf("autodns: %w", err)
} }
config := NewDefaultConfig() config := NewDefaultConfig()
@ -75,15 +76,15 @@ func NewDNSProvider() (*DNSProvider, error) {
func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { func NewDNSProviderConfig(config *Config) (*DNSProvider, error) {
if config == nil { if config == nil {
return nil, fmt.Errorf("autodns: config is nil") return nil, errors.New("autodns: config is nil")
} }
if config.Username == "" { if config.Username == "" {
return nil, fmt.Errorf("autodns: missing user") return nil, errors.New("autodns: missing user")
} }
if config.Password == "" { if config.Password == "" {
return nil, fmt.Errorf("autodns: missing password") return nil, errors.New("autodns: missing password")
} }
return &DNSProvider{config: config}, nil return &DNSProvider{config: config}, nil
@ -102,7 +103,7 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
_, err := d.addTxtRecord(domain, records) _, err := d.addTxtRecord(domain, records)
if err != nil { if err != nil {
return fmt.Errorf("autodns: %v", err) return fmt.Errorf("autodns: %w", err)
} }
return nil return nil
@ -120,7 +121,7 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
}} }}
if err := d.removeTXTRecord(domain, records); err != nil { if err := d.removeTXTRecord(domain, records); err != nil {
return fmt.Errorf("autodns: %v", err) return fmt.Errorf("autodns: %w", err)
} }
return nil return nil

View file

@ -139,7 +139,7 @@ func (d *DNSProvider) sendRequest(req *http.Request, result interface{}) error {
err = json.Unmarshal(raw, result) err = json.Unmarshal(raw, result)
if err != nil { if err != nil {
return fmt.Errorf("unmarshaling %T error [status code=%d]: %v: %s", result, resp.StatusCode, err, string(raw)) return fmt.Errorf("unmarshaling %T error [status code=%d]: %w: %s", result, resp.StatusCode, err, string(raw))
} }
return err return err
} }
@ -157,7 +157,7 @@ func checkResponse(resp *http.Response) error {
raw, err := ioutil.ReadAll(resp.Body) raw, err := ioutil.ReadAll(resp.Body)
if err != nil { if err != nil {
return fmt.Errorf("unable to read body: status code=%d, error=%v", resp.StatusCode, err) return fmt.Errorf("unable to read body: status code=%d, error=%w", resp.StatusCode, err)
} }
return fmt.Errorf("status code=%d: %s", resp.StatusCode, string(raw)) return fmt.Errorf("status code=%d: %s", resp.StatusCode, string(raw))

View file

@ -89,7 +89,7 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) {
if config.SubscriptionID == "" { if config.SubscriptionID == "" {
subsID, err := getMetadata(config, "subscriptionId") subsID, err := getMetadata(config, "subscriptionId")
if err != nil { if err != nil {
return nil, fmt.Errorf("azure: %v", err) return nil, fmt.Errorf("azure: %w", err)
} }
if subsID == "" { if subsID == "" {
@ -101,7 +101,7 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) {
if config.ResourceGroup == "" { if config.ResourceGroup == "" {
resGroup, err := getMetadata(config, "resourceGroupName") resGroup, err := getMetadata(config, "resourceGroupName")
if err != nil { if err != nil {
return nil, fmt.Errorf("azure: %v", err) return nil, fmt.Errorf("azure: %w", err)
} }
if resGroup == "" { if resGroup == "" {
@ -126,7 +126,7 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
zone, err := d.getHostedZoneID(ctx, fqdn) zone, err := d.getHostedZoneID(ctx, fqdn)
if err != nil { if err != nil {
return fmt.Errorf("azure: %v", err) return fmt.Errorf("azure: %w", err)
} }
rsc := dns.NewRecordSetsClient(d.config.SubscriptionID) rsc := dns.NewRecordSetsClient(d.config.SubscriptionID)
@ -139,7 +139,7 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
if err != nil { if err != nil {
detailedError, ok := err.(autorest.DetailedError) detailedError, ok := err.(autorest.DetailedError)
if !ok || detailedError.StatusCode != http.StatusNotFound { if !ok || detailedError.StatusCode != http.StatusNotFound {
return fmt.Errorf("azure: %v", err) return fmt.Errorf("azure: %w", err)
} }
} }
@ -169,7 +169,7 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
_, err = rsc.CreateOrUpdate(ctx, d.config.ResourceGroup, zone, relative, dns.TXT, rec, "", "") _, err = rsc.CreateOrUpdate(ctx, d.config.ResourceGroup, zone, relative, dns.TXT, rec, "", "")
if err != nil { if err != nil {
return fmt.Errorf("azure: %v", err) return fmt.Errorf("azure: %w", err)
} }
return nil return nil
} }
@ -181,7 +181,7 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
zone, err := d.getHostedZoneID(ctx, fqdn) zone, err := d.getHostedZoneID(ctx, fqdn)
if err != nil { if err != nil {
return fmt.Errorf("azure: %v", err) return fmt.Errorf("azure: %w", err)
} }
relative := toRelativeRecord(fqdn, dns01.ToFqdn(zone)) relative := toRelativeRecord(fqdn, dns01.ToFqdn(zone))
@ -190,7 +190,7 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
_, err = rsc.Delete(ctx, d.config.ResourceGroup, zone, relative, dns.TXT, "") _, err = rsc.Delete(ctx, d.config.ResourceGroup, zone, relative, dns.TXT, "")
if err != nil { if err != nil {
return fmt.Errorf("azure: %v", err) return fmt.Errorf("azure: %w", err)
} }
return nil return nil
} }

View file

@ -43,7 +43,7 @@ type DNSProvider struct {
func NewDNSProvider() (*DNSProvider, error) { func NewDNSProvider() (*DNSProvider, error) {
values, err := env.Get("BINDMAN_MANAGER_ADDRESS") values, err := env.Get("BINDMAN_MANAGER_ADDRESS")
if err != nil { if err != nil {
return nil, fmt.Errorf("bindman: %v", err) return nil, fmt.Errorf("bindman: %w", err)
} }
config := NewDefaultConfig() config := NewDefaultConfig()
@ -59,12 +59,12 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) {
} }
if config.BaseURL == "" { if config.BaseURL == "" {
return nil, fmt.Errorf("bindman: bindman manager address missing") return nil, errors.New("bindman: bindman manager address missing")
} }
bClient, err := client.New(config.BaseURL, config.HTTPClient) bClient, err := client.New(config.BaseURL, config.HTTPClient)
if err != nil { if err != nil {
return nil, fmt.Errorf("bindman: %v", err) return nil, fmt.Errorf("bindman: %w", err)
} }
return &DNSProvider{config: config, client: bClient}, nil return &DNSProvider{config: config, client: bClient}, nil
@ -77,7 +77,7 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
fqdn, value := dns01.GetRecord(domain, keyAuth) fqdn, value := dns01.GetRecord(domain, keyAuth)
if err := d.client.AddRecord(fqdn, "TXT", value); err != nil { if err := d.client.AddRecord(fqdn, "TXT", value); err != nil {
return fmt.Errorf("bindman: %v", err) return fmt.Errorf("bindman: %w", err)
} }
return nil return nil
} }
@ -87,7 +87,7 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
fqdn, _ := dns01.GetRecord(domain, keyAuth) fqdn, _ := dns01.GetRecord(domain, keyAuth)
if err := d.client.RemoveRecord(fqdn, "TXT"); err != nil { if err := d.client.RemoveRecord(fqdn, "TXT"); err != nil {
return fmt.Errorf("bindman: %v", err) return fmt.Errorf("bindman: %w", err)
} }
return nil return nil
} }

View file

@ -61,7 +61,7 @@ type DNSProvider struct {
func NewDNSProvider() (*DNSProvider, error) { func NewDNSProvider() (*DNSProvider, error) {
values, err := env.Get("BLUECAT_SERVER_URL", "BLUECAT_USER_NAME", "BLUECAT_PASSWORD", "BLUECAT_CONFIG_NAME", "BLUECAT_DNS_VIEW") values, err := env.Get("BLUECAT_SERVER_URL", "BLUECAT_USER_NAME", "BLUECAT_PASSWORD", "BLUECAT_CONFIG_NAME", "BLUECAT_DNS_VIEW")
if err != nil { if err != nil {
return nil, fmt.Errorf("bluecat: %v", err) return nil, fmt.Errorf("bluecat: %w", err)
} }
config := NewDefaultConfig() config := NewDefaultConfig()
@ -81,7 +81,7 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) {
} }
if config.BaseURL == "" || config.UserName == "" || config.Password == "" || config.ConfigName == "" || config.DNSView == "" { if config.BaseURL == "" || config.UserName == "" || config.Password == "" || config.ConfigName == "" || config.DNSView == "" {
return nil, fmt.Errorf("bluecat: credentials missing") return nil, errors.New("bluecat: credentials missing")
} }
return &DNSProvider{config: config}, nil return &DNSProvider{config: config}, nil
@ -174,7 +174,7 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
var txtRec entityResponse var txtRec entityResponse
err = json.NewDecoder(resp.Body).Decode(&txtRec) err = json.NewDecoder(resp.Body).Decode(&txtRec)
if err != nil { if err != nil {
return fmt.Errorf("bluecat: %v", err) return fmt.Errorf("bluecat: %w", err)
} }
queryArgs = map[string]string{ queryArgs = map[string]string{
"objectId": strconv.FormatUint(uint64(txtRec.ID), 10), "objectId": strconv.FormatUint(uint64(txtRec.ID), 10),

View file

@ -42,7 +42,7 @@ func (d *DNSProvider) login() error {
authBytes, err := ioutil.ReadAll(resp.Body) authBytes, err := ioutil.ReadAll(resp.Body)
if err != nil { if err != nil {
return fmt.Errorf("bluecat: %v", err) return fmt.Errorf("bluecat: %w", err)
} }
authResp := string(authBytes) authResp := string(authBytes)
@ -106,7 +106,7 @@ func (d *DNSProvider) lookupConfID() (uint, error) {
var conf entityResponse var conf entityResponse
err = json.NewDecoder(resp.Body).Decode(&conf) err = json.NewDecoder(resp.Body).Decode(&conf)
if err != nil { if err != nil {
return 0, fmt.Errorf("bluecat: %v", err) return 0, fmt.Errorf("bluecat: %w", err)
} }
return conf.ID, nil return conf.ID, nil
} }
@ -133,7 +133,7 @@ func (d *DNSProvider) lookupViewID(viewName string) (uint, error) {
var view entityResponse var view entityResponse
err = json.NewDecoder(resp.Body).Decode(&view) err = json.NewDecoder(resp.Body).Decode(&view)
if err != nil { if err != nil {
return 0, fmt.Errorf("bluecat: %v", err) return 0, fmt.Errorf("bluecat: %w", err)
} }
return view.ID, nil return view.ID, nil
@ -187,7 +187,7 @@ func (d *DNSProvider) getZone(parentID uint, name string) (uint, error) {
var zone entityResponse var zone entityResponse
err = json.NewDecoder(resp.Body).Decode(&zone) err = json.NewDecoder(resp.Body).Decode(&zone)
if err != nil { if err != nil {
return 0, fmt.Errorf("bluecat: %v", err) return 0, fmt.Errorf("bluecat: %w", err)
} }
return zone.ID, nil return zone.ID, nil
@ -215,12 +215,12 @@ func (d *DNSProvider) sendRequest(method, resource string, payload interface{},
body, err := json.Marshal(payload) body, err := json.Marshal(payload)
if err != nil { if err != nil {
return nil, fmt.Errorf("bluecat: %v", err) return nil, fmt.Errorf("bluecat: %w", err)
} }
req, err := http.NewRequest(method, url, bytes.NewReader(body)) req, err := http.NewRequest(method, url, bytes.NewReader(body))
if err != nil { if err != nil {
return nil, fmt.Errorf("bluecat: %v", err) return nil, fmt.Errorf("bluecat: %w", err)
} }
req.Header.Set("Content-Type", "application/json") req.Header.Set("Content-Type", "application/json")
if len(d.token) > 0 { if len(d.token) > 0 {
@ -235,7 +235,7 @@ func (d *DNSProvider) sendRequest(method, resource string, payload interface{},
req.URL.RawQuery = q.Encode() req.URL.RawQuery = q.Encode()
resp, err := d.config.HTTPClient.Do(req) resp, err := d.config.HTTPClient.Do(req)
if err != nil { if err != nil {
return nil, fmt.Errorf("bluecat: %v", err) return nil, fmt.Errorf("bluecat: %w", err)
} }
if resp.StatusCode >= 400 { if resp.StatusCode >= 400 {

View file

@ -1,6 +1,7 @@
package checkdomain package checkdomain
import ( import (
"errors"
"fmt" "fmt"
"net/http" "net/http"
"net/url" "net/url"
@ -59,7 +60,7 @@ type DNSProvider struct {
func NewDNSProvider() (*DNSProvider, error) { func NewDNSProvider() (*DNSProvider, error) {
values, err := env.Get(envToken) values, err := env.Get(envToken)
if err != nil { if err != nil {
return nil, fmt.Errorf("checkdomain: %v", err) return nil, fmt.Errorf("checkdomain: %w", err)
} }
config := NewDefaultConfig() config := NewDefaultConfig()
@ -67,7 +68,7 @@ func NewDNSProvider() (*DNSProvider, error) {
endpoint, err := url.Parse(env.GetOrDefaultString(envEndpoint, defaultEndpoint)) endpoint, err := url.Parse(env.GetOrDefaultString(envEndpoint, defaultEndpoint))
if err != nil { if err != nil {
return nil, fmt.Errorf("checkdomain: invalid %s: %v", envEndpoint, err) return nil, fmt.Errorf("checkdomain: invalid %s: %w", envEndpoint, err)
} }
config.Endpoint = endpoint config.Endpoint = endpoint
@ -76,11 +77,11 @@ func NewDNSProvider() (*DNSProvider, error) {
func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { func NewDNSProviderConfig(config *Config) (*DNSProvider, error) {
if config.Endpoint == nil { if config.Endpoint == nil {
return nil, fmt.Errorf("checkdomain: invalid endpoint") return nil, errors.New("checkdomain: invalid endpoint")
} }
if config.Token == "" { if config.Token == "" {
return nil, fmt.Errorf("checkdomain: missing token") return nil, errors.New("checkdomain: missing token")
} }
if config.HTTPClient == nil { if config.HTTPClient == nil {
@ -97,12 +98,12 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) {
func (d *DNSProvider) Present(domain, token, keyAuth string) error { func (d *DNSProvider) Present(domain, token, keyAuth string) error {
domainID, err := d.getDomainIDByName(domain) domainID, err := d.getDomainIDByName(domain)
if err != nil { if err != nil {
return fmt.Errorf("checkdomain: %v", err) return fmt.Errorf("checkdomain: %w", err)
} }
err = d.checkNameservers(domainID) err = d.checkNameservers(domainID)
if err != nil { if err != nil {
return fmt.Errorf("checkdomain: %v", err) return fmt.Errorf("checkdomain: %w", err)
} }
name, value := dns01.GetRecord(domain, keyAuth) name, value := dns01.GetRecord(domain, keyAuth)
@ -115,7 +116,7 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
}) })
if err != nil { if err != nil {
return fmt.Errorf("checkdomain: %v", err) return fmt.Errorf("checkdomain: %w", err)
} }
return nil return nil
@ -125,19 +126,19 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error { func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
domainID, err := d.getDomainIDByName(domain) domainID, err := d.getDomainIDByName(domain)
if err != nil { if err != nil {
return fmt.Errorf("checkdomain: %v", err) return fmt.Errorf("checkdomain: %w", err)
} }
err = d.checkNameservers(domainID) err = d.checkNameservers(domainID)
if err != nil { if err != nil {
return fmt.Errorf("checkdomain: %v", err) return fmt.Errorf("checkdomain: %w", err)
} }
name, value := dns01.GetRecord(domain, keyAuth) name, value := dns01.GetRecord(domain, keyAuth)
err = d.deleteTXTRecord(domainID, name, value) err = d.deleteTXTRecord(domainID, name, value)
if err != nil { if err != nil {
return fmt.Errorf("checkdomain: %v", err) return fmt.Errorf("checkdomain: %w", err)
} }
d.domainIDMu.Lock() d.domainIDMu.Lock()

View file

@ -3,6 +3,7 @@ package checkdomain
import ( import (
"bytes" "bytes"
"encoding/json" "encoding/json"
"errors"
"fmt" "fmt"
"io" "io"
"io/ioutil" "io/ioutil"
@ -124,13 +125,13 @@ func (d *DNSProvider) getDomainIDByName(name string) (int, error) {
} }
} }
return domainNotFound, fmt.Errorf("domain not found") return domainNotFound, errors.New("domain not found")
} }
func (d *DNSProvider) listDomains() ([]*Domain, error) { func (d *DNSProvider) listDomains() ([]*Domain, error) {
req, err := d.makeRequest(http.MethodGet, "/v1/domains", http.NoBody) req, err := d.makeRequest(http.MethodGet, "/v1/domains", http.NoBody)
if err != nil { if err != nil {
return nil, fmt.Errorf("failed to make request: %v", err) return nil, fmt.Errorf("failed to make request: %w", err)
} }
// Checkdomain also provides a query param 'query' which allows filtering domains for a string. // Checkdomain also provides a query param 'query' which allows filtering domains for a string.
@ -149,7 +150,7 @@ func (d *DNSProvider) listDomains() ([]*Domain, error) {
var res DomainListingResponse var res DomainListingResponse
if err := d.sendRequest(req, &res); err != nil { if err := d.sendRequest(req, &res); err != nil {
return nil, fmt.Errorf("failed to send domain listing request: %v", err) return nil, fmt.Errorf("failed to send domain listing request: %w", err)
} }
// This is the first response, // This is the first response,
@ -197,7 +198,7 @@ func (d *DNSProvider) checkNameservers(domainID int) error {
} }
if !found1 || !found2 { if !found1 || !found2 {
return fmt.Errorf("not using checkdomain nameservers, can not update records") return errors.New("not using checkdomain nameservers, can not update records")
} }
return nil return nil
@ -206,7 +207,7 @@ func (d *DNSProvider) checkNameservers(domainID int) error {
func (d *DNSProvider) createRecord(domainID int, record *Record) error { func (d *DNSProvider) createRecord(domainID int, record *Record) error {
bs, err := json.Marshal(record) bs, err := json.Marshal(record)
if err != nil { if err != nil {
return fmt.Errorf("encoding record failed: %v", err) return fmt.Errorf("encoding record failed: %w", err)
} }
req, err := d.makeRequest(http.MethodPost, fmt.Sprintf("/v1/domains/%d/nameservers/records", domainID), bytes.NewReader(bs)) req, err := d.makeRequest(http.MethodPost, fmt.Sprintf("/v1/domains/%d/nameservers/records", domainID), bytes.NewReader(bs))
@ -277,7 +278,7 @@ func (d *DNSProvider) getDomainInfo(domainID int) (*DomainResponse, error) {
func (d *DNSProvider) listRecords(domainID int, recordType string) ([]*Record, error) { func (d *DNSProvider) listRecords(domainID int, recordType string) ([]*Record, error) {
req, err := d.makeRequest(http.MethodGet, fmt.Sprintf("/v1/domains/%d/nameservers/records", domainID), http.NoBody) req, err := d.makeRequest(http.MethodGet, fmt.Sprintf("/v1/domains/%d/nameservers/records", domainID), http.NoBody)
if err != nil { if err != nil {
return nil, fmt.Errorf("failed to make request: %v", err) return nil, fmt.Errorf("failed to make request: %w", err)
} }
q := req.URL.Query() q := req.URL.Query()
@ -296,7 +297,7 @@ func (d *DNSProvider) listRecords(domainID int, recordType string) ([]*Record, e
var res RecordListingResponse var res RecordListingResponse
if err := d.sendRequest(req, &res); err != nil { if err := d.sendRequest(req, &res); err != nil {
return nil, fmt.Errorf("failed to send record listing request: %v", err) return nil, fmt.Errorf("failed to send record listing request: %w", err)
} }
// This is the first response, so we update totalPages and allocate the slice memory. // This is the first response, so we update totalPages and allocate the slice memory.
@ -315,7 +316,7 @@ func (d *DNSProvider) listRecords(domainID int, recordType string) ([]*Record, e
func (d *DNSProvider) replaceRecords(domainID int, records []*Record) error { func (d *DNSProvider) replaceRecords(domainID int, records []*Record) error {
bs, err := json.Marshal(records) bs, err := json.Marshal(records)
if err != nil { if err != nil {
return fmt.Errorf("encoding record failed: %v", err) return fmt.Errorf("encoding record failed: %w", err)
} }
req, err := d.makeRequest(http.MethodPut, fmt.Sprintf("/v1/domains/%d/nameservers/records", domainID), bytes.NewReader(bs)) req, err := d.makeRequest(http.MethodPut, fmt.Sprintf("/v1/domains/%d/nameservers/records", domainID), bytes.NewReader(bs))
@ -391,7 +392,7 @@ func (d *DNSProvider) sendRequest(req *http.Request, result interface{}) error {
err = json.Unmarshal(raw, result) err = json.Unmarshal(raw, result)
if err != nil { if err != nil {
return fmt.Errorf("unmarshaling %T error [status code=%d]: %v: %s", result, resp.StatusCode, err, string(raw)) return fmt.Errorf("unmarshaling %T error [status code=%d]: %w: %s", result, resp.StatusCode, err, string(raw))
} }
return nil return nil
} }
@ -409,7 +410,7 @@ func checkResponse(resp *http.Response) error {
raw, err := ioutil.ReadAll(resp.Body) raw, err := ioutil.ReadAll(resp.Body)
if err != nil { if err != nil {
return fmt.Errorf("unable to read body: status code=%d, error=%v", resp.StatusCode, err) return fmt.Errorf("unable to read body: status code=%d, error=%w", resp.StatusCode, err)
} }
return fmt.Errorf("status code=%d: %s", resp.StatusCode, string(raw)) return fmt.Errorf("status code=%d: %s", resp.StatusCode, string(raw))

View file

@ -102,7 +102,7 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) {
client, err := newClient(config) client, err := newClient(config)
if err != nil { if err != nil {
return nil, fmt.Errorf("cloudflare: %v", err) return nil, fmt.Errorf("cloudflare: %w", err)
} }
return &DNSProvider{ return &DNSProvider{
@ -124,12 +124,12 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
authZone, err := dns01.FindZoneByFqdn(fqdn) authZone, err := dns01.FindZoneByFqdn(fqdn)
if err != nil { if err != nil {
return fmt.Errorf("cloudflare: %v", err) return fmt.Errorf("cloudflare: %w", err)
} }
zoneID, err := d.client.ZoneIDByName(authZone) zoneID, err := d.client.ZoneIDByName(authZone)
if err != nil { if err != nil {
return fmt.Errorf("cloudflare: failed to find zone %s: %v", authZone, err) return fmt.Errorf("cloudflare: failed to find zone %s: %w", authZone, err)
} }
dnsRecord := cloudflare.DNSRecord{ dnsRecord := cloudflare.DNSRecord{
@ -141,7 +141,7 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
response, err := d.client.CreateDNSRecord(zoneID, dnsRecord) response, err := d.client.CreateDNSRecord(zoneID, dnsRecord)
if err != nil { if err != nil {
return fmt.Errorf("cloudflare: failed to create TXT record: %v", err) return fmt.Errorf("cloudflare: failed to create TXT record: %w", err)
} }
if !response.Success { if !response.Success {
@ -163,12 +163,12 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
authZone, err := dns01.FindZoneByFqdn(fqdn) authZone, err := dns01.FindZoneByFqdn(fqdn)
if err != nil { if err != nil {
return fmt.Errorf("cloudflare: %v", err) return fmt.Errorf("cloudflare: %w", err)
} }
zoneID, err := d.client.ZoneIDByName(authZone) zoneID, err := d.client.ZoneIDByName(authZone)
if err != nil { if err != nil {
return fmt.Errorf("cloudflare: failed to find zone %s: %v", authZone, err) return fmt.Errorf("cloudflare: failed to find zone %s: %w", authZone, err)
} }
// get the record's unique ID from when we created it // get the record's unique ID from when we created it
@ -181,7 +181,7 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
err = d.client.DeleteDNSRecord(zoneID, recordID) err = d.client.DeleteDNSRecord(zoneID, recordID)
if err != nil { if err != nil {
log.Printf("cloudflare: failed to delete TXT record: %v", err) log.Printf("cloudflare: failed to delete TXT record: %w", err)
} }
// Delete record ID from map // Delete record ID from map

View file

@ -46,7 +46,7 @@ type DNSProvider struct {
func NewDNSProvider() (*DNSProvider, error) { func NewDNSProvider() (*DNSProvider, error) {
values, err := env.Get("CLOUDNS_AUTH_ID", "CLOUDNS_AUTH_PASSWORD") values, err := env.Get("CLOUDNS_AUTH_ID", "CLOUDNS_AUTH_PASSWORD")
if err != nil { if err != nil {
return nil, fmt.Errorf("ClouDNS: %v", err) return nil, fmt.Errorf("ClouDNS: %w", err)
} }
config := NewDefaultConfig() config := NewDefaultConfig()
@ -64,7 +64,7 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) {
client, err := internal.NewClient(config.AuthID, config.AuthPassword) client, err := internal.NewClient(config.AuthID, config.AuthPassword)
if err != nil { if err != nil {
return nil, fmt.Errorf("ClouDNS: %v", err) return nil, fmt.Errorf("ClouDNS: %w", err)
} }
client.HTTPClient = config.HTTPClient client.HTTPClient = config.HTTPClient
@ -78,12 +78,12 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
zone, err := d.client.GetZone(fqdn) zone, err := d.client.GetZone(fqdn)
if err != nil { if err != nil {
return fmt.Errorf("ClouDNS: %v", err) return fmt.Errorf("ClouDNS: %w", err)
} }
err = d.client.AddTxtRecord(zone.Name, fqdn, value, d.config.TTL) err = d.client.AddTxtRecord(zone.Name, fqdn, value, d.config.TTL)
if err != nil { if err != nil {
return fmt.Errorf("ClouDNS: %v", err) return fmt.Errorf("ClouDNS: %w", err)
} }
return nil return nil
@ -95,12 +95,12 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
zone, err := d.client.GetZone(fqdn) zone, err := d.client.GetZone(fqdn)
if err != nil { if err != nil {
return fmt.Errorf("ClouDNS: %v", err) return fmt.Errorf("ClouDNS: %w", err)
} }
record, err := d.client.FindTxtRecord(zone.Name, fqdn) record, err := d.client.FindTxtRecord(zone.Name, fqdn)
if err != nil { if err != nil {
return fmt.Errorf("ClouDNS: %v", err) return fmt.Errorf("ClouDNS: %w", err)
} }
if record == nil { if record == nil {
@ -109,7 +109,7 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
err = d.client.RemoveTxtRecord(record.ID, zone.Name) err = d.client.RemoveTxtRecord(record.ID, zone.Name)
if err != nil { if err != nil {
return fmt.Errorf("ClouDNS: %v", err) return fmt.Errorf("ClouDNS: %w", err)
} }
return nil return nil
} }

View file

@ -43,11 +43,11 @@ type TXTRecords map[string]TXTRecord
// NewClient creates a ClouDNS client // NewClient creates a ClouDNS client
func NewClient(authID string, authPassword string) (*Client, error) { func NewClient(authID string, authPassword string) (*Client, error) {
if authID == "" { if authID == "" {
return nil, fmt.Errorf("credentials missing: authID") return nil, errors.New("credentials missing: authID")
} }
if authPassword == "" { if authPassword == "" {
return nil, fmt.Errorf("credentials missing: authPassword") return nil, errors.New("credentials missing: authPassword")
} }
baseURL, err := url.Parse(defaultBaseURL) baseURL, err := url.Parse(defaultBaseURL)
@ -96,7 +96,7 @@ func (c *Client) GetZone(authFQDN string) (*Zone, error) {
if len(result) > 0 { if len(result) > 0 {
if err = json.Unmarshal(result, &zone); err != nil { if err = json.Unmarshal(result, &zone); err != nil {
return nil, fmt.Errorf("zone unmarshaling error: %v", err) return nil, fmt.Errorf("zone unmarshaling error: %w", err)
} }
} }
@ -132,7 +132,7 @@ func (c *Client) FindTxtRecord(zoneName, fqdn string) (*TXTRecord, error) {
var records TXTRecords var records TXTRecords
if err = json.Unmarshal(result, &records); err != nil { if err = json.Unmarshal(result, &records); err != nil {
return nil, fmt.Errorf("TXT record unmarshaling error: %v: %s", err, string(result)) return nil, fmt.Errorf("TXT record unmarshaling error: %w: %s", err, string(result))
} }
for _, record := range records { for _, record := range records {
@ -166,7 +166,7 @@ func (c *Client) AddTxtRecord(zoneName string, fqdn, value string, ttl int) erro
resp := apiResponse{} resp := apiResponse{}
if err = json.Unmarshal(raw, &resp); err != nil { if err = json.Unmarshal(raw, &resp); err != nil {
return fmt.Errorf("apiResponse unmarshaling error: %v: %s", err, string(raw)) return fmt.Errorf("apiResponse unmarshaling error: %w: %s", err, string(raw))
} }
if resp.Status != "Success" { if resp.Status != "Success" {
@ -193,7 +193,7 @@ func (c *Client) RemoveTxtRecord(recordID int, zoneName string) error {
resp := apiResponse{} resp := apiResponse{}
if err = json.Unmarshal(raw, &resp); err != nil { if err = json.Unmarshal(raw, &resp); err != nil {
return fmt.Errorf("apiResponse unmarshaling error: %v: %s", err, string(raw)) return fmt.Errorf("apiResponse unmarshaling error: %w: %s", err, string(raw))
} }
if resp.Status != "Success" { if resp.Status != "Success" {
@ -235,7 +235,7 @@ func (c *Client) buildRequest(method string, url *url.URL) (*http.Request, error
req, err := http.NewRequest(method, url.String(), nil) req, err := http.NewRequest(method, url.String(), nil)
if err != nil { if err != nil {
return nil, fmt.Errorf("invalid request: %v", err) return nil, fmt.Errorf("invalid request: %w", err)
} }
return req, nil return req, nil

View file

@ -46,7 +46,7 @@ type DNSProvider struct {
func NewDNSProvider() (*DNSProvider, error) { func NewDNSProvider() (*DNSProvider, error) {
values, err := env.Get("CLOUDXNS_API_KEY", "CLOUDXNS_SECRET_KEY") values, err := env.Get("CLOUDXNS_API_KEY", "CLOUDXNS_SECRET_KEY")
if err != nil { if err != nil {
return nil, fmt.Errorf("CloudXNS: %v", err) return nil, fmt.Errorf("CloudXNS: %w", err)
} }
config := NewDefaultConfig() config := NewDefaultConfig()

View file

@ -5,6 +5,7 @@ import (
"crypto/md5" "crypto/md5"
"encoding/hex" "encoding/hex"
"encoding/json" "encoding/json"
"errors"
"fmt" "fmt"
"io/ioutil" "io/ioutil"
"net/http" "net/http"
@ -45,11 +46,11 @@ type TXTRecord struct {
// NewClient creates a CloudXNS client // NewClient creates a CloudXNS client
func NewClient(apiKey string, secretKey string) (*Client, error) { func NewClient(apiKey string, secretKey string) (*Client, error) {
if apiKey == "" { if apiKey == "" {
return nil, fmt.Errorf("CloudXNS: credentials missing: apiKey") return nil, errors.New("CloudXNS: credentials missing: apiKey")
} }
if secretKey == "" { if secretKey == "" {
return nil, fmt.Errorf("CloudXNS: credentials missing: secretKey") return nil, errors.New("CloudXNS: credentials missing: secretKey")
} }
return &Client{ return &Client{
@ -84,7 +85,7 @@ func (c *Client) GetDomainInformation(fqdn string) (*Data, error) {
if len(result) > 0 { if len(result) > 0 {
err = json.Unmarshal(result, &domains) err = json.Unmarshal(result, &domains)
if err != nil { if err != nil {
return nil, fmt.Errorf("CloudXNS: domains unmarshaling error: %v", err) return nil, fmt.Errorf("CloudXNS: domains unmarshaling error: %w", err)
} }
} }
@ -107,7 +108,7 @@ func (c *Client) FindTxtRecord(zoneID, fqdn string) (*TXTRecord, error) {
var records []TXTRecord var records []TXTRecord
err = json.Unmarshal(result, &records) err = json.Unmarshal(result, &records)
if err != nil { if err != nil {
return nil, fmt.Errorf("CloudXNS: TXT record unmarshaling error: %v", err) return nil, fmt.Errorf("CloudXNS: TXT record unmarshaling error: %w", err)
} }
for _, record := range records { for _, record := range records {
@ -123,7 +124,7 @@ func (c *Client) FindTxtRecord(zoneID, fqdn string) (*TXTRecord, error) {
func (c *Client) AddTxtRecord(info *Data, fqdn, value string, ttl int) error { func (c *Client) AddTxtRecord(info *Data, fqdn, value string, ttl int) error {
id, err := strconv.Atoi(info.ID) id, err := strconv.Atoi(info.ID)
if err != nil { if err != nil {
return fmt.Errorf("CloudXNS: invalid zone ID: %v", err) return fmt.Errorf("CloudXNS: invalid zone ID: %w", err)
} }
payload := TXTRecord{ payload := TXTRecord{
@ -137,7 +138,7 @@ func (c *Client) AddTxtRecord(info *Data, fqdn, value string, ttl int) error {
body, err := json.Marshal(payload) body, err := json.Marshal(payload)
if err != nil { if err != nil {
return fmt.Errorf("CloudXNS: record unmarshaling error: %v", err) return fmt.Errorf("CloudXNS: record unmarshaling error: %w", err)
} }
_, err = c.doRequest(http.MethodPost, "record", body) _, err = c.doRequest(http.MethodPost, "record", body)
@ -158,7 +159,7 @@ func (c *Client) doRequest(method, uri string, body []byte) (json.RawMessage, er
resp, err := c.HTTPClient.Do(req) resp, err := c.HTTPClient.Do(req)
if err != nil { if err != nil {
return nil, fmt.Errorf("CloudXNS: %v", err) return nil, fmt.Errorf("CloudXNS: %w", err)
} }
defer resp.Body.Close() defer resp.Body.Close()
@ -171,7 +172,7 @@ func (c *Client) doRequest(method, uri string, body []byte) (json.RawMessage, er
var r apiResponse var r apiResponse
err = json.Unmarshal(content, &r) err = json.Unmarshal(content, &r)
if err != nil { if err != nil {
return nil, fmt.Errorf("CloudXNS: response unmashaling error: %v: %s", err, toUnreadableBodyMessage(req, content)) return nil, fmt.Errorf("CloudXNS: response unmashaling error: %w: %s", err, toUnreadableBodyMessage(req, content))
} }
if r.Code != 1 { if r.Code != 1 {
@ -185,7 +186,7 @@ func (c *Client) buildRequest(method, uri string, body []byte) (*http.Request, e
req, err := http.NewRequest(method, url, bytes.NewReader(body)) req, err := http.NewRequest(method, url, bytes.NewReader(body))
if err != nil { if err != nil {
return nil, fmt.Errorf("CloudXNS: invalid request: %v", err) return nil, fmt.Errorf("CloudXNS: invalid request: %w", err)
} }
requestDate := time.Now().Format(time.RFC1123Z) requestDate := time.Now().Format(time.RFC1123Z)

View file

@ -48,7 +48,7 @@ type DNSProvider struct {
func NewDNSProvider() (*DNSProvider, error) { func NewDNSProvider() (*DNSProvider, error) {
values, err := env.Get("CONOHA_TENANT_ID", "CONOHA_API_USERNAME", "CONOHA_API_PASSWORD") values, err := env.Get("CONOHA_TENANT_ID", "CONOHA_API_USERNAME", "CONOHA_API_PASSWORD")
if err != nil { if err != nil {
return nil, fmt.Errorf("conoha: %v", err) return nil, fmt.Errorf("conoha: %w", err)
} }
config := NewDefaultConfig() config := NewDefaultConfig()
@ -79,7 +79,7 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) {
client, err := internal.NewClient(config.Region, auth, config.HTTPClient) client, err := internal.NewClient(config.Region, auth, config.HTTPClient)
if err != nil { if err != nil {
return nil, fmt.Errorf("conoha: failed to create client: %v", err) return nil, fmt.Errorf("conoha: failed to create client: %w", err)
} }
return &DNSProvider{config: config, client: client}, nil return &DNSProvider{config: config, client: client}, nil
@ -96,7 +96,7 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
id, err := d.client.GetDomainID(authZone) id, err := d.client.GetDomainID(authZone)
if err != nil { if err != nil {
return fmt.Errorf("conoha: failed to get domain ID: %v", err) return fmt.Errorf("conoha: failed to get domain ID: %w", err)
} }
record := internal.Record{ record := internal.Record{
@ -108,7 +108,7 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
err = d.client.CreateRecord(id, record) err = d.client.CreateRecord(id, record)
if err != nil { if err != nil {
return fmt.Errorf("conoha: failed to create record: %v", err) return fmt.Errorf("conoha: failed to create record: %w", err)
} }
return nil return nil
@ -125,17 +125,17 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
domID, err := d.client.GetDomainID(authZone) domID, err := d.client.GetDomainID(authZone)
if err != nil { if err != nil {
return fmt.Errorf("conoha: failed to get domain ID: %v", err) return fmt.Errorf("conoha: failed to get domain ID: %w", err)
} }
recID, err := d.client.GetRecordID(domID, fqdn, "TXT", value) recID, err := d.client.GetRecordID(domID, fqdn, "TXT", value)
if err != nil { if err != nil {
return fmt.Errorf("conoha: failed to get record ID: %v", err) return fmt.Errorf("conoha: failed to get record ID: %w", err)
} }
err = d.client.DeleteRecord(domID, recID) err = d.client.DeleteRecord(domID, recID)
if err != nil { if err != nil {
return fmt.Errorf("conoha: failed to delete record: %v", err) return fmt.Errorf("conoha: failed to delete record: %w", err)
} }
return nil return nil

View file

@ -90,7 +90,7 @@ func NewClient(region string, auth Auth, httpClient *http.Client) (*Client, erro
identity, err := c.getIdentity(auth) identity, err := c.getIdentity(auth)
if err != nil { if err != nil {
return nil, fmt.Errorf("failed to login: %v", err) return nil, fmt.Errorf("failed to login: %w", err)
} }
c.token = identity.Access.Token.ID c.token = identity.Access.Token.ID

View file

@ -4,6 +4,7 @@ import (
"crypto/hmac" "crypto/hmac"
"crypto/sha1" "crypto/sha1"
"encoding/base64" "encoding/base64"
"errors"
"fmt" "fmt"
"net/http" "net/http"
"strconv" "strconv"
@ -25,10 +26,10 @@ type TokenTransport struct {
// NewTokenTransport Creates a HTTP transport for API authentication. // NewTokenTransport Creates a HTTP transport for API authentication.
func NewTokenTransport(apiKey, secretKey string) (*TokenTransport, error) { func NewTokenTransport(apiKey, secretKey string) (*TokenTransport, error) {
if apiKey == "" { if apiKey == "" {
return nil, fmt.Errorf("credentials missing: API key") return nil, errors.New("credentials missing: API key")
} }
if secretKey == "" { if secretKey == "" {
return nil, fmt.Errorf("credentials missing: secret key") return nil, errors.New("credentials missing: secret key")
} }
return &TokenTransport{apiKey: apiKey, secretKey: secretKey}, nil return &TokenTransport{apiKey: apiKey, secretKey: secretKey}, nil

View file

@ -47,12 +47,12 @@ type DNSProvider struct {
func NewDNSProvider() (*DNSProvider, error) { func NewDNSProvider() (*DNSProvider, error) {
_, err := env.Get("OS_AUTH_URL", "OS_USERNAME", "OS_PASSWORD", "OS_TENANT_NAME", "OS_REGION_NAME") _, err := env.Get("OS_AUTH_URL", "OS_USERNAME", "OS_PASSWORD", "OS_TENANT_NAME", "OS_REGION_NAME")
if err != nil { if err != nil {
return nil, fmt.Errorf("designate: %v", err) return nil, fmt.Errorf("designate: %w", err)
} }
opts, err := openstack.AuthOptionsFromEnv() opts, err := openstack.AuthOptionsFromEnv()
if err != nil { if err != nil {
return nil, fmt.Errorf("designate: %v", err) return nil, fmt.Errorf("designate: %w", err)
} }
config := NewDefaultConfig() config := NewDefaultConfig()
@ -69,14 +69,14 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) {
provider, err := openstack.AuthenticatedClient(config.opts) provider, err := openstack.AuthenticatedClient(config.opts)
if err != nil { if err != nil {
return nil, fmt.Errorf("designate: failed to authenticate: %v", err) return nil, fmt.Errorf("designate: failed to authenticate: %w", err)
} }
dnsClient, err := openstack.NewDNSV2(provider, gophercloud.EndpointOpts{ dnsClient, err := openstack.NewDNSV2(provider, gophercloud.EndpointOpts{
Region: os.Getenv("OS_REGION_NAME"), Region: os.Getenv("OS_REGION_NAME"),
}) })
if err != nil { if err != nil {
return nil, fmt.Errorf("designate: failed to get DNS provider: %v", err) return nil, fmt.Errorf("designate: failed to get DNS provider: %w", err)
} }
return &DNSProvider{client: dnsClient, config: config}, nil return &DNSProvider{client: dnsClient, config: config}, nil
@ -94,12 +94,12 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
authZone, err := dns01.FindZoneByFqdn(fqdn) authZone, err := dns01.FindZoneByFqdn(fqdn)
if err != nil { if err != nil {
return fmt.Errorf("designate: couldn't get zone ID in Present: %v", err) return fmt.Errorf("designate: couldn't get zone ID in Present: %w", err)
} }
zoneID, err := d.getZoneID(authZone) zoneID, err := d.getZoneID(authZone)
if err != nil { if err != nil {
return fmt.Errorf("designate: %v", err) return fmt.Errorf("designate: %w", err)
} }
// use mutex to prevent race condition between creating the record and verifying it // use mutex to prevent race condition between creating the record and verifying it
@ -108,7 +108,7 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
existingRecord, err := d.getRecord(zoneID, fqdn) existingRecord, err := d.getRecord(zoneID, fqdn)
if err != nil { if err != nil {
return fmt.Errorf("designate: %v", err) return fmt.Errorf("designate: %w", err)
} }
if existingRecord != nil { if existingRecord != nil {
@ -122,7 +122,7 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
err = d.createRecord(zoneID, fqdn, value) err = d.createRecord(zoneID, fqdn, value)
if err != nil { if err != nil {
return fmt.Errorf("designate: %v", err) return fmt.Errorf("designate: %w", err)
} }
return nil return nil
@ -139,7 +139,7 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
zoneID, err := d.getZoneID(authZone) zoneID, err := d.getZoneID(authZone)
if err != nil { if err != nil {
return fmt.Errorf("designate: couldn't get zone ID in CleanUp: %v", err) return fmt.Errorf("designate: couldn't get zone ID in CleanUp: %w", err)
} }
// use mutex to prevent race condition between getting the record and deleting it // use mutex to prevent race condition between getting the record and deleting it
@ -148,7 +148,7 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
record, err := d.getRecord(zoneID, fqdn) record, err := d.getRecord(zoneID, fqdn)
if err != nil { if err != nil {
return fmt.Errorf("designate: couldn't get Record ID in CleanUp: %v", err) return fmt.Errorf("designate: couldn't get Record ID in CleanUp: %w", err)
} }
if record == nil { if record == nil {
@ -158,7 +158,7 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
err = recordsets.Delete(d.client, zoneID, record.ID).ExtractErr() err = recordsets.Delete(d.client, zoneID, record.ID).ExtractErr()
if err != nil { if err != nil {
return fmt.Errorf("designate: error for %s in CleanUp: %v", fqdn, err) return fmt.Errorf("designate: error for %s in CleanUp: %w", fqdn, err)
} }
return nil return nil
} }
@ -183,11 +183,11 @@ func (d *DNSProvider) createRecord(zoneID, fqdn, value string) error {
actual, err := recordsets.Create(d.client, zoneID, createOpts).Extract() actual, err := recordsets.Create(d.client, zoneID, createOpts).Extract()
if err != nil { if err != nil {
return fmt.Errorf("error for %s in Present while creating record: %v", fqdn, err) return fmt.Errorf("error for %s in Present while creating record: %w", fqdn, err)
} }
if actual.Name != fqdn || actual.TTL != d.config.TTL { if actual.Name != fqdn || actual.TTL != d.config.TTL {
return fmt.Errorf("the created record doesn't match what we wanted to create") return errors.New("the created record doesn't match what we wanted to create")
} }
return nil return nil

View file

@ -35,7 +35,7 @@ type apiError struct {
func (d *DNSProvider) removeTxtRecord(domain string, recordID int) error { func (d *DNSProvider) removeTxtRecord(domain string, recordID int) error {
authZone, err := dns01.FindZoneByFqdn(dns01.ToFqdn(domain)) authZone, err := dns01.FindZoneByFqdn(dns01.ToFqdn(domain))
if err != nil { if err != nil {
return fmt.Errorf("could not determine zone for domain: '%s'. %s", domain, err) return fmt.Errorf("could not determine zone for domain %q: %w", domain, err)
} }
reqURL := fmt.Sprintf("%s/v2/domains/%s/records/%d", d.config.BaseURL, dns01.UnFqdn(authZone), recordID) reqURL := fmt.Sprintf("%s/v2/domains/%s/records/%d", d.config.BaseURL, dns01.UnFqdn(authZone), recordID)
@ -60,7 +60,7 @@ func (d *DNSProvider) removeTxtRecord(domain string, recordID int) error {
func (d *DNSProvider) addTxtRecord(fqdn, value string) (*txtRecordResponse, error) { func (d *DNSProvider) addTxtRecord(fqdn, value string) (*txtRecordResponse, error) {
authZone, err := dns01.FindZoneByFqdn(dns01.ToFqdn(fqdn)) authZone, err := dns01.FindZoneByFqdn(dns01.ToFqdn(fqdn))
if err != nil { if err != nil {
return nil, fmt.Errorf("could not determine zone for domain: '%s'. %s", fqdn, err) return nil, fmt.Errorf("could not determine zone for domain %q: %w", fqdn, err)
} }
reqData := record{Type: "TXT", Name: fqdn, Data: value, TTL: d.config.TTL} reqData := record{Type: "TXT", Name: fqdn, Data: value, TTL: d.config.TTL}
@ -94,7 +94,7 @@ func (d *DNSProvider) addTxtRecord(fqdn, value string) (*txtRecordResponse, erro
respData := &txtRecordResponse{} respData := &txtRecordResponse{}
err = json.Unmarshal(content, respData) err = json.Unmarshal(content, respData)
if err != nil { if err != nil {
return nil, fmt.Errorf("%v: %s", err, toUnreadableBodyMessage(req, content)) return nil, fmt.Errorf("%w: %s", err, toUnreadableBodyMessage(req, content))
} }
return respData, nil return respData, nil
@ -121,7 +121,7 @@ func readError(req *http.Request, resp *http.Response) error {
var errInfo apiError var errInfo apiError
err = json.Unmarshal(content, &errInfo) err = json.Unmarshal(content, &errInfo)
if err != nil { if err != nil {
return fmt.Errorf("apiError unmarshaling error: %v: %s", err, toUnreadableBodyMessage(req, content)) return fmt.Errorf("apiError unmarshaling error: %w: %s", err, toUnreadableBodyMessage(req, content))
} }
return fmt.Errorf("HTTP %d: %s: %s", resp.StatusCode, errInfo.ID, errInfo.Message) return fmt.Errorf("HTTP %d: %s: %s", resp.StatusCode, errInfo.ID, errInfo.Message)

View file

@ -49,7 +49,7 @@ type DNSProvider struct {
func NewDNSProvider() (*DNSProvider, error) { func NewDNSProvider() (*DNSProvider, error) {
values, err := env.Get("DO_AUTH_TOKEN") values, err := env.Get("DO_AUTH_TOKEN")
if err != nil { if err != nil {
return nil, fmt.Errorf("digitalocean: %v", err) return nil, fmt.Errorf("digitalocean: %w", err)
} }
config := NewDefaultConfig() config := NewDefaultConfig()
@ -65,7 +65,7 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) {
} }
if config.AuthToken == "" { if config.AuthToken == "" {
return nil, fmt.Errorf("digitalocean: credentials missing") return nil, errors.New("digitalocean: credentials missing")
} }
if config.BaseURL == "" { if config.BaseURL == "" {
@ -90,7 +90,7 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
respData, err := d.addTxtRecord(fqdn, value) respData, err := d.addTxtRecord(fqdn, value)
if err != nil { if err != nil {
return fmt.Errorf("digitalocean: %v", err) return fmt.Errorf("digitalocean: %w", err)
} }
d.recordIDsMu.Lock() d.recordIDsMu.Lock()
@ -106,7 +106,7 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
authZone, err := dns01.FindZoneByFqdn(fqdn) authZone, err := dns01.FindZoneByFqdn(fqdn)
if err != nil { if err != nil {
return fmt.Errorf("digitalocean: %v", err) return fmt.Errorf("digitalocean: %w", err)
} }
// get the record's unique ID from when we created it // get the record's unique ID from when we created it
@ -119,7 +119,7 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
err = d.removeTxtRecord(authZone, recordID) err = d.removeTxtRecord(authZone, recordID)
if err != nil { if err != nil {
return fmt.Errorf("digitalocean: %v", err) return fmt.Errorf("digitalocean: %w", err)
} }
// Delete record ID from map // Delete record ID from map

View file

@ -58,7 +58,7 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) {
} }
if config.AccessToken == "" { if config.AccessToken == "" {
return nil, fmt.Errorf("dnsimple: OAuth token is missing") return nil, errors.New("dnsimple: OAuth token is missing")
} }
ts := oauth2.StaticTokenSource(&oauth2.Token{AccessToken: config.AccessToken}) ts := oauth2.StaticTokenSource(&oauth2.Token{AccessToken: config.AccessToken})
@ -77,18 +77,18 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
zoneName, err := d.getHostedZone(domain) zoneName, err := d.getHostedZone(domain)
if err != nil { if err != nil {
return fmt.Errorf("dnsimple: %v", err) return fmt.Errorf("dnsimple: %w", err)
} }
accountID, err := d.getAccountID() accountID, err := d.getAccountID()
if err != nil { if err != nil {
return fmt.Errorf("dnsimple: %v", err) return fmt.Errorf("dnsimple: %w", err)
} }
recordAttributes := newTxtRecord(zoneName, fqdn, value, d.config.TTL) recordAttributes := newTxtRecord(zoneName, fqdn, value, d.config.TTL)
_, err = d.client.Zones.CreateRecord(accountID, zoneName, recordAttributes) _, err = d.client.Zones.CreateRecord(accountID, zoneName, recordAttributes)
if err != nil { if err != nil {
return fmt.Errorf("dnsimple: API call failed: %v", err) return fmt.Errorf("dnsimple: API call failed: %w", err)
} }
return nil return nil
@ -100,19 +100,19 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
records, err := d.findTxtRecords(domain, fqdn) records, err := d.findTxtRecords(domain, fqdn)
if err != nil { if err != nil {
return fmt.Errorf("dnsimple: %v", err) return fmt.Errorf("dnsimple: %w", err)
} }
accountID, err := d.getAccountID() accountID, err := d.getAccountID()
if err != nil { if err != nil {
return fmt.Errorf("dnsimple: %v", err) return fmt.Errorf("dnsimple: %w", err)
} }
var lastErr error var lastErr error
for _, rec := range records { for _, rec := range records {
_, err := d.client.Zones.DeleteRecord(accountID, rec.ZoneID, rec.ID) _, err := d.client.Zones.DeleteRecord(accountID, rec.ZoneID, rec.ID)
if err != nil { if err != nil {
lastErr = fmt.Errorf("dnsimple: %v", err) lastErr = fmt.Errorf("dnsimple: %w", err)
} }
} }
@ -140,7 +140,7 @@ func (d *DNSProvider) getHostedZone(domain string) (string, error) {
zones, err := d.client.Zones.ListZones(accountID, &dnsimple.ZoneListOptions{NameLike: zoneName}) zones, err := d.client.Zones.ListZones(accountID, &dnsimple.ZoneListOptions{NameLike: zoneName})
if err != nil { if err != nil {
return "", fmt.Errorf("API call failed: %v", err) return "", fmt.Errorf("API call failed: %w", err)
} }
var hostedZone dnsimple.Zone var hostedZone dnsimple.Zone
@ -172,7 +172,7 @@ func (d *DNSProvider) findTxtRecords(domain, fqdn string) ([]dnsimple.ZoneRecord
result, err := d.client.Zones.ListRecords(accountID, zoneName, &dnsimple.ZoneRecordListOptions{Name: recordName, Type: "TXT", ListOptions: dnsimple.ListOptions{}}) result, err := d.client.Zones.ListRecords(accountID, zoneName, &dnsimple.ZoneRecordListOptions{Name: recordName, Type: "TXT", ListOptions: dnsimple.ListOptions{}})
if err != nil { if err != nil {
return nil, fmt.Errorf("API call has failed: %v", err) return nil, fmt.Errorf("API call has failed: %w", err)
} }
return result.Data, nil return result.Data, nil
@ -204,7 +204,7 @@ func (d *DNSProvider) getAccountID() (string, error) {
} }
if whoamiResponse.Data.Account == nil { if whoamiResponse.Data.Account == nil {
return "", fmt.Errorf("user tokens are not supported, please use an account token") return "", errors.New("user tokens are not supported, please use an account token")
} }
return strconv.FormatInt(whoamiResponse.Data.Account.ID, 10), nil return strconv.FormatInt(whoamiResponse.Data.Account.ID, 10), nil

View file

@ -54,7 +54,7 @@ type DNSProvider struct {
func NewDNSProvider() (*DNSProvider, error) { func NewDNSProvider() (*DNSProvider, error) {
values, err := env.Get("DNSMADEEASY_API_KEY", "DNSMADEEASY_API_SECRET") values, err := env.Get("DNSMADEEASY_API_KEY", "DNSMADEEASY_API_SECRET")
if err != nil { if err != nil {
return nil, fmt.Errorf("dnsmadeeasy: %v", err) return nil, fmt.Errorf("dnsmadeeasy: %w", err)
} }
config := NewDefaultConfig() config := NewDefaultConfig()
@ -84,7 +84,7 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) {
client, err := internal.NewClient(config.APIKey, config.APISecret) client, err := internal.NewClient(config.APIKey, config.APISecret)
if err != nil { if err != nil {
return nil, fmt.Errorf("dnsmadeeasy: %v", err) return nil, fmt.Errorf("dnsmadeeasy: %w", err)
} }
client.HTTPClient = config.HTTPClient client.HTTPClient = config.HTTPClient
@ -102,13 +102,13 @@ func (d *DNSProvider) Present(domainName, token, keyAuth string) error {
authZone, err := dns01.FindZoneByFqdn(fqdn) authZone, err := dns01.FindZoneByFqdn(fqdn)
if err != nil { if err != nil {
return fmt.Errorf("dnsmadeeasy: unable to find zone for %s: %v", fqdn, err) return fmt.Errorf("dnsmadeeasy: unable to find zone for %s: %w", fqdn, err)
} }
// fetch the domain details // fetch the domain details
domain, err := d.client.GetDomain(authZone) domain, err := d.client.GetDomain(authZone)
if err != nil { if err != nil {
return fmt.Errorf("dnsmadeeasy: unable to get domain for zone %s: %v", authZone, err) return fmt.Errorf("dnsmadeeasy: unable to get domain for zone %s: %w", authZone, err)
} }
// create the TXT record // create the TXT record
@ -117,7 +117,7 @@ func (d *DNSProvider) Present(domainName, token, keyAuth string) error {
err = d.client.CreateRecord(domain, record) err = d.client.CreateRecord(domain, record)
if err != nil { if err != nil {
return fmt.Errorf("dnsmadeeasy: unable to create record for %s: %v", name, err) return fmt.Errorf("dnsmadeeasy: unable to create record for %s: %w", name, err)
} }
return nil return nil
} }
@ -128,20 +128,20 @@ func (d *DNSProvider) CleanUp(domainName, token, keyAuth string) error {
authZone, err := dns01.FindZoneByFqdn(fqdn) authZone, err := dns01.FindZoneByFqdn(fqdn)
if err != nil { if err != nil {
return fmt.Errorf("dnsmadeeasy: unable to find zone for %s: %v", fqdn, err) return fmt.Errorf("dnsmadeeasy: unable to find zone for %s: %w", fqdn, err)
} }
// fetch the domain details // fetch the domain details
domain, err := d.client.GetDomain(authZone) domain, err := d.client.GetDomain(authZone)
if err != nil { if err != nil {
return fmt.Errorf("dnsmadeeasy: unable to get domain for zone %s: %v", authZone, err) return fmt.Errorf("dnsmadeeasy: unable to get domain for zone %s: %w", authZone, err)
} }
// find matching records // find matching records
name := strings.Replace(fqdn, "."+authZone, "", 1) name := strings.Replace(fqdn, "."+authZone, "", 1)
records, err := d.client.GetRecords(domain, name, "TXT") records, err := d.client.GetRecords(domain, name, "TXT")
if err != nil { if err != nil {
return fmt.Errorf("dnsmadeeasy: unable to get records for domain %s: %v", domain.Name, err) return fmt.Errorf("dnsmadeeasy: unable to get records for domain %s: %w", domain.Name, err)
} }
// delete records // delete records
@ -149,7 +149,7 @@ func (d *DNSProvider) CleanUp(domainName, token, keyAuth string) error {
for _, record := range *records { for _, record := range *records {
err = d.client.DeleteRecord(record) err = d.client.DeleteRecord(record)
if err != nil { if err != nil {
lastError = fmt.Errorf("dnsmadeeasy: unable to delete record [id=%d, name=%s]: %v", record.ID, record.Name, err) lastError = fmt.Errorf("dnsmadeeasy: unable to delete record [id=%d, name=%s]: %w", record.ID, record.Name, err)
} }
} }

View file

@ -6,6 +6,7 @@ import (
"crypto/sha1" "crypto/sha1"
"encoding/hex" "encoding/hex"
"encoding/json" "encoding/json"
"errors"
"fmt" "fmt"
"io/ioutil" "io/ioutil"
"net/http" "net/http"
@ -43,11 +44,11 @@ type Client struct {
// NewClient creates a DNSMadeEasy client // NewClient creates a DNSMadeEasy client
func NewClient(apiKey string, apiSecret string) (*Client, error) { func NewClient(apiKey string, apiSecret string) (*Client, error) {
if apiKey == "" { if apiKey == "" {
return nil, fmt.Errorf("credentials missing: API key") return nil, errors.New("credentials missing: API key")
} }
if apiSecret == "" { if apiSecret == "" {
return nil, fmt.Errorf("credentials missing: API secret") return nil, errors.New("credentials missing: API secret")
} }
return &Client{ return &Client{

View file

@ -46,7 +46,7 @@ type DNSProvider struct {
func NewDNSProvider() (*DNSProvider, error) { func NewDNSProvider() (*DNSProvider, error) {
values, err := env.Get("DNSPOD_API_KEY") values, err := env.Get("DNSPOD_API_KEY")
if err != nil { if err != nil {
return nil, fmt.Errorf("dnspod: %v", err) return nil, fmt.Errorf("dnspod: %w", err)
} }
config := NewDefaultConfig() config := NewDefaultConfig()
@ -62,7 +62,7 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) {
} }
if config.LoginToken == "" { if config.LoginToken == "" {
return nil, fmt.Errorf("dnspod: credentials missing") return nil, errors.New("dnspod: credentials missing")
} }
params := dnspod.CommonParams{LoginToken: config.LoginToken, Format: "json"} params := dnspod.CommonParams{LoginToken: config.LoginToken, Format: "json"}
@ -84,7 +84,7 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
recordAttributes := d.newTxtRecord(zoneName, fqdn, value, d.config.TTL) recordAttributes := d.newTxtRecord(zoneName, fqdn, value, d.config.TTL)
_, _, err = d.client.Records.Create(zoneID, *recordAttributes) _, _, err = d.client.Records.Create(zoneID, *recordAttributes)
if err != nil { if err != nil {
return fmt.Errorf("API call failed: %v", err) return fmt.Errorf("API call failed: %w", err)
} }
return nil return nil
@ -122,7 +122,7 @@ func (d *DNSProvider) Timeout() (timeout, interval time.Duration) {
func (d *DNSProvider) getHostedZone(domain string) (string, string, error) { func (d *DNSProvider) getHostedZone(domain string) (string, string, error) {
zones, _, err := d.client.Domains.List() zones, _, err := d.client.Domains.List()
if err != nil { if err != nil {
return "", "", fmt.Errorf("API call failed: %v", err) return "", "", fmt.Errorf("API call failed: %w", err)
} }
authZone, err := dns01.FindZoneByFqdn(dns01.ToFqdn(domain)) authZone, err := dns01.FindZoneByFqdn(dns01.ToFqdn(domain))
@ -165,7 +165,7 @@ func (d *DNSProvider) findTxtRecords(domain, fqdn string) ([]dnspod.Record, erro
var records []dnspod.Record var records []dnspod.Record
result, _, err := d.client.Records.List(zoneID, "") result, _, err := d.client.Records.List(zoneID, "")
if err != nil { if err != nil {
return records, fmt.Errorf("API call has failed: %v", err) return records, fmt.Errorf("API call has failed: %w", err)
} }
recordName := d.extractRecordName(fqdn, zoneName) recordName := d.extractRecordName(fqdn, zoneName)

View file

@ -42,7 +42,7 @@ type DNSProvider struct {
func NewDNSProvider() (*DNSProvider, error) { func NewDNSProvider() (*DNSProvider, error) {
values, err := env.Get("DODE_TOKEN") values, err := env.Get("DODE_TOKEN")
if err != nil { if err != nil {
return nil, fmt.Errorf("do.de: %v", err) return nil, fmt.Errorf("do.de: %w", err)
} }
config := NewDefaultConfig() config := NewDefaultConfig()

View file

@ -55,13 +55,13 @@ func (d *DNSProvider) updateTxtRecord(u fmt.Stringer) error {
raw, err := ioutil.ReadAll(resp.Body) raw, err := ioutil.ReadAll(resp.Body)
if err != nil { if err != nil {
return fmt.Errorf("failed to read body: %v", err) return fmt.Errorf("failed to read body: %w", err)
} }
var response apiResponse var response apiResponse
err = json.Unmarshal(raw, &response) err = json.Unmarshal(raw, &response)
if err != nil { if err != nil {
return fmt.Errorf("unable to decode API server response: %v: %s", err, string(raw)) return fmt.Errorf("unable to decode API server response: %w: %s", err, string(raw))
} }
if response.Result == "error" { if response.Result == "error" {

View file

@ -44,7 +44,7 @@ type DNSProvider struct {
func NewDNSProvider() (*DNSProvider, error) { func NewDNSProvider() (*DNSProvider, error) {
values, err := env.Get("DREAMHOST_API_KEY") values, err := env.Get("DREAMHOST_API_KEY")
if err != nil { if err != nil {
return nil, fmt.Errorf("dreamhost: %v", err) return nil, fmt.Errorf("dreamhost: %w", err)
} }
config := NewDefaultConfig() config := NewDefaultConfig()
@ -77,12 +77,12 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
u, err := d.buildQuery(cmdAddRecord, record, value) u, err := d.buildQuery(cmdAddRecord, record, value)
if err != nil { if err != nil {
return fmt.Errorf("dreamhost: %v", err) return fmt.Errorf("dreamhost: %w", err)
} }
err = d.updateTxtRecord(u) err = d.updateTxtRecord(u)
if err != nil { if err != nil {
return fmt.Errorf("dreamhost: %v", err) return fmt.Errorf("dreamhost: %w", err)
} }
return nil return nil
} }
@ -94,12 +94,12 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
u, err := d.buildQuery(cmdRemoveRecord, record, value) u, err := d.buildQuery(cmdRemoveRecord, record, value)
if err != nil { if err != nil {
return fmt.Errorf("dreamhost: %v", err) return fmt.Errorf("dreamhost: %w", err)
} }
err = d.updateTxtRecord(u) err = d.updateTxtRecord(u)
if err != nil { if err != nil {
return fmt.Errorf("dreamhost: %v", err) return fmt.Errorf("dreamhost: %w", err)
} }
return nil return nil
} }

View file

@ -43,7 +43,7 @@ type DNSProvider struct {
func NewDNSProvider() (*DNSProvider, error) { func NewDNSProvider() (*DNSProvider, error) {
values, err := env.Get("DUCKDNS_TOKEN") values, err := env.Get("DUCKDNS_TOKEN")
if err != nil { if err != nil {
return nil, fmt.Errorf("duckdns: %v", err) return nil, fmt.Errorf("duckdns: %w", err)
} }
config := NewDefaultConfig() config := NewDefaultConfig()

View file

@ -3,6 +3,7 @@ package dyn
import ( import (
"bytes" "bytes"
"encoding/json" "encoding/json"
"errors"
"fmt" "fmt"
"net/http" "net/http"
) )
@ -134,7 +135,7 @@ func (d *DNSProvider) sendRequest(method, resource string, payload interface{})
return nil, fmt.Errorf("API request failed with HTTP status code %d: %s", resp.StatusCode, dynRes.Messages) return nil, fmt.Errorf("API request failed with HTTP status code %d: %s", resp.StatusCode, dynRes.Messages)
} else if resp.StatusCode == 307 { } else if resp.StatusCode == 307 {
// TODO add support for HTTP 307 response and long running jobs // TODO add support for HTTP 307 response and long running jobs
return nil, fmt.Errorf("API request returned HTTP 307. This is currently unsupported") return nil, errors.New("API request returned HTTP 307. This is currently unsupported")
} }
if dynRes.Status == "failure" { if dynRes.Status == "failure" {

View file

@ -48,7 +48,7 @@ type DNSProvider struct {
func NewDNSProvider() (*DNSProvider, error) { func NewDNSProvider() (*DNSProvider, error) {
values, err := env.Get("DYN_CUSTOMER_NAME", "DYN_USER_NAME", "DYN_PASSWORD") values, err := env.Get("DYN_CUSTOMER_NAME", "DYN_USER_NAME", "DYN_PASSWORD")
if err != nil { if err != nil {
return nil, fmt.Errorf("dyn: %v", err) return nil, fmt.Errorf("dyn: %w", err)
} }
config := NewDefaultConfig() config := NewDefaultConfig()
@ -66,7 +66,7 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) {
} }
if config.CustomerName == "" || config.UserName == "" || config.Password == "" { if config.CustomerName == "" || config.UserName == "" || config.Password == "" {
return nil, fmt.Errorf("dyn: credentials missing") return nil, errors.New("dyn: credentials missing")
} }
return &DNSProvider{config: config}, nil return &DNSProvider{config: config}, nil
@ -78,12 +78,12 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
authZone, err := dns01.FindZoneByFqdn(fqdn) authZone, err := dns01.FindZoneByFqdn(fqdn)
if err != nil { if err != nil {
return fmt.Errorf("dyn: %v", err) return fmt.Errorf("dyn: %w", err)
} }
err = d.login() err = d.login()
if err != nil { if err != nil {
return fmt.Errorf("dyn: %v", err) return fmt.Errorf("dyn: %w", err)
} }
data := map[string]interface{}{ data := map[string]interface{}{
@ -96,12 +96,12 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
resource := fmt.Sprintf("TXTRecord/%s/%s/", authZone, fqdn) resource := fmt.Sprintf("TXTRecord/%s/%s/", authZone, fqdn)
_, err = d.sendRequest(http.MethodPost, resource, data) _, err = d.sendRequest(http.MethodPost, resource, data)
if err != nil { if err != nil {
return fmt.Errorf("dyn: %v", err) return fmt.Errorf("dyn: %w", err)
} }
err = d.publish(authZone, "Added TXT record for ACME dns-01 challenge using lego client") err = d.publish(authZone, "Added TXT record for ACME dns-01 challenge using lego client")
if err != nil { if err != nil {
return fmt.Errorf("dyn: %v", err) return fmt.Errorf("dyn: %w", err)
} }
return d.logout() return d.logout()
@ -113,12 +113,12 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
authZone, err := dns01.FindZoneByFqdn(fqdn) authZone, err := dns01.FindZoneByFqdn(fqdn)
if err != nil { if err != nil {
return fmt.Errorf("dyn: %v", err) return fmt.Errorf("dyn: %w", err)
} }
err = d.login() err = d.login()
if err != nil { if err != nil {
return fmt.Errorf("dyn: %v", err) return fmt.Errorf("dyn: %w", err)
} }
resource := fmt.Sprintf("TXTRecord/%s/%s/", authZone, fqdn) resource := fmt.Sprintf("TXTRecord/%s/%s/", authZone, fqdn)
@ -126,7 +126,7 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
req, err := http.NewRequest(http.MethodDelete, url, nil) req, err := http.NewRequest(http.MethodDelete, url, nil)
if err != nil { if err != nil {
return fmt.Errorf("dyn: %v", err) return fmt.Errorf("dyn: %w", err)
} }
req.Header.Set("Content-Type", "application/json") req.Header.Set("Content-Type", "application/json")
@ -134,7 +134,7 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
resp, err := d.config.HTTPClient.Do(req) resp, err := d.config.HTTPClient.Do(req)
if err != nil { if err != nil {
return fmt.Errorf("dyn: %v", err) return fmt.Errorf("dyn: %w", err)
} }
resp.Body.Close() resp.Body.Close()
@ -144,7 +144,7 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
err = d.publish(authZone, "Removed TXT record for ACME dns-01 challenge using lego client") err = d.publish(authZone, "Removed TXT record for ACME dns-01 challenge using lego client")
if err != nil { if err != nil {
return fmt.Errorf("dyn: %v", err) return fmt.Errorf("dyn: %w", err)
} }
return d.logout() return d.logout()

View file

@ -83,7 +83,7 @@ func (d *DNSProvider) doRequest(method, path string, requestMsg, responseMsg int
if response.StatusCode >= http.StatusBadRequest { if response.StatusCode >= http.StatusBadRequest {
body, err := ioutil.ReadAll(response.Body) body, err := ioutil.ReadAll(response.Body)
if err != nil { if err != nil {
return fmt.Errorf("%d: failed to read response body: %v", response.StatusCode, err) return fmt.Errorf("%d: failed to read response body: %w", response.StatusCode, err)
} }
return fmt.Errorf("%d: request failed: %v", response.StatusCode, string(body)) return fmt.Errorf("%d: request failed: %v", response.StatusCode, string(body))

View file

@ -54,13 +54,13 @@ func NewDNSProvider() (*DNSProvider, error) {
endpoint, err := url.Parse(env.GetOrDefaultString("EASYDNS_ENDPOINT", defaultEndpoint)) endpoint, err := url.Parse(env.GetOrDefaultString("EASYDNS_ENDPOINT", defaultEndpoint))
if err != nil { if err != nil {
return nil, fmt.Errorf("easydns: %v", err) return nil, fmt.Errorf("easydns: %w", err)
} }
config.Endpoint = endpoint config.Endpoint = endpoint
values, err := env.Get("EASYDNS_TOKEN", "EASYDNS_KEY") values, err := env.Get("EASYDNS_TOKEN", "EASYDNS_KEY")
if err != nil { if err != nil {
return nil, fmt.Errorf("easydns: %v", err) return nil, fmt.Errorf("easydns: %w", err)
} }
config.Token = values["EASYDNS_TOKEN"] config.Token = values["EASYDNS_TOKEN"]
@ -102,7 +102,7 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
recordID, err := d.addRecord(apiDomain, record) recordID, err := d.addRecord(apiDomain, record)
if err != nil { if err != nil {
return fmt.Errorf("easydns: error adding zone record: %v", err) return fmt.Errorf("easydns: error adding zone record: %w", err)
} }
key := getMapKey(fqdn, value) key := getMapKey(fqdn, value)
@ -132,7 +132,7 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
d.recordIDsMu.Unlock() d.recordIDsMu.Unlock()
if err != nil { if err != nil {
return fmt.Errorf("easydns: %v", err) return fmt.Errorf("easydns: %w", err)
} }
return nil return nil

View file

@ -40,7 +40,7 @@ type DNSProvider struct {
func NewDNSProvider() (*DNSProvider, error) { func NewDNSProvider() (*DNSProvider, error) {
values, err := env.Get("EXEC_PATH") values, err := env.Get("EXEC_PATH")
if err != nil { if err != nil {
return nil, fmt.Errorf("exec: %v", err) return nil, fmt.Errorf("exec: %w", err)
} }
config := NewDefaultConfig() config := NewDefaultConfig()

View file

@ -49,7 +49,7 @@ type DNSProvider struct {
func NewDNSProvider() (*DNSProvider, error) { func NewDNSProvider() (*DNSProvider, error) {
values, err := env.Get("EXOSCALE_API_KEY", "EXOSCALE_API_SECRET") values, err := env.Get("EXOSCALE_API_KEY", "EXOSCALE_API_SECRET")
if err != nil { if err != nil {
return nil, fmt.Errorf("exoscale: %v", err) return nil, fmt.Errorf("exoscale: %w", err)
} }
config := NewDefaultConfig() config := NewDefaultConfig()
@ -67,7 +67,7 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) {
} }
if config.APIKey == "" || config.APISecret == "" { if config.APIKey == "" || config.APISecret == "" {
return nil, fmt.Errorf("exoscale: credentials missing") return nil, errors.New("exoscale: credentials missing")
} }
if config.Endpoint == "" { if config.Endpoint == "" {

View file

@ -40,7 +40,7 @@ type DNSProvider struct {
func NewDNSProvider() (*DNSProvider, error) { func NewDNSProvider() (*DNSProvider, error) {
values, err := env.Get("AKAMAI_HOST", "AKAMAI_CLIENT_TOKEN", "AKAMAI_CLIENT_SECRET", "AKAMAI_ACCESS_TOKEN") values, err := env.Get("AKAMAI_HOST", "AKAMAI_CLIENT_TOKEN", "AKAMAI_CLIENT_SECRET", "AKAMAI_ACCESS_TOKEN")
if err != nil { if err != nil {
return nil, fmt.Errorf("fastdns: %v", err) return nil, fmt.Errorf("fastdns: %w", err)
} }
config := NewDefaultConfig() config := NewDefaultConfig()
@ -62,7 +62,7 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) {
} }
if config.ClientToken == "" || config.ClientSecret == "" || config.AccessToken == "" || config.Host == "" { if config.ClientToken == "" || config.ClientSecret == "" || config.AccessToken == "" || config.Host == "" {
return nil, fmt.Errorf("fastdns: credentials are missing") return nil, errors.New("fastdns: credentials are missing")
} }
return &DNSProvider{config: config}, nil return &DNSProvider{config: config}, nil
@ -73,14 +73,14 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
fqdn, value := dns01.GetRecord(domain, keyAuth) fqdn, value := dns01.GetRecord(domain, keyAuth)
zoneName, recordName, err := d.findZoneAndRecordName(fqdn, domain) zoneName, recordName, err := d.findZoneAndRecordName(fqdn, domain)
if err != nil { if err != nil {
return fmt.Errorf("fastdns: %v", err) return fmt.Errorf("fastdns: %w", err)
} }
configdns.Init(d.config.Config) configdns.Init(d.config.Config)
zone, err := configdns.GetZone(zoneName) zone, err := configdns.GetZone(zoneName)
if err != nil { if err != nil {
return fmt.Errorf("fastdns: %v", err) return fmt.Errorf("fastdns: %w", err)
} }
record := configdns.NewTxtRecord() record := configdns.NewTxtRecord()
@ -103,21 +103,21 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
fqdn, _ := dns01.GetRecord(domain, keyAuth) fqdn, _ := dns01.GetRecord(domain, keyAuth)
zoneName, recordName, err := d.findZoneAndRecordName(fqdn, domain) zoneName, recordName, err := d.findZoneAndRecordName(fqdn, domain)
if err != nil { if err != nil {
return fmt.Errorf("fastdns: %v", err) return fmt.Errorf("fastdns: %w", err)
} }
configdns.Init(d.config.Config) configdns.Init(d.config.Config)
zone, err := configdns.GetZone(zoneName) zone, err := configdns.GetZone(zoneName)
if err != nil { if err != nil {
return fmt.Errorf("fastdns: %v", err) return fmt.Errorf("fastdns: %w", err)
} }
var removed bool var removed bool
for _, r := range zone.Zone.Txt { for _, r := range zone.Zone.Txt {
if r != nil && r.Name == recordName { if r != nil && r.Name == recordName {
if zone.RemoveRecord(r) != nil { if zone.RemoveRecord(r) != nil {
return fmt.Errorf("fastdns: %v", err) return fmt.Errorf("fastdns: %w", err)
} }
removed = true removed = true
} }

View file

@ -3,6 +3,7 @@ package gandi
import ( import (
"bytes" "bytes"
"encoding/xml" "encoding/xml"
"errors"
"fmt" "fmt"
"io" "io"
"io/ioutil" "io/ioutil"
@ -102,7 +103,7 @@ func (d *DNSProvider) rpcCall(call *methodCall, resp response) error {
// marshal // marshal
b, err := xml.MarshalIndent(call, "", " ") b, err := xml.MarshalIndent(call, "", " ")
if err != nil { if err != nil {
return fmt.Errorf("marshal error: %v", err) return fmt.Errorf("marshal error: %w", err)
} }
// post // post
@ -115,7 +116,7 @@ func (d *DNSProvider) rpcCall(call *methodCall, resp response) error {
// unmarshal // unmarshal
err = xml.Unmarshal(respBody, resp) err = xml.Unmarshal(respBody, resp)
if err != nil { if err != nil {
return fmt.Errorf("unmarshal error: %v", err) return fmt.Errorf("unmarshal error: %w", err)
} }
if resp.faultCode() != 0 { if resp.faultCode() != 0 {
return rpcError{ return rpcError{
@ -181,7 +182,7 @@ func (d *DNSProvider) cloneZone(zoneID int, name string) (int, error) {
} }
if newZoneID == 0 { if newZoneID == 0 {
return 0, fmt.Errorf("could not determine cloned zone_id") return 0, errors.New("could not determine cloned zone_id")
} }
return newZoneID, nil return newZoneID, nil
} }
@ -200,7 +201,7 @@ func (d *DNSProvider) newZoneVersion(zoneID int) (int, error) {
} }
if resp.Value == 0 { if resp.Value == 0 {
return 0, fmt.Errorf("could not create new zone version") return 0, errors.New("could not create new zone version")
} }
return resp.Value, nil return resp.Value, nil
} }
@ -249,7 +250,7 @@ func (d *DNSProvider) setZoneVersion(zoneID int, version int) error {
} }
if !resp.Value { if !resp.Value {
return fmt.Errorf("could not set zone version") return errors.New("could not set zone version")
} }
return nil return nil
} }
@ -295,7 +296,7 @@ func (d *DNSProvider) deleteZone(zoneID int) error {
} }
if !resp.Value { if !resp.Value {
return fmt.Errorf("could not delete zone_id") return errors.New("could not delete zone_id")
} }
return nil return nil
} }
@ -303,13 +304,13 @@ func (d *DNSProvider) deleteZone(zoneID int) error {
func (d *DNSProvider) httpPost(url string, bodyType string, body io.Reader) ([]byte, error) { func (d *DNSProvider) httpPost(url string, bodyType string, body io.Reader) ([]byte, error) {
resp, err := d.config.HTTPClient.Post(url, bodyType, body) resp, err := d.config.HTTPClient.Post(url, bodyType, body)
if err != nil { if err != nil {
return nil, fmt.Errorf("HTTP Post Error: %v", err) return nil, fmt.Errorf("HTTP Post Error: %w", err)
} }
defer resp.Body.Close() defer resp.Body.Close()
b, err := ioutil.ReadAll(resp.Body) b, err := ioutil.ReadAll(resp.Body)
if err != nil { if err != nil {
return nil, fmt.Errorf("HTTP Post Error: %v", err) return nil, fmt.Errorf("HTTP Post Error: %w", err)
} }
return b, nil return b, nil

View file

@ -68,7 +68,7 @@ type DNSProvider struct {
func NewDNSProvider() (*DNSProvider, error) { func NewDNSProvider() (*DNSProvider, error) {
values, err := env.Get("GANDI_API_KEY") values, err := env.Get("GANDI_API_KEY")
if err != nil { if err != nil {
return nil, fmt.Errorf("gandi: %v", err) return nil, fmt.Errorf("gandi: %w", err)
} }
config := NewDefaultConfig() config := NewDefaultConfig()
@ -84,7 +84,7 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) {
} }
if config.APIKey == "" { if config.APIKey == "" {
return nil, fmt.Errorf("gandi: no API Key given") return nil, errors.New("gandi: no API Key given")
} }
if config.BaseURL == "" { if config.BaseURL == "" {
@ -112,12 +112,12 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
// find authZone and Gandi zone_id for fqdn // find authZone and Gandi zone_id for fqdn
authZone, err := d.findZoneByFqdn(fqdn) authZone, err := d.findZoneByFqdn(fqdn)
if err != nil { if err != nil {
return fmt.Errorf("gandi: findZoneByFqdn failure: %v", err) return fmt.Errorf("gandi: findZoneByFqdn failure: %w", err)
} }
zoneID, err := d.getZoneID(authZone) zoneID, err := d.getZoneID(authZone)
if err != nil { if err != nil {
return fmt.Errorf("gandi: %v", err) return fmt.Errorf("gandi: %w", err)
} }
// determine name of TXT record // determine name of TXT record
@ -147,22 +147,22 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
newZoneVersion, err := d.newZoneVersion(newZoneID) newZoneVersion, err := d.newZoneVersion(newZoneID)
if err != nil { if err != nil {
return fmt.Errorf("gandi: %v", err) return fmt.Errorf("gandi: %w", err)
} }
err = d.addTXTRecord(newZoneID, newZoneVersion, name, value, d.config.TTL) err = d.addTXTRecord(newZoneID, newZoneVersion, name, value, d.config.TTL)
if err != nil { if err != nil {
return fmt.Errorf("gandi: %v", err) return fmt.Errorf("gandi: %w", err)
} }
err = d.setZoneVersion(newZoneID, newZoneVersion) err = d.setZoneVersion(newZoneID, newZoneVersion)
if err != nil { if err != nil {
return fmt.Errorf("gandi: %v", err) return fmt.Errorf("gandi: %w", err)
} }
err = d.setZone(authZone, newZoneID) err = d.setZone(authZone, newZoneID)
if err != nil { if err != nil {
return fmt.Errorf("gandi: %v", err) return fmt.Errorf("gandi: %w", err)
} }
// save data necessary for CleanUp // save data necessary for CleanUp
@ -200,7 +200,7 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
// perform API actions to restore old gandi zone for authZone // perform API actions to restore old gandi zone for authZone
err := d.setZone(authZone, zoneID) err := d.setZone(authZone, zoneID)
if err != nil { if err != nil {
return fmt.Errorf("gandi: %v", err) return fmt.Errorf("gandi: %w", err)
} }
return d.deleteZone(newZoneID) return d.deleteZone(newZoneID)

View file

@ -3,6 +3,7 @@ package gandiv5
import ( import (
"bytes" "bytes"
"encoding/json" "encoding/json"
"errors"
"fmt" "fmt"
"io/ioutil" "io/ioutil"
"net/http" "net/http"
@ -50,7 +51,7 @@ func (d *DNSProvider) addTXTRecord(domain string, name string, value string, ttl
message := apiResponse{} message := apiResponse{}
err = d.do(req, &message) err = d.do(req, &message)
if err != nil { if err != nil {
return fmt.Errorf("unable to create TXT record for domain %s and name %s: %v", domain, name, err) return fmt.Errorf("unable to create TXT record for domain %s and name %s: %w", domain, name, err)
} }
if len(message.Message) > 0 { if len(message.Message) > 0 {
@ -73,7 +74,7 @@ func (d *DNSProvider) getTXTRecord(domain, name string) (*Record, error) {
txtRecord := &Record{} txtRecord := &Record{}
err = d.do(req, txtRecord) err = d.do(req, txtRecord)
if err != nil { if err != nil {
return nil, fmt.Errorf("unable to get TXT records for domain %s and name %s: %v", domain, name, err) return nil, fmt.Errorf("unable to get TXT records for domain %s and name %s: %w", domain, name, err)
} }
return txtRecord, nil return txtRecord, nil
@ -90,7 +91,7 @@ func (d *DNSProvider) deleteTXTRecord(domain string, name string) error {
message := apiResponse{} message := apiResponse{}
err = d.do(req, &message) err = d.do(req, &message)
if err != nil { if err != nil {
return fmt.Errorf("unable to delete TXT record for domain %s and name %s: %v", domain, name, err) return fmt.Errorf("unable to delete TXT record for domain %s and name %s: %w", domain, name, err)
} }
if len(message.Message) > 0 { if len(message.Message) > 0 {
@ -148,13 +149,13 @@ func (d *DNSProvider) do(req *http.Request, v interface{}) error {
raw, err := readBody(resp) raw, err := readBody(resp)
if err != nil { if err != nil {
return fmt.Errorf("failed to read body: %v", err) return fmt.Errorf("failed to read body: %w", err)
} }
if len(raw) > 0 { if len(raw) > 0 {
err = json.Unmarshal(raw, v) err = json.Unmarshal(raw, v)
if err != nil { if err != nil {
return fmt.Errorf("unmarshaling error: %v: %s", err, string(raw)) return fmt.Errorf("unmarshaling error: %w: %s", err, string(raw))
} }
} }
@ -169,13 +170,13 @@ func checkResponse(resp *http.Response) error {
if resp.StatusCode >= 400 { if resp.StatusCode >= 400 {
data, err := readBody(resp) data, err := readBody(resp)
if err != nil { if err != nil {
return fmt.Errorf("%d [%s] request failed: %v", resp.StatusCode, http.StatusText(resp.StatusCode), err) return fmt.Errorf("%d [%s] request failed: %w", resp.StatusCode, http.StatusText(resp.StatusCode), err)
} }
message := &apiResponse{} message := &apiResponse{}
err = json.Unmarshal(data, message) err = json.Unmarshal(data, message)
if err != nil { if err != nil {
return fmt.Errorf("%d [%s] request failed: %v: %s", resp.StatusCode, http.StatusText(resp.StatusCode), err, data) return fmt.Errorf("%d [%s] request failed: %w: %s", resp.StatusCode, http.StatusText(resp.StatusCode), err, data)
} }
return fmt.Errorf("%d [%s] request failed: %s", resp.StatusCode, http.StatusText(resp.StatusCode), message.Message) return fmt.Errorf("%d [%s] request failed: %s", resp.StatusCode, http.StatusText(resp.StatusCode), message.Message)
} }
@ -185,7 +186,7 @@ func checkResponse(resp *http.Response) error {
func readBody(resp *http.Response) ([]byte, error) { func readBody(resp *http.Response) ([]byte, error) {
if resp.Body == nil { if resp.Body == nil {
return nil, fmt.Errorf("response body is nil") return nil, errors.New("response body is nil")
} }
defer resp.Body.Close() defer resp.Body.Close()

View file

@ -65,7 +65,7 @@ type DNSProvider struct {
func NewDNSProvider() (*DNSProvider, error) { func NewDNSProvider() (*DNSProvider, error) {
values, err := env.Get("GANDIV5_API_KEY") values, err := env.Get("GANDIV5_API_KEY")
if err != nil { if err != nil {
return nil, fmt.Errorf("gandi: %v", err) return nil, fmt.Errorf("gandi: %w", err)
} }
config := NewDefaultConfig() config := NewDefaultConfig()
@ -81,7 +81,7 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) {
} }
if config.APIKey == "" { if config.APIKey == "" {
return nil, fmt.Errorf("gandiv5: no API Key given") return nil, errors.New("gandiv5: no API Key given")
} }
if config.BaseURL == "" { if config.BaseURL == "" {
@ -106,7 +106,7 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
// find authZone // find authZone
authZone, err := d.findZoneByFqdn(fqdn) authZone, err := d.findZoneByFqdn(fqdn)
if err != nil { if err != nil {
return fmt.Errorf("gandiv5: findZoneByFqdn failure: %v", err) return fmt.Errorf("gandiv5: findZoneByFqdn failure: %w", err)
} }
// determine name of TXT record // determine name of TXT record
@ -154,7 +154,7 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
// delete TXT record from authZone // delete TXT record from authZone
err := d.deleteTXTRecord(dns01.UnFqdn(authZone), fieldName) err := d.deleteTXTRecord(dns01.UnFqdn(authZone), fieldName)
if err != nil { if err != nil {
return fmt.Errorf("gandiv5: %v", err) return fmt.Errorf("gandiv5: %w", err)
} }
return nil return nil
} }

View file

@ -72,12 +72,12 @@ func NewDNSProvider() (*DNSProvider, error) {
// to return a DNSProvider instance configured for Google Cloud DNS. // to return a DNSProvider instance configured for Google Cloud DNS.
func NewDNSProviderCredentials(project string) (*DNSProvider, error) { func NewDNSProviderCredentials(project string) (*DNSProvider, error) {
if project == "" { if project == "" {
return nil, fmt.Errorf("googlecloud: project name missing") return nil, errors.New("googlecloud: project name missing")
} }
client, err := google.DefaultClient(context.Background(), dns.NdevClouddnsReadwriteScope) client, err := google.DefaultClient(context.Background(), dns.NdevClouddnsReadwriteScope)
if err != nil { if err != nil {
return nil, fmt.Errorf("googlecloud: unable to get Google Cloud client: %v", err) return nil, fmt.Errorf("googlecloud: unable to get Google Cloud client: %w", err)
} }
config := NewDefaultConfig() config := NewDefaultConfig()
@ -91,7 +91,7 @@ func NewDNSProviderCredentials(project string) (*DNSProvider, error) {
// to return a DNSProvider instance configured for Google Cloud DNS. // to return a DNSProvider instance configured for Google Cloud DNS.
func NewDNSProviderServiceAccountKey(saKey []byte) (*DNSProvider, error) { func NewDNSProviderServiceAccountKey(saKey []byte) (*DNSProvider, error) {
if len(saKey) == 0 { if len(saKey) == 0 {
return nil, fmt.Errorf("googlecloud: Service Account is missing") return nil, errors.New("googlecloud: Service Account is missing")
} }
// If GCE_PROJECT is non-empty it overrides the project in the service // If GCE_PROJECT is non-empty it overrides the project in the service
@ -104,14 +104,14 @@ func NewDNSProviderServiceAccountKey(saKey []byte) (*DNSProvider, error) {
} }
err := json.Unmarshal(saKey, &datJSON) err := json.Unmarshal(saKey, &datJSON)
if err != nil || datJSON.ProjectID == "" { if err != nil || datJSON.ProjectID == "" {
return nil, fmt.Errorf("googlecloud: project ID not found in Google Cloud Service Account file") return nil, errors.New("googlecloud: project ID not found in Google Cloud Service Account file")
} }
project = datJSON.ProjectID project = datJSON.ProjectID
} }
conf, err := google.JWTConfigFromJSON(saKey, dns.NdevClouddnsReadwriteScope) conf, err := google.JWTConfigFromJSON(saKey, dns.NdevClouddnsReadwriteScope)
if err != nil { if err != nil {
return nil, fmt.Errorf("googlecloud: unable to acquire config: %v", err) return nil, fmt.Errorf("googlecloud: unable to acquire config: %w", err)
} }
client := conf.Client(context.Background()) client := conf.Client(context.Background())
@ -126,12 +126,12 @@ func NewDNSProviderServiceAccountKey(saKey []byte) (*DNSProvider, error) {
// to return a DNSProvider instance configured for Google Cloud DNS. // to return a DNSProvider instance configured for Google Cloud DNS.
func NewDNSProviderServiceAccount(saFile string) (*DNSProvider, error) { func NewDNSProviderServiceAccount(saFile string) (*DNSProvider, error) {
if saFile == "" { if saFile == "" {
return nil, fmt.Errorf("googlecloud: Service Account file missing") return nil, errors.New("googlecloud: Service Account file missing")
} }
saKey, err := ioutil.ReadFile(saFile) saKey, err := ioutil.ReadFile(saFile)
if err != nil { if err != nil {
return nil, fmt.Errorf("googlecloud: unable to read Service Account file: %v", err) return nil, fmt.Errorf("googlecloud: unable to read Service Account file: %w", err)
} }
return NewDNSProviderServiceAccountKey(saKey) return NewDNSProviderServiceAccountKey(saKey)
@ -143,12 +143,12 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) {
return nil, errors.New("googlecloud: the configuration of the DNS provider is nil") return nil, errors.New("googlecloud: the configuration of the DNS provider is nil")
} }
if config.HTTPClient == nil { if config.HTTPClient == nil {
return nil, fmt.Errorf("googlecloud: unable to create Google Cloud DNS service: client is nil") return nil, errors.New("googlecloud: unable to create Google Cloud DNS service: client is nil")
} }
svc, err := dns.NewService(context.Background(), option.WithHTTPClient(config.HTTPClient)) svc, err := dns.NewService(context.Background(), option.WithHTTPClient(config.HTTPClient))
if err != nil { if err != nil {
return nil, fmt.Errorf("googlecloud: unable to create Google Cloud DNS service: %v", err) return nil, fmt.Errorf("googlecloud: unable to create Google Cloud DNS service: %w", err)
} }
return &DNSProvider{config: config, client: svc}, nil return &DNSProvider{config: config, client: svc}, nil
@ -160,13 +160,13 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
zone, err := d.getHostedZone(fqdn) zone, err := d.getHostedZone(fqdn)
if err != nil { if err != nil {
return fmt.Errorf("googlecloud: %v", err) return fmt.Errorf("googlecloud: %w", err)
} }
// Look for existing records. // Look for existing records.
existingRrSet, err := d.findTxtRecords(zone, fqdn) existingRrSet, err := d.findTxtRecords(zone, fqdn)
if err != nil { if err != nil {
return fmt.Errorf("googlecloud: %v", err) return fmt.Errorf("googlecloud: %w", err)
} }
for _, rrSet := range existingRrSet { for _, rrSet := range existingRrSet {
@ -186,7 +186,7 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
// Attempt to delete the existing records before adding the new one. // Attempt to delete the existing records before adding the new one.
if len(existingRrSet) > 0 { if len(existingRrSet) > 0 {
if err = d.applyChanges(zone, &dns.Change{Deletions: existingRrSet}); err != nil { if err = d.applyChanges(zone, &dns.Change{Deletions: existingRrSet}); err != nil {
return fmt.Errorf("googlecloud: %v", err) return fmt.Errorf("googlecloud: %w", err)
} }
} }
@ -211,7 +211,7 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
} }
if err = d.applyChanges(zone, change); err != nil { if err = d.applyChanges(zone, change); err != nil {
return fmt.Errorf("googlecloud: %v", err) return fmt.Errorf("googlecloud: %w", err)
} }
return nil return nil
@ -232,7 +232,7 @@ func (d *DNSProvider) applyChanges(zone string, change *dns.Change) error {
} }
data, _ := json.Marshal(change) data, _ := json.Marshal(change)
return fmt.Errorf("failed to perform changes [zone %s, change %s]: %v", zone, string(data), err) return fmt.Errorf("failed to perform changes [zone %s, change %s]: %w", zone, string(data), err)
} }
if chg.Status == changeStatusDone { if chg.Status == changeStatusDone {
@ -251,7 +251,7 @@ func (d *DNSProvider) applyChanges(zone string, change *dns.Change) error {
chg, err = d.client.Changes.Get(d.config.Project, zone, chgID).Do() chg, err = d.client.Changes.Get(d.config.Project, zone, chgID).Do()
if err != nil { if err != nil {
data, _ := json.Marshal(change) data, _ := json.Marshal(change)
return false, fmt.Errorf("failed to get changes [zone %s, change %s]: %v", zone, string(data), err) return false, fmt.Errorf("failed to get changes [zone %s, change %s]: %w", zone, string(data), err)
} }
if chg.Status == changeStatusDone { if chg.Status == changeStatusDone {
@ -268,12 +268,12 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
zone, err := d.getHostedZone(fqdn) zone, err := d.getHostedZone(fqdn)
if err != nil { if err != nil {
return fmt.Errorf("googlecloud: %v", err) return fmt.Errorf("googlecloud: %w", err)
} }
records, err := d.findTxtRecords(zone, fqdn) records, err := d.findTxtRecords(zone, fqdn)
if err != nil { if err != nil {
return fmt.Errorf("googlecloud: %v", err) return fmt.Errorf("googlecloud: %w", err)
} }
if len(records) == 0 { if len(records) == 0 {
@ -282,7 +282,7 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
_, err = d.client.Changes.Create(d.config.Project, zone, &dns.Change{Deletions: records}).Do() _, err = d.client.Changes.Create(d.config.Project, zone, &dns.Change{Deletions: records}).Do()
if err != nil { if err != nil {
return fmt.Errorf("googlecloud: %v", err) return fmt.Errorf("googlecloud: %w", err)
} }
return nil return nil
} }
@ -305,7 +305,7 @@ func (d *DNSProvider) getHostedZone(domain string) (string, error) {
DnsName(authZone). DnsName(authZone).
Do() Do()
if err != nil { if err != nil {
return "", fmt.Errorf("API call failed: %v", err) return "", fmt.Errorf("API call failed: %w", err)
} }
if len(zones.ManagedZones) == 0 { if len(zones.ManagedZones) == 0 {

View file

@ -56,7 +56,7 @@ type DNSProvider struct {
func NewDNSProvider() (*DNSProvider, error) { func NewDNSProvider() (*DNSProvider, error) {
values, err := env.Get("GLESYS_API_USER", "GLESYS_API_KEY") values, err := env.Get("GLESYS_API_USER", "GLESYS_API_KEY")
if err != nil { if err != nil {
return nil, fmt.Errorf("glesys: %v", err) return nil, fmt.Errorf("glesys: %w", err)
} }
config := NewDefaultConfig() config := NewDefaultConfig()
@ -73,7 +73,7 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) {
} }
if config.APIUser == "" || config.APIKey == "" { if config.APIUser == "" || config.APIKey == "" {
return nil, fmt.Errorf("glesys: incomplete credentials provided") return nil, errors.New("glesys: incomplete credentials provided")
} }
if config.TTL < minTTL { if config.TTL < minTTL {
@ -93,7 +93,7 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
// find authZone // find authZone
authZone, err := dns01.FindZoneByFqdn(fqdn) authZone, err := dns01.FindZoneByFqdn(fqdn)
if err != nil { if err != nil {
return fmt.Errorf("glesys: findZoneByFqdn failure: %v", err) return fmt.Errorf("glesys: findZoneByFqdn failure: %w", err)
} }
// determine name of TXT record // determine name of TXT record

View file

@ -53,7 +53,7 @@ type DNSProvider struct {
func NewDNSProvider() (*DNSProvider, error) { func NewDNSProvider() (*DNSProvider, error) {
values, err := env.Get("GODADDY_API_KEY", "GODADDY_API_SECRET") values, err := env.Get("GODADDY_API_KEY", "GODADDY_API_SECRET")
if err != nil { if err != nil {
return nil, fmt.Errorf("godaddy: %v", err) return nil, fmt.Errorf("godaddy: %w", err)
} }
config := NewDefaultConfig() config := NewDefaultConfig()
@ -70,7 +70,7 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) {
} }
if config.APIKey == "" || config.APISecret == "" { if config.APIKey == "" || config.APISecret == "" {
return nil, fmt.Errorf("godaddy: credentials missing") return nil, errors.New("godaddy: credentials missing")
} }
if config.TTL < minTTL { if config.TTL < minTTL {

View file

@ -27,7 +27,7 @@ func (d *DNSProvider) listZoneConfigs(findRequest ZoneConfigsFindRequest) (*Zone
} }
if len(findResponse.Response.Data) == 0 { if len(findResponse.Response.Data) == 0 {
return nil, fmt.Errorf("%v: %s", err, toUnreadableBodyMessage(uri, rawResp)) return nil, fmt.Errorf("%w: %s", err, toUnreadableBodyMessage(uri, rawResp))
} }
if findResponse.Status != "success" && findResponse.Status != "pending" { if findResponse.Status != "success" && findResponse.Status != "pending" {
@ -104,7 +104,7 @@ func (d *DNSProvider) post(uri string, request interface{}, response interface{}
resp, err := d.config.HTTPClient.Do(req) resp, err := d.config.HTTPClient.Do(req)
if err != nil { if err != nil {
return nil, fmt.Errorf("error querying API: %v", err) return nil, fmt.Errorf("error querying API: %w", err)
} }
defer resp.Body.Close() defer resp.Body.Close()
@ -116,7 +116,7 @@ func (d *DNSProvider) post(uri string, request interface{}, response interface{}
err = json.Unmarshal(content, response) err = json.Unmarshal(content, response)
if err != nil { if err != nil {
return nil, fmt.Errorf("%v: %s", err, toUnreadableBodyMessage(uri, content)) return nil, fmt.Errorf("%w: %s", err, toUnreadableBodyMessage(uri, content))
} }
return content, nil return content, nil

View file

@ -47,7 +47,7 @@ type DNSProvider struct {
func NewDNSProvider() (*DNSProvider, error) { func NewDNSProvider() (*DNSProvider, error) {
values, err := env.Get("HOSTINGDE_API_KEY", "HOSTINGDE_ZONE_NAME") values, err := env.Get("HOSTINGDE_API_KEY", "HOSTINGDE_ZONE_NAME")
if err != nil { if err != nil {
return nil, fmt.Errorf("hostingde: %v", err) return nil, fmt.Errorf("hostingde: %w", err)
} }
config := NewDefaultConfig() config := NewDefaultConfig()
@ -100,7 +100,7 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
zoneConfig, err := d.getZone(zonesFind) zoneConfig, err := d.getZone(zonesFind)
if err != nil { if err != nil {
return fmt.Errorf("hostingde: %v", err) return fmt.Errorf("hostingde: %w", err)
} }
zoneConfig.Name = d.config.ZoneName zoneConfig.Name = d.config.ZoneName
@ -119,7 +119,7 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
resp, err := d.updateZone(req) resp, err := d.updateZone(req)
if err != nil { if err != nil {
return fmt.Errorf("hostingde: %v", err) return fmt.Errorf("hostingde: %w", err)
} }
for _, record := range resp.Response.Records { for _, record := range resp.Response.Records {
@ -160,7 +160,7 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
zoneConfig, err := d.getZone(zonesFind) zoneConfig, err := d.getZone(zonesFind)
if err != nil { if err != nil {
return fmt.Errorf("hostingde: %v", err) return fmt.Errorf("hostingde: %w", err)
} }
zoneConfig.Name = d.config.ZoneName zoneConfig.Name = d.config.ZoneName
@ -177,7 +177,7 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
_, err = d.updateZone(req) _, err = d.updateZone(req)
if err != nil { if err != nil {
return fmt.Errorf("hostingde: %v", err) return fmt.Errorf("hostingde: %w", err)
} }
return nil return nil
} }

View file

@ -58,12 +58,12 @@ type DNSProvider struct {
func NewDNSProvider() (*DNSProvider, error) { func NewDNSProvider() (*DNSProvider, error) {
values, err := env.Get("HTTPREQ_ENDPOINT") values, err := env.Get("HTTPREQ_ENDPOINT")
if err != nil { if err != nil {
return nil, fmt.Errorf("httpreq: %v", err) return nil, fmt.Errorf("httpreq: %w", err)
} }
endpoint, err := url.Parse(values["HTTPREQ_ENDPOINT"]) endpoint, err := url.Parse(values["HTTPREQ_ENDPOINT"])
if err != nil { if err != nil {
return nil, fmt.Errorf("httpreq: %v", err) return nil, fmt.Errorf("httpreq: %w", err)
} }
config := NewDefaultConfig() config := NewDefaultConfig()
@ -104,7 +104,7 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
err := d.doPost("/present", msg) err := d.doPost("/present", msg)
if err != nil { if err != nil {
return fmt.Errorf("httpreq: %v", err) return fmt.Errorf("httpreq: %w", err)
} }
return nil return nil
} }
@ -117,7 +117,7 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
err := d.doPost("/present", msg) err := d.doPost("/present", msg)
if err != nil { if err != nil {
return fmt.Errorf("httpreq: %v", err) return fmt.Errorf("httpreq: %w", err)
} }
return nil return nil
} }
@ -133,7 +133,7 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
err := d.doPost("/cleanup", msg) err := d.doPost("/cleanup", msg)
if err != nil { if err != nil {
return fmt.Errorf("httpreq: %v", err) return fmt.Errorf("httpreq: %w", err)
} }
return nil return nil
} }
@ -146,7 +146,7 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
err := d.doPost("/cleanup", msg) err := d.doPost("/cleanup", msg)
if err != nil { if err != nil {
return fmt.Errorf("httpreq: %v", err) return fmt.Errorf("httpreq: %w", err)
} }
return nil return nil
} }
@ -184,7 +184,7 @@ func (d *DNSProvider) doPost(uri string, msg interface{}) error {
if resp.StatusCode >= http.StatusBadRequest { if resp.StatusCode >= http.StatusBadRequest {
body, err := ioutil.ReadAll(resp.Body) body, err := ioutil.ReadAll(resp.Body)
if err != nil { if err != nil {
return fmt.Errorf("%d: failed to read response body: %v", resp.StatusCode, err) return fmt.Errorf("%d: failed to read response body: %w", resp.StatusCode, err)
} }
return fmt.Errorf("%d: request failed: %v", resp.StatusCode, string(body)) return fmt.Errorf("%d: request failed: %v", resp.StatusCode, string(body))

View file

@ -2,6 +2,7 @@
package iij package iij
import ( import (
"errors"
"fmt" "fmt"
"strconv" "strconv"
"strings" "strings"
@ -42,7 +43,7 @@ type DNSProvider struct {
func NewDNSProvider() (*DNSProvider, error) { func NewDNSProvider() (*DNSProvider, error) {
values, err := env.Get("IIJ_API_ACCESS_KEY", "IIJ_API_SECRET_KEY", "IIJ_DO_SERVICE_CODE") values, err := env.Get("IIJ_API_ACCESS_KEY", "IIJ_API_SECRET_KEY", "IIJ_DO_SERVICE_CODE")
if err != nil { if err != nil {
return nil, fmt.Errorf("iij: %v", err) return nil, fmt.Errorf("iij: %w", err)
} }
config := NewDefaultConfig() config := NewDefaultConfig()
@ -57,7 +58,7 @@ func NewDNSProvider() (*DNSProvider, error) {
// and returns a custom configured DNSProvider instance // and returns a custom configured DNSProvider instance
func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { func NewDNSProviderConfig(config *Config) (*DNSProvider, error) {
if config.SecretKey == "" || config.AccessKey == "" || config.DoServiceCode == "" { if config.SecretKey == "" || config.AccessKey == "" || config.DoServiceCode == "" {
return nil, fmt.Errorf("iij: credentials missing") return nil, errors.New("iij: credentials missing")
} }
return &DNSProvider{ return &DNSProvider{
@ -77,7 +78,7 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
err := d.addTxtRecord(domain, value) err := d.addTxtRecord(domain, value)
if err != nil { if err != nil {
return fmt.Errorf("iij: %v", err) return fmt.Errorf("iij: %w", err)
} }
return nil return nil
} }
@ -88,7 +89,7 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
err := d.deleteTxtRecord(domain, value) err := d.deleteTxtRecord(domain, value)
if err != nil { if err != nil {
return fmt.Errorf("iij: %v", err) return fmt.Errorf("iij: %w", err)
} }
return nil return nil
} }

View file

@ -44,7 +44,7 @@ type DNSProvider struct {
func NewDNSProvider() (*DNSProvider, error) { func NewDNSProvider() (*DNSProvider, error) {
values, err := env.Get("INWX_USERNAME", "INWX_PASSWORD") values, err := env.Get("INWX_USERNAME", "INWX_PASSWORD")
if err != nil { if err != nil {
return nil, fmt.Errorf("inwx: %v", err) return nil, fmt.Errorf("inwx: %w", err)
} }
config := NewDefaultConfig() config := NewDefaultConfig()
@ -61,7 +61,7 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) {
} }
if config.Username == "" || config.Password == "" { if config.Username == "" || config.Password == "" {
return nil, fmt.Errorf("inwx: credentials missing") return nil, errors.New("inwx: credentials missing")
} }
if config.Sandbox { if config.Sandbox {
@ -79,12 +79,12 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
authZone, err := dns01.FindZoneByFqdn(fqdn) authZone, err := dns01.FindZoneByFqdn(fqdn)
if err != nil { if err != nil {
return fmt.Errorf("inwx: %v", err) return fmt.Errorf("inwx: %w", err)
} }
err = d.client.Account.Login() err = d.client.Account.Login()
if err != nil { if err != nil {
return fmt.Errorf("inwx: %v", err) return fmt.Errorf("inwx: %w", err)
} }
defer func() { defer func() {
@ -109,9 +109,9 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
if er.Message == "Object exists" { if er.Message == "Object exists" {
return nil return nil
} }
return fmt.Errorf("inwx: %v", err) return fmt.Errorf("inwx: %w", err)
default: default:
return fmt.Errorf("inwx: %v", err) return fmt.Errorf("inwx: %w", err)
} }
} }
@ -124,12 +124,12 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
authZone, err := dns01.FindZoneByFqdn(fqdn) authZone, err := dns01.FindZoneByFqdn(fqdn)
if err != nil { if err != nil {
return fmt.Errorf("inwx: %v", err) return fmt.Errorf("inwx: %w", err)
} }
err = d.client.Account.Login() err = d.client.Account.Login()
if err != nil { if err != nil {
return fmt.Errorf("inwx: %v", err) return fmt.Errorf("inwx: %w", err)
} }
defer func() { defer func() {
@ -145,14 +145,14 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
Type: "TXT", Type: "TXT",
}) })
if err != nil { if err != nil {
return fmt.Errorf("inwx: %v", err) return fmt.Errorf("inwx: %w", err)
} }
var lastErr error var lastErr error
for _, record := range response.Records { for _, record := range response.Records {
err = d.client.Nameservers.DeleteRecord(record.ID) err = d.client.Nameservers.DeleteRecord(record.ID)
if err != nil { if err != nil {
lastErr = fmt.Errorf("inwx: %v", err) lastErr = fmt.Errorf("inwx: %w", err)
} }
} }

View file

@ -1,6 +1,7 @@
package joker package joker
import ( import (
"errors"
"fmt" "fmt"
"io/ioutil" "io/ioutil"
"net/http" "net/http"
@ -80,7 +81,7 @@ func (d *DNSProvider) login() (*response, error) {
case d.config.APIKey != "": case d.config.APIKey != "":
values = url.Values{"api-key": {d.config.APIKey}} values = url.Values{"api-key": {d.config.APIKey}}
default: default:
return nil, fmt.Errorf("no username and password or api-key") return nil, errors.New("no username and password or api-key")
} }
response, err := d.postRequest("login", values) response, err := d.postRequest("login", values)
@ -89,11 +90,11 @@ func (d *DNSProvider) login() (*response, error) {
} }
if response == nil { if response == nil {
return nil, fmt.Errorf("login returned nil response") return nil, errors.New("login returned nil response")
} }
if response.AuthSid == "" { if response.AuthSid == "" {
return response, fmt.Errorf("login did not return valid Auth-Sid") return response, errors.New("login did not return valid Auth-Sid")
} }
d.config.AuthSid = response.AuthSid d.config.AuthSid = response.AuthSid
@ -104,7 +105,7 @@ func (d *DNSProvider) login() (*response, error) {
// logout closes authenticated session with Joker's DMAPI // logout closes authenticated session with Joker's DMAPI
func (d *DNSProvider) logout() (*response, error) { func (d *DNSProvider) logout() (*response, error) {
if d.config.AuthSid == "" { if d.config.AuthSid == "" {
return nil, fmt.Errorf("already logged out") return nil, errors.New("already logged out")
} }
response, err := d.postRequest("logout", url.Values{}) response, err := d.postRequest("logout", url.Values{})
@ -117,7 +118,7 @@ func (d *DNSProvider) logout() (*response, error) {
// getZone returns content of DNS zone for domain // getZone returns content of DNS zone for domain
func (d *DNSProvider) getZone(domain string) (*response, error) { func (d *DNSProvider) getZone(domain string) (*response, error) {
if d.config.AuthSid == "" { if d.config.AuthSid == "" {
return nil, fmt.Errorf("must be logged in to get zone") return nil, errors.New("must be logged in to get zone")
} }
return d.postRequest("dns-zone-get", url.Values{"domain": {dns01.UnFqdn(domain)}}) return d.postRequest("dns-zone-get", url.Values{"domain": {dns01.UnFqdn(domain)}})
@ -126,7 +127,7 @@ func (d *DNSProvider) getZone(domain string) (*response, error) {
// putZone uploads DNS zone to Joker DMAPI // putZone uploads DNS zone to Joker DMAPI
func (d *DNSProvider) putZone(domain, zone string) (*response, error) { func (d *DNSProvider) putZone(domain, zone string) (*response, error) {
if d.config.AuthSid == "" { if d.config.AuthSid == "" {
return nil, fmt.Errorf("must be logged in to put zone") return nil, errors.New("must be logged in to put zone")
} }
return d.postRequest("dns-zone-put", url.Values{"domain": {dns01.UnFqdn(domain)}, "zone": {strings.TrimSpace(zone)}}) return d.postRequest("dns-zone-put", url.Values{"domain": {dns01.UnFqdn(domain)}, "zone": {strings.TrimSpace(zone)}})

View file

@ -75,7 +75,7 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) {
if config.APIKey == "" { if config.APIKey == "" {
if config.Username == "" || config.Password == "" { if config.Username == "" || config.Password == "" {
return nil, fmt.Errorf("joker: credentials missing") return nil, errors.New("joker: credentials missing")
} }
} }
@ -97,7 +97,7 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
zone, err := dns01.FindZoneByFqdn(fqdn) zone, err := dns01.FindZoneByFqdn(fqdn)
if err != nil { if err != nil {
return fmt.Errorf("joker: %v", err) return fmt.Errorf("joker: %w", err)
} }
relative := getRelative(fqdn, zone) relative := getRelative(fqdn, zone)
@ -132,7 +132,7 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
zone, err := dns01.FindZoneByFqdn(fqdn) zone, err := dns01.FindZoneByFqdn(fqdn)
if err != nil { if err != nil {
return fmt.Errorf("joker: %v", err) return fmt.Errorf("joker: %w", err)
} }
relative := getRelative(fqdn, zone) relative := getRelative(fqdn, zone)
@ -178,7 +178,7 @@ func getRelative(fqdn, zone string) string {
// formatResponseError formats error with optional details from DMAPI response // formatResponseError formats error with optional details from DMAPI response
func formatResponseError(response *response, err error) error { func formatResponseError(response *response, err error) error {
if response != nil { if response != nil {
return fmt.Errorf("joker: DMAPI error: %v Response: %v", err, response.Headers) return fmt.Errorf("joker: DMAPI error: %w Response: %v", err, response.Headers)
} }
return fmt.Errorf("joker: DMAPI error: %v", err) return fmt.Errorf("joker: DMAPI error: %w", err)
} }

View file

@ -108,7 +108,7 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
err := d.newTxtRecord(fqdn, `"`+value+`"`) err := d.newTxtRecord(fqdn, `"`+value+`"`)
if err != nil { if err != nil {
return fmt.Errorf("lightsail: %v", err) return fmt.Errorf("lightsail: %w", err)
} }
return nil return nil
} }
@ -128,7 +128,7 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
_, err := d.client.DeleteDomainEntry(params) _, err := d.client.DeleteDomainEntry(params)
if err != nil { if err != nil {
return fmt.Errorf("lightsail: %v", err) return fmt.Errorf("lightsail: %w", err)
} }
return nil return nil
} }

View file

@ -49,7 +49,7 @@ type DNSProvider struct {
func NewDNSProvider() (*DNSProvider, error) { func NewDNSProvider() (*DNSProvider, error) {
values, err := env.Get("LINODE_API_KEY") values, err := env.Get("LINODE_API_KEY")
if err != nil { if err != nil {
return nil, fmt.Errorf("linode: %v", err) return nil, fmt.Errorf("linode: %w", err)
} }
config := NewDefaultConfig() config := NewDefaultConfig()

View file

@ -57,7 +57,7 @@ type DNSProvider struct {
func NewDNSProvider() (*DNSProvider, error) { func NewDNSProvider() (*DNSProvider, error) {
values, err := env.Get("LINODE_TOKEN") values, err := env.Get("LINODE_TOKEN")
if err != nil { if err != nil {
return nil, fmt.Errorf("linodev4: %v", err) return nil, fmt.Errorf("linodev4: %w", err)
} }
config := NewDefaultConfig() config := NewDefaultConfig()
@ -185,7 +185,7 @@ func (d *DNSProvider) getHostedZoneInfo(fqdn string) (*hostedZoneInfo, error) {
} }
if len(domains) == 0 { if len(domains) == 0 {
return nil, fmt.Errorf("domain not found") return nil, errors.New("domain not found")
} }
return &hostedZoneInfo{ return &hostedZoneInfo{

View file

@ -54,7 +54,7 @@ type DNSProvider struct {
func NewDNSProvider() (*DNSProvider, error) { func NewDNSProvider() (*DNSProvider, error) {
values, err := env.Get("LIQUID_WEB_USERNAME", "LIQUID_WEB_PASSWORD", "LIQUID_WEB_ZONE") values, err := env.Get("LIQUID_WEB_USERNAME", "LIQUID_WEB_PASSWORD", "LIQUID_WEB_ZONE")
if err != nil { if err != nil {
return nil, fmt.Errorf("liquidweb: %v", err) return nil, fmt.Errorf("liquidweb: %w", err)
} }
config := NewDefaultConfig() config := NewDefaultConfig()
@ -77,21 +77,21 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) {
} }
if config.Zone == "" { if config.Zone == "" {
return nil, fmt.Errorf("liquidweb: zone is missing") return nil, errors.New("liquidweb: zone is missing")
} }
if config.Username == "" { if config.Username == "" {
return nil, fmt.Errorf("liquidweb: username is missing") return nil, errors.New("liquidweb: username is missing")
} }
if config.Password == "" { if config.Password == "" {
return nil, fmt.Errorf("liquidweb: password is missing") return nil, errors.New("liquidweb: password is missing")
} }
// Initialize LW client. // Initialize LW client.
client, err := lw.NewAPI(config.Username, config.Password, config.BaseURL, int(config.HTTPTimeout.Seconds())) client, err := lw.NewAPI(config.Username, config.Password, config.BaseURL, int(config.HTTPTimeout.Seconds()))
if err != nil { if err != nil {
return nil, fmt.Errorf("liquidweb: could not create Liquid Web API client: %v", err) return nil, fmt.Errorf("liquidweb: could not create Liquid Web API client: %w", err)
} }
return &DNSProvider{ return &DNSProvider{
@ -121,7 +121,7 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
dnsEntry, err := d.client.NetworkDNS.Create(params) dnsEntry, err := d.client.NetworkDNS.Create(params)
if err != nil { if err != nil {
return fmt.Errorf("liquidweb: could not create TXT record: %v", err) return fmt.Errorf("liquidweb: could not create TXT record: %w", err)
} }
d.recordIDsMu.Lock() d.recordIDsMu.Lock()
@ -144,7 +144,7 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
params := &network.DNSRecordParams{ID: recordID} params := &network.DNSRecordParams{ID: recordID}
_, err := d.client.NetworkDNS.Delete(params) _, err := d.client.NetworkDNS.Delete(params)
if err != nil { if err != nil {
return fmt.Errorf("liquidweb: could not remove TXT record: %v", err) return fmt.Errorf("liquidweb: could not remove TXT record: %w", err)
} }
d.recordIDsMu.Lock() d.recordIDsMu.Lock()

View file

@ -16,7 +16,7 @@ func (d *DNSProvider) doRequest(domain, value string, cmd string) error {
resp, err := d.config.HTTPClient.Do(req) resp, err := d.config.HTTPClient.Do(req)
if err != nil { if err != nil {
return fmt.Errorf("error querying API: %v", err) return fmt.Errorf("error querying API: %w", err)
} }
defer resp.Body.Close() defer resp.Body.Close()
@ -42,7 +42,7 @@ func (d *DNSProvider) buildRequest(domain, value string, cmd string) (*http.Requ
req, err := http.NewRequest(http.MethodPost, defaultBaseURL, strings.NewReader(params.Encode())) req, err := http.NewRequest(http.MethodPost, defaultBaseURL, strings.NewReader(params.Encode()))
if err != nil { if err != nil {
return nil, fmt.Errorf("invalid request: %v", err) return nil, fmt.Errorf("invalid request: %w", err)
} }
req.Header.Set("Content-Type", "application/x-www-form-urlencoded") req.Header.Set("Content-Type", "application/x-www-form-urlencoded")

View file

@ -43,7 +43,7 @@ type DNSProvider struct {
func NewDNSProvider() (*DNSProvider, error) { func NewDNSProvider() (*DNSProvider, error) {
values, err := env.Get("MYDNSJP_MASTER_ID", "MYDNSJP_PASSWORD") values, err := env.Get("MYDNSJP_MASTER_ID", "MYDNSJP_PASSWORD")
if err != nil { if err != nil {
return nil, fmt.Errorf("mydnsjp: %v", err) return nil, fmt.Errorf("mydnsjp: %w", err)
} }
config := NewDefaultConfig() config := NewDefaultConfig()
@ -77,7 +77,7 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
_, value := dns01.GetRecord(domain, keyAuth) _, value := dns01.GetRecord(domain, keyAuth)
err := d.doRequest(domain, value, "REGIST") err := d.doRequest(domain, value, "REGIST")
if err != nil { if err != nil {
return fmt.Errorf("mydnsjp: %v", err) return fmt.Errorf("mydnsjp: %w", err)
} }
return nil return nil
} }
@ -87,7 +87,7 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
_, value := dns01.GetRecord(domain, keyAuth) _, value := dns01.GetRecord(domain, keyAuth)
err := d.doRequest(domain, value, "DELETE") err := d.doRequest(domain, value, "DELETE")
if err != nil { if err != nil {
return fmt.Errorf("mydnsjp: %v", err) return fmt.Errorf("mydnsjp: %w", err)
} }
return nil return nil
} }

View file

@ -2,6 +2,7 @@ package namecheap
import ( import (
"encoding/xml" "encoding/xml"
"errors"
"fmt" "fmt"
"io/ioutil" "io/ioutil"
"net/http" "net/http"
@ -97,7 +98,7 @@ func (d *DNSProvider) setHosts(sld, tld string, hosts []Record) error {
return fmt.Errorf("%s [%d]", shr.Errors[0].Description, shr.Errors[0].Number) return fmt.Errorf("%s [%d]", shr.Errors[0].Description, shr.Errors[0].Number)
} }
if shr.Result.IsSuccess != "true" { if shr.Result.IsSuccess != "true" {
return fmt.Errorf("setHosts failed") return errors.New("setHosts failed")
} }
return nil return nil
@ -113,7 +114,7 @@ func (d *DNSProvider) do(req *http.Request, out interface{}) error {
var body []byte var body []byte
body, err = readBody(resp) body, err = readBody(resp)
if err != nil { if err != nil {
return fmt.Errorf("HTTP error %d [%s]: %v", resp.StatusCode, http.StatusText(resp.StatusCode), err) return fmt.Errorf("HTTP error %d [%s]: %w", resp.StatusCode, http.StatusText(resp.StatusCode), err)
} }
return fmt.Errorf("HTTP error %d [%s]: %s", resp.StatusCode, http.StatusText(resp.StatusCode), string(body)) return fmt.Errorf("HTTP error %d [%s]: %s", resp.StatusCode, http.StatusText(resp.StatusCode), string(body))
} }
@ -178,7 +179,7 @@ func addParam(key, value string) func(url.Values) {
func readBody(resp *http.Response) ([]byte, error) { func readBody(resp *http.Response) ([]byte, error) {
if resp.Body == nil { if resp.Body == nil {
return nil, fmt.Errorf("response body is nil") return nil, errors.New("response body is nil")
} }
defer resp.Body.Close() defer resp.Body.Close()

View file

@ -91,7 +91,7 @@ type DNSProvider struct {
func NewDNSProvider() (*DNSProvider, error) { func NewDNSProvider() (*DNSProvider, error) {
values, err := env.Get("NAMECHEAP_API_USER", "NAMECHEAP_API_KEY") values, err := env.Get("NAMECHEAP_API_USER", "NAMECHEAP_API_KEY")
if err != nil { if err != nil {
return nil, fmt.Errorf("namecheap: %v", err) return nil, fmt.Errorf("namecheap: %w", err)
} }
config := NewDefaultConfig() config := NewDefaultConfig()
@ -108,13 +108,13 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) {
} }
if config.APIUser == "" || config.APIKey == "" { if config.APIUser == "" || config.APIKey == "" {
return nil, fmt.Errorf("namecheap: credentials missing") return nil, errors.New("namecheap: credentials missing")
} }
if len(config.ClientIP) == 0 { if len(config.ClientIP) == 0 {
clientIP, err := getClientIP(config.HTTPClient, config.Debug) clientIP, err := getClientIP(config.HTTPClient, config.Debug)
if err != nil { if err != nil {
return nil, fmt.Errorf("namecheap: %v", err) return nil, fmt.Errorf("namecheap: %w", err)
} }
config.ClientIP = clientIP config.ClientIP = clientIP
} }
@ -132,12 +132,12 @@ func (d *DNSProvider) Timeout() (timeout, interval time.Duration) {
func (d *DNSProvider) Present(domain, token, keyAuth string) error { func (d *DNSProvider) Present(domain, token, keyAuth string) error {
ch, err := newChallenge(domain, keyAuth) ch, err := newChallenge(domain, keyAuth)
if err != nil { if err != nil {
return fmt.Errorf("namecheap: %v", err) return fmt.Errorf("namecheap: %w", err)
} }
records, err := d.getHosts(ch.sld, ch.tld) records, err := d.getHosts(ch.sld, ch.tld)
if err != nil { if err != nil {
return fmt.Errorf("namecheap: %v", err) return fmt.Errorf("namecheap: %w", err)
} }
record := Record{ record := Record{
@ -158,7 +158,7 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
err = d.setHosts(ch.sld, ch.tld, records) err = d.setHosts(ch.sld, ch.tld, records)
if err != nil { if err != nil {
return fmt.Errorf("namecheap: %v", err) return fmt.Errorf("namecheap: %w", err)
} }
return nil return nil
} }
@ -167,12 +167,12 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error { func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
ch, err := newChallenge(domain, keyAuth) ch, err := newChallenge(domain, keyAuth)
if err != nil { if err != nil {
return fmt.Errorf("namecheap: %v", err) return fmt.Errorf("namecheap: %w", err)
} }
records, err := d.getHosts(ch.sld, ch.tld) records, err := d.getHosts(ch.sld, ch.tld)
if err != nil { if err != nil {
return fmt.Errorf("namecheap: %v", err) return fmt.Errorf("namecheap: %w", err)
} }
// Find the challenge TXT record and remove it if found. // Find the challenge TXT record and remove it if found.
@ -192,7 +192,7 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
err = d.setHosts(ch.sld, ch.tld, newRecords) err = d.setHosts(ch.sld, ch.tld, newRecords)
if err != nil { if err != nil {
return fmt.Errorf("namecheap: %v", err) return fmt.Errorf("namecheap: %w", err)
} }
return nil return nil
} }

View file

@ -51,7 +51,7 @@ type DNSProvider struct {
func NewDNSProvider() (*DNSProvider, error) { func NewDNSProvider() (*DNSProvider, error) {
values, err := env.Get("NAMECOM_USERNAME", "NAMECOM_API_TOKEN") values, err := env.Get("NAMECOM_USERNAME", "NAMECOM_API_TOKEN")
if err != nil { if err != nil {
return nil, fmt.Errorf("namedotcom: %v", err) return nil, fmt.Errorf("namedotcom: %w", err)
} }
config := NewDefaultConfig() config := NewDefaultConfig()
@ -69,11 +69,11 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) {
} }
if config.Username == "" { if config.Username == "" {
return nil, fmt.Errorf("namedotcom: username is required") return nil, errors.New("namedotcom: username is required")
} }
if config.APIToken == "" { if config.APIToken == "" {
return nil, fmt.Errorf("namedotcom: API token is required") return nil, errors.New("namedotcom: API token is required")
} }
if config.TTL < minTTL { if config.TTL < minTTL {
@ -104,7 +104,7 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
_, err := d.client.CreateRecord(request) _, err := d.client.CreateRecord(request)
if err != nil { if err != nil {
return fmt.Errorf("namedotcom: API call failed: %v", err) return fmt.Errorf("namedotcom: API call failed: %w", err)
} }
return nil return nil
@ -116,7 +116,7 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
records, err := d.getRecords(domain) records, err := d.getRecords(domain)
if err != nil { if err != nil {
return fmt.Errorf("namedotcom: %v", err) return fmt.Errorf("namedotcom: %w", err)
} }
for _, rec := range records { for _, rec := range records {
@ -127,7 +127,7 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
} }
_, err := d.client.DeleteRecord(request) _, err := d.client.DeleteRecord(request)
if err != nil { if err != nil {
return fmt.Errorf("namedotcom: %v", err) return fmt.Errorf("namedotcom: %w", err)
} }
} }
} }

View file

@ -47,7 +47,7 @@ type DNSProvider struct {
func NewDNSProvider() (*DNSProvider, error) { func NewDNSProvider() (*DNSProvider, error) {
values, err := env.Get("NAMESILO_API_KEY") values, err := env.Get("NAMESILO_API_KEY")
if err != nil { if err != nil {
return nil, fmt.Errorf("namesilo: %v", err) return nil, fmt.Errorf("namesilo: %w", err)
} }
config := NewDefaultConfig() config := NewDefaultConfig()
@ -68,7 +68,7 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) {
transport, err := namesilo.NewTokenTransport(config.APIKey) transport, err := namesilo.NewTokenTransport(config.APIKey)
if err != nil { if err != nil {
return nil, fmt.Errorf("namesilo: %v", err) return nil, fmt.Errorf("namesilo: %w", err)
} }
return &DNSProvider{client: namesilo.NewClient(transport.Client()), config: config}, nil return &DNSProvider{client: namesilo.NewClient(transport.Client()), config: config}, nil
@ -80,7 +80,7 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
zoneName, err := getZoneNameByDomain(domain) zoneName, err := getZoneNameByDomain(domain)
if err != nil { if err != nil {
return fmt.Errorf("namesilo: %v", err) return fmt.Errorf("namesilo: %w", err)
} }
_, err = d.client.DnsAddRecord(&namesilo.DnsAddRecordParams{ _, err = d.client.DnsAddRecord(&namesilo.DnsAddRecordParams{
@ -91,7 +91,7 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
TTL: d.config.TTL, TTL: d.config.TTL,
}) })
if err != nil { if err != nil {
return fmt.Errorf("namesilo: failed to add record %v", err) return fmt.Errorf("namesilo: failed to add record %w", err)
} }
return nil return nil
} }
@ -102,12 +102,12 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
zoneName, err := getZoneNameByDomain(domain) zoneName, err := getZoneNameByDomain(domain)
if err != nil { if err != nil {
return fmt.Errorf("namesilo: %v", err) return fmt.Errorf("namesilo: %w", err)
} }
resp, err := d.client.DnsListRecords(&namesilo.DnsListRecordsParams{Domain: zoneName}) resp, err := d.client.DnsListRecords(&namesilo.DnsListRecordsParams{Domain: zoneName})
if err != nil { if err != nil {
return fmt.Errorf("namesilo: %v", err) return fmt.Errorf("namesilo: %w", err)
} }
var lastErr error var lastErr error
@ -116,7 +116,7 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
if r.Type == "TXT" && r.Host == name { if r.Type == "TXT" && r.Host == name {
_, err := d.client.DnsDeleteRecord(&namesilo.DnsDeleteRecordParams{Domain: zoneName, ID: r.RecordID}) _, err := d.client.DnsDeleteRecord(&namesilo.DnsDeleteRecordParams{Domain: zoneName, ID: r.RecordID})
if err != nil { if err != nil {
lastErr = fmt.Errorf("namesilo: %v", err) lastErr = fmt.Errorf("namesilo: %w", err)
} }
} }
} }
@ -132,7 +132,7 @@ func (d *DNSProvider) Timeout() (timeout, interval time.Duration) {
func getZoneNameByDomain(domain string) (string, error) { func getZoneNameByDomain(domain string) (string, error) {
zone, err := dns01.FindZoneByFqdn(dns01.ToFqdn(domain)) zone, err := dns01.FindZoneByFqdn(dns01.ToFqdn(domain))
if err != nil { if err != nil {
return "", fmt.Errorf("failed to find zone for domain: %s, %v", domain, err) return "", fmt.Errorf("failed to find zone for domain: %s, %w", domain, err)
} }
return dns01.UnFqdn(zone), nil return dns01.UnFqdn(zone), nil
} }

View file

@ -3,6 +3,7 @@ package internal
import ( import (
"bytes" "bytes"
"encoding/json" "encoding/json"
"errors"
"fmt" "fmt"
"io/ioutil" "io/ioutil"
"net/http" "net/http"
@ -123,7 +124,7 @@ type Client struct {
// NewClient creates a netcup DNS client // NewClient creates a netcup DNS client
func NewClient(customerNumber string, apiKey string, apiPassword string) (*Client, error) { func NewClient(customerNumber string, apiKey string, apiPassword string) (*Client, error) {
if customerNumber == "" || apiKey == "" || apiPassword == "" { if customerNumber == "" || apiKey == "" || apiPassword == "" {
return nil, fmt.Errorf("credentials missing") return nil, errors.New("credentials missing")
} }
return &Client{ return &Client{
@ -154,7 +155,7 @@ func (c *Client) Login() (string, error) {
var responseData LoginResponse var responseData LoginResponse
err := c.doRequest(payload, &responseData) err := c.doRequest(payload, &responseData)
if err != nil { if err != nil {
return "", fmt.Errorf("loging error: %v", err) return "", fmt.Errorf("loging error: %w", err)
} }
return responseData.APISessionID, nil return responseData.APISessionID, nil
@ -175,7 +176,7 @@ func (c *Client) Logout(sessionID string) error {
err := c.doRequest(payload, nil) err := c.doRequest(payload, nil)
if err != nil { if err != nil {
return fmt.Errorf("logout error: %v", err) return fmt.Errorf("logout error: %w", err)
} }
return nil return nil
@ -198,7 +199,7 @@ func (c *Client) UpdateDNSRecord(sessionID, domainName string, records []DNSReco
err := c.doRequest(payload, nil) err := c.doRequest(payload, nil)
if err != nil { if err != nil {
return fmt.Errorf("error when sending the request: %v", err) return fmt.Errorf("error when sending the request: %w", err)
} }
return nil return nil
@ -222,7 +223,7 @@ func (c *Client) GetDNSRecords(hostname, apiSessionID string) ([]DNSRecord, erro
var responseData InfoDNSRecordsResponse var responseData InfoDNSRecordsResponse
err := c.doRequest(payload, &responseData) err := c.doRequest(payload, &responseData)
if err != nil { if err != nil {
return nil, fmt.Errorf("error when sending the request: %v", err) return nil, fmt.Errorf("error when sending the request: %w", err)
} }
return responseData.DNSRecords, nil return responseData.DNSRecords, nil
@ -265,7 +266,7 @@ func (c *Client) doRequest(payload interface{}, responseData interface{}) error
if responseData != nil { if responseData != nil {
err = json.Unmarshal(respMsg.ResponseData, responseData) err = json.Unmarshal(respMsg.ResponseData, responseData)
if err != nil { if err != nil {
return fmt.Errorf("%v: unmarshaling %T error: %v: %s", return fmt.Errorf("%v: unmarshaling %T error: %w: %s",
respMsg, responseData, err, string(respMsg.ResponseData)) respMsg, responseData, err, string(respMsg.ResponseData))
} }
} }
@ -283,7 +284,7 @@ func checkResponse(resp *http.Response) error {
raw, err := ioutil.ReadAll(resp.Body) raw, err := ioutil.ReadAll(resp.Body)
if err != nil { if err != nil {
return fmt.Errorf("unable to read body: status code=%d, error=%v", resp.StatusCode, err) return fmt.Errorf("unable to read body: status code=%d, error=%w", resp.StatusCode, err)
} }
return fmt.Errorf("status code=%d: %s", resp.StatusCode, string(raw)) return fmt.Errorf("status code=%d: %s", resp.StatusCode, string(raw))
@ -301,13 +302,13 @@ func decodeResponseMsg(resp *http.Response) (*ResponseMsg, error) {
raw, err := ioutil.ReadAll(resp.Body) raw, err := ioutil.ReadAll(resp.Body)
if err != nil { if err != nil {
return nil, fmt.Errorf("unable to read body: status code=%d, error=%v", resp.StatusCode, err) return nil, fmt.Errorf("unable to read body: status code=%d, error=%w", resp.StatusCode, err)
} }
var respMsg ResponseMsg var respMsg ResponseMsg
err = json.Unmarshal(raw, &respMsg) err = json.Unmarshal(raw, &respMsg)
if err != nil { if err != nil {
return nil, fmt.Errorf("unmarshaling %T error [status code=%d]: %v: %s", respMsg, resp.StatusCode, err, string(raw)) return nil, fmt.Errorf("unmarshaling %T error [status code=%d]: %w: %s", respMsg, resp.StatusCode, err, string(raw))
} }
return &respMsg, nil return &respMsg, nil
@ -322,5 +323,5 @@ func GetDNSRecordIdx(records []DNSRecord, record DNSRecord) (int, error) {
return index, nil return index, nil
} }
} }
return -1, fmt.Errorf("no DNS Record found") return -1, errors.New("no DNS Record found")
} }

View file

@ -570,7 +570,7 @@ func TestLiveClientUpdateDnsRecord(t *testing.T) {
fqdn, _ := dns01.GetRecord(envTest.GetDomain(), "123d==") fqdn, _ := dns01.GetRecord(envTest.GetDomain(), "123d==")
zone, err := dns01.FindZoneByFqdn(fqdn) zone, err := dns01.FindZoneByFqdn(fqdn)
require.NoError(t, err, fmt.Errorf("error finding DNSZone, %v", err)) require.NoError(t, err, fmt.Errorf("error finding DNSZone, %w", err))
hostname := strings.Replace(fqdn, "."+zone, "", 1) hostname := strings.Replace(fqdn, "."+zone, "", 1)

View file

@ -50,7 +50,7 @@ type DNSProvider struct {
func NewDNSProvider() (*DNSProvider, error) { func NewDNSProvider() (*DNSProvider, error) {
values, err := env.Get("NETCUP_CUSTOMER_NUMBER", "NETCUP_API_KEY", "NETCUP_API_PASSWORD") values, err := env.Get("NETCUP_CUSTOMER_NUMBER", "NETCUP_API_KEY", "NETCUP_API_PASSWORD")
if err != nil { if err != nil {
return nil, fmt.Errorf("netcup: %v", err) return nil, fmt.Errorf("netcup: %w", err)
} }
config := NewDefaultConfig() config := NewDefaultConfig()
@ -69,7 +69,7 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) {
client, err := internal.NewClient(config.Customer, config.Key, config.Password) client, err := internal.NewClient(config.Customer, config.Key, config.Password)
if err != nil { if err != nil {
return nil, fmt.Errorf("netcup: %v", err) return nil, fmt.Errorf("netcup: %w", err)
} }
client.HTTPClient = config.HTTPClient client.HTTPClient = config.HTTPClient
@ -83,12 +83,12 @@ func (d *DNSProvider) Present(domainName, token, keyAuth string) error {
zone, err := dns01.FindZoneByFqdn(fqdn) zone, err := dns01.FindZoneByFqdn(fqdn)
if err != nil { if err != nil {
return fmt.Errorf("netcup: failed to find DNSZone, %v", err) return fmt.Errorf("netcup: failed to find DNSZone, %w", err)
} }
sessionID, err := d.client.Login() sessionID, err := d.client.Login()
if err != nil { if err != nil {
return fmt.Errorf("netcup: %v", err) return fmt.Errorf("netcup: %w", err)
} }
defer func() { defer func() {
@ -118,7 +118,7 @@ func (d *DNSProvider) Present(domainName, token, keyAuth string) error {
err = d.client.UpdateDNSRecord(sessionID, zone, records) err = d.client.UpdateDNSRecord(sessionID, zone, records)
if err != nil { if err != nil {
return fmt.Errorf("netcup: failed to add TXT-Record: %v", err) return fmt.Errorf("netcup: failed to add TXT-Record: %w", err)
} }
return nil return nil
@ -130,12 +130,12 @@ func (d *DNSProvider) CleanUp(domainName, token, keyAuth string) error {
zone, err := dns01.FindZoneByFqdn(fqdn) zone, err := dns01.FindZoneByFqdn(fqdn)
if err != nil { if err != nil {
return fmt.Errorf("netcup: failed to find DNSZone, %v", err) return fmt.Errorf("netcup: failed to find DNSZone, %w", err)
} }
sessionID, err := d.client.Login() sessionID, err := d.client.Login()
if err != nil { if err != nil {
return fmt.Errorf("netcup: %v", err) return fmt.Errorf("netcup: %w", err)
} }
defer func() { defer func() {
@ -151,7 +151,7 @@ func (d *DNSProvider) CleanUp(domainName, token, keyAuth string) error {
records, err := d.client.GetDNSRecords(zone, sessionID) records, err := d.client.GetDNSRecords(zone, sessionID)
if err != nil { if err != nil {
return fmt.Errorf("netcup: %v", err) return fmt.Errorf("netcup: %w", err)
} }
record := internal.DNSRecord{ record := internal.DNSRecord{
@ -162,14 +162,14 @@ func (d *DNSProvider) CleanUp(domainName, token, keyAuth string) error {
idx, err := internal.GetDNSRecordIdx(records, record) idx, err := internal.GetDNSRecordIdx(records, record)
if err != nil { if err != nil {
return fmt.Errorf("netcup: %v", err) return fmt.Errorf("netcup: %w", err)
} }
records[idx].DeleteRecord = true records[idx].DeleteRecord = true
err = d.client.UpdateDNSRecord(sessionID, zone, []internal.DNSRecord{records[idx]}) err = d.client.UpdateDNSRecord(sessionID, zone, []internal.DNSRecord{records[idx]})
if err != nil { if err != nil {
return fmt.Errorf("netcup: %v", err) return fmt.Errorf("netcup: %w", err)
} }
return nil return nil

View file

@ -129,7 +129,7 @@ func (c *Client) ChangeResourceRecordSets(hostedZoneID string, input ChangeResou
err = c.sign(req) err = c.sign(req)
if err != nil { if err != nil {
return nil, fmt.Errorf("an error occurred during the creation of the signature: %v", err) return nil, fmt.Errorf("an error occurred during the creation of the signature: %w", err)
} }
res, err := c.HTTPClient.Do(req) res, err := c.HTTPClient.Do(req)
@ -146,7 +146,7 @@ func (c *Client) ChangeResourceRecordSets(hostedZoneID string, input ChangeResou
errResp := &ErrorResponse{} errResp := &ErrorResponse{}
err = xml.NewDecoder(res.Body).Decode(errResp) err = xml.NewDecoder(res.Body).Decode(errResp)
if err != nil { if err != nil {
return nil, fmt.Errorf("an error occurred while unmarshaling the error body to XML: %v", err) return nil, fmt.Errorf("an error occurred while unmarshaling the error body to XML: %w", err)
} }
return nil, fmt.Errorf("an error occurred: %s", errResp.Error.Message) return nil, fmt.Errorf("an error occurred: %s", errResp.Error.Message)
@ -155,7 +155,7 @@ func (c *Client) ChangeResourceRecordSets(hostedZoneID string, input ChangeResou
output := &ChangeResourceRecordSetsResponse{} output := &ChangeResourceRecordSetsResponse{}
err = xml.NewDecoder(res.Body).Decode(output) err = xml.NewDecoder(res.Body).Decode(output)
if err != nil { if err != nil {
return nil, fmt.Errorf("an error occurred while unmarshaling the response body to XML: %v", err) return nil, fmt.Errorf("an error occurred while unmarshaling the response body to XML: %w", err)
} }
return output, err return output, err
@ -172,7 +172,7 @@ func (c *Client) GetChange(statusID string) (*GetChangeResponse, error) {
err = c.sign(req) err = c.sign(req)
if err != nil { if err != nil {
return nil, fmt.Errorf("an error occurred during the creation of the signature: %v", err) return nil, fmt.Errorf("an error occurred during the creation of the signature: %w", err)
} }
res, err := c.HTTPClient.Do(req) res, err := c.HTTPClient.Do(req)
@ -189,7 +189,7 @@ func (c *Client) GetChange(statusID string) (*GetChangeResponse, error) {
errResp := &ErrorResponse{} errResp := &ErrorResponse{}
err = xml.NewDecoder(res.Body).Decode(errResp) err = xml.NewDecoder(res.Body).Decode(errResp)
if err != nil { if err != nil {
return nil, fmt.Errorf("an error occurred while unmarshaling the error body to XML: %v", err) return nil, fmt.Errorf("an error occurred while unmarshaling the error body to XML: %w", err)
} }
return nil, fmt.Errorf("an error occurred: %s", errResp.Error.Message) return nil, fmt.Errorf("an error occurred: %s", errResp.Error.Message)
@ -198,7 +198,7 @@ func (c *Client) GetChange(statusID string) (*GetChangeResponse, error) {
output := &GetChangeResponse{} output := &GetChangeResponse{}
err = xml.NewDecoder(res.Body).Decode(output) err = xml.NewDecoder(res.Body).Decode(output)
if err != nil { if err != nil {
return nil, fmt.Errorf("an error occurred while unmarshaling the response body to XML: %v", err) return nil, fmt.Errorf("an error occurred while unmarshaling the response body to XML: %w", err)
} }
return output, nil return output, nil

View file

@ -49,7 +49,7 @@ type DNSProvider struct {
func NewDNSProvider() (*DNSProvider, error) { func NewDNSProvider() (*DNSProvider, error) {
values, err := env.Get("NIFCLOUD_ACCESS_KEY_ID", "NIFCLOUD_SECRET_ACCESS_KEY") values, err := env.Get("NIFCLOUD_ACCESS_KEY_ID", "NIFCLOUD_SECRET_ACCESS_KEY")
if err != nil { if err != nil {
return nil, fmt.Errorf("nifcloud: %v", err) return nil, fmt.Errorf("nifcloud: %w", err)
} }
config := NewDefaultConfig() config := NewDefaultConfig()
@ -68,7 +68,7 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) {
client, err := internal.NewClient(config.AccessKey, config.SecretKey) client, err := internal.NewClient(config.AccessKey, config.SecretKey)
if err != nil { if err != nil {
return nil, fmt.Errorf("nifcloud: %v", err) return nil, fmt.Errorf("nifcloud: %w", err)
} }
if config.HTTPClient != nil { if config.HTTPClient != nil {
@ -88,7 +88,7 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
err := d.changeRecord("CREATE", fqdn, value, domain, d.config.TTL) err := d.changeRecord("CREATE", fqdn, value, domain, d.config.TTL)
if err != nil { if err != nil {
return fmt.Errorf("nifcloud: %v", err) return fmt.Errorf("nifcloud: %w", err)
} }
return err return err
} }
@ -99,7 +99,7 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
err := d.changeRecord("DELETE", fqdn, value, domain, d.config.TTL) err := d.changeRecord("DELETE", fqdn, value, domain, d.config.TTL)
if err != nil { if err != nil {
return fmt.Errorf("nifcloud: %v", err) return fmt.Errorf("nifcloud: %w", err)
} }
return err return err
} }
@ -141,7 +141,7 @@ func (d *DNSProvider) changeRecord(action, fqdn, value, domain string, ttl int)
resp, err := d.client.ChangeResourceRecordSets(domain, reqParams) resp, err := d.client.ChangeResourceRecordSets(domain, reqParams)
if err != nil { if err != nil {
return fmt.Errorf("failed to change NIFCLOUD record set: %v", err) return fmt.Errorf("failed to change NIFCLOUD record set: %w", err)
} }
statusID := resp.ChangeInfo.ID statusID := resp.ChangeInfo.ID
@ -149,7 +149,7 @@ func (d *DNSProvider) changeRecord(action, fqdn, value, domain string, ttl int)
return wait.For("nifcloud", 120*time.Second, 4*time.Second, func() (bool, error) { return wait.For("nifcloud", 120*time.Second, 4*time.Second, func() (bool, error) {
resp, err := d.client.GetChange(statusID) resp, err := d.client.GetChange(statusID)
if err != nil { if err != nil {
return false, fmt.Errorf("failed to query NIFCLOUD DNS change status: %v", err) return false, fmt.Errorf("failed to query NIFCLOUD DNS change status: %w", err)
} }
return resp.ChangeInfo.Status == "INSYNC", nil return resp.ChangeInfo.Status == "INSYNC", nil
}) })

View file

@ -47,7 +47,7 @@ type DNSProvider struct {
func NewDNSProvider() (*DNSProvider, error) { func NewDNSProvider() (*DNSProvider, error) {
values, err := env.Get("NS1_API_KEY") values, err := env.Get("NS1_API_KEY")
if err != nil { if err != nil {
return nil, fmt.Errorf("ns1: %v", err) return nil, fmt.Errorf("ns1: %w", err)
} }
config := NewDefaultConfig() config := NewDefaultConfig()
@ -63,7 +63,7 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) {
} }
if config.APIKey == "" { if config.APIKey == "" {
return nil, fmt.Errorf("ns1: credentials missing") return nil, errors.New("ns1: credentials missing")
} }
client := rest.NewClient(config.HTTPClient, rest.SetAPIKey(config.APIKey)) client := rest.NewClient(config.HTTPClient, rest.SetAPIKey(config.APIKey))
@ -77,7 +77,7 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
zone, err := d.getHostedZone(fqdn) zone, err := d.getHostedZone(fqdn)
if err != nil { if err != nil {
return fmt.Errorf("ns1: %v", err) return fmt.Errorf("ns1: %w", err)
} }
record, _, err := d.client.Records.Get(zone.Zone, dns01.UnFqdn(fqdn), "TXT") record, _, err := d.client.Records.Get(zone.Zone, dns01.UnFqdn(fqdn), "TXT")
@ -92,14 +92,14 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
_, err = d.client.Records.Create(record) _, err = d.client.Records.Create(record)
if err != nil { if err != nil {
return fmt.Errorf("ns1: failed to create record [zone: %q, fqdn: %q]: %v", zone.Zone, fqdn, err) return fmt.Errorf("ns1: failed to create record [zone: %q, fqdn: %q]: %w", zone.Zone, fqdn, err)
} }
return nil return nil
} }
if err != nil { if err != nil {
return fmt.Errorf("ns1: failed to get the existing record: %v", err) return fmt.Errorf("ns1: failed to get the existing record: %w", err)
} }
// Update the existing records // Update the existing records
@ -109,7 +109,7 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
_, err = d.client.Records.Update(record) _, err = d.client.Records.Update(record)
if err != nil { if err != nil {
return fmt.Errorf("ns1: failed to update record [zone: %q, fqdn: %q]: %v", zone.Zone, fqdn, err) return fmt.Errorf("ns1: failed to update record [zone: %q, fqdn: %q]: %w", zone.Zone, fqdn, err)
} }
return nil return nil
@ -121,13 +121,13 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
zone, err := d.getHostedZone(fqdn) zone, err := d.getHostedZone(fqdn)
if err != nil { if err != nil {
return fmt.Errorf("ns1: %v", err) return fmt.Errorf("ns1: %w", err)
} }
name := dns01.UnFqdn(fqdn) name := dns01.UnFqdn(fqdn)
_, err = d.client.Records.Delete(zone.Zone, name, "TXT") _, err = d.client.Records.Delete(zone.Zone, name, "TXT")
if err != nil { if err != nil {
return fmt.Errorf("ns1: failed to delete record [zone: %q, domain: %q]: %v", zone.Zone, name, err) return fmt.Errorf("ns1: failed to delete record [zone: %q, domain: %q]: %w", zone.Zone, name, err)
} }
return nil return nil
} }
@ -141,12 +141,12 @@ func (d *DNSProvider) Timeout() (timeout, interval time.Duration) {
func (d *DNSProvider) getHostedZone(fqdn string) (*dns.Zone, error) { func (d *DNSProvider) getHostedZone(fqdn string) (*dns.Zone, error) {
authZone, err := getAuthZone(fqdn) authZone, err := getAuthZone(fqdn)
if err != nil { if err != nil {
return nil, fmt.Errorf("failed to extract auth zone from fqdn %q: %v", fqdn, err) return nil, fmt.Errorf("failed to extract auth zone from fqdn %q: %w", fqdn, err)
} }
zone, _, err := d.client.Zones.Get(authZone) zone, _, err := d.client.Zones.Get(authZone)
if err != nil { if err != nil {
return nil, fmt.Errorf("failed to get zone [authZone: %q, fqdn: %q]: %v", authZone, fqdn, err) return nil, fmt.Errorf("failed to get zone [authZone: %q, fqdn: %q]: %w", authZone, fqdn, err)
} }
return zone, nil return zone, nil

View file

@ -81,7 +81,7 @@ func getPrivateKey(envVar string) ([]byte, error) {
if envVarValue != "" { if envVarValue != "" {
bytes, err := base64.StdEncoding.DecodeString(envVarValue) bytes, err := base64.StdEncoding.DecodeString(envVarValue)
if err != nil { if err != nil {
return nil, fmt.Errorf("failed to read base64 value %s (defined by env var %s): %s", envVarValue, envVar, err) return nil, fmt.Errorf("failed to read base64 value %s (defined by env var %s): %w", envVarValue, envVar, err)
} }
return bytes, nil return bytes, nil
} }
@ -94,7 +94,7 @@ func getPrivateKey(envVar string) ([]byte, error) {
fileContents, err := ioutil.ReadFile(fileVarValue) fileContents, err := ioutil.ReadFile(fileVarValue)
if err != nil { if err != nil {
return nil, fmt.Errorf("failed to read the file %s (defined by env var %s): %s", fileVarValue, fileVar, err) return nil, fmt.Errorf("failed to read the file %s (defined by env var %s): %w", fileVarValue, fileVar, err)
} }
return fileContents, nil return fileContents, nil

View file

@ -45,7 +45,7 @@ type DNSProvider struct {
func NewDNSProvider() (*DNSProvider, error) { func NewDNSProvider() (*DNSProvider, error) {
values, err := env.Get(ociPrivkey, ociTenancyOCID, ociUserOCID, ociPubkeyFingerprint, ociRegion, "OCI_COMPARTMENT_OCID") values, err := env.Get(ociPrivkey, ociTenancyOCID, ociUserOCID, ociPubkeyFingerprint, ociRegion, "OCI_COMPARTMENT_OCID")
if err != nil { if err != nil {
return nil, fmt.Errorf("oraclecloud: %v", err) return nil, fmt.Errorf("oraclecloud: %w", err)
} }
config := NewDefaultConfig() config := NewDefaultConfig()
@ -71,7 +71,7 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) {
client, err := dns.NewDnsClientWithConfigurationProvider(config.OCIConfigProvider) client, err := dns.NewDnsClientWithConfigurationProvider(config.OCIConfigProvider)
if err != nil { if err != nil {
return nil, fmt.Errorf("oraclecloud: %v", err) return nil, fmt.Errorf("oraclecloud: %w", err)
} }
if config.HTTPClient != nil { if config.HTTPClient != nil {
@ -105,7 +105,7 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
_, err := d.client.PatchDomainRecords(context.Background(), request) _, err := d.client.PatchDomainRecords(context.Background(), request)
if err != nil { if err != nil {
return fmt.Errorf("oraclecloud: %v", err) return fmt.Errorf("oraclecloud: %w", err)
} }
return nil return nil
@ -127,11 +127,11 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
domainRecords, err := d.client.GetDomainRecords(ctx, getRequest) domainRecords, err := d.client.GetDomainRecords(ctx, getRequest)
if err != nil { if err != nil {
return fmt.Errorf("oraclecloud: %v", err) return fmt.Errorf("oraclecloud: %w", err)
} }
if *domainRecords.OpcTotalItems == 0 { if *domainRecords.OpcTotalItems == 0 {
return fmt.Errorf("oraclecloud: no record to CleanUp") return errors.New("oraclecloud: no record to CleanUp")
} }
var deleteHash *string var deleteHash *string
@ -143,7 +143,7 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
} }
if deleteHash == nil { if deleteHash == nil {
return fmt.Errorf("oraclecloud: no record to CleanUp") return errors.New("oraclecloud: no record to CleanUp")
} }
recordOperation := dns.RecordOperation{ recordOperation := dns.RecordOperation{
@ -162,7 +162,7 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
_, err = d.client.PatchDomainRecords(ctx, patchRequest) _, err = d.client.PatchDomainRecords(ctx, patchRequest)
if err != nil { if err != nil {
return fmt.Errorf("oraclecloud: %v", err) return fmt.Errorf("oraclecloud: %w", err)
} }
return nil return nil

View file

@ -3,6 +3,7 @@ package otc
import ( import (
"bytes" "bytes"
"encoding/json" "encoding/json"
"errors"
"fmt" "fmt"
"io" "io"
"io/ioutil" "io/ioutil"
@ -138,7 +139,7 @@ func (d *DNSProvider) loginRequest() error {
d.token = resp.Header.Get("X-Subject-Token") d.token = resp.Header.Get("X-Subject-Token")
if d.token == "" { if d.token == "" {
return fmt.Errorf("unable to get auth token") return errors.New("unable to get auth token")
} }
var endpointResp endpointResponse var endpointResp endpointResponse
@ -158,7 +159,7 @@ func (d *DNSProvider) loginRequest() error {
if len(endpoints) > 0 { if len(endpoints) > 0 {
d.baseURL = fmt.Sprintf("%s/v2", endpoints[0].URL) d.baseURL = fmt.Sprintf("%s/v2", endpoints[0].URL)
} else { } else {
return fmt.Errorf("unable to get dns endpoint") return errors.New("unable to get dns endpoint")
} }
return nil return nil
@ -182,11 +183,11 @@ func (d *DNSProvider) getZoneID(zone string) (string, error) {
} }
if len(zonesRes.Zones) > 1 { if len(zonesRes.Zones) > 1 {
return "", fmt.Errorf("to many zones found") return "", errors.New("to many zones found")
} }
if zonesRes.Zones[0].ID == "" { if zonesRes.Zones[0].ID == "" {
return "", fmt.Errorf("id not found") return "", errors.New("id not found")
} }
return zonesRes.Zones[0].ID, nil return zonesRes.Zones[0].ID, nil
@ -206,15 +207,15 @@ func (d *DNSProvider) getRecordSetID(zoneID string, fqdn string) (string, error)
} }
if len(recordSetsRes.RecordSets) < 1 { if len(recordSetsRes.RecordSets) < 1 {
return "", fmt.Errorf("record not found") return "", errors.New("record not found")
} }
if len(recordSetsRes.RecordSets) > 1 { if len(recordSetsRes.RecordSets) > 1 {
return "", fmt.Errorf("to many records found") return "", errors.New("to many records found")
} }
if recordSetsRes.RecordSets[0].ID == "" { if recordSetsRes.RecordSets[0].ID == "" {
return "", fmt.Errorf("id not found") return "", errors.New("id not found")
} }
return recordSetsRes.RecordSets[0].ID, nil return recordSetsRes.RecordSets[0].ID, nil

View file

@ -72,7 +72,7 @@ type DNSProvider struct {
func NewDNSProvider() (*DNSProvider, error) { func NewDNSProvider() (*DNSProvider, error) {
values, err := env.Get("OTC_DOMAIN_NAME", "OTC_USER_NAME", "OTC_PASSWORD", "OTC_PROJECT_NAME") values, err := env.Get("OTC_DOMAIN_NAME", "OTC_USER_NAME", "OTC_PASSWORD", "OTC_PROJECT_NAME")
if err != nil { if err != nil {
return nil, fmt.Errorf("otc: %v", err) return nil, fmt.Errorf("otc: %w", err)
} }
config := NewDefaultConfig() config := NewDefaultConfig()
@ -91,7 +91,7 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) {
} }
if config.DomainName == "" || config.UserName == "" || config.Password == "" || config.ProjectName == "" { if config.DomainName == "" || config.UserName == "" || config.Password == "" || config.ProjectName == "" {
return nil, fmt.Errorf("otc: credentials missing") return nil, errors.New("otc: credentials missing")
} }
if config.TTL < minTTL { if config.TTL < minTTL {
@ -111,17 +111,17 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
authZone, err := dns01.FindZoneByFqdn(fqdn) authZone, err := dns01.FindZoneByFqdn(fqdn)
if err != nil { if err != nil {
return fmt.Errorf("otc: %v", err) return fmt.Errorf("otc: %w", err)
} }
err = d.login() err = d.login()
if err != nil { if err != nil {
return fmt.Errorf("otc: %v", err) return fmt.Errorf("otc: %w", err)
} }
zoneID, err := d.getZoneID(authZone) zoneID, err := d.getZoneID(authZone)
if err != nil { if err != nil {
return fmt.Errorf("otc: unable to get zone: %s", err) return fmt.Errorf("otc: unable to get zone: %w", err)
} }
resource := fmt.Sprintf("zones/%s/recordsets", zoneID) resource := fmt.Sprintf("zones/%s/recordsets", zoneID)
@ -136,7 +136,7 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
_, err = d.sendRequest(http.MethodPost, resource, r1) _, err = d.sendRequest(http.MethodPost, resource, r1)
if err != nil { if err != nil {
return fmt.Errorf("otc: %v", err) return fmt.Errorf("otc: %w", err)
} }
return nil return nil
} }
@ -147,27 +147,27 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
authZone, err := dns01.FindZoneByFqdn(fqdn) authZone, err := dns01.FindZoneByFqdn(fqdn)
if err != nil { if err != nil {
return fmt.Errorf("otc: %v", err) return fmt.Errorf("otc: %w", err)
} }
err = d.login() err = d.login()
if err != nil { if err != nil {
return fmt.Errorf("otc: %v", err) return fmt.Errorf("otc: %w", err)
} }
zoneID, err := d.getZoneID(authZone) zoneID, err := d.getZoneID(authZone)
if err != nil { if err != nil {
return fmt.Errorf("otc: %v", err) return fmt.Errorf("otc: %w", err)
} }
recordID, err := d.getRecordSetID(zoneID, fqdn) recordID, err := d.getRecordSetID(zoneID, fqdn)
if err != nil { if err != nil {
return fmt.Errorf("otc: unable go get record %s for zone %s: %s", fqdn, domain, err) return fmt.Errorf("otc: unable go get record %s for zone %s: %w", fqdn, domain, err)
} }
err = d.deleteRecordSet(zoneID, recordID) err = d.deleteRecordSet(zoneID, recordID)
if err != nil { if err != nil {
return fmt.Errorf("otc: %v", err) return fmt.Errorf("otc: %w", err)
} }
return nil return nil
} }

View file

@ -69,7 +69,7 @@ type DNSProvider struct {
func NewDNSProvider() (*DNSProvider, error) { func NewDNSProvider() (*DNSProvider, error) {
values, err := env.Get("OVH_ENDPOINT", "OVH_APPLICATION_KEY", "OVH_APPLICATION_SECRET", "OVH_CONSUMER_KEY") values, err := env.Get("OVH_ENDPOINT", "OVH_APPLICATION_KEY", "OVH_APPLICATION_SECRET", "OVH_CONSUMER_KEY")
if err != nil { if err != nil {
return nil, fmt.Errorf("ovh: %v", err) return nil, fmt.Errorf("ovh: %w", err)
} }
config := NewDefaultConfig() config := NewDefaultConfig()
@ -88,7 +88,7 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) {
} }
if config.APIEndpoint == "" || config.ApplicationKey == "" || config.ApplicationSecret == "" || config.ConsumerKey == "" { if config.APIEndpoint == "" || config.ApplicationKey == "" || config.ApplicationSecret == "" || config.ConsumerKey == "" {
return nil, fmt.Errorf("ovh: credentials missing") return nil, errors.New("ovh: credentials missing")
} }
client, err := ovh.NewClient( client, err := ovh.NewClient(
@ -98,7 +98,7 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) {
config.ConsumerKey, config.ConsumerKey,
) )
if err != nil { if err != nil {
return nil, fmt.Errorf("ovh: %v", err) return nil, fmt.Errorf("ovh: %w", err)
} }
client.Client = config.HTTPClient client.Client = config.HTTPClient
@ -117,7 +117,7 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
// Parse domain name // Parse domain name
authZone, err := dns01.FindZoneByFqdn(dns01.ToFqdn(domain)) authZone, err := dns01.FindZoneByFqdn(dns01.ToFqdn(domain))
if err != nil { if err != nil {
return fmt.Errorf("ovh: could not determine zone for domain: '%s'. %s", domain, err) return fmt.Errorf("ovh: could not determine zone for domain %q: %w", domain, err)
} }
authZone = dns01.UnFqdn(authZone) authZone = dns01.UnFqdn(authZone)
@ -130,14 +130,14 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
var respData Record var respData Record
err = d.client.Post(reqURL, reqData, &respData) err = d.client.Post(reqURL, reqData, &respData)
if err != nil { if err != nil {
return fmt.Errorf("ovh: error when call api to add record (%s): %v", reqURL, err) return fmt.Errorf("ovh: error when call api to add record (%s): %w", reqURL, err)
} }
// Apply the change // Apply the change
reqURL = fmt.Sprintf("/domain/zone/%s/refresh", authZone) reqURL = fmt.Sprintf("/domain/zone/%s/refresh", authZone)
err = d.client.Post(reqURL, nil, nil) err = d.client.Post(reqURL, nil, nil)
if err != nil { if err != nil {
return fmt.Errorf("ovh: error when call api to refresh zone (%s): %v", reqURL, err) return fmt.Errorf("ovh: error when call api to refresh zone (%s): %w", reqURL, err)
} }
d.recordIDsMu.Lock() d.recordIDsMu.Lock()
@ -161,7 +161,7 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
authZone, err := dns01.FindZoneByFqdn(dns01.ToFqdn(domain)) authZone, err := dns01.FindZoneByFqdn(dns01.ToFqdn(domain))
if err != nil { if err != nil {
return fmt.Errorf("ovh: could not determine zone for domain: '%s'. %s", domain, err) return fmt.Errorf("ovh: could not determine zone for domain %q: %w", domain, err)
} }
authZone = dns01.UnFqdn(authZone) authZone = dns01.UnFqdn(authZone)
@ -170,14 +170,14 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
err = d.client.Delete(reqURL, nil) err = d.client.Delete(reqURL, nil)
if err != nil { if err != nil {
return fmt.Errorf("ovh: error when call OVH api to delete challenge record (%s): %v", reqURL, err) return fmt.Errorf("ovh: error when call OVH api to delete challenge record (%s): %w", reqURL, err)
} }
// Apply the change // Apply the change
reqURL = fmt.Sprintf("/domain/zone/%s/refresh", authZone) reqURL = fmt.Sprintf("/domain/zone/%s/refresh", authZone)
err = d.client.Post(reqURL, nil, nil) err = d.client.Post(reqURL, nil, nil)
if err != nil { if err != nil {
return fmt.Errorf("ovh: error when call api to refresh zone (%s): %v", reqURL, err) return fmt.Errorf("ovh: error when call api to refresh zone (%s): %w", reqURL, err)
} }
// Delete record ID from map // Delete record ID from map

View file

@ -160,7 +160,7 @@ func (d *DNSProvider) sendRequest(method, uri string, body io.Reader) (json.RawM
resp, err := d.config.HTTPClient.Do(req) resp, err := d.config.HTTPClient.Do(req)
if err != nil { if err != nil {
return nil, fmt.Errorf("error talking to PDNS API -> %v", err) return nil, fmt.Errorf("error talking to PDNS API -> %w", err)
} }
defer resp.Body.Close() defer resp.Body.Close()
@ -188,7 +188,7 @@ func (d *DNSProvider) sendRequest(method, uri string, body io.Reader) (json.RawM
return nil, err return nil, err
} }
if errInfo.ShortMsg != "" { if errInfo.ShortMsg != "" {
return nil, fmt.Errorf("error talking to PDNS API -> %v", errInfo) return nil, fmt.Errorf("error talking to PDNS API -> %w", errInfo)
} }
} }
return msg, nil return msg, nil

View file

@ -49,12 +49,12 @@ type DNSProvider struct {
func NewDNSProvider() (*DNSProvider, error) { func NewDNSProvider() (*DNSProvider, error) {
values, err := env.Get("PDNS_API_KEY", "PDNS_API_URL") values, err := env.Get("PDNS_API_KEY", "PDNS_API_URL")
if err != nil { if err != nil {
return nil, fmt.Errorf("pdns: %v", err) return nil, fmt.Errorf("pdns: %w", err)
} }
hostURL, err := url.Parse(values["PDNS_API_URL"]) hostURL, err := url.Parse(values["PDNS_API_URL"])
if err != nil { if err != nil {
return nil, fmt.Errorf("pdns: %v", err) return nil, fmt.Errorf("pdns: %w", err)
} }
config := NewDefaultConfig() config := NewDefaultConfig()
@ -71,11 +71,11 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) {
} }
if config.APIKey == "" { if config.APIKey == "" {
return nil, fmt.Errorf("pdns: API key missing") return nil, errors.New("pdns: API key missing")
} }
if config.Host == nil || config.Host.Host == "" { if config.Host == nil || config.Host.Host == "" {
return nil, fmt.Errorf("pdns: API URL missing") return nil, errors.New("pdns: API URL missing")
} }
d := &DNSProvider{config: config} d := &DNSProvider{config: config}
@ -101,7 +101,7 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
zone, err := d.getHostedZone(fqdn) zone, err := d.getHostedZone(fqdn)
if err != nil { if err != nil {
return fmt.Errorf("pdns: %v", err) return fmt.Errorf("pdns: %w", err)
} }
name := fqdn name := fqdn
@ -124,7 +124,7 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
// Look for existing records. // Look for existing records.
existingRrSet, err := d.findTxtRecord(fqdn) existingRrSet, err := d.findTxtRecord(fqdn)
if err != nil { if err != nil {
return fmt.Errorf("pdns: %v", err) return fmt.Errorf("pdns: %w", err)
} }
// merge the existing and new records // merge the existing and new records
@ -149,12 +149,12 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
body, err := json.Marshal(rrsets) body, err := json.Marshal(rrsets)
if err != nil { if err != nil {
return fmt.Errorf("pdns: %v", err) return fmt.Errorf("pdns: %w", err)
} }
_, err = d.sendRequest(http.MethodPatch, zone.URL, bytes.NewReader(body)) _, err = d.sendRequest(http.MethodPatch, zone.URL, bytes.NewReader(body))
if err != nil { if err != nil {
return fmt.Errorf("pdns: %v", err) return fmt.Errorf("pdns: %w", err)
} }
return nil return nil
} }
@ -165,12 +165,12 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
zone, err := d.getHostedZone(fqdn) zone, err := d.getHostedZone(fqdn)
if err != nil { if err != nil {
return fmt.Errorf("pdns: %v", err) return fmt.Errorf("pdns: %w", err)
} }
set, err := d.findTxtRecord(fqdn) set, err := d.findTxtRecord(fqdn)
if err != nil { if err != nil {
return fmt.Errorf("pdns: %v", err) return fmt.Errorf("pdns: %w", err)
} }
if set == nil { if set == nil {
return fmt.Errorf("pdns: no existing record found for %s", fqdn) return fmt.Errorf("pdns: no existing record found for %s", fqdn)
@ -187,12 +187,12 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
} }
body, err := json.Marshal(rrsets) body, err := json.Marshal(rrsets)
if err != nil { if err != nil {
return fmt.Errorf("pdns: %v", err) return fmt.Errorf("pdns: %w", err)
} }
_, err = d.sendRequest(http.MethodPatch, zone.URL, bytes.NewReader(body)) _, err = d.sendRequest(http.MethodPatch, zone.URL, bytes.NewReader(body))
if err != nil { if err != nil {
return fmt.Errorf("pdns: %v", err) return fmt.Errorf("pdns: %w", err)
} }
return nil return nil
} }

View file

@ -145,7 +145,7 @@ func (d *DNSProvider) makeRequest(method, uri string, body io.Reader) (json.RawM
resp, err := d.config.HTTPClient.Do(req) resp, err := d.config.HTTPClient.Do(req)
if err != nil { if err != nil {
return nil, fmt.Errorf("error querying DNS API: %v", err) return nil, fmt.Errorf("error querying DNS API: %w", err)
} }
defer resp.Body.Close() defer resp.Body.Close()
@ -187,7 +187,7 @@ func login(config *Config) (*Identity, error) {
resp, err := config.HTTPClient.Do(req) resp, err := config.HTTPClient.Do(req)
if err != nil { if err != nil {
return nil, fmt.Errorf("error querying Identity API: %v", err) return nil, fmt.Errorf("error querying Identity API: %w", err)
} }
defer resp.Body.Close() defer resp.Body.Close()

View file

@ -54,7 +54,7 @@ type DNSProvider struct {
func NewDNSProvider() (*DNSProvider, error) { func NewDNSProvider() (*DNSProvider, error) {
values, err := env.Get("RACKSPACE_USER", "RACKSPACE_API_KEY") values, err := env.Get("RACKSPACE_USER", "RACKSPACE_API_KEY")
if err != nil { if err != nil {
return nil, fmt.Errorf("rackspace: %v", err) return nil, fmt.Errorf("rackspace: %w", err)
} }
config := NewDefaultConfig() config := NewDefaultConfig()
@ -72,12 +72,12 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) {
} }
if config.APIUser == "" || config.APIKey == "" { if config.APIUser == "" || config.APIKey == "" {
return nil, fmt.Errorf("rackspace: credentials missing") return nil, errors.New("rackspace: credentials missing")
} }
identity, err := login(config) identity, err := login(config)
if err != nil { if err != nil {
return nil, fmt.Errorf("rackspace: %v", err) return nil, fmt.Errorf("rackspace: %w", err)
} }
// Iterate through the Service Catalog to get the DNS Endpoint // Iterate through the Service Catalog to get the DNS Endpoint
@ -90,7 +90,7 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) {
} }
if dnsEndpoint == "" { if dnsEndpoint == "" {
return nil, fmt.Errorf("rackspace: failed to populate DNS endpoint, check Rackspace API for changes") return nil, errors.New("rackspace: failed to populate DNS endpoint, check Rackspace API for changes")
} }
return &DNSProvider{ return &DNSProvider{
@ -106,7 +106,7 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
zoneID, err := d.getHostedZoneID(fqdn) zoneID, err := d.getHostedZoneID(fqdn)
if err != nil { if err != nil {
return fmt.Errorf("rackspace: %v", err) return fmt.Errorf("rackspace: %w", err)
} }
rec := Records{ rec := Records{
@ -120,12 +120,12 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
body, err := json.Marshal(rec) body, err := json.Marshal(rec)
if err != nil { if err != nil {
return fmt.Errorf("rackspace: %v", err) return fmt.Errorf("rackspace: %w", err)
} }
_, err = d.makeRequest(http.MethodPost, fmt.Sprintf("/domains/%d/records", zoneID), bytes.NewReader(body)) _, err = d.makeRequest(http.MethodPost, fmt.Sprintf("/domains/%d/records", zoneID), bytes.NewReader(body))
if err != nil { if err != nil {
return fmt.Errorf("rackspace: %v", err) return fmt.Errorf("rackspace: %w", err)
} }
return nil return nil
} }
@ -136,17 +136,17 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
zoneID, err := d.getHostedZoneID(fqdn) zoneID, err := d.getHostedZoneID(fqdn)
if err != nil { if err != nil {
return fmt.Errorf("rackspace: %v", err) return fmt.Errorf("rackspace: %w", err)
} }
record, err := d.findTxtRecord(fqdn, zoneID) record, err := d.findTxtRecord(fqdn, zoneID)
if err != nil { if err != nil {
return fmt.Errorf("rackspace: %v", err) return fmt.Errorf("rackspace: %w", err)
} }
_, err = d.makeRequest(http.MethodDelete, fmt.Sprintf("/domains/%d/records?id=%s", zoneID, record.ID), nil) _, err = d.makeRequest(http.MethodDelete, fmt.Sprintf("/domains/%d/records?id=%s", zoneID, record.ID), nil)
if err != nil { if err != nil {
return fmt.Errorf("rackspace: %v", err) return fmt.Errorf("rackspace: %w", err)
} }
return nil return nil
} }

View file

@ -56,7 +56,7 @@ type DNSProvider struct {
func NewDNSProvider() (*DNSProvider, error) { func NewDNSProvider() (*DNSProvider, error) {
values, err := env.Get("RFC2136_NAMESERVER") values, err := env.Get("RFC2136_NAMESERVER")
if err != nil { if err != nil {
return nil, fmt.Errorf("rfc2136: %v", err) return nil, fmt.Errorf("rfc2136: %w", err)
} }
config := NewDefaultConfig() config := NewDefaultConfig()
@ -74,7 +74,7 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) {
} }
if config.Nameserver == "" { if config.Nameserver == "" {
return nil, fmt.Errorf("rfc2136: nameserver missing") return nil, errors.New("rfc2136: nameserver missing")
} }
if config.TSIGAlgorithm == "" { if config.TSIGAlgorithm == "" {
@ -86,7 +86,7 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) {
if strings.Contains(err.Error(), "missing port") { if strings.Contains(err.Error(), "missing port") {
config.Nameserver = net.JoinHostPort(config.Nameserver, "53") config.Nameserver = net.JoinHostPort(config.Nameserver, "53")
} else { } else {
return nil, fmt.Errorf("rfc2136: %v", err) return nil, fmt.Errorf("rfc2136: %w", err)
} }
} }
@ -117,7 +117,7 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
err := d.changeRecord("INSERT", fqdn, value, d.config.TTL) err := d.changeRecord("INSERT", fqdn, value, d.config.TTL)
if err != nil { if err != nil {
return fmt.Errorf("rfc2136: failed to insert: %v", err) return fmt.Errorf("rfc2136: failed to insert: %w", err)
} }
return nil return nil
} }
@ -128,7 +128,7 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
err := d.changeRecord("REMOVE", fqdn, value, d.config.TTL) err := d.changeRecord("REMOVE", fqdn, value, d.config.TTL)
if err != nil { if err != nil {
return fmt.Errorf("rfc2136: failed to remove: %v", err) return fmt.Errorf("rfc2136: failed to remove: %w", err)
} }
return nil return nil
} }
@ -173,7 +173,7 @@ func (d *DNSProvider) changeRecord(action, fqdn, value string, ttl int) error {
// Send the query // Send the query
reply, _, err := c.Exchange(m, d.config.Nameserver) reply, _, err := c.Exchange(m, d.config.Nameserver)
if err != nil { if err != nil {
return fmt.Errorf("DNS update failed: %v", err) return fmt.Errorf("DNS update failed: %w", err)
} }
if reply != nil && reply.Rcode != dns.RcodeSuccess { if reply != nil && reply.Rcode != dns.RcodeSuccess {
return fmt.Errorf("DNS update failed: server replied: %s", dns.RcodeToString[reply.Rcode]) return fmt.Errorf("DNS update failed: server replied: %s", dns.RcodeToString[reply.Rcode])

View file

@ -116,12 +116,12 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
hostedZoneID, err := d.getHostedZoneID(fqdn) hostedZoneID, err := d.getHostedZoneID(fqdn)
if err != nil { if err != nil {
return fmt.Errorf("route53: failed to determine hosted zone ID: %v", err) return fmt.Errorf("route53: failed to determine hosted zone ID: %w", err)
} }
records, err := d.getExistingRecordSets(hostedZoneID, fqdn) records, err := d.getExistingRecordSets(hostedZoneID, fqdn)
if err != nil { if err != nil {
return fmt.Errorf("route53: %v", err) return fmt.Errorf("route53: %w", err)
} }
realValue := `"` + value + `"` realValue := `"` + value + `"`
@ -146,7 +146,7 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
err = d.changeRecord(route53.ChangeActionUpsert, hostedZoneID, recordSet) err = d.changeRecord(route53.ChangeActionUpsert, hostedZoneID, recordSet)
if err != nil { if err != nil {
return fmt.Errorf("route53: %v", err) return fmt.Errorf("route53: %w", err)
} }
return nil return nil
} }
@ -157,12 +157,12 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
hostedZoneID, err := d.getHostedZoneID(fqdn) hostedZoneID, err := d.getHostedZoneID(fqdn)
if err != nil { if err != nil {
return fmt.Errorf("failed to determine Route 53 hosted zone ID: %v", err) return fmt.Errorf("failed to determine Route 53 hosted zone ID: %w", err)
} }
records, err := d.getExistingRecordSets(hostedZoneID, fqdn) records, err := d.getExistingRecordSets(hostedZoneID, fqdn)
if err != nil { if err != nil {
return fmt.Errorf("route53: %v", err) return fmt.Errorf("route53: %w", err)
} }
if len(records) == 0 { if len(records) == 0 {
@ -178,7 +178,7 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
err = d.changeRecord(route53.ChangeActionDelete, hostedZoneID, recordSet) err = d.changeRecord(route53.ChangeActionDelete, hostedZoneID, recordSet)
if err != nil { if err != nil {
return fmt.Errorf("route53: %v", err) return fmt.Errorf("route53: %w", err)
} }
return nil return nil
} }
@ -197,7 +197,7 @@ func (d *DNSProvider) changeRecord(action, hostedZoneID string, recordSet *route
resp, err := d.client.ChangeResourceRecordSets(recordSetInput) resp, err := d.client.ChangeResourceRecordSets(recordSetInput)
if err != nil { if err != nil {
return fmt.Errorf("failed to change record set: %v", err) return fmt.Errorf("failed to change record set: %w", err)
} }
changeID := resp.ChangeInfo.Id changeID := resp.ChangeInfo.Id
@ -207,7 +207,7 @@ func (d *DNSProvider) changeRecord(action, hostedZoneID string, recordSet *route
resp, err := d.client.GetChange(reqParams) resp, err := d.client.GetChange(reqParams)
if err != nil { if err != nil {
return false, fmt.Errorf("failed to query change status: %v", err) return false, fmt.Errorf("failed to query change status: %w", err)
} }
if aws.StringValue(resp.ChangeInfo.Status) == route53.ChangeStatusInsync { if aws.StringValue(resp.ChangeInfo.Status) == route53.ChangeStatusInsync {

View file

@ -18,7 +18,7 @@ func (d *DNSProvider) addTXTRecord(fqdn, domain, value string, ttl int) error {
zone, err := d.getHostedZone(domain) zone, err := d.getHostedZone(domain)
if err != nil { if err != nil {
return fmt.Errorf("sakuracloud: %v", err) return fmt.Errorf("sakuracloud: %w", err)
} }
name := d.extractRecordName(fqdn, zone.Name) name := d.extractRecordName(fqdn, zone.Name)
@ -26,7 +26,7 @@ func (d *DNSProvider) addTXTRecord(fqdn, domain, value string, ttl int) error {
zone.AddRecord(zone.CreateNewRecord(name, "TXT", value, ttl)) zone.AddRecord(zone.CreateNewRecord(name, "TXT", value, ttl))
_, err = d.client.Update(zone.ID, zone) _, err = d.client.Update(zone.ID, zone)
if err != nil { if err != nil {
return fmt.Errorf("sakuracloud: API call failed: %v", err) return fmt.Errorf("sakuracloud: API call failed: %w", err)
} }
return nil return nil
@ -38,7 +38,7 @@ func (d *DNSProvider) cleanupTXTRecord(fqdn, domain string) error {
zone, err := d.getHostedZone(domain) zone, err := d.getHostedZone(domain)
if err != nil { if err != nil {
return fmt.Errorf("sakuracloud: %v", err) return fmt.Errorf("sakuracloud: %w", err)
} }
records := d.findTxtRecords(fqdn, zone) records := d.findTxtRecords(fqdn, zone)
@ -55,7 +55,7 @@ func (d *DNSProvider) cleanupTXTRecord(fqdn, domain string) error {
_, err = d.client.Update(zone.ID, zone) _, err = d.client.Update(zone.ID, zone)
if err != nil { if err != nil {
return fmt.Errorf("sakuracloud: API call failed: %v", err) return fmt.Errorf("sakuracloud: API call failed: %w", err)
} }
return nil return nil
} }
@ -71,9 +71,9 @@ func (d *DNSProvider) getHostedZone(domain string) (*sacloud.DNS, error) {
res, err := d.client.Reset().WithNameLike(zoneName).Find() res, err := d.client.Reset().WithNameLike(zoneName).Find()
if err != nil { if err != nil {
if notFound, ok := err.(api.Error); ok && notFound.ResponseCode() == http.StatusNotFound { if notFound, ok := err.(api.Error); ok && notFound.ResponseCode() == http.StatusNotFound {
return nil, fmt.Errorf("zone %s not found on SakuraCloud DNS: %v", zoneName, err) return nil, fmt.Errorf("zone %s not found on SakuraCloud DNS: %w", zoneName, err)
} }
return nil, fmt.Errorf("API call failed: %v", err) return nil, fmt.Errorf("API call failed: %w", err)
} }
for _, zone := range res.CommonServiceDNSItems { for _, zone := range res.CommonServiceDNSItems {

View file

@ -45,7 +45,7 @@ type DNSProvider struct {
func NewDNSProvider() (*DNSProvider, error) { func NewDNSProvider() (*DNSProvider, error) {
values, err := env.Get("SAKURACLOUD_ACCESS_TOKEN", "SAKURACLOUD_ACCESS_TOKEN_SECRET") values, err := env.Get("SAKURACLOUD_ACCESS_TOKEN", "SAKURACLOUD_ACCESS_TOKEN_SECRET")
if err != nil { if err != nil {
return nil, fmt.Errorf("sakuracloud: %v", err) return nil, fmt.Errorf("sakuracloud: %w", err)
} }
config := NewDefaultConfig() config := NewDefaultConfig()

View file

@ -32,7 +32,7 @@ type APIError struct {
Field string `json:"field"` Field string `json:"field"`
} }
func (a *APIError) Error() string { func (a APIError) Error() string {
return fmt.Sprintf("API error: %d - %s - %s", a.Code, a.Description, a.Field) return fmt.Sprintf("API error: %d - %s - %s", a.Code, a.Description, a.Field)
} }
@ -143,13 +143,13 @@ func (c *Client) newRequest(method, uri string, body interface{}) (*http.Request
if body != nil { if body != nil {
err := json.NewEncoder(buf).Encode(body) err := json.NewEncoder(buf).Encode(body)
if err != nil { if err != nil {
return nil, fmt.Errorf("failed to encode request body with error: %v", err) return nil, fmt.Errorf("failed to encode request body with error: %w", err)
} }
} }
req, err := http.NewRequest(method, c.baseURL+uri, buf) req, err := http.NewRequest(method, c.baseURL+uri, buf)
if err != nil { if err != nil {
return nil, fmt.Errorf("failed to create new http request with error: %v", err) return nil, fmt.Errorf("failed to create new http request with error: %w", err)
} }
req.Header.Add("X-Token", c.token) req.Header.Add("X-Token", c.token)
@ -162,7 +162,7 @@ func (c *Client) newRequest(method, uri string, body interface{}) (*http.Request
func (c *Client) do(req *http.Request, to interface{}) (*http.Response, error) { func (c *Client) do(req *http.Request, to interface{}) (*http.Response, error) {
resp, err := c.httpClient.Do(req) resp, err := c.httpClient.Do(req)
if err != nil { if err != nil {
return nil, fmt.Errorf("request failed with error: %v", err) return nil, fmt.Errorf("request failed with error: %w", err)
} }
err = checkResponse(resp) err = checkResponse(resp)
@ -197,7 +197,7 @@ func checkResponse(resp *http.Response) error {
return fmt.Errorf("request failed with status code %d, response body: %s", resp.StatusCode, string(body)) return fmt.Errorf("request failed with status code %d, response body: %s", resp.StatusCode, string(body))
} }
return fmt.Errorf("request failed with status code %d: %v", resp.StatusCode, apiError) return fmt.Errorf("request failed with status code %d: %w", resp.StatusCode, apiError)
} }
return nil return nil
@ -212,7 +212,7 @@ func unmarshalBody(resp *http.Response, to interface{}) error {
err = json.Unmarshal(body, to) err = json.Unmarshal(body, to)
if err != nil { if err != nil {
return fmt.Errorf("unmarshaling error: %v: %s", err, string(body)) return fmt.Errorf("unmarshaling error: %w: %s", err, string(body))
} }
return nil return nil

View file

@ -63,7 +63,7 @@ type DNSProvider struct {
func NewDNSProvider() (*DNSProvider, error) { func NewDNSProvider() (*DNSProvider, error) {
values, err := env.Get(apiTokenEnvVar) values, err := env.Get(apiTokenEnvVar)
if err != nil { if err != nil {
return nil, fmt.Errorf("selectel: %v", err) return nil, fmt.Errorf("selectel: %w", err)
} }
config := NewDefaultConfig() config := NewDefaultConfig()
@ -107,7 +107,7 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
domainObj, err := d.client.GetDomainByName(domain) domainObj, err := d.client.GetDomainByName(domain)
if err != nil { if err != nil {
return fmt.Errorf("selectel: %v", err) return fmt.Errorf("selectel: %w", err)
} }
txtRecord := internal.Record{ txtRecord := internal.Record{
@ -118,7 +118,7 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
} }
_, err = d.client.AddRecord(domainObj.ID, txtRecord) _, err = d.client.AddRecord(domainObj.ID, txtRecord)
if err != nil { if err != nil {
return fmt.Errorf("selectel: %v", err) return fmt.Errorf("selectel: %w", err)
} }
return nil return nil
@ -131,12 +131,12 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
domainObj, err := d.client.GetDomainByName(domain) domainObj, err := d.client.GetDomainByName(domain)
if err != nil { if err != nil {
return fmt.Errorf("selectel: %v", err) return fmt.Errorf("selectel: %w", err)
} }
records, err := d.client.ListRecords(domainObj.ID) records, err := d.client.ListRecords(domainObj.ID)
if err != nil { if err != nil {
return fmt.Errorf("selectel: %v", err) return fmt.Errorf("selectel: %w", err)
} }
// Delete records with specific FQDN // Delete records with specific FQDN
@ -145,7 +145,7 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
if record.Name == recordName { if record.Name == recordName {
err = d.client.DeleteRecord(domainObj.ID, record.ID) err = d.client.DeleteRecord(domainObj.ID, record.ID)
if err != nil { if err != nil {
lastErr = fmt.Errorf("selectel: %v", err) lastErr = fmt.Errorf("selectel: %w", err)
} }
} }
} }

Some files were not shown because too many files have changed in this diff Show more