chore: update linter (#1524)

This commit is contained in:
Ludovic Fernandez 2021-11-03 20:39:12 +01:00 committed by GitHub
parent d2455c5f53
commit 2de6e0b0c8
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
31 changed files with 97 additions and 25 deletions

View file

@ -15,7 +15,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
env: env:
GO_VERSION: 1.17 GO_VERSION: 1.17
GOLANGCI_LINT_VERSION: v1.42.0 GOLANGCI_LINT_VERSION: v1.43.0
HUGO_VERSION: 0.54.0 HUGO_VERSION: 0.54.0
SEIHON_VERSION: v0.8.3 SEIHON_VERSION: v0.8.3
CGO_ENABLED: 0 CGO_ENABLED: 0

View file

@ -41,6 +41,9 @@
"octalLiteral", "octalLiteral",
"ptrToRefParam", "ptrToRefParam",
"appendAssign", "appendAssign",
"ruleguard",
"httpNoBody",
"exposedSyncMutex",
] ]
[linters] [linters]
@ -70,6 +73,11 @@
"makezero", # not relevant "makezero", # not relevant
"ifshort", # not relevant "ifshort", # not relevant
"forbidigo", # not relevant "forbidigo", # not relevant
"varnamelen", # not relevant
"nilnil", # not relevant
"ireturn", # not relevant
"contextcheck", # too many false-positive
"tenv", # we already have a test "framework" to handle env vars
"noctx", "noctx",
"forcetypeassert", "forcetypeassert",
"tagliatelle", "tagliatelle",

View file

@ -81,6 +81,7 @@ func TestCertificateService_Get_issuerRelUp(t *testing.T) {
_, err := w.Write([]byte(certResponseMock)) _, err := w.Write([]byte(certResponseMock))
if err != nil { if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError) http.Error(w, err.Error(), http.StatusInternalServerError)
return
} }
}) })
@ -89,6 +90,7 @@ func TestCertificateService_Get_issuerRelUp(t *testing.T) {
_, err := w.Write(p.Bytes) _, err := w.Write(p.Bytes)
if err != nil { if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError) http.Error(w, err.Error(), http.StatusInternalServerError)
return
} }
}) })
@ -111,6 +113,7 @@ func TestCertificateService_Get_embeddedIssuer(t *testing.T) {
_, err := w.Write([]byte(certResponseMock)) _, err := w.Write([]byte(certResponseMock))
if err != nil { if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError) http.Error(w, err.Error(), http.StatusInternalServerError)
return
} }
}) })

View file

@ -31,6 +31,7 @@ func TestOrderService_New(t *testing.T) {
body, err := readSignedBody(r, privateKey) body, err := readSignedBody(r, privateKey)
if err != nil { if err != nil {
http.Error(w, err.Error(), http.StatusBadRequest) http.Error(w, err.Error(), http.StatusBadRequest)
return
} }
order := acme.Order{} order := acme.Order{}

View file

@ -160,6 +160,7 @@ func Test_checkResponse(t *testing.T) {
_, err := w.Write([]byte(certResponseMock)) _, err := w.Write([]byte(certResponseMock))
if err != nil { if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError) http.Error(w, err.Error(), http.StatusInternalServerError)
return
} }
}) })
@ -201,6 +202,7 @@ func Test_checkResponse_issuerRelUp(t *testing.T) {
_, err := w.Write([]byte(certResponseMock)) _, err := w.Write([]byte(certResponseMock))
if err != nil { if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError) http.Error(w, err.Error(), http.StatusInternalServerError)
return
} }
}) })
@ -209,6 +211,7 @@ func Test_checkResponse_issuerRelUp(t *testing.T) {
_, err := w.Write(p.Bytes) _, err := w.Write(p.Bytes)
if err != nil { if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError) http.Error(w, err.Error(), http.StatusInternalServerError)
return
} }
}) })
@ -249,6 +252,7 @@ func Test_checkResponse_embeddedIssuer(t *testing.T) {
_, err := w.Write([]byte(certResponseMock)) _, err := w.Write([]byte(certResponseMock))
if err != nil { if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError) http.Error(w, err.Error(), http.StatusInternalServerError)
return
} }
}) })
@ -291,6 +295,7 @@ func Test_checkResponse_alternate(t *testing.T) {
_, err := w.Write([]byte(certResponseMock)) _, err := w.Write([]byte(certResponseMock))
if err != nil { if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError) http.Error(w, err.Error(), http.StatusInternalServerError)
return
} }
}) })
@ -298,6 +303,7 @@ func Test_checkResponse_alternate(t *testing.T) {
_, err := w.Write([]byte(certResponseMock2)) _, err := w.Write([]byte(certResponseMock2))
if err != nil { if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError) http.Error(w, err.Error(), http.StatusInternalServerError)
return
} }
}) })
@ -341,6 +347,7 @@ func Test_Get(t *testing.T) {
_, err := w.Write([]byte(certResponseMock)) _, err := w.Write([]byte(certResponseMock))
if err != nil { if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError) http.Error(w, err.Error(), http.StatusInternalServerError)
return
} }
}) })

View file

@ -8,7 +8,7 @@ import (
) )
const ( const (
dnsTemplate = `%s %d IN TXT "%s"` dnsTemplate = `%s %d IN TXT %q`
) )
// DNSProviderManual is an implementation of the ChallengeProvider interface. // DNSProviderManual is an implementation of the ChallengeProvider interface.

