mirror of
https://github.com/internetee/registry.git
synced 2025-06-10 14:44:47 +02:00
Merge pull request #1589 from internetee/add-disputed-domains-to-retained-api
Add disputed domains to retained API
This commit is contained in:
commit
a8cfba6564
3 changed files with 84 additions and 15 deletions
|
@ -3,6 +3,7 @@
|
||||||
class RetainedDomains
|
class RetainedDomains
|
||||||
RESERVED = 'reserved'.freeze
|
RESERVED = 'reserved'.freeze
|
||||||
BLOCKED = 'blocked'.freeze
|
BLOCKED = 'blocked'.freeze
|
||||||
|
DISPUTED = 'disputed'.freeze
|
||||||
|
|
||||||
attr_reader :domains,
|
attr_reader :domains,
|
||||||
:type
|
:type
|
||||||
|
@ -26,14 +27,15 @@ class RetainedDomains
|
||||||
case type
|
case type
|
||||||
when RESERVED then :reserved
|
when RESERVED then :reserved
|
||||||
when BLOCKED then :blocked
|
when BLOCKED then :blocked
|
||||||
|
when DISPUTED then :disputed
|
||||||
else :all
|
else :all
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def gather_domains
|
def gather_domains
|
||||||
domains = blocked_domains.to_a.union(reserved_domains.to_a)
|
blocked_domains.to_a
|
||||||
|
.union(reserved_domains.to_a)
|
||||||
domains.sort_by(&:name)
|
.union(disputed_domains.to_a)
|
||||||
end
|
end
|
||||||
|
|
||||||
def blocked_domains
|
def blocked_domains
|
||||||
|
@ -52,18 +54,38 @@ class RetainedDomains
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def domain_to_jsonable(domain)
|
def disputed_domains
|
||||||
status = case domain
|
if %i[all disputed].include?(type)
|
||||||
when ReservedDomain then RESERVED
|
Dispute.order(domain_name: :desc).active
|
||||||
when BlockedDomain then BLOCKED
|
else
|
||||||
end
|
[]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
punycode = SimpleIDN.to_ascii(domain.name)
|
def domain_to_jsonable(domain)
|
||||||
|
status = get_status(domain)
|
||||||
|
domain_name = get_domain_name(domain)
|
||||||
|
punycode = SimpleIDN.to_ascii(domain_name)
|
||||||
|
|
||||||
{
|
{
|
||||||
name: domain.name,
|
name: domain_name,
|
||||||
status: status,
|
status: status,
|
||||||
punycode_name: punycode,
|
punycode_name: punycode,
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def get_status(domain)
|
||||||
|
case domain
|
||||||
|
when ReservedDomain then RESERVED
|
||||||
|
when BlockedDomain then BLOCKED
|
||||||
|
when Dispute then DISPUTED
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def get_domain_name(domain)
|
||||||
|
case domain
|
||||||
|
when Dispute then domain.domain_name
|
||||||
|
else domain.name
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,16 +1,20 @@
|
||||||
## GET /repp/v1/retained_domains
|
## GET /repp/v1/retained_domains
|
||||||
|
|
||||||
Return a list of reserved and blocked domains, along with total count. You can
|
Return a list of disputed, reserved and blocked domains, along with total count.
|
||||||
filter them by type of the domain, which can be either reserved or blocked.
|
You can filter them by type of the domain, which can be: `reserved`, `blocked`
|
||||||
|
or `disputed`.
|
||||||
|
|
||||||
|
NB! A domain name can be both `disputed` and `reserved` at the same time, and it
|
||||||
|
will appear on the list as two separate objects.
|
||||||
|
|
||||||
In contrast with other endpoints in REPP, this one is publicly available for
|
In contrast with other endpoints in REPP, this one is publicly available for
|
||||||
anyone without authentication.
|
anyone without authentication.
|
||||||
|
|
||||||
#### Parameters
|
#### Parameters
|
||||||
|
|
||||||
| Field name | Required | Type | Allowed values | Description |
|
| Field name | Required | Type | Allowed values | Description |
|
||||||
| ---------- | -------- | ---- | -------------- | ----------- |
|
| ---------- | -------- | ---- | -------------- | ----------- |
|
||||||
| type | false | string | ["reserved", "blocked"] | Type of domains to show |
|
| type | false | string | ["reserved", "blocked", "disputed"] | Type of domains to show |
|
||||||
|
|
||||||
|
|
||||||
#### Request
|
#### Request
|
||||||
|
|
|
@ -37,6 +37,49 @@ class ReppV1RetainedDomainsTest < ActionDispatch::IntegrationTest
|
||||||
assert_equal response_json[:domains], expected_objects
|
assert_equal response_json[:domains], expected_objects
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_get_index_disputed_type
|
||||||
|
dispute = Dispute.new(domain_name: 'disputed.test', starts_at: Time.zone.today, password: 'disputepw')
|
||||||
|
dispute.save
|
||||||
|
|
||||||
|
get repp_v1_retained_domains_path({ 'type' => 'disputed' })
|
||||||
|
response_json = JSON.parse(response.body, symbolize_names: true)
|
||||||
|
|
||||||
|
assert response_json[:count] == 1
|
||||||
|
|
||||||
|
expected_objects = [{ name: 'disputed.test',
|
||||||
|
status: 'disputed',
|
||||||
|
punycode_name: 'disputed.test' }]
|
||||||
|
|
||||||
|
assert_equal response_json[:domains], expected_objects
|
||||||
|
end
|
||||||
|
|
||||||
|
# A disputed domain can be also reserved, and according
|
||||||
|
# to business rules it should appear on the list twice.
|
||||||
|
def test_domain_can_appear_twice_if_it_is_disputed_and_reserved
|
||||||
|
dispute = Dispute.new(domain_name: 'reserved.test', starts_at: Time.zone.today, password: 'disputepw')
|
||||||
|
dispute.save
|
||||||
|
|
||||||
|
get repp_v1_retained_domains_path
|
||||||
|
response_json = JSON.parse(response.body, symbolize_names: true)
|
||||||
|
|
||||||
|
assert response_json[:count] == 4
|
||||||
|
|
||||||
|
expected_objects = [{ name: 'blocked.test',
|
||||||
|
status: 'blocked',
|
||||||
|
punycode_name: 'blocked.test' },
|
||||||
|
{ name: 'blockedäöüõ.test',
|
||||||
|
status: 'blocked',
|
||||||
|
punycode_name: 'xn--blocked-cxa7mj0e.test' },
|
||||||
|
{ name: 'reserved.test',
|
||||||
|
status: 'reserved',
|
||||||
|
punycode_name: 'reserved.test' },
|
||||||
|
{ name: 'reserved.test',
|
||||||
|
status: 'disputed',
|
||||||
|
punycode_name: 'reserved.test' }]
|
||||||
|
|
||||||
|
assert_equal response_json[:domains], expected_objects
|
||||||
|
end
|
||||||
|
|
||||||
def test_etags_cache
|
def test_etags_cache
|
||||||
get repp_v1_retained_domains_path({ 'type' => 'reserved' })
|
get repp_v1_retained_domains_path({ 'type' => 'reserved' })
|
||||||
etag = response.headers['ETag']
|
etag = response.headers['ETag']
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue