From 1ea14a23720e55bc22da068f872acbf8822479aa Mon Sep 17 00:00:00 2001 From: Wilson Lin <125257432+wilson-dnsimple@users.noreply.github.com> Date: Tue, 12 Sep 2023 14:21:53 +1000 Subject: [PATCH] Add DomainTransferLockEnable and DomainTransferLockDisable event types (#149) --- dnsimple/webhook/events.go | 23 +++++++++++++-- dnsimple/webhook/events_test.go | 28 +++++++++++++++++++ .../domain.transfer_lock_disable/example.http | 9 ++++++ .../domain.transfer_lock_enable/example.http | 9 ++++++ 4 files changed, 66 insertions(+), 3 deletions(-) create mode 100644 fixtures.http/webhooks/domain.transfer_lock_disable/example.http create mode 100644 fixtures.http/webhooks/domain.transfer_lock_enable/example.http diff --git a/dnsimple/webhook/events.go b/dnsimple/webhook/events.go index a19e113..5579df3 100644 --- a/dnsimple/webhook/events.go +++ b/dnsimple/webhook/events.go @@ -37,17 +37,21 @@ func switchEventData(event *Event) (EventDataContainer, error) { "domain.auto_renewal_disable", "domain.auto_renewal_enable", "domain.create", + "domain.delegation_change", "domain.delete", "domain.register", - "domain.renew", - "domain.delegation_change", "domain.registrant_change", "domain.registrant_change:started", "domain.registrant_change:cancelled", + "domain.renew", "domain.resolution_disable", "domain.resolution_enable", "domain.transfer": // TODO data = &DomainEventData{} + case // domain transfer lock + "domain.transfer_lock_enable", + "domain.transfer_lock_disable": + data = &DomainTransferLockEventData{} case // email forward "email_forward.create", "email_forward.delete", @@ -163,7 +167,7 @@ func (d *DNSSECEventData) unmarshalEventData(payload []byte) error { // DomainEvent // -// DomainEventData represents the data node for a Contact event. +// DomainEventData represents the data node for a Domain event. type DomainEventData struct { Auto bool `json:"auto"` Domain *dnsimple.Domain `json:"domain"` @@ -175,6 +179,19 @@ func (d *DomainEventData) unmarshalEventData(payload []byte) error { return unmarshalEventData(payload, d) } +// +// DomainTransferLockEvent +// + +// DomainTransferLockEventData represents the data node for a DomainTransferLockEnable or DomainTransferLockDisable event. +type DomainTransferLockEventData struct { + Domain *dnsimple.Domain `json:"domain"` +} + +func (d *DomainTransferLockEventData) unmarshalEventData(payload []byte) error { + return unmarshalEventData(payload, d) +} + // // DomainRegistrantChangeEvent // diff --git a/dnsimple/webhook/events_test.go b/dnsimple/webhook/events_test.go index a0c0803..0e4e2f1 100644 --- a/dnsimple/webhook/events_test.go +++ b/dnsimple/webhook/events_test.go @@ -530,6 +530,34 @@ func TestParseDomainEvent_Domain_Transfer(t *testing.T) { assert.Equal(t, "example.com", data.Domain.Name) } +func TestParseDomainEvent_Domain_TransferLockEnable(t *testing.T) { + payload := getHTTPRequestBodyFromFixture(t, "/webhooks/domain.transfer_lock_enable/example.http") + + event, err := ParseEvent(payload) + + assert.NoError(t, err) + assert.Equal(t, "domain.transfer_lock_enable", event.Name) + assert.Regexp(t, regexpUUID, event.RequestID) + + data, ok := event.GetData().(*DomainTransferLockEventData) + assert.True(t, ok) + assert.Equal(t, "example.com", data.Domain.Name) +} + +func TestParseDomainEvent_Domain_TransferLockDisable(t *testing.T) { + payload := getHTTPRequestBodyFromFixture(t, "/webhooks/domain.transfer_lock_disable/example.http") + + event, err := ParseEvent([]byte(payload)) + + assert.NoError(t, err) + assert.Equal(t, "domain.transfer_lock_disable", event.Name) + assert.Regexp(t, regexpUUID, event.RequestID) + + data, ok := event.GetData().(*DomainTransferLockEventData) + assert.True(t, ok) + assert.Equal(t, "example.com", data.Domain.Name) +} + func TestParseEmailForwardEvent_EmailForward_Create(t *testing.T) { payload := getHTTPRequestBodyFromFixture(t, "/webhooks/email_forward.create/example.http") diff --git a/fixtures.http/webhooks/domain.transfer_lock_disable/example.http b/fixtures.http/webhooks/domain.transfer_lock_disable/example.http new file mode 100644 index 0000000..ec2b1fd --- /dev/null +++ b/fixtures.http/webhooks/domain.transfer_lock_disable/example.http @@ -0,0 +1,9 @@ +POST / HTTP/1.1 +Host: example.com +Accept-Encoding: gzip +Content-Type: application/json +User-Agent: DNSimple-Webhook-Notifier/8fd98a84516b72d5b863b27f93fcbaef61f06c03 +Content-Length: 667 +Connection: keep-alive + +{"data": {"domain": {"id": 1, "name": "example.com", "state": "registered", "account_id": 1010, "auto_renew": false, "created_at": "2023-03-02T02:39:18Z", "expires_at": "2024-03-02T02:39:22Z", "expires_on": "2024-03-02", "updated_at": "2023-08-31T06:46:48Z", "unicode_name": "example.com", "private_whois": false, "registrant_id": 101}}, "name": "domain.transfer_lock_disable", "actor": {"id": "1010", "entity": "account", "pretty": "xxxxxxx-xxxxxxx-xxxxxxx@xxxxx.com"}, "account": {"id": 1010, "display": "xxxxxxx-xxxxxxx-xxxxxxx", "identifier": "xxxxxxx-xxxxxxx-xxxxxxx@xxxxx.com"}, "api_version": "v2", "request_identifier": "0f31483c-c303-497b-8a88-2edb48aa111e"} diff --git a/fixtures.http/webhooks/domain.transfer_lock_enable/example.http b/fixtures.http/webhooks/domain.transfer_lock_enable/example.http new file mode 100644 index 0000000..a1df40e --- /dev/null +++ b/fixtures.http/webhooks/domain.transfer_lock_enable/example.http @@ -0,0 +1,9 @@ +POST / HTTP/1.1 +Host: example.com +Accept-Encoding: gzip +Content-Type: application/json +User-Agent: DNSimple-Webhook-Notifier/8fd98a84516b72d5b863b27f93fcbaef61f06c03 +Content-Length: 666 +Connection: keep-alive + +{"data": {"domain": {"id": 1, "name": "example.com", "state": "registered", "account_id": 1010, "auto_renew": false, "created_at": "2023-03-02T02:39:18Z", "expires_at": "2024-03-02T02:39:22Z", "expires_on": "2024-03-02", "updated_at": "2023-08-31T06:46:48Z", "unicode_name": "example.com", "private_whois": false, "registrant_id": 101}}, "name": "domain.transfer_lock_enable", "actor": {"id": "1010", "entity": "account", "pretty": "xxxxxxx-xxxxxxx-xxxxxxx@xxxxx.com"}, "account": {"id": 1010, "display": "xxxxxxx-xxxxxxx-xxxxxxx", "identifier": "xxxxxxx-xxxxxxx-xxxxxxx@xxxxx.com"}, "api_version": "v2", "request_identifier": "0f31483c-c303-497b-8a88-2edb48aa111e"}