View file

@ -36,7 +36,7 @@ func TestDNSProviderManual(t *testing.T) {
assert.NoError(t, err) assert.NoError(t, err)
defer func() { _ = os.Remove(file.Name()) }() defer func() { _ = os.Remove(file.Name()) }()
_, err = io.WriteString(file, test.input) _, err = file.WriteString(test.input)
assert.NoError(t, err) assert.NoError(t, err)
_, err = file.Seek(0, io.SeekStart) _, err = file.Seek(0, io.SeekStart)

View file

@ -125,7 +125,7 @@ func generateDocumentation(m Model) error {
} }
func generateCLIHelp(models *Providers) error { func generateCLIHelp(models *Providers) error {
filename := filepath.Join(cliOutput) filename := filepath.Clean(cliOutput)
file, err := os.Create(filename) file, err := os.Create(filename)
if err != nil { if err != nil {

View file

@ -118,6 +118,7 @@ func TestNewDNSProviderConfig(t *testing.T) {
_, err := w.Write([]byte("foo")) _, err := w.Write([]byte("foo"))
if err != nil { if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError) http.Error(w, err.Error(), http.StatusInternalServerError)
return
} }
}, },
}, },

View file

@ -193,7 +193,7 @@ func (d *DNSProvider) createRecord(dom internal.Domain, fqdn, recordName, value
Name: recordName, Name: recordName,
TTL: d.config.TTL, TTL: d.config.TTL,
RoundRobin: []internal.RecordValue{ RoundRobin: []internal.RecordValue{
{Value: fmt.Sprintf(`"%s"`, value)}, {Value: fmt.Sprintf(`%q`, value)},
}, },
} }
@ -218,7 +218,7 @@ func (d *DNSProvider) appendRecordValue(dom internal.Domain, recordID int64, val
request := internal.RecordRequest{ request := internal.RecordRequest{
Name: record.Name, Name: record.Name,
TTL: record.TTL, TTL: record.TTL,
RoundRobin: append(record.RoundRobin, internal.RecordValue{Value: fmt.Sprintf(`"%s"`, value)}), RoundRobin: append(record.RoundRobin, internal.RecordValue{Value: fmt.Sprintf(`%q`, value)}),
} }
_, err = d.client.TxtRecords.Update(dom.ID, record.ID, request) _, err = d.client.TxtRecords.Update(dom.ID, record.ID, request)
@ -236,7 +236,7 @@ func (d *DNSProvider) removeRecordValue(dom internal.Domain, record *internal.Re
} }
for _, val := range record.Value { for _, val := range record.Value {
if val.Value != fmt.Sprintf(`"%s"`, value) { if val.Value != fmt.Sprintf(`%q`, value) {
request.RoundRobin = append(request.RoundRobin, val) request.RoundRobin = append(request.RoundRobin, val)
} }
} }
@ -255,7 +255,7 @@ func containsValue(record *internal.Record, value string) bool {
} }
for _, val := range record.Value { for _, val := range record.Value {
if val.Value == fmt.Sprintf(`"%s"`, value) { if val.Value == fmt.Sprintf(`%q`, value) {
return true return true
} }
} }

View file

@ -102,7 +102,7 @@ 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 {
ctx := context.Background() ctx := context.Background()
fqdn, value := dns01.GetRecord(domain, keyAuth) fqdn, value := dns01.GetRecord(domain, keyAuth)
quotedValue := fmt.Sprintf(`"%s"`, value) quotedValue := fmt.Sprintf(`%q`, value)
authZone, err := dns01.FindZoneByFqdn(fqdn) authZone, err := dns01.FindZoneByFqdn(fqdn)
if err != nil { if err != nil {
@ -167,7 +167,7 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
records := make([]string, 0) records := make([]string, 0)
for _, record := range rrSet.Records { for _, record := range rrSet.Records {
if record != fmt.Sprintf(`"%s"`, value) { if record != fmt.Sprintf(`%q`, value) {
records = append(records, record) records = append(records, record)
} }
} }

View file

@ -121,6 +121,7 @@ func TestDNSProvider_Present(t *testing.T) {
reqBody, err := io.ReadAll(r.Body) reqBody, err := io.ReadAll(r.Body)
if err != nil { if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError) http.Error(w, err.Error(), http.StatusInternalServerError)
return
} }
expectedReqBody := `{"type":"TXT","name":"_acme-challenge.example.com.","data":"w6uP8Tcg6K2QR905Rms8iXTlksL6OD1KOWBxTK7wxPI","ttl":30}` expectedReqBody := `{"type":"TXT","name":"_acme-challenge.example.com.","data":"w6uP8Tcg6K2QR905Rms8iXTlksL6OD1KOWBxTK7wxPI","ttl":30}`
@ -140,6 +141,7 @@ func TestDNSProvider_Present(t *testing.T) {
}`) }`)
if err != nil { if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError) http.Error(w, err.Error(), http.StatusInternalServerError)
return
} }
}) })

View file

