gandi_v5 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +24 -0
- data/.rspec +3 -0
- data/.rubocop.yml +20 -0
- data/.travis.yml +23 -0
- data/CHANGELOG.md +3 -0
- data/Gemfile +6 -0
- data/Guardfile +40 -0
- data/LICENSE.md +32 -0
- data/README.md +94 -0
- data/Rakefile +3 -0
- data/TODO.md +29 -0
- data/bin/console +13 -0
- data/gandi_v5.gemspec +41 -0
- data/lib/gandi_v5/billing/info/prepaid.rb +33 -0
- data/lib/gandi_v5/billing/info.rb +26 -0
- data/lib/gandi_v5/billing.rb +28 -0
- data/lib/gandi_v5/data/converter/array_of.rb +35 -0
- data/lib/gandi_v5/data/converter/symbol.rb +26 -0
- data/lib/gandi_v5/data/converter/time.rb +28 -0
- data/lib/gandi_v5/data/converter.rb +41 -0
- data/lib/gandi_v5/data.rb +244 -0
- data/lib/gandi_v5/domain/auto_renew.rb +64 -0
- data/lib/gandi_v5/domain/contact.rb +102 -0
- data/lib/gandi_v5/domain/contract.rb +22 -0
- data/lib/gandi_v5/domain/dates.rb +44 -0
- data/lib/gandi_v5/domain/renewal_information.rb +41 -0
- data/lib/gandi_v5/domain/restore_information.rb +18 -0
- data/lib/gandi_v5/domain/sharing_space.rb +21 -0
- data/lib/gandi_v5/domain.rb +431 -0
- data/lib/gandi_v5/email/mailbox/responder.rb +36 -0
- data/lib/gandi_v5/email/mailbox.rb +236 -0
- data/lib/gandi_v5/email/offer.rb +27 -0
- data/lib/gandi_v5/email/slot.rb +134 -0
- data/lib/gandi_v5/email.rb +11 -0
- data/lib/gandi_v5/error/gandi_error.rb +21 -0
- data/lib/gandi_v5/error.rb +9 -0
- data/lib/gandi_v5/live_dns/domain.rb +211 -0
- data/lib/gandi_v5/live_dns/record_set.rb +79 -0
- data/lib/gandi_v5/live_dns/zone/snapshot.rb +62 -0
- data/lib/gandi_v5/live_dns/zone.rb +301 -0
- data/lib/gandi_v5/live_dns.rb +30 -0
- data/lib/gandi_v5/organization.rb +66 -0
- data/lib/gandi_v5/version.rb +5 -0
- data/lib/gandi_v5.rb +178 -0
- data/spec/.rubocop.yml +4 -0
- data/spec/features/domain_spec.rb +45 -0
- data/spec/features/livedns_domain_spec.rb +8 -0
- data/spec/features/livedns_zone_spec.rb +45 -0
- data/spec/features/mailbox_spec.rb +18 -0
- data/spec/fixtures/bodies/GandiV5_Billing/info.yaml +10 -0
- data/spec/fixtures/bodies/GandiV5_Domain/availability.yaml +15 -0
- data/spec/fixtures/bodies/GandiV5_Domain/fetch_contacts.yaml +8 -0
- data/spec/fixtures/bodies/GandiV5_Domain/get.yaml +37 -0
- data/spec/fixtures/bodies/GandiV5_Domain/list.yaml +20 -0
- data/spec/fixtures/bodies/GandiV5_Domain/renewal_info.yaml +12 -0
- data/spec/fixtures/bodies/GandiV5_Domain/restore_info.yaml +5 -0
- data/spec/fixtures/bodies/GandiV5_Domain/tld.yaml +10 -0
- data/spec/fixtures/bodies/GandiV5_Domain/tlds.yaml +7 -0
- data/spec/fixtures/bodies/GandiV5_Email_Mailbox/get.yaml +16 -0
- data/spec/fixtures/bodies/GandiV5_Email_Mailbox/list.yaml +8 -0
- data/spec/fixtures/bodies/GandiV5_Email_Slot/get.yaml +10 -0
- data/spec/fixtures/bodies/GandiV5_Email_Slot/list.yaml +8 -0
- data/spec/fixtures/bodies/GandiV5_LiveDNS_Domain/get.yaml +4 -0
- data/spec/fixtures/bodies/GandiV5_LiveDNS_Domain/list.yaml +2 -0
- data/spec/fixtures/bodies/GandiV5_LiveDNS_Zone/get.yaml +11 -0
- data/spec/fixtures/bodies/GandiV5_LiveDNS_Zone/list.yaml +11 -0
- data/spec/fixtures/bodies/GandiV5_LiveDNS_Zone_Snapshot/get.yaml +9 -0
- data/spec/fixtures/bodies/GandiV5_Organization/get.yaml +17 -0
- data/spec/fixtures/vcr/Domain_features/List_domains.yml +54 -0
- data/spec/fixtures/vcr/Domain_features/Renew_domain.yml +133 -0
- data/spec/fixtures/vcr/LiveDNS_Domain_features/List_domains.yml +32 -0
- data/spec/fixtures/vcr/LiveDNS_Zone_features/List_zones.yml +42 -0
- data/spec/fixtures/vcr/LiveDNS_Zone_features/Make_and_save_snapshot.yml +72 -0
- data/spec/fixtures/vcr/LiveDNS_Zone_features/Save_zone_to_file.yml +28 -0
- data/spec/fixtures/vcr/Mailbox_features/List_mailboxes.yml +39 -0
- data/spec/spec_helper.rb +60 -0
- data/spec/test.env +1 -0
- data/spec/units/gandi_v5/billing/info/prepaid_spec.rb +20 -0
- data/spec/units/gandi_v5/billing/info_spec.rb +4 -0
- data/spec/units/gandi_v5/billing_spec.rb +41 -0
- data/spec/units/gandi_v5/data/converter/array_of_spec.rb +18 -0
- data/spec/units/gandi_v5/data/converter/symbol_spec.rb +16 -0
- data/spec/units/gandi_v5/data/converter/time_spec.rb +16 -0
- data/spec/units/gandi_v5/data/converter_spec.rb +31 -0
- data/spec/units/gandi_v5/data_spec.rb +340 -0
- data/spec/units/gandi_v5/domain/auto_renew_spec.rb +70 -0
- data/spec/units/gandi_v5/domain/contact_spec.rb +36 -0
- data/spec/units/gandi_v5/domain/contract_spec.rb +4 -0
- data/spec/units/gandi_v5/domain/dates_spec.rb +4 -0
- data/spec/units/gandi_v5/domain/renewal_information_spec.rb +81 -0
- data/spec/units/gandi_v5/domain/restore_information_spec.rb +4 -0
- data/spec/units/gandi_v5/domain/sharing_space_spec.rb +4 -0
- data/spec/units/gandi_v5/domain_spec.rb +451 -0
- data/spec/units/gandi_v5/email/mailbox/responder_spec.rb +131 -0
- data/spec/units/gandi_v5/email/mailbox_spec.rb +384 -0
- data/spec/units/gandi_v5/email/offer_spec.rb +17 -0
- data/spec/units/gandi_v5/email/slot_spec.rb +102 -0
- data/spec/units/gandi_v5/error/gandi_error_spec.rb +30 -0
- data/spec/units/gandi_v5/error_spec.rb +4 -0
- data/spec/units/gandi_v5/live_dns/domain_spec.rb +247 -0
- data/spec/units/gandi_v5/live_dns/record_set_spec.rb +74 -0
- data/spec/units/gandi_v5/live_dns/zone/snapshot_spec.rb +37 -0
- data/spec/units/gandi_v5/live_dns/zone_spec.rb +329 -0
- data/spec/units/gandi_v5/live_dns_spec.rb +17 -0
- data/spec/units/gandi_v5/organization_spec.rb +30 -0
- data/spec/units/gandi_v5_spec.rb +204 -0
- metadata +406 -0
data/lib/gandi_v5.rb
ADDED
@@ -0,0 +1,178 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'gandi_v5/version'
|
4
|
+
require_relative 'gandi_v5/data'
|
5
|
+
require_relative 'gandi_v5/error'
|
6
|
+
|
7
|
+
require_relative 'gandi_v5/billing'
|
8
|
+
require_relative 'gandi_v5/domain'
|
9
|
+
require_relative 'gandi_v5/email'
|
10
|
+
require_relative 'gandi_v5/live_dns'
|
11
|
+
require_relative 'gandi_v5/organization'
|
12
|
+
|
13
|
+
require 'rest_client'
|
14
|
+
require 'securerandom'
|
15
|
+
|
16
|
+
# Namespace for classes which access the Gandi V5 API.
|
17
|
+
# Also provides useful methods and constants for them.
|
18
|
+
# This is where you configure the gem:
|
19
|
+
# * Setting your Gandi API key:
|
20
|
+
# 1. Get your API key - Login to Gandi and visit User Settings ->
|
21
|
+
# Change password & configure access restrictions.
|
22
|
+
# @see https://api.gandi.net/docs/
|
23
|
+
# @see https://doc.livedns.gandi.net/
|
24
|
+
# @!attribute [w] api_key
|
25
|
+
# @return [String]
|
26
|
+
class GandiV5
|
27
|
+
BASE = 'https://api.gandi.net/v5/'
|
28
|
+
|
29
|
+
class << self
|
30
|
+
attr_writer :api_key
|
31
|
+
|
32
|
+
# Might raise:
|
33
|
+
# * RestClient::NotFound
|
34
|
+
# * RestClient::Unauthorized
|
35
|
+
# Bad authentication attempt because of a wrong API Key.
|
36
|
+
# * RestClient::Forbidden
|
37
|
+
# Access to the resource is denied.
|
38
|
+
# Mainly due to a lack of permissions to access it.
|
39
|
+
# * GandiV5::Error
|
40
|
+
# * JSON::ParserError
|
41
|
+
def get(url, **headers)
|
42
|
+
prepare_headers headers, url
|
43
|
+
response = RestClient.get url, **headers
|
44
|
+
parse_response response
|
45
|
+
rescue RestClient::BadRequest => e
|
46
|
+
handle_bad_request(e)
|
47
|
+
end
|
48
|
+
|
49
|
+
# Might raise:
|
50
|
+
# * RestClient::NotFound
|
51
|
+
# * RestClient::Unauthorized
|
52
|
+
# Bad authentication attempt because of a wrong API Key.
|
53
|
+
# * RestClient::Forbidden
|
54
|
+
# Access to the resource is denied.
|
55
|
+
# Mainly due to a lack of permissions to access it.
|
56
|
+
# * RestClient::Conflict
|
57
|
+
# * GandiV5::Error
|
58
|
+
# * JSON::ParserError
|
59
|
+
def delete(url, **headers)
|
60
|
+
prepare_headers headers, url
|
61
|
+
response = RestClient.delete url, **headers
|
62
|
+
parse_response response
|
63
|
+
rescue RestClient::BadRequest => e
|
64
|
+
handle_bad_request(e)
|
65
|
+
end
|
66
|
+
|
67
|
+
# Might raise:
|
68
|
+
# * RestClient::NotFound
|
69
|
+
# * RestClient::Unauthorized
|
70
|
+
# Bad authentication attempt because of a wrong API Key.
|
71
|
+
# * RestClient::Forbidden
|
72
|
+
# Access to the resource is denied.
|
73
|
+
# Mainly due to a lack of permissions to access it.
|
74
|
+
# * RestClient::BadRequest
|
75
|
+
# * RestClient::Conflict
|
76
|
+
# * GandiV5::Error
|
77
|
+
# * JSON::ParserError
|
78
|
+
def patch(url, payload = '', **headers)
|
79
|
+
prepare_headers headers, url
|
80
|
+
headers[:'content-type'] ||= 'application/json'
|
81
|
+
response = RestClient.patch url, payload, **headers
|
82
|
+
parse_response response
|
83
|
+
rescue RestClient::BadRequest => e
|
84
|
+
handle_bad_request(e)
|
85
|
+
end
|
86
|
+
|
87
|
+
# Might raise:
|
88
|
+
# * RestClient::NotFound
|
89
|
+
# * RestClient::Unauthorized
|
90
|
+
# Bad authentication attempt because of a wrong API Key.
|
91
|
+
# * RestClient::Forbidden
|
92
|
+
# Access to the resource is denied.
|
93
|
+
# Mainly due to a lack of permissions to access it.
|
94
|
+
# * RestClient::BadRequest
|
95
|
+
# * RestClient::Conflict
|
96
|
+
# * GandiV5::Error
|
97
|
+
# * JSON::ParserError
|
98
|
+
def post(url, payload = '', **headers)
|
99
|
+
prepare_headers headers, url
|
100
|
+
headers[:'content-type'] ||= 'application/json'
|
101
|
+
response = RestClient.post url, payload, **headers
|
102
|
+
parse_response response
|
103
|
+
rescue RestClient::BadRequest => e
|
104
|
+
handle_bad_request(e)
|
105
|
+
end
|
106
|
+
|
107
|
+
# Might raise:
|
108
|
+
# * RestClient::NotFound
|
109
|
+
# * RestClient::Unauthorized
|
110
|
+
# Bad authentication attempt because of a wrong API Key.
|
111
|
+
# * RestClient::Forbidden
|
112
|
+
# Access to the resource is denied.
|
113
|
+
# Mainly due to a lack of permissions to access it.
|
114
|
+
# * RestClient::BadRequest
|
115
|
+
# * RestClient::Conflict
|
116
|
+
# * GandiV5::Error
|
117
|
+
# * JSON::ParserError
|
118
|
+
def put(url, payload = '', **headers)
|
119
|
+
prepare_headers headers, url
|
120
|
+
headers[:'content-type'] ||= 'application/json'
|
121
|
+
response = RestClient.put url, payload, **headers
|
122
|
+
parse_response response
|
123
|
+
rescue RestClient::BadRequest => e
|
124
|
+
handle_bad_request(e)
|
125
|
+
end
|
126
|
+
|
127
|
+
private
|
128
|
+
|
129
|
+
def api_key
|
130
|
+
@api_key ||= ENV.fetch('GANDI_API_KEY')
|
131
|
+
end
|
132
|
+
|
133
|
+
def authorisation_header(url)
|
134
|
+
if url.start_with?(BASE)
|
135
|
+
{ Authorization: "Apikey #{api_key}" }
|
136
|
+
elsif url.start_with?(GandiV5::LiveDNS::BASE)
|
137
|
+
{ 'X-Api-Key': api_key }
|
138
|
+
else
|
139
|
+
fail ArgumentError, "Don't know how to authorise for url: #{url}"
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
def parse_response(response)
|
144
|
+
type = response.headers.fetch(:content_type).split(';').first.chomp
|
145
|
+
case type
|
146
|
+
when 'text/plain'
|
147
|
+
response.body.to_s
|
148
|
+
when 'application/json'
|
149
|
+
response = JSON.parse(response.body)
|
150
|
+
if response.is_a?(Hash) && response['status'].eql?('error')
|
151
|
+
fail GandiV5::Error::GandiError.from_hash(response)
|
152
|
+
end
|
153
|
+
|
154
|
+
response
|
155
|
+
else
|
156
|
+
fail ArgumentError, "Don't know how to parse a #{type} response"
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
160
|
+
def prepare_headers(headers, url)
|
161
|
+
headers.transform_keys!(&:to_sym)
|
162
|
+
headers[:accept] ||= 'application/json'
|
163
|
+
headers.merge!(authorisation_header(url))
|
164
|
+
end
|
165
|
+
|
166
|
+
def handle_bad_request(exception)
|
167
|
+
data = JSON.parse exception.response.body
|
168
|
+
unless data.is_a?(Hash) && data['status'].eql?('error') && data['errors'].is_a?(Array)
|
169
|
+
raise exception
|
170
|
+
end
|
171
|
+
|
172
|
+
field, message = data['errors'].first.values_at('name', 'description')
|
173
|
+
fail GandiV5::Error::GandiError, "#{field}: #{message}"
|
174
|
+
rescue JSON::ParserError
|
175
|
+
raise exception
|
176
|
+
end
|
177
|
+
end
|
178
|
+
end
|
data/spec/.rubocop.yml
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
describe 'Domain features' do
|
4
|
+
it 'List domains', :vcr do
|
5
|
+
list = GandiV5::Domain.list
|
6
|
+
|
7
|
+
expect(list.count).to eq 1
|
8
|
+
expect(list.first.fqdn).to eq 'example.net'
|
9
|
+
expect(list.first.fqdn_unicode).to eq 'example.net'
|
10
|
+
expect(list.first.name_servers).to be nil
|
11
|
+
expect(list.first.services).to be nil
|
12
|
+
expect(list.first.sharing_space).to be nil
|
13
|
+
expect(list.first.status).to match_array [:clientTransferProhibited]
|
14
|
+
expect(list.first.tld).to eq 'net'
|
15
|
+
expect(list.first.dates.registry_created_at).to eq Time.new(2019, 2, 13, 10, 4, 18)
|
16
|
+
expect(list.first.dates.updated_at).to eq Time.new(2019, 2, 25, 16, 20, 49)
|
17
|
+
expect(list.first.dates.authinfo_expires_at).to be nil
|
18
|
+
expect(list.first.dates.created_at).to eq Time.new(2019, 2, 13, 11, 4, 18)
|
19
|
+
expect(list.first.dates.deletes_at).to be nil
|
20
|
+
expect(list.first.dates.hold_begins_at).to be nil
|
21
|
+
expect(list.first.dates.hold_ends_at).to be nil
|
22
|
+
expect(list.first.dates.pending_delete_ends_at).to be nil
|
23
|
+
expect(list.first.dates.registry_ends_at).to eq Time.new(2021, 2, 13, 10, 4, 18)
|
24
|
+
expect(list.first.dates.renew_begins_at).to be nil
|
25
|
+
expect(list.first.dates.restore_ends_at).to be nil
|
26
|
+
expect(list.first.can_tld_lock).to be nil
|
27
|
+
expect(list.first.auto_renew.dates).to be nil
|
28
|
+
expect(list.first.auto_renew.duration).to be nil
|
29
|
+
expect(list.first.auto_renew.enabled).to be false
|
30
|
+
expect(list.first.auto_renew.org_id).to be nil
|
31
|
+
expect(list.first.auth_info).to be nil
|
32
|
+
expect(list.first.uuid).to eq 'ba1167be-2f76-11e9-9dfb-00163ec4cb00'
|
33
|
+
expect(list.first.sharing_uuid).to be nil
|
34
|
+
expect(list.first.tags).to match_array []
|
35
|
+
expect(list.first.trustee_roles).to be nil
|
36
|
+
expect(list.first.owner).to eq 'alice_doe'
|
37
|
+
expect(list.first.organisation_owner).to eq 'alice_doe'
|
38
|
+
expect(list.first.domain_owner).to eq 'Alice Doe'
|
39
|
+
expect(list.first.name_server).to be :livedns
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'Renew domain', :vcr do
|
43
|
+
expect(GandiV5::Domain.fetch('example.net').renew_for(2)).to eq 'Domain renewed.'
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
describe 'LiveDNS Zone features' do
|
4
|
+
it 'List zones', :vcr do
|
5
|
+
list = GandiV5::LiveDNS::Zone.list
|
6
|
+
|
7
|
+
expect(list.count).to eq 1
|
8
|
+
expect(list.first.uuid).to eq 'uuid-of-zone'
|
9
|
+
expect(list.first.name).to eq 'Zone Name'
|
10
|
+
expect(list.first.sharing_uuid).to be nil
|
11
|
+
expect(list.first.soa_retry).to eq 3_600
|
12
|
+
expect(list.first.soa_minimum).to eq 10_800
|
13
|
+
expect(list.first.soa_refresh).to eq 10_800
|
14
|
+
expect(list.first.soa_expire).to eq 604_800
|
15
|
+
expect(list.first.soa_serial).to eq 1_432_798_405
|
16
|
+
expect(list.first.soa_email).to eq 'hostmaster.gandi.net.'
|
17
|
+
expect(list.first.soa_primary_ns).to eq 'a.dns.gandi.net.'
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'Save zone to file', :vcr do
|
21
|
+
zone = GandiV5::LiveDNS::Zone.new uuid: 'zone-uuid'
|
22
|
+
expect(File).to receive(:write).with('/path/to/file', "Contents of zone file.\n")
|
23
|
+
|
24
|
+
File.write '/path/to/file', zone.fetch_zone_lines
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'Make and save snapshot', :vcr do
|
28
|
+
yaml = "--- !ruby/object:GandiV5::LiveDNS::Zone::Snapshot\n" \
|
29
|
+
"uuid: snapshot-uuid\n" \
|
30
|
+
"zone_uuid: zone-uuid\n" \
|
31
|
+
"created_at: 2016-12-16 16:51:26.000000000 Z\n" \
|
32
|
+
"records:\n" \
|
33
|
+
"- !ruby/object:GandiV5::LiveDNS::RecordSet\n" \
|
34
|
+
" type: A\n" \
|
35
|
+
" ttl: 10800\n" \
|
36
|
+
" name: www\n" \
|
37
|
+
" values:\n" \
|
38
|
+
" - 10.0.1.42\n"
|
39
|
+
expect(File).to receive(:write).with('/path/to/file', yaml)
|
40
|
+
|
41
|
+
zone = GandiV5::LiveDNS::Zone.new uuid: 'zone-uuid'
|
42
|
+
snapshot = zone.take_snapshot
|
43
|
+
File.write '/path/to/file', snapshot.to_yaml
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
describe 'Mailbox features' do
|
4
|
+
it 'List mailboxes', :vcr do
|
5
|
+
list = GandiV5::Email::Mailbox.list 'example.net'
|
6
|
+
|
7
|
+
expect(list.count).to eq 1
|
8
|
+
expect(list.first.login).to eq 'alice'
|
9
|
+
expect(list.first.fqdn).to eq 'example.net'
|
10
|
+
expect(list.first.address).to eq 'alice@example.net'
|
11
|
+
expect(list.first.uuid).to eq '066743e5-96e4-4a1d-9195-8b8a700a8a79'
|
12
|
+
expect(list.first.type).to be :standard
|
13
|
+
expect(list.first.quota_used).to eq 1_200
|
14
|
+
expect(list.first.aliases).to be nil
|
15
|
+
expect(list.first.fallback_email).to be nil
|
16
|
+
expect(list.first.responder).to be nil
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
---
|
2
|
+
status: []
|
3
|
+
dates:
|
4
|
+
created_at: '2011-02-21T10:39:00Z'
|
5
|
+
registry_created_at: '2003-03-12T12:02:11Z'
|
6
|
+
registry_ends_at: '2020-03-12T12:02:11Z'
|
7
|
+
updated_at: '2019-02-06T09:49:37Z'
|
8
|
+
tags:
|
9
|
+
- Tag
|
10
|
+
fqdn: example.com
|
11
|
+
id: domain-uuid
|
12
|
+
autorenew:
|
13
|
+
href: http://api.test/v5/domain/domains/example.com/autorenew
|
14
|
+
dates:
|
15
|
+
- '2021-01-13T09:04:18Z'
|
16
|
+
- '2021-01-29T10:04:18Z'
|
17
|
+
duration: 1
|
18
|
+
enabled: true
|
19
|
+
org_id: org-uuid
|
20
|
+
tld: com
|
21
|
+
nameservers:
|
22
|
+
- '192.168.0.1'
|
23
|
+
- '192.168.0.2'
|
24
|
+
href: https://api.gandi.net/v5/domain/domains/example.com
|
25
|
+
fqdn_unicode: example.com
|
26
|
+
can_tld_lock: true
|
27
|
+
contacts:
|
28
|
+
owner:
|
29
|
+
country: GB
|
30
|
+
email: owner@example.com
|
31
|
+
family: Fam
|
32
|
+
given: Giv
|
33
|
+
streetaddr: Somestreet
|
34
|
+
type: 1
|
35
|
+
services:
|
36
|
+
- gandilivedns
|
37
|
+
- dnssec
|
@@ -0,0 +1,20 @@
|
|
1
|
+
---
|
2
|
+
- status: []
|
3
|
+
dates:
|
4
|
+
created_at: '2011-02-21T10:39:00Z'
|
5
|
+
registry_created_at: '2003-03-12T12:02:11Z'
|
6
|
+
registry_ends_at: '2020-03-12T12:02:11Z'
|
7
|
+
updated_at: '2019-02-06T09:49:37Z'
|
8
|
+
tags:
|
9
|
+
- Tag
|
10
|
+
fqdn: example.com
|
11
|
+
id: domain-uuid
|
12
|
+
autorenew: false
|
13
|
+
tld: com
|
14
|
+
owner: Example Owner
|
15
|
+
orga_owner: Example Organisation
|
16
|
+
domain_owner: Example Owner
|
17
|
+
nameserver:
|
18
|
+
current: livedns
|
19
|
+
href: https://api.gandi.net/v5/domain/domains/example.com
|
20
|
+
fqdn_unicode: example.com
|
@@ -0,0 +1,16 @@
|
|
1
|
+
---
|
2
|
+
address: address@example.com
|
3
|
+
aliases:
|
4
|
+
- alias-1
|
5
|
+
- alias-2
|
6
|
+
domain: example.com
|
7
|
+
href: https://api.test/api/v5/email/example.com/mailbox-uuid
|
8
|
+
id: mailbox-uuid
|
9
|
+
login: address
|
10
|
+
mailbox_type: standard
|
11
|
+
quota_used: 1000000
|
12
|
+
responder:
|
13
|
+
enabled: false
|
14
|
+
starts_at: '2000-01-01T00:00:00Z'
|
15
|
+
ends_at: '2000-01-02T00:00:00Z'
|
16
|
+
message: This is an autoresponse.
|
@@ -0,0 +1,17 @@
|
|
1
|
+
---
|
2
|
+
username: UserName
|
3
|
+
city: City
|
4
|
+
streetaddr: Street Address
|
5
|
+
zip: Post Code
|
6
|
+
name: FirstLast
|
7
|
+
firstname: First
|
8
|
+
lastname: Last
|
9
|
+
security_email: security@example.com
|
10
|
+
id: organization-uuid
|
11
|
+
phone: '+12.34567890'
|
12
|
+
security_phone: '+23.45678901'
|
13
|
+
country: GB
|
14
|
+
security_email_validated: true
|
15
|
+
security_email_validation_deadline: '2017-11-22T17:13:33Z'
|
16
|
+
email: username@example.com
|
17
|
+
lang: en
|
@@ -0,0 +1,54 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: https://api.gandi.net/v5/domain/domains?page=1&per_page=100
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
Accept:
|
11
|
+
- application/json
|
12
|
+
Authorization:
|
13
|
+
- Apikey abdce12345
|
14
|
+
Host:
|
15
|
+
- api.gandi.net
|
16
|
+
response:
|
17
|
+
status:
|
18
|
+
code: 200
|
19
|
+
message: OK
|
20
|
+
headers:
|
21
|
+
Content-Type:
|
22
|
+
- application/json; charset=utf-8
|
23
|
+
body:
|
24
|
+
encoding: UTF-8
|
25
|
+
string: |-
|
26
|
+
[
|
27
|
+
{
|
28
|
+
"status": [
|
29
|
+
"clientTransferProhibited"
|
30
|
+
],
|
31
|
+
"dates": {
|
32
|
+
"created_at": "2019-02-13T11:04:18Z",
|
33
|
+
"registry_created_at": "2019-02-13T10:04:18Z",
|
34
|
+
"registry_ends_at": "2021-02-13T10:04:18Z",
|
35
|
+
"updated_at": "2019-02-25T16:20:49Z"
|
36
|
+
},
|
37
|
+
"tags": [],
|
38
|
+
"fqdn": "example.net",
|
39
|
+
"id": "ba1167be-2f76-11e9-9dfb-00163ec4cb00",
|
40
|
+
"autorenew": false,
|
41
|
+
"tld": "net",
|
42
|
+
"owner": "alice_doe",
|
43
|
+
"orga_owner": "alice_doe",
|
44
|
+
"domain_owner": "Alice Doe",
|
45
|
+
"nameserver": {
|
46
|
+
"current": "livedns"
|
47
|
+
},
|
48
|
+
"href": "https://api.test/v5/domain/domains/example.net",
|
49
|
+
"fqdn_unicode": "example.net"
|
50
|
+
}
|
51
|
+
]
|
52
|
+
http_version:
|
53
|
+
recorded_at: Thu, 30 May 2019 06:22:02 GMT
|
54
|
+
recorded_with: VCR 4.0.0
|