From 4a730e0c9e28dc3bfba79b4df40c0ee7046785cb Mon Sep 17 00:00:00 2001 From: cgoldfeder Date: Wed, 25 Jan 2017 12:43:41 -0800 Subject: [PATCH] Handle LINKED correctly in RDAP LINKED is a virtual status that needs to be computed on the fly when creating an RDAP response. ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=145583415 --- .../registry/rdap/RdapJsonFormatter.java | 12 +++- .../registry/rdap/RdapEntityActionTest.java | 22 +++--- .../registry/rdap/RdapJsonFormatterTest.java | 69 ++++++++++++++++++- .../rdap/RdapNameserverSearchActionTest.java | 16 +++-- .../testdata/rdap_associated_contact.json | 49 +++++++++++++ .../registry/rdap/testdata/rdap_domain.json | 15 ++-- .../rdap/testdata/rdap_domain_unicode.json | 15 ++-- .../rdap/testdata/rdap_host_linked.json | 33 +++++++++ .../rdap/testdata/rdap_multiple_hosts.json | 2 +- .../rdap/testdata/rdapjson_admincontact.json | 2 +- .../rdap/testdata/rdapjson_domain_full.json | 16 ++--- .../rdapjson_domain_no_nameservers.json | 8 +-- .../testdata/rdapjson_domain_summary.json | 2 +- .../rdap/testdata/rdapjson_host_both.json | 4 +- .../testdata/rdapjson_host_both_summary.json | 4 +- .../rdap/testdata/rdapjson_host_ipv4.json | 4 +- .../rdap/testdata/rdapjson_host_ipv6.json | 4 +- .../testdata/rdapjson_host_no_addresses.json | 4 +- .../testdata/rdapjson_host_not_linked.json | 27 ++++++++ .../rdap/testdata/rdapjson_registrant.json | 2 +- .../testdata/rdapjson_registrant_nobase.json | 2 +- .../testdata/rdapjson_registrant_summary.json | 2 +- .../testdata/rdapjson_rolelesscontact.json | 2 +- .../rdap/testdata/rdapjson_techcontact.json | 2 +- .../testdata/rdapjson_unlinkedcontact.json | 48 +++++++++++++ 25 files changed, 306 insertions(+), 60 deletions(-) create mode 100644 javatests/google/registry/rdap/testdata/rdap_associated_contact.json create mode 100644 javatests/google/registry/rdap/testdata/rdap_host_linked.json create mode 100644 javatests/google/registry/rdap/testdata/rdapjson_host_not_linked.json create mode 100644 javatests/google/registry/rdap/testdata/rdapjson_unlinkedcontact.json diff --git a/java/google/registry/rdap/RdapJsonFormatter.java b/java/google/registry/rdap/RdapJsonFormatter.java index f5ce22b1d..e86dc3b52 100644 --- a/java/google/registry/rdap/RdapJsonFormatter.java +++ b/java/google/registry/rdap/RdapJsonFormatter.java @@ -15,7 +15,9 @@ package google.registry.rdap; import static com.google.common.base.Strings.nullToEmpty; +import static google.registry.model.EppResourceUtils.isLinked; import static google.registry.model.ofy.ObjectifyService.ofy; +import static google.registry.util.CollectionUtils.union; import static google.registry.util.DomainNameUtils.ACE_PREFIX; import com.google.common.base.Function; @@ -551,7 +553,10 @@ public class RdapJsonFormatter { if (hasUnicodeComponents(hostResource.getFullyQualifiedHostName())) { jsonBuilder.put("unicodeName", Idn.toUnicode(hostResource.getFullyQualifiedHostName())); } - jsonBuilder.put("status", makeStatusValueList(hostResource.getStatusValues())); + jsonBuilder.put("status", makeStatusValueList( + isLinked(Key.create(hostResource), now) + ? union(hostResource.getStatusValues(), StatusValue.LINKED) + : hostResource.getStatusValues())); jsonBuilder.put("links", ImmutableList.of( makeLink("nameserver", hostResource.getFullyQualifiedHostName(), linkBase))); List> remarks; @@ -630,7 +635,10 @@ public class RdapJsonFormatter { ImmutableMap.Builder jsonBuilder = new ImmutableMap.Builder<>(); jsonBuilder.put("objectClassName", "entity"); jsonBuilder.put("handle", contactResource.getRepoId()); - jsonBuilder.put("status", makeStatusValueList(contactResource.getStatusValues())); + jsonBuilder.put("status", makeStatusValueList( + isLinked(Key.create(contactResource), now) + ? union(contactResource.getStatusValues(), StatusValue.LINKED) + : contactResource.getStatusValues())); if (contactType.isPresent()) { jsonBuilder.put("roles", ImmutableList.of(convertContactTypeToRdapRole(contactType.get()))); diff --git a/javatests/google/registry/rdap/RdapEntityActionTest.java b/javatests/google/registry/rdap/RdapEntityActionTest.java index 63767c612..55105a688 100644 --- a/javatests/google/registry/rdap/RdapEntityActionTest.java +++ b/javatests/google/registry/rdap/RdapEntityActionTest.java @@ -78,19 +78,19 @@ public class RdapEntityActionTest { "evilregistrar", "Yes Virginia