@ -153,7 +153,7 @@ func (d *DNSProvider) getHostedZone(domain string) (string, string, error) {
return "", "", fmt.Errorf("zone %s not found in dnspod for domain %s", authZone, domain) return "", "", fmt.Errorf("zone %s not found in dnspod for domain %s", authZone, domain)
} }
return fmt.Sprintf("%v", hostedZone.ID), hostedZone.Name, nil return hostedZone.ID.String(), hostedZone.Name, nil
} }
func (d *DNSProvider) newTxtRecord(zone, fqdn, value string, ttl int) *dnspod.Record { func (d *DNSProvider) newTxtRecord(zone, fqdn, value string, ttl int) *dnspod.Record {

View file

@ -36,6 +36,7 @@ func TestClient_CreateTXTRecord(t *testing.T) {
auth := req.Header.Get("Authorization") auth := req.Header.Get("Authorization")
if auth != "Basic dG9rZW46c2VjcmV0" { if auth != "Basic dG9rZW46c2VjcmV0" {
http.Error(rw, "invalid method: "+req.Method, http.StatusUnauthorized) http.Error(rw, "invalid method: "+req.Method, http.StatusUnauthorized)
return
} }
_, _ = rw.Write([]byte(`{"id": 1}`)) _, _ = rw.Write([]byte(`{"id": 1}`))
@ -57,6 +58,7 @@ func TestClient_DeleteTXTRecord(t *testing.T) {
auth := req.Header.Get("Authorization") auth := req.Header.Get("Authorization")
if auth != "Basic dG9rZW46c2VjcmV0" { if auth != "Basic dG9rZW46c2VjcmV0" {
http.Error(rw, "invalid method: "+req.Method, http.StatusUnauthorized) http.Error(rw, "invalid method: "+req.Method, http.StatusUnauthorized)
return
} }
_, _ = rw.Write([]byte(`[ _, _ = rw.Write([]byte(`[
@ -79,6 +81,7 @@ func TestClient_DeleteTXTRecord(t *testing.T) {
auth := req.Header.Get("Authorization") auth := req.Header.Get("Authorization")
if auth != "Basic dG9rZW46c2VjcmV0" { if auth != "Basic dG9rZW46c2VjcmV0" {
http.Error(rw, "invalid method: "+req.Method, http.StatusUnauthorized) http.Error(rw, "invalid method: "+req.Method, http.StatusUnauthorized)
return
} }
}) })
@ -98,6 +101,7 @@ func TestClient_getDNSRecordByHostData(t *testing.T) {
auth := req.Header.Get("Authorization") auth := req.Header.Get("Authorization")
if auth != "Basic dG9rZW46c2VjcmV0" { if auth != "Basic dG9rZW46c2VjcmV0" {
http.Error(rw, "invalid method: "+req.Method, http.StatusUnauthorized) http.Error(rw, "invalid method: "+req.Method, http.StatusUnauthorized)
return
} }
_, _ = rw.Write([]byte(`[ _, _ = rw.Write([]byte(`[
@ -137,6 +141,7 @@ func TestClient_GetDomainByName(t *testing.T) {
auth := req.Header.Get("Authorization") auth := req.Header.Get("Authorization")
if auth != "Basic dG9rZW46c2VjcmV0" { if auth != "Basic dG9rZW46c2VjcmV0" {
http.Error(rw, "invalid method: "+req.Method, http.StatusUnauthorized) http.Error(rw, "invalid method: "+req.Method, http.StatusUnauthorized)
return
} }
_, _ = rw.Write([]byte(`[ _, _ = rw.Write([]byte(`[

View file

@ -131,6 +131,7 @@ func TestDNSProvider_Present(t *testing.T) {
_, err := fmt.Fprintf(w, `{"data":"record_added","result":"success"}`) _, err := fmt.Fprintf(w, `{"data":"record_added","result":"success"}`)
if err != nil { if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError) http.Error(w, err.Error(), http.StatusInternalServerError)
return
} }
}) })
@ -147,6 +148,7 @@ func TestDNSProvider_PresentFailed(t *testing.T) {
_, err := fmt.Fprintf(w, `{"data":"record_already_exists_remove_first","result":"error"}`) _, err := fmt.Fprintf(w, `{"data":"record_already_exists_remove_first","result":"error"}`)
if err != nil { if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError) http.Error(w, err.Error(), http.StatusInternalServerError)
return
} }
}) })
@ -171,6 +173,7 @@ func TestDNSProvider_Cleanup(t *testing.T) {
_, err := fmt.Fprintf(w, `{"data":"record_removed","result":"success"}`) _, err := fmt.Fprintf(w, `{"data":"record_removed","result":"success"}`)
if err != nil { if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError) http.Error(w, err.Error(), http.StatusInternalServerError)
return
} }
}) })

View file

@ -154,6 +154,7 @@ func TestDNSProvider_Present(t *testing.T) {
reqBody, err := io.ReadAll(r.Body) reqBody, err := io.ReadAll(r.Body)
if err != nil { if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError) http.Error(w, err.Error(), http.StatusInternalServerError)
return
} }
expectedReqBody := `{"domain":"example.com","host":"_acme-challenge","ttl":"120","prio":"0","type":"TXT","rdata":"pW9ZKG0xz_PCriK-nCMOjADy9eJcgGWIzkkj2fN4uZM"} expectedReqBody := `{"domain":"example.com","host":"_acme-challenge","ttl":"120","prio":"0","type":"TXT","rdata":"pW9ZKG0xz_PCriK-nCMOjADy9eJcgGWIzkkj2fN4uZM"}
@ -178,6 +179,7 @@ func TestDNSProvider_Present(t *testing.T) {
}`) }`)
if err != nil { if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError) http.Error(w, err.Error(), http.StatusInternalServerError)
return
} }
}) })
@ -212,6 +214,7 @@ func TestDNSProvider_Cleanup_WhenRecordIdSet_DeletesTxtRecord(t *testing.T) {
}`) }`)
if err != nil { if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError) http.Error(w, err.Error(), http.StatusInternalServerError)
return
} }
}) })
@ -238,6 +241,7 @@ func TestDNSProvider_Cleanup_WhenHttpError_ReturnsError(t *testing.T) {
_, err := fmt.Fprint(w, errorMessage) _, err := fmt.Fprint(w, errorMessage)
if err != nil { if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError) http.Error(w, err.Error(), http.StatusInternalServerError)
return
} }
}) })

