Skip to content

Commit

Permalink
Add support for domain transfer lock APIs (#147)
Browse files Browse the repository at this point in the history
  • Loading branch information
Wilson Lin authored Aug 31, 2023
1 parent b09bbc2 commit 38e67b8
Show file tree
Hide file tree
Showing 6 changed files with 205 additions and 0 deletions.
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,12 @@

## main

## 1.4.0 (Unreleased)

FEATURES:

- NEW: Added `GetDomainTransferLock`, `EnableDomainTransferLock`, and `DisableDomainTransferLock` APIs to manage domain transfer locks. (dnsimple/dnsimple-go#147)

## 1.3.0

FEATURES:
Expand Down
63 changes: 63 additions & 0 deletions dnsimple/registrar_domain_transfer_lock.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
package dnsimple

import (
"context"
"fmt"
)

type DomainTransferLock struct {
Enabled bool `json:"enabled"`
}

type DomainTransferLockResponse struct {
Response
Data *DomainTransferLock `json:"data"`
}

// GetDomainTransferLock gets the domain transfer lock for a domain.
//
// See https://developer.dnsimple.com/v2/registrar/#getDomainTransferLock
func (s *RegistrarService) GetDomainTransferLock(ctx context.Context, accountID string, domainIdentifier string) (*DomainTransferLockResponse, error) {
path := versioned(fmt.Sprintf("%v/registrar/domains/%v/transfer_lock", accountID, domainIdentifier))
res := &DomainTransferLockResponse{}

httpRes, err := s.client.get(ctx, path, res)
if err != nil {
return nil, err
}

res.HTTPResponse = httpRes
return res, nil
}

// EnableDomainTransferLock gets the domain transfer lock for a domain.
//
// See https://developer.dnsimple.com/v2/registrar/#enableDomainTransferLock
func (s *RegistrarService) EnableDomainTransferLock(ctx context.Context, accountID string, domainIdentifier string) (*DomainTransferLockResponse, error) {
path := versioned(fmt.Sprintf("%v/registrar/domains/%v/transfer_lock", accountID, domainIdentifier))
res := &DomainTransferLockResponse{}

httpRes, err := s.client.post(ctx, path, nil, res)
if err != nil {
return nil, err
}

res.HTTPResponse = httpRes
return res, nil
}

// DisableDomainTransferLock gets the domain transfer lock for a domain.
//
// See https://developer.dnsimple.com/v2/registrar/#disableDomainTransferLock
func (s *RegistrarService) DisableDomainTransferLock(ctx context.Context, accountID string, domainIdentifier string) (*DomainTransferLockResponse, error) {
path := versioned(fmt.Sprintf("%v/registrar/domains/%v/transfer_lock", accountID, domainIdentifier))
res := &DomainTransferLockResponse{}

httpRes, err := s.client.delete(ctx, path, nil, res)
if err != nil {
return nil, err
}

res.HTTPResponse = httpRes
return res, nil
}
76 changes: 76 additions & 0 deletions dnsimple/registrar_domain_transfer_lock_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
package dnsimple

import (
"context"
"io"
"net/http"
"testing"

"github.com/stretchr/testify/assert"
)

func TestRegistrarService_GetDomainTransferLock(t *testing.T) {
setupMockServer()
defer teardownMockServer()

mux.HandleFunc("/v2/1010/registrar/domains/101/transfer_lock", func (w http.ResponseWriter, r *http.Request) {
httpResponse := httpResponseFixture(t, "/api/getDomainTransferLock/success.http")

testMethod(t, r, "GET")
testHeaders(t, r)

w.WriteHeader(httpResponse.StatusCode)
_, _ = io.Copy(w, httpResponse.Body)
})

res, err := client.Registrar.GetDomainTransferLock(context.Background(), "1010", "101")

assert.NoError(t, err)
assert.Equal(t, res.Data, &DomainTransferLock {
Enabled: true,
})
}

func TestRegistrarService_EnableDomainTransferLock(t *testing.T) {
setupMockServer()
defer teardownMockServer()

mux.HandleFunc("/v2/1010/registrar/domains/101/transfer_lock", func (w http.ResponseWriter, r *http.Request) {
httpResponse := httpResponseFixture(t, "/api/enableDomainTransferLock/success.http")

testMethod(t, r, "POST")
testHeaders(t, r)

w.WriteHeader(httpResponse.StatusCode)
_, _ = io.Copy(w, httpResponse.Body)
})

res, err := client.Registrar.EnableDomainTransferLock(context.Background(), "1010", "101")

assert.NoError(t, err)
assert.Equal(t, res.Data, &DomainTransferLock {
Enabled: true,
})
}

func TestRegistrarService_DisableDomainTransferLock(t *testing.T) {
setupMockServer()
defer teardownMockServer()

mux.HandleFunc("/v2/1010/registrar/domains/101/transfer_lock", func (w http.ResponseWriter, r *http.Request) {
httpResponse := httpResponseFixture(t, "/api/disableDomainTransferLock/success.http")

testMethod(t, r, "DELETE")
testHeaders(t, r)

w.WriteHeader(httpResponse.StatusCode)
_, _ = io.Copy(w, httpResponse.Body)
})

res, err := client.Registrar.DisableDomainTransferLock(context.Background(), "1010", "101")

assert.NoError(t, err)
assert.Equal(t, res.Data, &DomainTransferLock {
Enabled: false,
})
}
20 changes: 20 additions & 0 deletions fixtures.http/api/disableDomainTransferLock/success.http
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
HTTP/1.1 200 OK
Server: nginx
Date: Tue, 15 Aug 2023 09:58:37 GMT
Content-Type: application/json; charset=utf-8
Connection: keep-alive
X-RateLimit-Limit: 2400
X-RateLimit-Remaining: 2398
X-RateLimit-Reset: 1488538623
ETag: W/"fc2368a31a1b6a3afcca33bb37ff6b9d"
Cache-Control: max-age=0, private, must-revalidate
X-Request-Id: 8b0fe49a-c810-4552-84ab-a1cd9b4a7786
X-Runtime: 0.024780
X-Content-Type-Options: nosniff
X-Download-Options: noopen
X-Frame-Options: DENY
X-Permitted-Cross-Domain-Policies: none
X-XSS-Protection: 1; mode=block
Strict-Transport-Security: max-age=31536000

{"data":{"enabled":false}}
20 changes: 20 additions & 0 deletions fixtures.http/api/enableDomainTransferLock/success.http
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
HTTP/1.1 201 Created
Server: nginx
Date: Tue, 15 Aug 2023 09:58:37 GMT
Content-Type: application/json; charset=utf-8
Connection: keep-alive
X-RateLimit-Limit: 2400
X-RateLimit-Remaining: 2398
X-RateLimit-Reset: 1488538623
ETag: W/"fc2368a31a1b6a3afcca33bb37ff6b9d"
Cache-Control: max-age=0, private, must-revalidate
X-Request-Id: 8b0fe49a-c810-4552-84ab-a1cd9b4a7786
X-Runtime: 0.024780
X-Content-Type-Options: nosniff
X-Download-Options: noopen
X-Frame-Options: DENY
X-Permitted-Cross-Domain-Policies: none
X-XSS-Protection: 1; mode=block
Strict-Transport-Security: max-age=31536000

{"data":{"enabled":true}}
20 changes: 20 additions & 0 deletions fixtures.http/api/getDomainTransferLock/success.http
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
HTTP/1.1 200 OK
Server: nginx
Date: Tue, 15 Aug 2023 09:58:37 GMT
Content-Type: application/json; charset=utf-8
Connection: keep-alive
X-RateLimit-Limit: 2400
X-RateLimit-Remaining: 2398
X-RateLimit-Reset: 1488538623
ETag: W/"fc2368a31a1b6a3afcca33bb37ff6b9d"
Cache-Control: max-age=0, private, must-revalidate
X-Request-Id: 8b0fe49a-c810-4552-84ab-a1cd9b4a7786
X-Runtime: 0.024780
X-Content-Type-Options: nosniff
X-Download-Options: noopen
X-Frame-Options: DENY
X-Permitted-Cross-Domain-Policies: none
X-XSS-Protection: 1; mode=block
Strict-Transport-Security: max-age=31536000

{"data":{"enabled":true}}

0 comments on commit 38e67b8

Please sign in to comment.