View file

@ -251,6 +251,7 @@ func handleAddRRSet(expected []Records) http.HandlerFunc {
if !reflect.DeepEqual(body.Records, expected) { if !reflect.DeepEqual(body.Records, expected) {
http.Error(rw, "wrong resource records", http.StatusInternalServerError) http.Error(rw, "wrong resource records", http.StatusInternalServerError)
return
} }
} }
} }

View file

@ -134,7 +134,7 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
} }
for _, record := range resp.Response.Records { for _, record := range resp.Response.Records {
if record.Name == dns01.UnFqdn(fqdn) && record.Content == fmt.Sprintf(`"%s"`, value) { if record.Name == dns01.UnFqdn(fqdn) && record.Content == fmt.Sprintf(`%q`, value) {
d.recordIDsMu.Lock() d.recordIDsMu.Lock()
d.recordIDs[fqdn] = record.ID d.recordIDs[fqdn] = record.ID
d.recordIDsMu.Unlock() d.recordIDsMu.Unlock()

View file

@ -141,7 +141,7 @@ func TestNewDNSProvider_Present(t *testing.T) {
handler: func(rw http.ResponseWriter, req *http.Request) { handler: func(rw http.ResponseWriter, req *http.Request) {
username, password, ok := req.BasicAuth() username, password, ok := req.BasicAuth()
if username != "bar" || password != "foo" || !ok { if username != "bar" || password != "foo" || !ok {
rw.Header().Set("WWW-Authenticate", fmt.Sprintf(`Basic realm="%s"`, "Please enter your username and password.")) rw.Header().Set("WWW-Authenticate", fmt.Sprintf(`Basic realm=%q`, "Please enter your username and password."))
http.Error(rw, http.StatusText(http.StatusUnauthorized), http.StatusUnauthorized) http.Error(rw, http.StatusText(http.StatusUnauthorized), http.StatusUnauthorized)
return return
} }
@ -219,7 +219,7 @@ func TestNewDNSProvider_Cleanup(t *testing.T) {
handler: func(rw http.ResponseWriter, req *http.Request) { handler: func(rw http.ResponseWriter, req *http.Request) {
username, password, ok := req.BasicAuth() username, password, ok := req.BasicAuth()
if username != "bar" || password != "foo" || !ok { if username != "bar" || password != "foo" || !ok {
rw.Header().Set("WWW-Authenticate", fmt.Sprintf(`Basic realm="%s"`, "Please enter your username and password.")) rw.Header().Set("WWW-Authenticate", fmt.Sprintf(`Basic realm=%q`, "Please enter your username and password."))
http.Error(rw, http.StatusText(http.StatusUnauthorized), http.StatusUnauthorized) http.Error(rw, http.StatusText(http.StatusUnauthorized), http.StatusUnauthorized)
return return
} }

View file

@ -52,6 +52,7 @@ func TestClient_CreateDNSRecord(t *testing.T) {
_, err = rw.Write([]byte(response)) _, err = rw.Write([]byte(response))
if err != nil { if err != nil {
http.Error(rw, err.Error(), http.StatusInternalServerError) http.Error(rw, err.Error(), http.StatusInternalServerError)
return
} }
}) })
@ -119,6 +120,7 @@ func TestClient_GetDomainByName(t *testing.T) {
_, err := rw.Write([]byte(response)) _, err := rw.Write([]byte(response))
if err != nil { if err != nil {
http.Error(rw, err.Error(), http.StatusInternalServerError) http.Error(rw, err.Error(), http.StatusInternalServerError)
return
} }
}) })
@ -146,6 +148,7 @@ func TestClient_DeleteDNSRecord(t *testing.T) {
_, err := rw.Write([]byte((`{"result":"success"}`))) _, err := rw.Write([]byte((`{"result":"success"}`)))
if err != nil { if err != nil {
http.Error(rw, err.Error(), http.StatusInternalServerError) http.Error(rw, err.Error(), http.StatusInternalServerError)
return
} }
}) })

View file

@ -31,6 +31,7 @@ func TestClient_Send(t *testing.T) {
_, err := rw.Write([]byte("OK: 1 inserted, 0 deleted")) _, err := rw.Write([]byte("OK: 1 inserted, 0 deleted"))
if err != nil { if err != nil {
http.Error(rw, err.Error(), http.StatusInternalServerError) http.Error(rw, err.Error(), http.StatusInternalServerError)
return
} }
}) })
@ -66,6 +67,7 @@ func TestClient_Send_empty(t *testing.T) {
_, err := rw.Write([]byte("OK: 1 inserted, 0 deleted")) _, err := rw.Write([]byte("OK: 1 inserted, 0 deleted"))
if err != nil { if err != nil {
http.Error(rw, err.Error(), http.StatusInternalServerError) http.Error(rw, err.Error(), http.StatusInternalServerError)
return
} }
}) })

View file

@ -52,6 +52,7 @@ func setupTest(t *testing.T, responses MockResponseMap) string {
_, err = w.Write(rawResponse) _, err = w.Write(rawResponse)
if err != nil { if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError) http.Error(w, err.Error(), http.StatusInternalServerError)
return
} }
}) })

View file

@ -213,6 +213,7 @@ func TestDNSProvider_Present(t *testing.T) {
}`) }`)
if err != nil { if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError) http.Error(w, err.Error(), http.StatusInternalServerError)
return
} }
}) })

View file

@ -29,6 +29,7 @@ func TestClient_ListZones(t *testing.T) {
auth := req.Header.Get("Authorization") auth := req.Header.Get("Authorization")
if auth != "Basic bWU6c2VjcmV0QQ==" { if auth != "Basic bWU6c2VjcmV0QQ==" {
http.Error(rw, fmt.Sprintf("invalid authentication: %s", auth), http.StatusUnauthorized) http.Error(rw, fmt.Sprintf("invalid authentication: %s", auth), http.StatusUnauthorized)
return
} }
file, err := os.Open("./fixtures/list_zones.json") file, err := os.Open("./fixtures/list_zones.json")
@ -93,6 +94,7 @@ func TestClient_CreateRecord(t *testing.T) {
auth := req.Header.Get("Authorization") auth := req.Header.Get("Authorization")
if auth != "Basic bWU6c2VjcmV0Qg==" { if auth != "Basic bWU6c2VjcmV0Qg==" {
http.Error(rw, fmt.Sprintf("invalid authentication: %s", auth), http.StatusUnauthorized) http.Error(rw, fmt.Sprintf("invalid authentication: %s", auth), http.StatusUnauthorized)
return
} }
file, err := os.Open("./fixtures/create_record.json") file, err := os.Open("./fixtures/create_record.json")
@ -150,6 +152,7 @@ func TestClient_DeleteRecord(t *testing.T) {
auth := req.Header.Get("Authorization") auth := req.Header.Get("Authorization")
if auth != "Basic bWU6c2VjcmV0Qw==" { if auth != "Basic bWU6c2VjcmV0Qw==" {
http.Error(rw, fmt.Sprintf("invalid authentication: %s", auth), http.StatusUnauthorized) http.Error(rw, fmt.Sprintf("invalid authentication: %s", auth), http.StatusUnauthorized)
return
} }
file, err := os.Open("./fixtures/delete_record.json") file, err := os.Open("./fixtures/delete_record.json")

View file

@ -146,10 +146,12 @@ func TestClient_Login(t *testing.T) {
raw, err := io.ReadAll(req.Body) raw, err := io.ReadAll(req.Body)
if err != nil { if err != nil {
http.Error(rw, err.Error(), http.StatusInternalServerError) http.Error(rw, err.Error(), http.StatusInternalServerError)
return
} }
if string(raw) != `{"action":"login","param":{"customernumber":"a","apikey":"b","apipassword":"c"}}` { if string(raw) != `{"action":"login","param":{"customernumber":"a","apikey":"b","apipassword":"c"}}` {
http.Error(rw, fmt.Sprintf("invalid request body: %s", string(raw)), http.StatusBadRequest) http.Error(rw, fmt.Sprintf("invalid request body: %s", string(raw)), http.StatusBadRequest)
return
} }
response := ` response := `
@ -169,6 +171,7 @@ func TestClient_Login(t *testing.T) {
_, err = rw.Write([]byte(response)) _, err = rw.Write([]byte(response))
if err != nil { if err != nil {
http.Error(rw, err.Error(), http.StatusInternalServerError) http.Error(rw, err.Error(), http.StatusInternalServerError)
return
} }
}) })
@ -206,6 +209,7 @@ func TestClient_Login_errors(t *testing.T) {
_, err := rw.Write([]byte(response)) _, err := rw.Write([]byte(response))
if err != nil { if err != nil {
http.Error(rw, err.Error(), http.StatusInternalServerError) http.Error(rw, err.Error(), http.StatusInternalServerError)
return
} }
}, },
}, },
@ -226,6 +230,7 @@ func TestClient_Login_errors(t *testing.T) {
_, err := rw.Write([]byte(response)) _, err := rw.Write([]byte(response))
if err != nil { if err != nil {
http.Error(rw, err.Error(), http.StatusInternalServerError) http.Error(rw, err.Error(), http.StatusInternalServerError)
return
} }
}, },
}, },
@ -254,10 +259,12 @@ func TestClient_Logout(t *testing.T) {
raw, err := io.ReadAll(req.Body) raw, err := io.ReadAll(req.Body)
if err != nil { if err != nil {
http.Error(rw, err.Error(), http.StatusInternalServerError) http.Error(rw, err.Error(), http.StatusInternalServerError)
return
} }
if string(raw) != `{"action":"logout","param":{"customernumber":"a","apikey":"b","apisessionid":"session-id"}}` { if string(raw) != `{"action":"logout","param":{"customernumber":"a","apikey":"b","apisessionid":"session-id"}}` {
http.Error(rw, fmt.Sprintf("invalid request body: %s", string(raw)), http.StatusBadRequest) http.Error(rw, fmt.Sprintf("invalid request body: %s", string(raw)), http.StatusBadRequest)
return
} }
response := ` response := `
@ -274,6 +281,7 @@ func TestClient_Logout(t *testing.T) {
_, err = rw.Write([]byte(response)) _, err = rw.Write([]byte(response))
if err != nil { if err != nil {
http.Error(rw, err.Error(), http.StatusInternalServerError) http.Error(rw, err.Error(), http.StatusInternalServerError)
return
} }
}) })
@ -309,6 +317,7 @@ func TestClient_Logout_errors(t *testing.T) {
_, err := rw.Write([]byte(response)) _, err := rw.Write([]byte(response))
if err != nil { if err != nil {
http.Error(rw, err.Error(), http.StatusInternalServerError) http.Error(rw, err.Error(), http.StatusInternalServerError)
return
} }
}, },
}, },
@ -336,10 +345,12 @@ func TestClient_GetDNSRecords(t *testing.T) {
raw, err := io.ReadAll(req.Body) raw, err := io.ReadAll(req.Body)
if err != nil { if err != nil {
http.Error(rw, err.Error(), http.StatusInternalServerError) http.Error(rw, err.Error(), http.StatusInternalServerError)
return
} }
if string(raw) != `{"action":"infoDnsRecords","param":{"domainname":"example.com","customernumber":"a","apikey":"b","apisessionid":"api-session-id"}}` { if string(raw) != `{"action":"infoDnsRecords","param":{"domainname":"example.com","customernumber":"a","apikey":"b","apisessionid":"api-session-id"}}` {
http.Error(rw, fmt.Sprintf("invalid request body: %s", string(raw)), http.StatusBadRequest) http.Error(rw, fmt.Sprintf("invalid request body: %s", string(raw)), http.StatusBadRequest)
return
} }
response := ` response := `
@ -378,6 +389,7 @@ func TestClient_GetDNSRecords(t *testing.T) {
_, err = rw.Write([]byte(response)) _, err = rw.Write([]byte(response))
if err != nil { if err != nil {
http.Error(rw, err.Error(), http.StatusInternalServerError) http.Error(rw, err.Error(), http.StatusInternalServerError)
return
} }
}) })
@ -435,6 +447,7 @@ func TestClient_GetDNSRecords_errors(t *testing.T) {
_, err := rw.Write([]byte(response)) _, err := rw.Write([]byte(response))
if err != nil { if err != nil {
http.Error(rw, err.Error(), http.StatusInternalServerError) http.Error(rw, err.Error(), http.StatusInternalServerError)
return
} }
}, },
}, },
@ -444,10 +457,12 @@ func TestClient_GetDNSRecords_errors(t *testing.T) {
raw, err := io.ReadAll(req.Body) raw, err := io.ReadAll(req.Body)
if err != nil { if err != nil {
http.Error(rw, err.Error(), http.StatusInternalServerError) http.Error(rw, err.Error(), http.StatusInternalServerError)
return
} }
if string(raw) != `{"action":"infoDnsRecords","param":{"domainname":"example.com","customernumber":"a","apikey":"b","apisessionid":"api-session-id"}}` { if string(raw) != `{"action":"infoDnsRecords","param":{"domainname":"example.com","customernumber":"a","apikey":"b","apisessionid":"api-session-id"}}` {
http.Error(rw, fmt.Sprintf("invalid request body: %s", string(raw)), http.StatusBadRequest) http.Error(rw, fmt.Sprintf("invalid request body: %s", string(raw)), http.StatusBadRequest)
return
} }
response := ` response := `
@ -464,6 +479,7 @@ func TestClient_GetDNSRecords_errors(t *testing.T) {
_, err = rw.Write([]byte(response)) _, err = rw.Write([]byte(response))
if err != nil { if err != nil {
http.Error(rw, err.Error(), http.StatusInternalServerError) http.Error(rw, err.Error(), http.StatusInternalServerError)
return
} }
}, },
}, },

View file

@ -5,7 +5,6 @@ import (
"encoding/json" "encoding/json"
"fmt" "fmt"
"io" "io"
"io/ioutil"
"net/http" "net/http"
"net/url" "net/url"
"path" "path"
@ -83,7 +82,7 @@ func (c Client) GetZone(name string) (*Zone, error) {
defer func() { _ = resp.Body.Close() }() defer func() { _ = resp.Body.Close() }()
if resp.StatusCode >= http.StatusBadRequest { if resp.StatusCode >= http.StatusBadRequest {
b, _ := ioutil.ReadAll(resp.Body) b, _ := io.ReadAll(resp.Body)
msg := APIError{StatusCode: resp.StatusCode} msg := APIError{StatusCode: resp.StatusCode}
if err = json.Unmarshal(b, &msg); err != nil { if err = json.Unmarshal(b, &msg); err != nil {
@ -111,7 +110,7 @@ func (c Client) AddRecord(zone string, req RecordCreateUpdate) error {
defer func() { _ = resp.Body.Close() }() defer func() { _ = resp.Body.Close() }()
if resp.StatusCode != http.StatusAccepted { if resp.StatusCode != http.StatusAccepted {
b, _ := ioutil.ReadAll(resp.Body) b, _ := io.ReadAll(resp.Body)
msg := APIError{StatusCode: resp.StatusCode} msg := APIError{StatusCode: resp.StatusCode}
if err = json.Unmarshal(b, &msg); err != nil { if err = json.Unmarshal(b, &msg); err != nil {
@ -133,7 +132,7 @@ func (c Client) DeleteRecord(zone string, record int) error {
defer func() { _ = resp.Body.Close() }() defer func() { _ = resp.Body.Close() }()
if resp.StatusCode != http.StatusAccepted { if resp.StatusCode != http.StatusAccepted {
b, _ := ioutil.ReadAll(resp.Body) b, _ := io.ReadAll(resp.Body)
msg := APIError{StatusCode: resp.StatusCode} msg := APIError{StatusCode: resp.StatusCode}
if err = json.Unmarshal(b, &msg); err != nil { if err = json.Unmarshal(b, &msg); err != nil {

View file

@ -114,7 +114,7 @@ func (c *Client) ChangeResourceRecordSets(hostedZoneID string, input ChangeResou
requestURL := fmt.Sprintf("%s/%s/hostedzone/%s/rrset", c.BaseURL, apiVersion, hostedZoneID) requestURL := fmt.Sprintf("%s/%s/hostedzone/%s/rrset", c.BaseURL, apiVersion, hostedZoneID)
body := &bytes.Buffer{} body := &bytes.Buffer{}
body.Write([]byte(xml.Header)) body.WriteString(xml.Header)
err := xml.NewEncoder(body).Encode(input) err := xml.NewEncoder(body).Encode(input)
if err != nil { if err != nil {
return nil, err return nil, err

View file

@ -146,7 +146,7 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
Description: "Added TXT record for ACME dns-01 challenge using lego client", Description: "Added TXT record for ACME dns-01 challenge using lego client",
Type: "TXT", Type: "TXT",
TTL: d.config.TTL, TTL: d.config.TTL,
Records: []string{fmt.Sprintf("\"%s\"", value)}, Records: []string{fmt.Sprintf("%q", value)},
} }
_, err = d.sendRequest(http.MethodPost, resource, r1) _, err = d.sendRequest(http.MethodPost, resource, r1)

View file

@ -114,7 +114,7 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
fqdn, value := dns01.GetRecord(domain, keyAuth) fqdn, value := dns01.GetRecord(domain, keyAuth)
records := []*scwdomain.Record{{ records := []*scwdomain.Record{{
Data: fmt.Sprintf(`"%s"`, value), Data: fmt.Sprintf(`%q`, value),
Name: fqdn, Name: fqdn,
TTL: uint32(d.config.TTL), TTL: uint32(d.config.TTL),
Type: scwdomain.RecordTypeTXT, Type: scwdomain.RecordTypeTXT,
@ -144,7 +144,7 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
recordIdentifier := &scwdomain.RecordIdentifier{ recordIdentifier := &scwdomain.RecordIdentifier{
Name: fqdn, Name: fqdn,
Type: scwdomain.RecordTypeTXT, Type: scwdomain.RecordTypeTXT,
Data: scw.StringPtr(fmt.Sprintf(`"%s"`, value)), Data: scw.StringPtr(fmt.Sprintf(`%q`, value)),
} }
req := &scwdomain.UpdateDNSZoneRecordsRequest{ req := &scwdomain.UpdateDNSZoneRecordsRequest{

View file

@ -42,6 +42,7 @@ func TestAddRecord(t *testing.T) {
err := r.ParseForm() err := r.ParseForm()
if err != nil { if err != nil {
http.Error(w, err.Error(), http.StatusBadRequest) http.Error(w, err.Error(), http.StatusBadRequest)
return
} }
assert.Equal(t, `content=txtTXTtxtTXTtxtTXT&domain=example.com&subdomain=foo&ttl=300&type=TXT`, r.PostForm.Encode()) assert.Equal(t, `content=txtTXTtxtTXTtxtTXT&domain=example.com&subdomain=foo&ttl=300&type=TXT`, r.PostForm.Encode())
@ -63,6 +64,7 @@ func TestAddRecord(t *testing.T) {
err = json.NewEncoder(w).Encode(response) err = json.NewEncoder(w).Encode(response)
if err != nil { if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError) http.Error(w, err.Error(), http.StatusInternalServerError)
return
} }
}, },
data: Record{ data: Record{
@ -82,6 +84,7 @@ func TestAddRecord(t *testing.T) {
err := r.ParseForm() err := r.ParseForm()
if err != nil { if err != nil {
http.Error(w, err.Error(), http.StatusBadRequest) http.Error(w, err.Error(), http.StatusBadRequest)
return
} }
assert.Equal(t, `content=txtTXTtxtTXTtxtTXT&domain=example.com&subdomain=foo&ttl=300&type=TXT`, r.PostForm.Encode()) assert.Equal(t, `content=txtTXTtxtTXTtxtTXT&domain=example.com&subdomain=foo&ttl=300&type=TXT`, r.PostForm.Encode())
@ -95,6 +98,7 @@ func TestAddRecord(t *testing.T) {
err = json.NewEncoder(w).Encode(response) err = json.NewEncoder(w).Encode(response)
if err != nil { if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError) http.Error(w, err.Error(), http.StatusInternalServerError)
return
} }
}, },
data: Record{ data: Record{
@ -142,6 +146,7 @@ func TestRemoveRecord(t *testing.T) {
err := r.ParseForm() err := r.ParseForm()
if err != nil { if err != nil {
http.Error(w, err.Error(), http.StatusBadRequest) http.Error(w, err.Error(), http.StatusBadRequest)
return
} }
assert.Equal(t, `domain=example.com&record_id=6`, r.PostForm.Encode()) assert.Equal(t, `domain=example.com&record_id=6`, r.PostForm.Encode())
@ -155,6 +160,7 @@ func TestRemoveRecord(t *testing.T) {
err = json.NewEncoder(w).Encode(response) err = json.NewEncoder(w).Encode(response)
if err != nil { if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError) http.Error(w, err.Error(), http.StatusInternalServerError)
return
} }
}, },
data: Record{ data: Record{
@ -171,6 +177,7 @@ func TestRemoveRecord(t *testing.T) {
err := r.ParseForm() err := r.ParseForm()
if err != nil { if err != nil {
http.Error(w, err.Error(), http.StatusBadRequest) http.Error(w, err.Error(), http.StatusBadRequest)
return
} }
assert.Equal(t, `domain=example.com&record_id=6`, r.PostForm.Encode()) assert.Equal(t, `domain=example.com&record_id=6`, r.PostForm.Encode())
@ -185,6 +192,7 @@ func TestRemoveRecord(t *testing.T) {
err = json.NewEncoder(w).Encode(response) err = json.NewEncoder(w).Encode(response)
if err != nil { if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError) http.Error(w, err.Error(), http.StatusInternalServerError)
return
} }
}, },
data: Record{ data: Record{
@ -256,6 +264,7 @@ func TestGetRecords(t *testing.T) {
err := json.NewEncoder(w).Encode(response) err := json.NewEncoder(w).Encode(response)
if err != nil { if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError) http.Error(w, err.Error(), http.StatusInternalServerError)
return
} }
}, },
domain: "example.com", domain: "example.com",
@ -277,6 +286,7 @@ func TestGetRecords(t *testing.T) {
err := json.NewEncoder(w).Encode(response) err := json.NewEncoder(w).Encode(response)
if err != nil { if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError) http.Error(w, err.Error(), http.StatusInternalServerError)
return
} }
}, },
domain: "example.com", domain: "example.com",

View file

@ -336,11 +336,12 @@ func mustParse(rawURL string) *url.URL {
func mockHandlerCreateRecord(rw http.ResponseWriter, req *http.Request) { func mockHandlerCreateRecord(rw http.ResponseWriter, req *http.Request) {
if req.Method != http.MethodPost { if req.Method != http.MethodPost {
http.Error(rw, http.StatusText(http.StatusMethodNotAllowed), http.StatusMethodNotAllowed) http.Error(rw, http.StatusText(http.StatusMethodNotAllowed), http.StatusMethodNotAllowed)
return
} }
username, apiKey, ok := req.BasicAuth() username, apiKey, ok := req.BasicAuth()
if username != "bar" || apiKey != "foo" || !ok { if username != "bar" || apiKey != "foo" || !ok {
rw.Header().Set("WWW-Authenticate", fmt.Sprintf(`Basic realm="%s"`, "Please enter your username and API key.")) rw.Header().Set("WWW-Authenticate", fmt.Sprintf(`Basic realm=%q`, "Please enter your username and API key."))
http.Error(rw, http.StatusText(http.StatusUnauthorized), http.StatusUnauthorized) http.Error(rw, http.StatusText(http.StatusUnauthorized), http.StatusUnauthorized)
return return
} }
@ -373,11 +374,12 @@ func mockHandlerGetRecords(records []txtRecord) http.HandlerFunc {
return func(rw http.ResponseWriter, req *http.Request) { return func(rw http.ResponseWriter, req *http.Request) {
if req.Method != http.MethodGet { if req.Method != http.MethodGet {
http.Error(rw, http.StatusText(http.StatusMethodNotAllowed), http.StatusMethodNotAllowed) http.Error(rw, http.StatusText(http.StatusMethodNotAllowed), http.StatusMethodNotAllowed)
return
} }
username, apiKey, ok := req.BasicAuth() username, apiKey, ok := req.BasicAuth()
if username != "bar" || apiKey != "foo" || !ok { if username != "bar" || apiKey != "foo" || !ok {
rw.Header().Set("WWW-Authenticate", fmt.Sprintf(`Basic realm="%s"`, "Please enter your username and API key.")) rw.Header().Set("WWW-Authenticate", fmt.Sprintf(`Basic realm=%q`, "Please enter your username and API key."))
http.Error(rw, http.StatusText(http.StatusUnauthorized), http.StatusUnauthorized) http.Error(rw, http.StatusText(http.StatusUnauthorized), http.StatusUnauthorized)
return return
} }
@ -409,7 +411,7 @@ func mockHandlerDeleteRecord(rw http.ResponseWriter, req *http.Request) {
username, apiKey, ok := req.BasicAuth() username, apiKey, ok := req.BasicAuth()
if username != "bar" || apiKey != "foo" || !ok { if username != "bar" || apiKey != "foo" || !ok {
rw.Header().Set("WWW-Authenticate", fmt.Sprintf(`Basic realm="%s"`, "Please enter your username and API key.")) rw.Header().Set("WWW-Authenticate", fmt.Sprintf(`Basic realm=%q`, "Please enter your username and API key."))
http.Error(rw, http.StatusText(http.StatusUnauthorized), http.StatusUnauthorized) http.Error(rw, http.StatusText(http.StatusUnauthorized), http.StatusUnauthorized)
return return
} }