mirror of
https://github.com/google/nomulus.git
synced 2025-05-15 08:57:12 +02:00
Centralize RDAP test initialization and login
All RDAP actions inherit from a common RdapActionBase class. All RDAP search actions inherit from a comman RdapSearchActionBase class, which inherits from RdapActionBase Each of the base classes has @Before initialization needed for the tests, as well as utility functions (such as login and logout). Currently, these were copied in all test classes. Instead, we created a similar test inheritance tree to centralize the initialization and place common utility functions. This way, the @Before of every test only needs to initialize the variables new to the specific action, making the code somewhat clearer. ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=217856844
This commit is contained in:
parent
b254269d2f
commit
3a3b0b738a
45 changed files with 456 additions and 758 deletions
|
@ -49,6 +49,7 @@ import google.registry.request.Response;
|
||||||
import google.registry.request.auth.AuthResult;
|
import google.registry.request.auth.AuthResult;
|
||||||
import google.registry.request.auth.UserAuthInfo;
|
import google.registry.request.auth.UserAuthInfo;
|
||||||
import google.registry.ui.server.registrar.AuthenticatedRegistrarAccessor;
|
import google.registry.ui.server.registrar.AuthenticatedRegistrarAccessor;
|
||||||
|
import google.registry.util.Clock;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.net.URI;
|
import java.net.URI;
|
||||||
import java.net.URISyntaxException;
|
import java.net.URISyntaxException;
|
||||||
|
@ -87,6 +88,7 @@ public abstract class RdapActionBase implements Runnable {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Inject Response response;
|
@Inject Response response;
|
||||||
|
@Inject Clock clock;
|
||||||
@Inject @RequestMethod Action.Method requestMethod;
|
@Inject @RequestMethod Action.Method requestMethod;
|
||||||
@Inject @RequestPath String requestPath;
|
@Inject @RequestPath String requestPath;
|
||||||
@Inject @FullServletPath String fullServletPath;
|
@Inject @FullServletPath String fullServletPath;
|
||||||
|
|
|
@ -29,7 +29,6 @@ import google.registry.request.Action;
|
||||||
import google.registry.request.HttpException.BadRequestException;
|
import google.registry.request.HttpException.BadRequestException;
|
||||||
import google.registry.request.HttpException.NotFoundException;
|
import google.registry.request.HttpException.NotFoundException;
|
||||||
import google.registry.request.auth.Auth;
|
import google.registry.request.auth.Auth;
|
||||||
import google.registry.util.Clock;
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import org.joda.time.DateTime;
|
import org.joda.time.DateTime;
|
||||||
|
|
||||||
|
@ -44,8 +43,7 @@ public class RdapDomainAction extends RdapActionBase {
|
||||||
|
|
||||||
public static final String PATH = "/rdap/domain/";
|
public static final String PATH = "/rdap/domain/";
|
||||||
|
|
||||||
@Inject Clock clock;
|
@Inject public RdapDomainAction() {}
|
||||||
@Inject RdapDomainAction() {}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getHumanReadableObjectTypeName() {
|
public String getHumanReadableObjectTypeName() {
|
||||||
|
|
|
@ -45,7 +45,6 @@ import google.registry.request.HttpException.NotFoundException;
|
||||||
import google.registry.request.HttpException.UnprocessableEntityException;
|
import google.registry.request.HttpException.UnprocessableEntityException;
|
||||||
import google.registry.request.Parameter;
|
import google.registry.request.Parameter;
|
||||||
import google.registry.request.auth.Auth;
|
import google.registry.request.auth.Auth;
|
||||||
import google.registry.util.Clock;
|
|
||||||
import google.registry.util.Idn;
|
import google.registry.util.Idn;
|
||||||
import google.registry.util.NonFinalForTesting;
|
import google.registry.util.NonFinalForTesting;
|
||||||
import java.net.InetAddress;
|
import java.net.InetAddress;
|
||||||
|
@ -83,11 +82,10 @@ public class RdapDomainSearchAction extends RdapSearchActionBase {
|
||||||
|
|
||||||
private static final FluentLogger logger = FluentLogger.forEnclosingClass();
|
private static final FluentLogger logger = FluentLogger.forEnclosingClass();
|
||||||
|
|
||||||
@Inject Clock clock;
|
|
||||||
@Inject @Parameter("name") Optional<String> nameParam;
|
@Inject @Parameter("name") Optional<String> nameParam;
|
||||||
@Inject @Parameter("nsLdhName") Optional<String> nsLdhNameParam;
|
@Inject @Parameter("nsLdhName") Optional<String> nsLdhNameParam;
|
||||||
@Inject @Parameter("nsIp") Optional<String> nsIpParam;
|
@Inject @Parameter("nsIp") Optional<String> nsIpParam;
|
||||||
@Inject RdapDomainSearchAction() {}
|
@Inject public RdapDomainSearchAction() {}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getHumanReadableObjectTypeName() {
|
public String getHumanReadableObjectTypeName() {
|
||||||
|
|
|
@ -31,7 +31,6 @@ import google.registry.request.Action;
|
||||||
import google.registry.request.HttpException.BadRequestException;
|
import google.registry.request.HttpException.BadRequestException;
|
||||||
import google.registry.request.HttpException.NotFoundException;
|
import google.registry.request.HttpException.NotFoundException;
|
||||||
import google.registry.request.auth.Auth;
|
import google.registry.request.auth.Auth;
|
||||||
import google.registry.util.Clock;
|
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import org.joda.time.DateTime;
|
import org.joda.time.DateTime;
|
||||||
|
@ -58,8 +57,7 @@ public class RdapEntityAction extends RdapActionBase {
|
||||||
|
|
||||||
private static final Pattern ROID_PATTERN = Pattern.compile("[-_.a-zA-Z0-9]+");
|
private static final Pattern ROID_PATTERN = Pattern.compile("[-_.a-zA-Z0-9]+");
|
||||||
|
|
||||||
@Inject Clock clock;
|
@Inject public RdapEntityAction() {}
|
||||||
@Inject RdapEntityAction() {}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getHumanReadableObjectTypeName() {
|
public String getHumanReadableObjectTypeName() {
|
||||||
|
|
|
@ -39,7 +39,6 @@ import google.registry.request.HttpException.NotFoundException;
|
||||||
import google.registry.request.HttpException.UnprocessableEntityException;
|
import google.registry.request.HttpException.UnprocessableEntityException;
|
||||||
import google.registry.request.Parameter;
|
import google.registry.request.Parameter;
|
||||||
import google.registry.request.auth.Auth;
|
import google.registry.request.auth.Auth;
|
||||||
import google.registry.util.Clock;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -84,11 +83,10 @@ public class RdapEntitySearchAction extends RdapSearchActionBase {
|
||||||
|
|
||||||
public static final String PATH = "/rdap/entities";
|
public static final String PATH = "/rdap/entities";
|
||||||
|
|
||||||
@Inject Clock clock;
|
|
||||||
@Inject @Parameter("fn") Optional<String> fnParam;
|
@Inject @Parameter("fn") Optional<String> fnParam;
|
||||||
@Inject @Parameter("handle") Optional<String> handleParam;
|
@Inject @Parameter("handle") Optional<String> handleParam;
|
||||||
@Inject @Parameter("subtype") Optional<String> subtypeParam;
|
@Inject @Parameter("subtype") Optional<String> subtypeParam;
|
||||||
@Inject RdapEntitySearchAction() {}
|
@Inject public RdapEntitySearchAction() {}
|
||||||
|
|
||||||
private enum QueryType {
|
private enum QueryType {
|
||||||
FULL_NAME,
|
FULL_NAME,
|
||||||
|
|
|
@ -23,7 +23,6 @@ import google.registry.rdap.RdapJsonFormatter.BoilerplateType;
|
||||||
import google.registry.rdap.RdapMetrics.EndpointType;
|
import google.registry.rdap.RdapMetrics.EndpointType;
|
||||||
import google.registry.request.Action;
|
import google.registry.request.Action;
|
||||||
import google.registry.request.auth.Auth;
|
import google.registry.request.auth.Auth;
|
||||||
import google.registry.util.Clock;
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
|
|
||||||
/** RDAP (new WHOIS) action for help requests. */
|
/** RDAP (new WHOIS) action for help requests. */
|
||||||
|
@ -37,8 +36,7 @@ public class RdapHelpAction extends RdapActionBase {
|
||||||
|
|
||||||
public static final String PATH = "/rdap/help";
|
public static final String PATH = "/rdap/help";
|
||||||
|
|
||||||
@Inject Clock clock;
|
@Inject public RdapHelpAction() {}
|
||||||
@Inject RdapHelpAction() {}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getHumanReadableObjectTypeName() {
|
public String getHumanReadableObjectTypeName() {
|
||||||
|
|
|
@ -29,7 +29,6 @@ import com.google.common.collect.ImmutableSet;
|
||||||
import com.google.common.collect.Maps;
|
import com.google.common.collect.Maps;
|
||||||
import com.google.common.collect.Ordering;
|
import com.google.common.collect.Ordering;
|
||||||
import com.google.common.collect.Streams;
|
import com.google.common.collect.Streams;
|
||||||
import com.google.common.flogger.FluentLogger;
|
|
||||||
import com.google.common.net.InetAddresses;
|
import com.google.common.net.InetAddresses;
|
||||||
import com.googlecode.objectify.Key;
|
import com.googlecode.objectify.Key;
|
||||||
import google.registry.config.RdapNoticeDescriptor;
|
import google.registry.config.RdapNoticeDescriptor;
|
||||||
|
@ -83,8 +82,6 @@ public class RdapJsonFormatter {
|
||||||
@Inject @Config("rdapHelpMap") ImmutableMap<String, RdapNoticeDescriptor> rdapHelpMap;
|
@Inject @Config("rdapHelpMap") ImmutableMap<String, RdapNoticeDescriptor> rdapHelpMap;
|
||||||
@Inject RdapJsonFormatter() {}
|
@Inject RdapJsonFormatter() {}
|
||||||
|
|
||||||
private static final FluentLogger logger = FluentLogger.forEnclosingClass();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* What type of data to generate. Summary data includes only information about the object itself,
|
* What type of data to generate. Summary data includes only information about the object itself,
|
||||||
* while full data includes associated items (e.g. for domains, full data includes the hosts,
|
* while full data includes associated items (e.g. for domains, full data includes the hosts,
|
||||||
|
|
|
@ -29,7 +29,6 @@ import google.registry.request.Action;
|
||||||
import google.registry.request.HttpException.BadRequestException;
|
import google.registry.request.HttpException.BadRequestException;
|
||||||
import google.registry.request.HttpException.NotFoundException;
|
import google.registry.request.HttpException.NotFoundException;
|
||||||
import google.registry.request.auth.Auth;
|
import google.registry.request.auth.Auth;
|
||||||
import google.registry.util.Clock;
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import org.joda.time.DateTime;
|
import org.joda.time.DateTime;
|
||||||
|
|
||||||
|
@ -44,8 +43,7 @@ public class RdapNameserverAction extends RdapActionBase {
|
||||||
|
|
||||||
public static final String PATH = "/rdap/nameserver/";
|
public static final String PATH = "/rdap/nameserver/";
|
||||||
|
|
||||||
@Inject Clock clock;
|
@Inject public RdapNameserverAction() {}
|
||||||
@Inject RdapNameserverAction() {}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getHumanReadableObjectTypeName() {
|
public String getHumanReadableObjectTypeName() {
|
||||||
|
|
|
@ -38,7 +38,6 @@ import google.registry.request.HttpException.NotFoundException;
|
||||||
import google.registry.request.HttpException.UnprocessableEntityException;
|
import google.registry.request.HttpException.UnprocessableEntityException;
|
||||||
import google.registry.request.Parameter;
|
import google.registry.request.Parameter;
|
||||||
import google.registry.request.auth.Auth;
|
import google.registry.request.auth.Auth;
|
||||||
import google.registry.util.Clock;
|
|
||||||
import google.registry.util.Idn;
|
import google.registry.util.Idn;
|
||||||
import java.net.InetAddress;
|
import java.net.InetAddress;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
@ -66,10 +65,9 @@ public class RdapNameserverSearchAction extends RdapSearchActionBase {
|
||||||
|
|
||||||
public static final String PATH = "/rdap/nameservers";
|
public static final String PATH = "/rdap/nameservers";
|
||||||
|
|
||||||
@Inject Clock clock;
|
|
||||||
@Inject @Parameter("name") Optional<String> nameParam;
|
@Inject @Parameter("name") Optional<String> nameParam;
|
||||||
@Inject @Parameter("ip") Optional<String> ipParam;
|
@Inject @Parameter("ip") Optional<String> ipParam;
|
||||||
@Inject RdapNameserverSearchAction() {}
|
@Inject public RdapNameserverSearchAction() {}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getHumanReadableObjectTypeName() {
|
public String getHumanReadableObjectTypeName() {
|
||||||
|
|
136
javatests/google/registry/rdap/RdapActionBaseTestCase.java
Normal file
136
javatests/google/registry/rdap/RdapActionBaseTestCase.java
Normal file
|
@ -0,0 +1,136 @@
|
||||||
|
// Copyright 2018 The Nomulus Authors. All Rights Reserved.
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package google.registry.rdap;
|
||||||
|
|
||||||
|
import static google.registry.rdap.RdapAuthorization.Role.ADMINISTRATOR;
|
||||||
|
import static google.registry.rdap.RdapAuthorization.Role.PUBLIC;
|
||||||
|
import static google.registry.rdap.RdapAuthorization.Role.REGISTRAR;
|
||||||
|
import static google.registry.request.Action.Method.GET;
|
||||||
|
import static google.registry.request.Action.Method.HEAD;
|
||||||
|
import static org.mockito.Mockito.mock;
|
||||||
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
|
import com.google.appengine.api.users.User;
|
||||||
|
import google.registry.model.ofy.Ofy;
|
||||||
|
import google.registry.request.Action;
|
||||||
|
import google.registry.request.HttpException.ForbiddenException;
|
||||||
|
import google.registry.request.auth.AuthLevel;
|
||||||
|
import google.registry.request.auth.AuthResult;
|
||||||
|
import google.registry.request.auth.UserAuthInfo;
|
||||||
|
import google.registry.testing.AppEngineRule;
|
||||||
|
import google.registry.testing.FakeClock;
|
||||||
|
import google.registry.testing.FakeResponse;
|
||||||
|
import google.registry.testing.InjectRule;
|
||||||
|
import google.registry.ui.server.registrar.AuthenticatedRegistrarAccessor;
|
||||||
|
import google.registry.util.TypeUtils;
|
||||||
|
import java.util.Optional;
|
||||||
|
import org.joda.time.DateTime;
|
||||||
|
import org.json.simple.JSONValue;
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Rule;
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
import org.junit.runners.JUnit4;
|
||||||
|
|
||||||
|
/** Common unit test code for actions inheriting {@link RdapActionBase}. */
|
||||||
|
@RunWith(JUnit4.class)
|
||||||
|
public class RdapActionBaseTestCase<A extends RdapActionBase> {
|
||||||
|
|
||||||
|
@Rule
|
||||||
|
public final AppEngineRule appEngine = AppEngineRule.builder()
|
||||||
|
.withDatastore()
|
||||||
|
.build();
|
||||||
|
|
||||||
|
@Rule
|
||||||
|
public final InjectRule inject = new InjectRule();
|
||||||
|
|
||||||
|
protected static final AuthResult AUTH_RESULT =
|
||||||
|
AuthResult.create(
|
||||||
|
AuthLevel.USER,
|
||||||
|
UserAuthInfo.create(new User("rdap.user@user.com", "gmail.com", "12345"), false));
|
||||||
|
|
||||||
|
protected static final AuthResult AUTH_RESULT_ADMIN =
|
||||||
|
AuthResult.create(
|
||||||
|
AuthLevel.USER,
|
||||||
|
UserAuthInfo.create(new User("rdap.admin@google.com", "gmail.com", "12345"), true));
|
||||||
|
|
||||||
|
protected final AuthenticatedRegistrarAccessor registrarAccessor =
|
||||||
|
mock(AuthenticatedRegistrarAccessor.class);
|
||||||
|
|
||||||
|
protected FakeResponse response = new FakeResponse();
|
||||||
|
protected final FakeClock clock = new FakeClock(DateTime.parse("2000-01-01TZ"));
|
||||||
|
protected final RdapMetrics rdapMetrics = mock(RdapMetrics.class);
|
||||||
|
|
||||||
|
protected RdapAuthorization.Role metricRole = PUBLIC;
|
||||||
|
protected A action;
|
||||||
|
|
||||||
|
protected final String actionPath;
|
||||||
|
protected final Class<A> rdapActionClass;
|
||||||
|
|
||||||
|
protected RdapActionBaseTestCase(Class<A> rdapActionClass, String actionPath) {
|
||||||
|
this.rdapActionClass = rdapActionClass;
|
||||||
|
this.actionPath = actionPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Before
|
||||||
|
public void baseSetUp() {
|
||||||
|
inject.setStaticField(Ofy.class, "clock", clock);
|
||||||
|
action = TypeUtils.instantiate(rdapActionClass);
|
||||||
|
action.registrarAccessor = registrarAccessor;
|
||||||
|
action.clock = clock;
|
||||||
|
action.authResult = AUTH_RESULT;
|
||||||
|
action.includeDeletedParam = Optional.empty();
|
||||||
|
action.registrarParam = Optional.empty();
|
||||||
|
action.formatOutputParam = Optional.empty();
|
||||||
|
action.response = response;
|
||||||
|
action.rdapJsonFormatter = RdapTestHelper.getTestRdapJsonFormatter();
|
||||||
|
action.rdapMetrics = rdapMetrics;
|
||||||
|
action.requestMethod = Action.Method.GET;
|
||||||
|
action.fullServletPath = "https://example.tld/rdap";
|
||||||
|
action.rdapWhoisServer = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void login(String clientId) {
|
||||||
|
when(registrarAccessor.guessClientId()).thenReturn(clientId);
|
||||||
|
action.authResult = AUTH_RESULT;
|
||||||
|
metricRole = REGISTRAR;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void logout() {
|
||||||
|
when(registrarAccessor.guessClientId()).thenThrow(new ForbiddenException("not logged in"));
|
||||||
|
action.authResult = AUTH_RESULT;
|
||||||
|
metricRole = PUBLIC;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void loginAsAdmin() {
|
||||||
|
when(registrarAccessor.guessClientId()).thenReturn("irrelevant");
|
||||||
|
action.authResult = AUTH_RESULT_ADMIN;
|
||||||
|
metricRole = ADMINISTRATOR;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected Object generateActualJson(String domainName) {
|
||||||
|
action.requestPath = actionPath + domainName;
|
||||||
|
action.requestMethod = GET;
|
||||||
|
action.run();
|
||||||
|
return JSONValue.parse(response.getPayload());
|
||||||
|
}
|
||||||
|
|
||||||
|
protected String generateHeadPayload(String domainName) {
|
||||||
|
action.requestPath = actionPath + domainName;
|
||||||
|
action.fullServletPath = "http://myserver.example.com" + actionPath;
|
||||||
|
action.requestMethod = HEAD;
|
||||||
|
action.run();
|
||||||
|
return response.getPayload();
|
||||||
|
}
|
||||||
|
}
|
|
@ -25,11 +25,8 @@ import static google.registry.testing.FullFieldsTestEntityHelper.makeHistoryEntr
|
||||||
import static google.registry.testing.FullFieldsTestEntityHelper.makeRegistrar;
|
import static google.registry.testing.FullFieldsTestEntityHelper.makeRegistrar;
|
||||||
import static google.registry.testing.FullFieldsTestEntityHelper.makeRegistrarContacts;
|
import static google.registry.testing.FullFieldsTestEntityHelper.makeRegistrarContacts;
|
||||||
import static google.registry.testing.TestDataHelper.loadFile;
|
import static google.registry.testing.TestDataHelper.loadFile;
|
||||||
import static org.mockito.Mockito.mock;
|
|
||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
import static org.mockito.Mockito.when;
|
|
||||||
|
|
||||||
import com.google.appengine.api.users.User;
|
|
||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
import com.google.common.collect.ImmutableMap;
|
import com.google.common.collect.ImmutableMap;
|
||||||
import com.google.common.collect.ImmutableSet;
|
import com.google.common.collect.ImmutableSet;
|
||||||
|
@ -37,7 +34,6 @@ import google.registry.model.contact.ContactResource;
|
||||||
import google.registry.model.domain.DomainBase;
|
import google.registry.model.domain.DomainBase;
|
||||||
import google.registry.model.domain.Period;
|
import google.registry.model.domain.Period;
|
||||||
import google.registry.model.host.HostResource;
|
import google.registry.model.host.HostResource;
|
||||||
import google.registry.model.ofy.Ofy;
|
|
||||||
import google.registry.model.registrar.Registrar;
|
import google.registry.model.registrar.Registrar;
|
||||||
import google.registry.model.registry.Registry;
|
import google.registry.model.registry.Registry;
|
||||||
import google.registry.model.reporting.HistoryEntry;
|
import google.registry.model.reporting.HistoryEntry;
|
||||||
|
@ -46,61 +42,28 @@ import google.registry.rdap.RdapMetrics.SearchType;
|
||||||
import google.registry.rdap.RdapMetrics.WildcardType;
|
import google.registry.rdap.RdapMetrics.WildcardType;
|
||||||
import google.registry.rdap.RdapSearchResults.IncompletenessWarningType;
|
import google.registry.rdap.RdapSearchResults.IncompletenessWarningType;
|
||||||
import google.registry.request.Action;
|
import google.registry.request.Action;
|
||||||
import google.registry.request.auth.AuthLevel;
|
|
||||||
import google.registry.request.auth.AuthResult;
|
|
||||||
import google.registry.request.auth.UserAuthInfo;
|
|
||||||
import google.registry.testing.AppEngineRule;
|
|
||||||
import google.registry.testing.FakeClock;
|
|
||||||
import google.registry.testing.FakeResponse;
|
|
||||||
import google.registry.testing.InjectRule;
|
|
||||||
import google.registry.ui.server.registrar.AuthenticatedRegistrarAccessor;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import org.joda.time.DateTime;
|
|
||||||
import org.json.simple.JSONObject;
|
import org.json.simple.JSONObject;
|
||||||
import org.json.simple.JSONValue;
|
import org.json.simple.JSONValue;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Ignore;
|
import org.junit.Ignore;
|
||||||
import org.junit.Rule;
|
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
import org.junit.runners.JUnit4;
|
import org.junit.runners.JUnit4;
|
||||||
|
|
||||||
/** Unit tests for {@link RdapDomainAction}. */
|
/** Unit tests for {@link RdapDomainAction}. */
|
||||||
@RunWith(JUnit4.class)
|
@RunWith(JUnit4.class)
|
||||||
public class RdapDomainActionTest {
|
public class RdapDomainActionTest extends RdapActionBaseTestCase<RdapDomainAction> {
|
||||||
|
|
||||||
@Rule
|
public RdapDomainActionTest() {
|
||||||
public final AppEngineRule appEngine = AppEngineRule.builder()
|
super(RdapDomainAction.class, RdapDomainAction.PATH);
|
||||||
.withDatastore()
|
}
|
||||||
.build();
|
|
||||||
|
|
||||||
@Rule
|
|
||||||
public final InjectRule inject = new InjectRule();
|
|
||||||
|
|
||||||
private final FakeResponse response = new FakeResponse();
|
|
||||||
private final FakeClock clock = new FakeClock(DateTime.parse("2000-01-01TZ"));
|
|
||||||
private final AuthenticatedRegistrarAccessor registrarAccessor =
|
|
||||||
mock(AuthenticatedRegistrarAccessor.class);
|
|
||||||
private final RdapMetrics rdapMetrics = mock(RdapMetrics.class);
|
|
||||||
|
|
||||||
private RdapDomainAction action;
|
|
||||||
|
|
||||||
private static final AuthResult AUTH_RESULT =
|
|
||||||
AuthResult.create(
|
|
||||||
AuthLevel.USER,
|
|
||||||
UserAuthInfo.create(new User("rdap.user@user.com", "gmail.com", "12345"), false));
|
|
||||||
|
|
||||||
private static final AuthResult AUTH_RESULT_ADMIN =
|
|
||||||
AuthResult.create(
|
|
||||||
AuthLevel.USER,
|
|
||||||
UserAuthInfo.create(new User("rdap.user@google.com", "gmail.com", "12345"), true));
|
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
inject.setStaticField(Ofy.class, "clock", clock);
|
|
||||||
// lol
|
// lol
|
||||||
createTld("lol");
|
createTld("lol");
|
||||||
Registrar registrarLol = persistResource(makeRegistrar(
|
Registrar registrarLol = persistResource(makeRegistrar(
|
||||||
|
@ -265,35 +228,6 @@ public class RdapDomainActionTest {
|
||||||
Period.create(1, Period.Unit.YEARS),
|
Period.create(1, Period.Unit.YEARS),
|
||||||
"deleted",
|
"deleted",
|
||||||
clock.nowUtc().minusMonths(6)));
|
clock.nowUtc().minusMonths(6)));
|
||||||
|
|
||||||
action = new RdapDomainAction();
|
|
||||||
action.clock = clock;
|
|
||||||
action.requestMethod = Action.Method.GET;
|
|
||||||
action.fullServletPath = "https://example.com/rdap";
|
|
||||||
action.response = response;
|
|
||||||
action.registrarParam = Optional.empty();
|
|
||||||
action.includeDeletedParam = Optional.empty();
|
|
||||||
action.formatOutputParam = Optional.empty();
|
|
||||||
action.rdapJsonFormatter = RdapTestHelper.getTestRdapJsonFormatter();
|
|
||||||
action.rdapWhoisServer = null;
|
|
||||||
action.registrarAccessor = registrarAccessor;
|
|
||||||
action.authResult = AUTH_RESULT;
|
|
||||||
action.rdapMetrics = rdapMetrics;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void login(String clientId) {
|
|
||||||
when(registrarAccessor.guessClientId()).thenReturn(clientId);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void loginAsAdmin() {
|
|
||||||
when(registrarAccessor.guessClientId()).thenReturn("irrelevant");
|
|
||||||
action.authResult = AUTH_RESULT_ADMIN;
|
|
||||||
}
|
|
||||||
|
|
||||||
private Object generateActualJson(String domainName) {
|
|
||||||
action.requestPath = RdapDomainAction.PATH + domainName;
|
|
||||||
action.run();
|
|
||||||
return JSONValue.parse(response.getPayload());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private Object generateExpectedJson(
|
private Object generateExpectedJson(
|
||||||
|
@ -400,7 +334,7 @@ public class RdapDomainActionTest {
|
||||||
builder,
|
builder,
|
||||||
false,
|
false,
|
||||||
RdapTestHelper.createNotices(
|
RdapTestHelper.createNotices(
|
||||||
"https://example.com/rdap/",
|
"https://example.tld/rdap/",
|
||||||
(contactRoids == null)
|
(contactRoids == null)
|
||||||
? RdapTestHelper.ContactNoticeType.DOMAIN
|
? RdapTestHelper.ContactNoticeType.DOMAIN
|
||||||
: RdapTestHelper.ContactNoticeType.NONE,
|
: RdapTestHelper.ContactNoticeType.NONE,
|
||||||
|
|
|
@ -16,8 +16,6 @@ package google.registry.rdap;
|
||||||
|
|
||||||
import static com.google.common.base.Preconditions.checkNotNull;
|
import static com.google.common.base.Preconditions.checkNotNull;
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
import static google.registry.rdap.RdapAuthorization.Role.ADMINISTRATOR;
|
|
||||||
import static google.registry.rdap.RdapAuthorization.Role.REGISTRAR;
|
|
||||||
import static google.registry.request.Action.Method.POST;
|
import static google.registry.request.Action.Method.POST;
|
||||||
import static google.registry.testing.DatastoreHelper.createTld;
|
import static google.registry.testing.DatastoreHelper.createTld;
|
||||||
import static google.registry.testing.DatastoreHelper.persistDomainAsDeleted;
|
import static google.registry.testing.DatastoreHelper.persistDomainAsDeleted;
|
||||||
|
@ -31,10 +29,7 @@ import static google.registry.testing.FullFieldsTestEntityHelper.makeHistoryEntr
|
||||||
import static google.registry.testing.FullFieldsTestEntityHelper.makeRegistrar;
|
import static google.registry.testing.FullFieldsTestEntityHelper.makeRegistrar;
|
||||||
import static google.registry.testing.FullFieldsTestEntityHelper.makeRegistrarContacts;
|
import static google.registry.testing.FullFieldsTestEntityHelper.makeRegistrarContacts;
|
||||||
import static google.registry.testing.TestDataHelper.loadFile;
|
import static google.registry.testing.TestDataHelper.loadFile;
|
||||||
import static org.mockito.Mockito.mock;
|
|
||||||
import static org.mockito.Mockito.when;
|
|
||||||
|
|
||||||
import com.google.appengine.api.users.User;
|
|
||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
import com.google.common.collect.ImmutableListMultimap;
|
import com.google.common.collect.ImmutableListMultimap;
|
||||||
import com.google.common.collect.ImmutableMap;
|
import com.google.common.collect.ImmutableMap;
|
||||||
|
@ -46,7 +41,6 @@ import google.registry.model.contact.ContactResource;
|
||||||
import google.registry.model.domain.DomainResource;
|
import google.registry.model.domain.DomainResource;
|
||||||
import google.registry.model.domain.Period;
|
import google.registry.model.domain.Period;
|
||||||
import google.registry.model.host.HostResource;
|
import google.registry.model.host.HostResource;
|
||||||
import google.registry.model.ofy.Ofy;
|
|
||||||
import google.registry.model.registrar.Registrar;
|
import google.registry.model.registrar.Registrar;
|
||||||
import google.registry.model.registry.Registry;
|
import google.registry.model.registry.Registry;
|
||||||
import google.registry.model.reporting.HistoryEntry;
|
import google.registry.model.reporting.HistoryEntry;
|
||||||
|
@ -54,15 +48,7 @@ import google.registry.rdap.RdapMetrics.EndpointType;
|
||||||
import google.registry.rdap.RdapMetrics.SearchType;
|
import google.registry.rdap.RdapMetrics.SearchType;
|
||||||
import google.registry.rdap.RdapMetrics.WildcardType;
|
import google.registry.rdap.RdapMetrics.WildcardType;
|
||||||
import google.registry.rdap.RdapSearchResults.IncompletenessWarningType;
|
import google.registry.rdap.RdapSearchResults.IncompletenessWarningType;
|
||||||
import google.registry.request.Action;
|
|
||||||
import google.registry.request.auth.AuthLevel;
|
|
||||||
import google.registry.request.auth.AuthResult;
|
|
||||||
import google.registry.request.auth.UserAuthInfo;
|
|
||||||
import google.registry.testing.AppEngineRule;
|
|
||||||
import google.registry.testing.FakeClock;
|
|
||||||
import google.registry.testing.FakeResponse;
|
import google.registry.testing.FakeResponse;
|
||||||
import google.registry.testing.InjectRule;
|
|
||||||
import google.registry.ui.server.registrar.AuthenticatedRegistrarAccessor;
|
|
||||||
import google.registry.util.Idn;
|
import google.registry.util.Idn;
|
||||||
import java.net.IDN;
|
import java.net.IDN;
|
||||||
import java.net.URLDecoder;
|
import java.net.URLDecoder;
|
||||||
|
@ -71,42 +57,22 @@ import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import org.joda.time.DateTime;
|
|
||||||
import org.json.simple.JSONArray;
|
import org.json.simple.JSONArray;
|
||||||
import org.json.simple.JSONObject;
|
import org.json.simple.JSONObject;
|
||||||
import org.json.simple.JSONValue;
|
import org.json.simple.JSONValue;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Ignore;
|
import org.junit.Ignore;
|
||||||
import org.junit.Rule;
|
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
import org.junit.runners.JUnit4;
|
import org.junit.runners.JUnit4;
|
||||||
|
|
||||||
/** Unit tests for {@link RdapDomainSearchAction}. */
|
/** Unit tests for {@link RdapDomainSearchAction}. */
|
||||||
@RunWith(JUnit4.class)
|
@RunWith(JUnit4.class)
|
||||||
public class RdapDomainSearchActionTest extends RdapSearchActionTestCase {
|
public class RdapDomainSearchActionTest extends RdapSearchActionTestCase<RdapDomainSearchAction> {
|
||||||
|
|
||||||
@Rule public final AppEngineRule appEngine = AppEngineRule.builder().withDatastore().build();
|
public RdapDomainSearchActionTest() {
|
||||||
|
super(RdapDomainSearchAction.class, RdapDomainSearchAction.PATH);
|
||||||
@Rule public final InjectRule inject = new InjectRule();
|
}
|
||||||
|
|
||||||
private final FakeClock clock = new FakeClock(DateTime.parse("2000-01-01T00:00:00Z"));
|
|
||||||
private final AuthenticatedRegistrarAccessor registrarAccessor =
|
|
||||||
mock(AuthenticatedRegistrarAccessor.class);
|
|
||||||
private final RdapDomainSearchAction action = new RdapDomainSearchAction();
|
|
||||||
|
|
||||||
private static final AuthResult AUTH_RESULT =
|
|
||||||
AuthResult.create(
|
|
||||||
AuthLevel.USER,
|
|
||||||
UserAuthInfo.create(new User("rdap.user@user.com", "gmail.com", "12345"), false));
|
|
||||||
|
|
||||||
private static final AuthResult AUTH_RESULT_ADMIN =
|
|
||||||
AuthResult.create(
|
|
||||||
AuthLevel.USER,
|
|
||||||
UserAuthInfo.create(new User("rdap.user@google.com", "gmail.com", "12345"), true));
|
|
||||||
|
|
||||||
|
|
||||||
private FakeResponse response = new FakeResponse();
|
|
||||||
|
|
||||||
private Registrar registrar;
|
private Registrar registrar;
|
||||||
private DomainResource domainCatLol;
|
private DomainResource domainCatLol;
|
||||||
|
@ -131,6 +97,7 @@ public class RdapDomainSearchActionTest extends RdapSearchActionTestCase {
|
||||||
private Object generateActualJson(
|
private Object generateActualJson(
|
||||||
RequestType requestType, String paramValue, String cursor) {
|
RequestType requestType, String paramValue, String cursor) {
|
||||||
action.requestPath = RdapDomainSearchAction.PATH;
|
action.requestPath = RdapDomainSearchAction.PATH;
|
||||||
|
action.requestMethod = POST;
|
||||||
String requestTypeParam = null;
|
String requestTypeParam = null;
|
||||||
switch (requestType) {
|
switch (requestType) {
|
||||||
case NAME:
|
case NAME:
|
||||||
|
@ -180,7 +147,6 @@ public class RdapDomainSearchActionTest extends RdapSearchActionTestCase {
|
||||||
@Before
|
@Before
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
RdapDomainSearchAction.maxNameserversInFirstStage = 40;
|
RdapDomainSearchAction.maxNameserversInFirstStage = 40;
|
||||||
inject.setStaticField(Ofy.class, "clock", clock);
|
|
||||||
|
|
||||||
// cat.lol and cat2.lol
|
// cat.lol and cat2.lol
|
||||||
createTld("lol");
|
createTld("lol");
|
||||||
|
@ -394,34 +360,7 @@ public class RdapDomainSearchActionTest extends RdapSearchActionTestCase {
|
||||||
"created",
|
"created",
|
||||||
clock.nowUtc()));
|
clock.nowUtc()));
|
||||||
|
|
||||||
action.clock = clock;
|
|
||||||
action.requestMethod = Action.Method.GET;
|
|
||||||
action.fullServletPath = "https://example.com/rdap";
|
|
||||||
action.requestUrl = "https://example.com/rdap/domains";
|
|
||||||
action.parameterMap = ImmutableListMultimap.of();
|
|
||||||
action.requestMethod = POST;
|
action.requestMethod = POST;
|
||||||
action.response = response;
|
|
||||||
action.registrarParam = Optional.empty();
|
|
||||||
action.includeDeletedParam = Optional.empty();
|
|
||||||
action.formatOutputParam = Optional.empty();
|
|
||||||
action.rdapJsonFormatter = RdapTestHelper.getTestRdapJsonFormatter();
|
|
||||||
action.rdapWhoisServer = null;
|
|
||||||
action.registrarAccessor = registrarAccessor;
|
|
||||||
action.authResult = AUTH_RESULT;
|
|
||||||
action.rdapMetrics = rdapMetrics;
|
|
||||||
action.cursorTokenParam = Optional.empty();
|
|
||||||
action.rdapResultSetMaxSize = 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void login(String clientId) {
|
|
||||||
when(registrarAccessor.guessClientId()).thenReturn(clientId);
|
|
||||||
metricRole = REGISTRAR;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void loginAsAdmin() {
|
|
||||||
when(registrarAccessor.guessClientId()).thenReturn("irrelevant");
|
|
||||||
action.authResult = AUTH_RESULT_ADMIN;
|
|
||||||
metricRole = ADMINISTRATOR;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private Object generateExpectedJsonForTwoDomains() {
|
private Object generateExpectedJsonForTwoDomains() {
|
||||||
|
@ -562,7 +501,7 @@ public class RdapDomainSearchActionTest extends RdapSearchActionTestCase {
|
||||||
builder.put("domainSearchResults", ImmutableList.of(obj));
|
builder.put("domainSearchResults", ImmutableList.of(obj));
|
||||||
builder.put("rdapConformance", ImmutableList.of("rdap_level_0"));
|
builder.put("rdapConformance", ImmutableList.of("rdap_level_0"));
|
||||||
RdapTestHelper.addDomainBoilerplateNotices(
|
RdapTestHelper.addDomainBoilerplateNotices(
|
||||||
builder, RdapTestHelper.createNotices("https://example.com/rdap/"));
|
builder, RdapTestHelper.createNotices("https://example.tld/rdap/"));
|
||||||
return new JSONObject(builder.build());
|
return new JSONObject(builder.build());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -25,61 +25,35 @@ import static google.registry.testing.FullFieldsTestEntityHelper.makeHostResourc
|
||||||
import static google.registry.testing.FullFieldsTestEntityHelper.makeRegistrar;
|
import static google.registry.testing.FullFieldsTestEntityHelper.makeRegistrar;
|
||||||
import static google.registry.testing.FullFieldsTestEntityHelper.makeRegistrarContacts;
|
import static google.registry.testing.FullFieldsTestEntityHelper.makeRegistrarContacts;
|
||||||
import static google.registry.testing.TestDataHelper.loadFile;
|
import static google.registry.testing.TestDataHelper.loadFile;
|
||||||
import static org.mockito.Mockito.mock;
|
|
||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
import static org.mockito.Mockito.when;
|
|
||||||
|
|
||||||
import com.google.appengine.api.users.User;
|
|
||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
import com.google.common.collect.ImmutableMap;
|
import com.google.common.collect.ImmutableMap;
|
||||||
import com.google.common.collect.ImmutableSet;
|
import com.google.common.collect.ImmutableSet;
|
||||||
import google.registry.model.contact.ContactResource;
|
import google.registry.model.contact.ContactResource;
|
||||||
import google.registry.model.host.HostResource;
|
import google.registry.model.host.HostResource;
|
||||||
import google.registry.model.ofy.Ofy;
|
|
||||||
import google.registry.model.registrar.Registrar;
|
import google.registry.model.registrar.Registrar;
|
||||||
import google.registry.rdap.RdapMetrics.EndpointType;
|
import google.registry.rdap.RdapMetrics.EndpointType;
|
||||||
import google.registry.rdap.RdapMetrics.SearchType;
|
import google.registry.rdap.RdapMetrics.SearchType;
|
||||||
import google.registry.rdap.RdapMetrics.WildcardType;
|
import google.registry.rdap.RdapMetrics.WildcardType;
|
||||||
import google.registry.rdap.RdapSearchResults.IncompletenessWarningType;
|
import google.registry.rdap.RdapSearchResults.IncompletenessWarningType;
|
||||||
import google.registry.request.Action;
|
import google.registry.request.Action;
|
||||||
import google.registry.request.auth.AuthLevel;
|
|
||||||
import google.registry.request.auth.AuthResult;
|
|
||||||
import google.registry.request.auth.UserAuthInfo;
|
|
||||||
import google.registry.testing.AppEngineRule;
|
|
||||||
import google.registry.testing.FakeClock;
|
|
||||||
import google.registry.testing.FakeResponse;
|
|
||||||
import google.registry.testing.InjectRule;
|
|
||||||
import google.registry.ui.server.registrar.AuthenticatedRegistrarAccessor;
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import org.joda.time.DateTime;
|
|
||||||
import org.json.simple.JSONValue;
|
import org.json.simple.JSONValue;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Rule;
|
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
import org.junit.runners.JUnit4;
|
import org.junit.runners.JUnit4;
|
||||||
|
|
||||||
/** Unit tests for {@link RdapEntityAction}. */
|
/** Unit tests for {@link RdapEntityAction}. */
|
||||||
@RunWith(JUnit4.class)
|
@RunWith(JUnit4.class)
|
||||||
public class RdapEntityActionTest {
|
public class RdapEntityActionTest extends RdapActionBaseTestCase<RdapEntityAction> {
|
||||||
|
|
||||||
@Rule
|
public RdapEntityActionTest() {
|
||||||
public final AppEngineRule appEngine = AppEngineRule.builder()
|
super(RdapEntityAction.class, RdapEntityAction.PATH);
|
||||||
.withDatastore()
|
}
|
||||||
.build();
|
|
||||||
|
|
||||||
@Rule
|
|
||||||
public final InjectRule inject = new InjectRule();
|
|
||||||
|
|
||||||
private final FakeResponse response = new FakeResponse();
|
|
||||||
private final FakeClock clock = new FakeClock(DateTime.parse("2000-01-01TZ"));
|
|
||||||
private final AuthenticatedRegistrarAccessor registrarAccessor =
|
|
||||||
mock(AuthenticatedRegistrarAccessor.class);
|
|
||||||
private final RdapMetrics rdapMetrics = mock(RdapMetrics.class);
|
|
||||||
|
|
||||||
private RdapEntityAction action;
|
|
||||||
|
|
||||||
private Registrar registrarLol;
|
private Registrar registrarLol;
|
||||||
private ContactResource registrant;
|
private ContactResource registrant;
|
||||||
|
@ -88,19 +62,8 @@ public class RdapEntityActionTest {
|
||||||
private ContactResource disconnectedContact;
|
private ContactResource disconnectedContact;
|
||||||
private ContactResource deletedContact;
|
private ContactResource deletedContact;
|
||||||
|
|
||||||
private static final AuthResult AUTH_RESULT =
|
|
||||||
AuthResult.create(
|
|
||||||
AuthLevel.USER,
|
|
||||||
UserAuthInfo.create(new User("rdap.user@user.com", "gmail.com", "12345"), false));
|
|
||||||
|
|
||||||
private static final AuthResult AUTH_RESULT_ADMIN =
|
|
||||||
AuthResult.create(
|
|
||||||
AuthLevel.USER,
|
|
||||||
UserAuthInfo.create(new User("rdap.user@google.com", "gmail.com", "12345"), true));
|
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
inject.setStaticField(Ofy.class, "clock", clock);
|
|
||||||
// lol
|
// lol
|
||||||
createTld("lol");
|
createTld("lol");
|
||||||
registrarLol = persistResource(makeRegistrar(
|
registrarLol = persistResource(makeRegistrar(
|
||||||
|
@ -167,34 +130,6 @@ public class RdapEntityActionTest {
|
||||||
clock.nowUtc().minusYears(1),
|
clock.nowUtc().minusYears(1),
|
||||||
registrarLol,
|
registrarLol,
|
||||||
clock.nowUtc().minusMonths(6));
|
clock.nowUtc().minusMonths(6));
|
||||||
action = new RdapEntityAction();
|
|
||||||
action.clock = clock;
|
|
||||||
action.requestMethod = Action.Method.GET;
|
|
||||||
action.fullServletPath = "https://example.com/rdap";
|
|
||||||
action.response = response;
|
|
||||||
action.registrarParam = Optional.empty();
|
|
||||||
action.includeDeletedParam = Optional.empty();
|
|
||||||
action.formatOutputParam = Optional.empty();
|
|
||||||
action.rdapJsonFormatter = RdapTestHelper.getTestRdapJsonFormatter();
|
|
||||||
action.rdapWhoisServer = null;
|
|
||||||
action.registrarAccessor = registrarAccessor;
|
|
||||||
action.authResult = AUTH_RESULT;
|
|
||||||
action.rdapMetrics = rdapMetrics;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void login(String registrar) {
|
|
||||||
when(registrarAccessor.guessClientId()).thenReturn(registrar);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void loginAsAdmin() {
|
|
||||||
action.authResult = AUTH_RESULT_ADMIN;
|
|
||||||
when(registrarAccessor.guessClientId()).thenReturn("irrelevant");
|
|
||||||
}
|
|
||||||
|
|
||||||
private Object generateActualJson(String name) {
|
|
||||||
action.requestPath = RdapEntityAction.PATH + name;
|
|
||||||
action.run();
|
|
||||||
return JSONValue.parse(response.getPayload());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private Object generateExpectedJson(String handle, String expectedOutputFile) {
|
private Object generateExpectedJson(String handle, String expectedOutputFile) {
|
||||||
|
@ -262,7 +197,7 @@ public class RdapEntityActionTest {
|
||||||
RdapTestHelper.addNonDomainBoilerplateNotices(
|
RdapTestHelper.addNonDomainBoilerplateNotices(
|
||||||
builder,
|
builder,
|
||||||
RdapTestHelper.createNotices(
|
RdapTestHelper.createNotices(
|
||||||
"https://example.com/rdap/",
|
"https://example.tld/rdap/",
|
||||||
addNoPersonalDataRemark
|
addNoPersonalDataRemark
|
||||||
? RdapTestHelper.ContactNoticeType.CONTACT
|
? RdapTestHelper.ContactNoticeType.CONTACT
|
||||||
: RdapTestHelper.ContactNoticeType.NONE,
|
: RdapTestHelper.ContactNoticeType.NONE,
|
||||||
|
|
|
@ -16,8 +16,6 @@ package google.registry.rdap;
|
||||||
|
|
||||||
import static com.google.common.base.Preconditions.checkNotNull;
|
import static com.google.common.base.Preconditions.checkNotNull;
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
import static google.registry.rdap.RdapAuthorization.Role.ADMINISTRATOR;
|
|
||||||
import static google.registry.rdap.RdapAuthorization.Role.REGISTRAR;
|
|
||||||
import static google.registry.request.Action.Method.GET;
|
import static google.registry.request.Action.Method.GET;
|
||||||
import static google.registry.testing.DatastoreHelper.createTld;
|
import static google.registry.testing.DatastoreHelper.createTld;
|
||||||
import static google.registry.testing.DatastoreHelper.persistResource;
|
import static google.registry.testing.DatastoreHelper.persistResource;
|
||||||
|
@ -30,64 +28,44 @@ import static google.registry.testing.FullFieldsTestEntityHelper.makeHistoryEntr
|
||||||
import static google.registry.testing.FullFieldsTestEntityHelper.makeRegistrar;
|
import static google.registry.testing.FullFieldsTestEntityHelper.makeRegistrar;
|
||||||
import static google.registry.testing.FullFieldsTestEntityHelper.makeRegistrarContacts;
|
import static google.registry.testing.FullFieldsTestEntityHelper.makeRegistrarContacts;
|
||||||
import static google.registry.testing.TestDataHelper.loadFile;
|
import static google.registry.testing.TestDataHelper.loadFile;
|
||||||
import static org.mockito.Mockito.mock;
|
|
||||||
import static org.mockito.Mockito.when;
|
|
||||||
|
|
||||||
import com.google.appengine.api.users.User;
|
|
||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
import com.google.common.collect.ImmutableListMultimap;
|
import com.google.common.collect.ImmutableListMultimap;
|
||||||
import com.google.common.collect.ImmutableMap;
|
import com.google.common.collect.ImmutableMap;
|
||||||
import google.registry.model.ImmutableObject;
|
import google.registry.model.ImmutableObject;
|
||||||
import google.registry.model.contact.ContactResource;
|
import google.registry.model.contact.ContactResource;
|
||||||
import google.registry.model.ofy.Ofy;
|
|
||||||
import google.registry.model.registrar.Registrar;
|
import google.registry.model.registrar.Registrar;
|
||||||
import google.registry.model.reporting.HistoryEntry;
|
import google.registry.model.reporting.HistoryEntry;
|
||||||
import google.registry.rdap.RdapMetrics.EndpointType;
|
import google.registry.rdap.RdapMetrics.EndpointType;
|
||||||
import google.registry.rdap.RdapMetrics.SearchType;
|
import google.registry.rdap.RdapMetrics.SearchType;
|
||||||
import google.registry.rdap.RdapSearchResults.IncompletenessWarningType;
|
import google.registry.rdap.RdapSearchResults.IncompletenessWarningType;
|
||||||
import google.registry.request.Action;
|
|
||||||
import google.registry.request.auth.AuthLevel;
|
|
||||||
import google.registry.request.auth.AuthResult;
|
|
||||||
import google.registry.request.auth.UserAuthInfo;
|
|
||||||
import google.registry.testing.AppEngineRule;
|
|
||||||
import google.registry.testing.FakeClock;
|
|
||||||
import google.registry.testing.FakeResponse;
|
import google.registry.testing.FakeResponse;
|
||||||
import google.registry.testing.InjectRule;
|
|
||||||
import google.registry.ui.server.registrar.AuthenticatedRegistrarAccessor;
|
|
||||||
import java.net.URLDecoder;
|
import java.net.URLDecoder;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import org.joda.time.DateTime;
|
|
||||||
import org.json.simple.JSONArray;
|
import org.json.simple.JSONArray;
|
||||||
import org.json.simple.JSONObject;
|
import org.json.simple.JSONObject;
|
||||||
import org.json.simple.JSONValue;
|
import org.json.simple.JSONValue;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Rule;
|
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
import org.junit.runners.JUnit4;
|
import org.junit.runners.JUnit4;
|
||||||
|
|
||||||
/** Unit tests for {@link RdapEntitySearchAction}. */
|
/** Unit tests for {@link RdapEntitySearchAction}. */
|
||||||
@RunWith(JUnit4.class)
|
@RunWith(JUnit4.class)
|
||||||
public class RdapEntitySearchActionTest extends RdapSearchActionTestCase {
|
public class RdapEntitySearchActionTest extends RdapSearchActionTestCase<RdapEntitySearchAction> {
|
||||||
|
|
||||||
@Rule public final AppEngineRule appEngine = AppEngineRule.builder().withDatastore().build();
|
public RdapEntitySearchActionTest() {
|
||||||
@Rule public final InjectRule inject = new InjectRule();
|
super(RdapEntitySearchAction.class, RdapEntitySearchAction.PATH);
|
||||||
|
}
|
||||||
|
|
||||||
private enum QueryType {
|
private enum QueryType {
|
||||||
FULL_NAME,
|
FULL_NAME,
|
||||||
HANDLE
|
HANDLE
|
||||||
}
|
}
|
||||||
|
|
||||||
private final FakeClock clock = new FakeClock(DateTime.parse("2000-01-01T00:00:00Z"));
|
|
||||||
private final AuthenticatedRegistrarAccessor registrarAccessor =
|
|
||||||
mock(AuthenticatedRegistrarAccessor.class);
|
|
||||||
private final RdapEntitySearchAction action = new RdapEntitySearchAction();
|
|
||||||
|
|
||||||
private FakeResponse response = new FakeResponse();
|
|
||||||
|
|
||||||
private Registrar registrarDeleted;
|
private Registrar registrarDeleted;
|
||||||
private Registrar registrarInactive;
|
private Registrar registrarInactive;
|
||||||
private Registrar registrarTest;
|
private Registrar registrarTest;
|
||||||
|
@ -128,20 +106,8 @@ public class RdapEntitySearchActionTest extends RdapSearchActionTestCase {
|
||||||
return JSONValue.parse(response.getPayload());
|
return JSONValue.parse(response.getPayload());
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final AuthResult AUTH_RESULT =
|
|
||||||
AuthResult.create(
|
|
||||||
AuthLevel.USER,
|
|
||||||
UserAuthInfo.create(new User("rdap.user@user.com", "gmail.com", "12345"), false));
|
|
||||||
|
|
||||||
private static final AuthResult AUTH_RESULT_ADMIN =
|
|
||||||
AuthResult.create(
|
|
||||||
AuthLevel.USER,
|
|
||||||
UserAuthInfo.create(new User("rdap.user@google.com", "gmail.com", "12345"), true));
|
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
inject.setStaticField(Ofy.class, "clock", clock);
|
|
||||||
|
|
||||||
createTld("tld");
|
createTld("tld");
|
||||||
|
|
||||||
// deleted
|
// deleted
|
||||||
|
@ -187,37 +153,9 @@ public class RdapEntitySearchActionTest extends RdapSearchActionTestCase {
|
||||||
registrarDeleted,
|
registrarDeleted,
|
||||||
clock.nowUtc().minusMonths(6));
|
clock.nowUtc().minusMonths(6));
|
||||||
|
|
||||||
action.clock = clock;
|
|
||||||
action.requestMethod = Action.Method.GET;
|
|
||||||
action.fullServletPath = "https://example.com/rdap";
|
|
||||||
action.requestUrl = "https://example.com/rdap/entities";
|
|
||||||
action.requestPath = RdapEntitySearchAction.PATH;
|
|
||||||
action.parameterMap = ImmutableListMultimap.of();
|
|
||||||
action.response = response;
|
|
||||||
action.rdapJsonFormatter = RdapTestHelper.getTestRdapJsonFormatter();
|
|
||||||
action.rdapResultSetMaxSize = 4;
|
|
||||||
action.rdapWhoisServer = null;
|
|
||||||
action.fnParam = Optional.empty();
|
action.fnParam = Optional.empty();
|
||||||
action.handleParam = Optional.empty();
|
action.handleParam = Optional.empty();
|
||||||
action.subtypeParam = Optional.empty();
|
action.subtypeParam = Optional.empty();
|
||||||
action.registrarParam = Optional.empty();
|
|
||||||
action.includeDeletedParam = Optional.empty();
|
|
||||||
action.formatOutputParam = Optional.empty();
|
|
||||||
action.registrarAccessor = registrarAccessor;
|
|
||||||
action.authResult = AUTH_RESULT;
|
|
||||||
action.rdapMetrics = rdapMetrics;
|
|
||||||
action.cursorTokenParam = Optional.empty();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void login(String registrar) {
|
|
||||||
when(registrarAccessor.guessClientId()).thenReturn(registrar);
|
|
||||||
metricRole = REGISTRAR;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void loginAsAdmin() {
|
|
||||||
action.authResult = AUTH_RESULT_ADMIN;
|
|
||||||
when(registrarAccessor.guessClientId()).thenReturn("irrelevant");
|
|
||||||
metricRole = ADMINISTRATOR;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private Object generateExpectedJson(String expectedOutputFile) {
|
private Object generateExpectedJson(String expectedOutputFile) {
|
||||||
|
@ -269,7 +207,7 @@ public class RdapEntitySearchActionTest extends RdapSearchActionTestCase {
|
||||||
builder.put("entitySearchResults", ImmutableList.of(obj));
|
builder.put("entitySearchResults", ImmutableList.of(obj));
|
||||||
builder.put("rdapConformance", ImmutableList.of("rdap_level_0"));
|
builder.put("rdapConformance", ImmutableList.of("rdap_level_0"));
|
||||||
RdapTestHelper.addNonDomainBoilerplateNotices(
|
RdapTestHelper.addNonDomainBoilerplateNotices(
|
||||||
builder, RdapTestHelper.createNotices("https://example.com/rdap/"));
|
builder, RdapTestHelper.createNotices("https://example.tld/rdap/"));
|
||||||
return new JSONObject(builder.build());
|
return new JSONObject(builder.build());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -16,73 +16,22 @@ package google.registry.rdap;
|
||||||
|
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
import static google.registry.testing.TestDataHelper.loadFile;
|
import static google.registry.testing.TestDataHelper.loadFile;
|
||||||
import static org.mockito.Mockito.mock;
|
|
||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
|
|
||||||
import com.google.appengine.api.users.User;
|
|
||||||
import com.google.common.collect.ImmutableMap;
|
import com.google.common.collect.ImmutableMap;
|
||||||
import google.registry.model.ofy.Ofy;
|
|
||||||
import google.registry.rdap.RdapMetrics.EndpointType;
|
import google.registry.rdap.RdapMetrics.EndpointType;
|
||||||
import google.registry.rdap.RdapMetrics.SearchType;
|
import google.registry.rdap.RdapMetrics.SearchType;
|
||||||
import google.registry.rdap.RdapMetrics.WildcardType;
|
import google.registry.rdap.RdapMetrics.WildcardType;
|
||||||
import google.registry.rdap.RdapSearchResults.IncompletenessWarningType;
|
import google.registry.rdap.RdapSearchResults.IncompletenessWarningType;
|
||||||
import google.registry.request.Action;
|
import google.registry.request.Action;
|
||||||
import google.registry.request.auth.AuthLevel;
|
|
||||||
import google.registry.request.auth.AuthResult;
|
|
||||||
import google.registry.request.auth.UserAuthInfo;
|
|
||||||
import google.registry.testing.FakeClock;
|
|
||||||
import google.registry.testing.FakeResponse;
|
|
||||||
import google.registry.testing.InjectRule;
|
|
||||||
import google.registry.ui.server.registrar.AuthenticatedRegistrarAccessor;
|
|
||||||
import java.util.Optional;
|
|
||||||
import org.joda.time.DateTime;
|
|
||||||
import org.json.simple.JSONValue;
|
import org.json.simple.JSONValue;
|
||||||
import org.junit.Before;
|
|
||||||
import org.junit.Rule;
|
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
|
||||||
import org.junit.runners.JUnit4;
|
|
||||||
|
|
||||||
/** Unit tests for {@link RdapHelpAction}. */
|
/** Unit tests for {@link RdapHelpAction}. */
|
||||||
@RunWith(JUnit4.class)
|
public class RdapHelpActionTest extends RdapActionBaseTestCase<RdapHelpAction> {
|
||||||
public class RdapHelpActionTest {
|
|
||||||
|
|
||||||
@Rule
|
public RdapHelpActionTest() {
|
||||||
public final InjectRule inject = new InjectRule();
|
super(RdapHelpAction.class, RdapHelpAction.PATH);
|
||||||
|
|
||||||
private final FakeResponse response = new FakeResponse();
|
|
||||||
private final FakeClock clock = new FakeClock(DateTime.parse("2000-01-01TZ"));
|
|
||||||
private final AuthenticatedRegistrarAccessor registrarAccessor =
|
|
||||||
mock(AuthenticatedRegistrarAccessor.class);
|
|
||||||
private final User user = new User("rdap.user@example.com", "gmail.com", "12345");
|
|
||||||
private final UserAuthInfo userAuthInfo = UserAuthInfo.create(user, false);
|
|
||||||
private final RdapMetrics rdapMetrics = mock(RdapMetrics.class);
|
|
||||||
|
|
||||||
private RdapHelpAction action;
|
|
||||||
|
|
||||||
@Before
|
|
||||||
public void setUp() {
|
|
||||||
inject.setStaticField(Ofy.class, "clock", clock);
|
|
||||||
|
|
||||||
action = new RdapHelpAction();
|
|
||||||
action.clock = clock;
|
|
||||||
action.fullServletPath = "https://example.tld/rdap";
|
|
||||||
action.requestMethod = Action.Method.GET;
|
|
||||||
action.registrarAccessor = registrarAccessor;
|
|
||||||
action.authResult = AuthResult.create(AuthLevel.USER, userAuthInfo);
|
|
||||||
action.includeDeletedParam = Optional.empty();
|
|
||||||
action.registrarParam = Optional.empty();
|
|
||||||
action.formatOutputParam = Optional.empty();
|
|
||||||
action.response = response;
|
|
||||||
action.rdapJsonFormatter = RdapTestHelper.getTestRdapJsonFormatter();
|
|
||||||
action.rdapWhoisServer = null;
|
|
||||||
action.rdapMetrics = rdapMetrics;
|
|
||||||
}
|
|
||||||
|
|
||||||
private Object generateActualJson(String helpPath) {
|
|
||||||
action.requestPath = RdapHelpAction.PATH + helpPath;
|
|
||||||
action.run();
|
|
||||||
return JSONValue.parse(response.getPayload());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private Object generateExpectedJson(String name, String expectedOutputFile) {
|
private Object generateExpectedJson(String name, String expectedOutputFile) {
|
||||||
|
|
|
@ -20,72 +20,36 @@ import static google.registry.testing.DatastoreHelper.persistResource;
|
||||||
import static google.registry.testing.FullFieldsTestEntityHelper.makeAndPersistHostResource;
|
import static google.registry.testing.FullFieldsTestEntityHelper.makeAndPersistHostResource;
|
||||||
import static google.registry.testing.FullFieldsTestEntityHelper.makeRegistrar;
|
import static google.registry.testing.FullFieldsTestEntityHelper.makeRegistrar;
|
||||||
import static google.registry.testing.TestDataHelper.loadFile;
|
import static google.registry.testing.TestDataHelper.loadFile;
|
||||||
import static org.mockito.Mockito.mock;
|
|
||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
import static org.mockito.Mockito.when;
|
|
||||||
|
|
||||||
import com.google.appengine.api.users.User;
|
|
||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
import com.google.common.collect.ImmutableMap;
|
import com.google.common.collect.ImmutableMap;
|
||||||
import com.google.common.collect.ImmutableSet;
|
import com.google.common.collect.ImmutableSet;
|
||||||
import google.registry.model.ofy.Ofy;
|
|
||||||
import google.registry.model.registrar.Registrar;
|
import google.registry.model.registrar.Registrar;
|
||||||
import google.registry.rdap.RdapMetrics.EndpointType;
|
import google.registry.rdap.RdapMetrics.EndpointType;
|
||||||
import google.registry.rdap.RdapMetrics.SearchType;
|
import google.registry.rdap.RdapMetrics.SearchType;
|
||||||
import google.registry.rdap.RdapMetrics.WildcardType;
|
import google.registry.rdap.RdapMetrics.WildcardType;
|
||||||
import google.registry.rdap.RdapSearchResults.IncompletenessWarningType;
|
import google.registry.rdap.RdapSearchResults.IncompletenessWarningType;
|
||||||
import google.registry.request.Action;
|
import google.registry.request.Action;
|
||||||
import google.registry.request.HttpException.ForbiddenException;
|
|
||||||
import google.registry.request.auth.AuthLevel;
|
|
||||||
import google.registry.request.auth.AuthResult;
|
|
||||||
import google.registry.request.auth.UserAuthInfo;
|
|
||||||
import google.registry.testing.AppEngineRule;
|
|
||||||
import google.registry.testing.FakeClock;
|
|
||||||
import google.registry.testing.FakeResponse;
|
|
||||||
import google.registry.testing.InjectRule;
|
|
||||||
import google.registry.ui.server.registrar.AuthenticatedRegistrarAccessor;
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import org.joda.time.DateTime;
|
|
||||||
import org.json.simple.JSONValue;
|
import org.json.simple.JSONValue;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Rule;
|
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
import org.junit.runners.JUnit4;
|
import org.junit.runners.JUnit4;
|
||||||
|
|
||||||
/** Unit tests for {@link RdapNameserverAction}. */
|
/** Unit tests for {@link RdapNameserverAction}. */
|
||||||
@RunWith(JUnit4.class)
|
@RunWith(JUnit4.class)
|
||||||
public class RdapNameserverActionTest {
|
public class RdapNameserverActionTest extends RdapActionBaseTestCase<RdapNameserverAction> {
|
||||||
|
|
||||||
@Rule
|
public RdapNameserverActionTest() {
|
||||||
public final AppEngineRule appEngine = AppEngineRule.builder()
|
super(RdapNameserverAction.class, RdapNameserverAction.PATH);
|
||||||
.withDatastore()
|
}
|
||||||
.build();
|
|
||||||
|
|
||||||
@Rule
|
|
||||||
public final InjectRule inject = new InjectRule();
|
|
||||||
|
|
||||||
private final FakeResponse response = new FakeResponse();
|
|
||||||
private final FakeClock clock = new FakeClock(DateTime.parse("2000-01-01TZ"));
|
|
||||||
private final AuthenticatedRegistrarAccessor registrarAccessor =
|
|
||||||
mock(AuthenticatedRegistrarAccessor.class);
|
|
||||||
private final RdapMetrics rdapMetrics = mock(RdapMetrics.class);
|
|
||||||
|
|
||||||
private static final AuthResult AUTH_RESULT =
|
|
||||||
AuthResult.create(
|
|
||||||
AuthLevel.USER,
|
|
||||||
UserAuthInfo.create(new User("rdap.user@user.com", "gmail.com", "12345"), false));
|
|
||||||
|
|
||||||
private static final AuthResult AUTH_RESULT_ADMIN =
|
|
||||||
AuthResult.create(
|
|
||||||
AuthLevel.USER,
|
|
||||||
UserAuthInfo.create(new User("rdap.user@google.com", "gmail.com", "12345"), true));
|
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
inject.setStaticField(Ofy.class, "clock", clock);
|
|
||||||
// normal
|
// normal
|
||||||
createTld("lol");
|
createTld("lol");
|
||||||
makeAndPersistHostResource(
|
makeAndPersistHostResource(
|
||||||
|
@ -111,43 +75,6 @@ public class RdapNameserverActionTest {
|
||||||
makeAndPersistHostResource("ns1.domain.external", "9.10.11.12", clock.nowUtc().minusYears(1));
|
makeAndPersistHostResource("ns1.domain.external", "9.10.11.12", clock.nowUtc().minusYears(1));
|
||||||
}
|
}
|
||||||
|
|
||||||
private RdapNameserverAction newRdapNameserverAction(
|
|
||||||
String input, Optional<String> desiredRegistrar, Optional<Boolean> includeDeleted) {
|
|
||||||
return newRdapNameserverAction(input, desiredRegistrar, includeDeleted, AUTH_RESULT);
|
|
||||||
}
|
|
||||||
|
|
||||||
private RdapNameserverAction newRdapNameserverAction(
|
|
||||||
String input,
|
|
||||||
Optional<String> desiredRegistrar,
|
|
||||||
Optional<Boolean> includeDeleted,
|
|
||||||
AuthResult authResult) {
|
|
||||||
RdapNameserverAction action = new RdapNameserverAction();
|
|
||||||
action.clock = clock;
|
|
||||||
action.requestMethod = Action.Method.GET;
|
|
||||||
action.fullServletPath = "https://example.tld/rdap";
|
|
||||||
action.response = response;
|
|
||||||
action.requestPath = RdapNameserverAction.PATH.concat(input);
|
|
||||||
action.registrarParam = desiredRegistrar;
|
|
||||||
action.includeDeletedParam = includeDeleted;
|
|
||||||
action.formatOutputParam = Optional.empty();
|
|
||||||
action.rdapJsonFormatter = RdapTestHelper.getTestRdapJsonFormatter();
|
|
||||||
action.rdapWhoisServer = null;
|
|
||||||
action.authResult = authResult;
|
|
||||||
action.registrarAccessor = registrarAccessor;
|
|
||||||
action.rdapMetrics = rdapMetrics;
|
|
||||||
return action;
|
|
||||||
}
|
|
||||||
|
|
||||||
private Object generateActualJson(String name) {
|
|
||||||
return generateActualJson(name, Optional.empty(), Optional.empty());
|
|
||||||
}
|
|
||||||
|
|
||||||
private Object generateActualJson(
|
|
||||||
String name, Optional<String> desiredRegistrar, Optional<Boolean> includeDeleted) {
|
|
||||||
newRdapNameserverAction(name, desiredRegistrar, includeDeleted).run();
|
|
||||||
return JSONValue.parse(response.getPayload());
|
|
||||||
}
|
|
||||||
|
|
||||||
private Object generateExpectedJson(
|
private Object generateExpectedJson(
|
||||||
String name,
|
String name,
|
||||||
@Nullable ImmutableMap<String, String> otherSubstitutions,
|
@Nullable ImmutableMap<String, String> otherSubstitutions,
|
||||||
|
@ -328,9 +255,8 @@ public class RdapNameserverActionTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testNameserver_found_sameRegistrarRequested() {
|
public void testNameserver_found_sameRegistrarRequested() {
|
||||||
assertThat(
|
action.registrarParam = Optional.of("TheRegistrar");
|
||||||
generateActualJson(
|
assertThat(generateActualJson("ns1.cat.lol"))
|
||||||
"ns1.cat.lol", Optional.of("TheRegistrar"), Optional.empty()))
|
|
||||||
.isEqualTo(
|
.isEqualTo(
|
||||||
generateExpectedJsonWithTopLevelEntries(
|
generateExpectedJsonWithTopLevelEntries(
|
||||||
"ns1.cat.lol",
|
"ns1.cat.lol",
|
||||||
|
@ -345,7 +271,9 @@ public class RdapNameserverActionTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testNameserver_notFound_differentRegistrarRequested() {
|
public void testNameserver_notFound_differentRegistrarRequested() {
|
||||||
generateActualJson("ns1.cat.lol", Optional.of("otherregistrar"), Optional.of(false));
|
action.registrarParam = Optional.of("otherregistrar");
|
||||||
|
action.includeDeletedParam = Optional.of(false);
|
||||||
|
generateActualJson("ns1.cat.lol");
|
||||||
assertThat(response.getStatus()).isEqualTo(404);
|
assertThat(response.getStatus()).isEqualTo(404);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -357,29 +285,32 @@ public class RdapNameserverActionTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testDeletedNameserver_notFound_includeDeletedSetFalse() {
|
public void testDeletedNameserver_notFound_includeDeletedSetFalse() {
|
||||||
generateActualJson("nsdeleted.cat.lol", Optional.empty(), Optional.of(false));
|
action.includeDeletedParam = Optional.of(false);
|
||||||
|
generateActualJson("nsdeleted.cat.lol");
|
||||||
assertThat(response.getStatus()).isEqualTo(404);
|
assertThat(response.getStatus()).isEqualTo(404);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testDeletedNameserver_notFound_notLoggedIn() {
|
public void testDeletedNameserver_notFound_notLoggedIn() {
|
||||||
when(registrarAccessor.guessClientId()).thenThrow(new ForbiddenException("blah"));
|
logout();
|
||||||
generateActualJson("nsdeleted.cat.lol", Optional.empty(), Optional.of(true));
|
action.includeDeletedParam = Optional.of(true);
|
||||||
|
generateActualJson("nsdeleted.cat.lol");
|
||||||
assertThat(response.getStatus()).isEqualTo(404);
|
assertThat(response.getStatus()).isEqualTo(404);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testDeletedNameserver_notFound_loggedInAsDifferentRegistrar() {
|
public void testDeletedNameserver_notFound_loggedInAsDifferentRegistrar() {
|
||||||
when(registrarAccessor.guessClientId()).thenReturn("otherregistrar");
|
login("otherregistrar");
|
||||||
generateActualJson("nsdeleted.cat.lol", Optional.empty(), Optional.of(true));
|
action.includeDeletedParam = Optional.of(true);
|
||||||
|
generateActualJson("nsdeleted.cat.lol");
|
||||||
assertThat(response.getStatus()).isEqualTo(404);
|
assertThat(response.getStatus()).isEqualTo(404);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testDeletedNameserver_found_loggedInAsCorrectRegistrar() {
|
public void testDeletedNameserver_found_loggedInAsCorrectRegistrar() {
|
||||||
when(registrarAccessor.guessClientId()).thenReturn("TheRegistrar");
|
login("TheRegistrar");
|
||||||
assertThat(
|
action.includeDeletedParam = Optional.of(true);
|
||||||
generateActualJson("nsdeleted.cat.lol", Optional.empty(), Optional.of(true)))
|
assertThat(generateActualJson("nsdeleted.cat.lol"))
|
||||||
.isEqualTo(
|
.isEqualTo(
|
||||||
generateExpectedJsonWithTopLevelEntries(
|
generateExpectedJsonWithTopLevelEntries(
|
||||||
"nsdeleted.cat.lol",
|
"nsdeleted.cat.lol",
|
||||||
|
@ -394,14 +325,9 @@ public class RdapNameserverActionTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testDeletedNameserver_found_loggedInAsAdmin() {
|
public void testDeletedNameserver_found_loggedInAsAdmin() {
|
||||||
when(registrarAccessor.guessClientId()).thenReturn("irrelevant");
|
loginAsAdmin();
|
||||||
newRdapNameserverAction(
|
action.includeDeletedParam = Optional.of(true);
|
||||||
"nsdeleted.cat.lol",
|
assertThat(generateActualJson("nsdeleted.cat.lol"))
|
||||||
Optional.empty(),
|
|
||||||
Optional.of(true),
|
|
||||||
AUTH_RESULT_ADMIN)
|
|
||||||
.run();
|
|
||||||
assertThat(JSONValue.parse(response.getPayload()))
|
|
||||||
.isEqualTo(
|
.isEqualTo(
|
||||||
generateExpectedJsonWithTopLevelEntries(
|
generateExpectedJsonWithTopLevelEntries(
|
||||||
"nsdeleted.cat.lol",
|
"nsdeleted.cat.lol",
|
||||||
|
@ -416,9 +342,10 @@ public class RdapNameserverActionTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testDeletedNameserver_found_sameRegistrarRequested() {
|
public void testDeletedNameserver_found_sameRegistrarRequested() {
|
||||||
when(registrarAccessor.guessClientId()).thenReturn("TheRegistrar");
|
login("TheRegistrar");
|
||||||
assertThat(
|
action.registrarParam = Optional.of("TheRegistrar");
|
||||||
generateActualJson("nsdeleted.cat.lol", Optional.of("TheRegistrar"), Optional.of(true)))
|
action.includeDeletedParam = Optional.of(true);
|
||||||
|
assertThat(generateActualJson("nsdeleted.cat.lol"))
|
||||||
.isEqualTo(
|
.isEqualTo(
|
||||||
generateExpectedJsonWithTopLevelEntries(
|
generateExpectedJsonWithTopLevelEntries(
|
||||||
"nsdeleted.cat.lol",
|
"nsdeleted.cat.lol",
|
||||||
|
@ -433,8 +360,10 @@ public class RdapNameserverActionTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testDeletedNameserver_notFound_differentRegistrarRequested() {
|
public void testDeletedNameserver_notFound_differentRegistrarRequested() {
|
||||||
when(registrarAccessor.guessClientId()).thenReturn("TheRegistrar");
|
login("TheRegistrar");
|
||||||
generateActualJson("ns1.cat.lol", Optional.of("otherregistrar"), Optional.of(false));
|
action.registrarParam = Optional.of("otherregistrar");
|
||||||
|
action.includeDeletedParam = Optional.of(false);
|
||||||
|
generateActualJson("ns1.cat.lol");
|
||||||
assertThat(response.getStatus()).isEqualTo(404);
|
assertThat(response.getStatus()).isEqualTo(404);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -15,8 +15,6 @@
|
||||||
package google.registry.rdap;
|
package google.registry.rdap;
|
||||||
|
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
import static google.registry.rdap.RdapAuthorization.Role.ADMINISTRATOR;
|
|
||||||
import static google.registry.rdap.RdapAuthorization.Role.REGISTRAR;
|
|
||||||
import static google.registry.request.Action.Method.GET;
|
import static google.registry.request.Action.Method.GET;
|
||||||
import static google.registry.testing.DatastoreHelper.createTld;
|
import static google.registry.testing.DatastoreHelper.createTld;
|
||||||
import static google.registry.testing.DatastoreHelper.persistResource;
|
import static google.registry.testing.DatastoreHelper.persistResource;
|
||||||
|
@ -29,10 +27,7 @@ import static google.registry.testing.FullFieldsTestEntityHelper.makeHostResourc
|
||||||
import static google.registry.testing.FullFieldsTestEntityHelper.makeRegistrar;
|
import static google.registry.testing.FullFieldsTestEntityHelper.makeRegistrar;
|
||||||
import static google.registry.testing.FullFieldsTestEntityHelper.makeRegistrarContacts;
|
import static google.registry.testing.FullFieldsTestEntityHelper.makeRegistrarContacts;
|
||||||
import static google.registry.testing.TestDataHelper.loadFile;
|
import static google.registry.testing.TestDataHelper.loadFile;
|
||||||
import static org.mockito.Mockito.mock;
|
|
||||||
import static org.mockito.Mockito.when;
|
|
||||||
|
|
||||||
import com.google.appengine.api.users.User;
|
|
||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
import com.google.common.collect.ImmutableListMultimap;
|
import com.google.common.collect.ImmutableListMultimap;
|
||||||
import com.google.common.collect.ImmutableMap;
|
import com.google.common.collect.ImmutableMap;
|
||||||
|
@ -40,58 +35,31 @@ import com.google.common.collect.ImmutableSet;
|
||||||
import com.googlecode.objectify.Key;
|
import com.googlecode.objectify.Key;
|
||||||
import google.registry.model.domain.DomainResource;
|
import google.registry.model.domain.DomainResource;
|
||||||
import google.registry.model.host.HostResource;
|
import google.registry.model.host.HostResource;
|
||||||
import google.registry.model.ofy.Ofy;
|
|
||||||
import google.registry.model.registrar.Registrar;
|
import google.registry.model.registrar.Registrar;
|
||||||
import google.registry.rdap.RdapMetrics.EndpointType;
|
import google.registry.rdap.RdapMetrics.EndpointType;
|
||||||
import google.registry.rdap.RdapMetrics.SearchType;
|
import google.registry.rdap.RdapMetrics.SearchType;
|
||||||
import google.registry.rdap.RdapMetrics.WildcardType;
|
import google.registry.rdap.RdapMetrics.WildcardType;
|
||||||
import google.registry.rdap.RdapSearchResults.IncompletenessWarningType;
|
import google.registry.rdap.RdapSearchResults.IncompletenessWarningType;
|
||||||
import google.registry.request.Action;
|
|
||||||
import google.registry.request.auth.AuthLevel;
|
|
||||||
import google.registry.request.auth.AuthResult;
|
|
||||||
import google.registry.request.auth.UserAuthInfo;
|
|
||||||
import google.registry.testing.AppEngineRule;
|
|
||||||
import google.registry.testing.FakeClock;
|
|
||||||
import google.registry.testing.FakeResponse;
|
import google.registry.testing.FakeResponse;
|
||||||
import google.registry.testing.InjectRule;
|
|
||||||
import google.registry.ui.server.registrar.AuthenticatedRegistrarAccessor;
|
|
||||||
import java.net.URLDecoder;
|
import java.net.URLDecoder;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import org.joda.time.DateTime;
|
|
||||||
import org.json.simple.JSONArray;
|
import org.json.simple.JSONArray;
|
||||||
import org.json.simple.JSONObject;
|
import org.json.simple.JSONObject;
|
||||||
import org.json.simple.JSONValue;
|
import org.json.simple.JSONValue;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Rule;
|
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
import org.junit.runners.JUnit4;
|
import org.junit.runners.JUnit4;
|
||||||
|
|
||||||
/** Unit tests for {@link RdapNameserverSearchAction}. */
|
/** Unit tests for {@link RdapNameserverSearchAction}. */
|
||||||
@RunWith(JUnit4.class)
|
@RunWith(JUnit4.class)
|
||||||
public class RdapNameserverSearchActionTest extends RdapSearchActionTestCase {
|
public class RdapNameserverSearchActionTest
|
||||||
|
extends RdapSearchActionTestCase<RdapNameserverSearchAction> {
|
||||||
@Rule public final AppEngineRule appEngine = AppEngineRule.builder().withDatastore().build();
|
|
||||||
|
|
||||||
@Rule public final InjectRule inject = new InjectRule();
|
|
||||||
|
|
||||||
private FakeResponse response = new FakeResponse();
|
|
||||||
private final FakeClock clock = new FakeClock(DateTime.parse("2000-01-01T00:00:00Z"));
|
|
||||||
private final AuthenticatedRegistrarAccessor registrarAccessor =
|
|
||||||
mock(AuthenticatedRegistrarAccessor.class);
|
|
||||||
private final RdapNameserverSearchAction action = new RdapNameserverSearchAction();
|
|
||||||
|
|
||||||
private static final AuthResult AUTH_RESULT =
|
|
||||||
AuthResult.create(
|
|
||||||
AuthLevel.USER,
|
|
||||||
UserAuthInfo.create(new User("rdap.user@user.com", "gmail.com", "12345"), false));
|
|
||||||
|
|
||||||
private static final AuthResult AUTH_RESULT_ADMIN =
|
|
||||||
AuthResult.create(
|
|
||||||
AuthLevel.USER,
|
|
||||||
UserAuthInfo.create(new User("rdap.user@google.com", "gmail.com", "12345"), true));
|
|
||||||
|
|
||||||
|
public RdapNameserverSearchActionTest() {
|
||||||
|
super(RdapNameserverSearchAction.class, RdapNameserverSearchAction.PATH);
|
||||||
|
}
|
||||||
|
|
||||||
private DomainResource domainCatLol;
|
private DomainResource domainCatLol;
|
||||||
private HostResource hostNs1CatLol;
|
private HostResource hostNs1CatLol;
|
||||||
|
@ -184,36 +152,8 @@ public class RdapNameserverSearchActionTest extends RdapSearchActionTestCase {
|
||||||
persistResource(
|
persistResource(
|
||||||
hostNs2CatLol.asBuilder().setSuperordinateDomain(Key.create(domainCatLol)).build());
|
hostNs2CatLol.asBuilder().setSuperordinateDomain(Key.create(domainCatLol)).build());
|
||||||
|
|
||||||
inject.setStaticField(Ofy.class, "clock", clock);
|
|
||||||
action.clock = clock;
|
|
||||||
action.fullServletPath = "https://example.tld/rdap";
|
|
||||||
action.requestUrl = "https://example.tld/rdap/nameservers";
|
|
||||||
action.requestPath = RdapNameserverSearchAction.PATH;
|
|
||||||
action.parameterMap = ImmutableListMultimap.of();
|
|
||||||
action.requestMethod = Action.Method.GET;
|
|
||||||
action.response = response;
|
|
||||||
action.rdapJsonFormatter = RdapTestHelper.getTestRdapJsonFormatter();
|
|
||||||
action.rdapResultSetMaxSize = 4;
|
|
||||||
action.rdapWhoisServer = null;
|
|
||||||
action.ipParam = Optional.empty();
|
action.ipParam = Optional.empty();
|
||||||
action.nameParam = Optional.empty();
|
action.nameParam = Optional.empty();
|
||||||
action.registrarParam = Optional.empty();
|
|
||||||
action.includeDeletedParam = Optional.empty();
|
|
||||||
action.formatOutputParam = Optional.empty();
|
|
||||||
action.authResult = AUTH_RESULT;
|
|
||||||
action.registrarAccessor = registrarAccessor;
|
|
||||||
action.rdapMetrics = rdapMetrics;
|
|
||||||
action.cursorTokenParam = Optional.empty();
|
|
||||||
}
|
|
||||||
private void login(String clientId) {
|
|
||||||
when(registrarAccessor.guessClientId()).thenReturn(clientId);
|
|
||||||
metricRole = REGISTRAR;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void loginAsAdmin() {
|
|
||||||
when(registrarAccessor.guessClientId()).thenReturn("irrelevant");
|
|
||||||
action.authResult = AUTH_RESULT_ADMIN;
|
|
||||||
metricRole = ADMINISTRATOR;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private Object generateExpectedJson(String expectedOutputFile) {
|
private Object generateExpectedJson(String expectedOutputFile) {
|
||||||
|
|
|
@ -14,26 +14,39 @@
|
||||||
|
|
||||||
package google.registry.rdap;
|
package google.registry.rdap;
|
||||||
|
|
||||||
import static google.registry.rdap.RdapAuthorization.Role.PUBLIC;
|
|
||||||
import static javax.servlet.http.HttpServletResponse.SC_OK;
|
import static javax.servlet.http.HttpServletResponse.SC_OK;
|
||||||
import static org.mockito.Mockito.mock;
|
|
||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableListMultimap;
|
||||||
import google.registry.rdap.RdapMetrics.EndpointType;
|
import google.registry.rdap.RdapMetrics.EndpointType;
|
||||||
import google.registry.rdap.RdapMetrics.SearchType;
|
import google.registry.rdap.RdapMetrics.SearchType;
|
||||||
import google.registry.rdap.RdapMetrics.WildcardType;
|
import google.registry.rdap.RdapMetrics.WildcardType;
|
||||||
import google.registry.rdap.RdapSearchResults.IncompletenessWarningType;
|
import google.registry.rdap.RdapSearchResults.IncompletenessWarningType;
|
||||||
import google.registry.request.Action;
|
import google.registry.request.Action;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
import org.junit.Before;
|
||||||
|
|
||||||
public class RdapSearchActionTestCase {
|
/** Common unit test code for actions inheriting {@link RdapSearchActionBase}. */
|
||||||
|
public class RdapSearchActionTestCase<A extends RdapSearchActionBase>
|
||||||
|
extends RdapActionBaseTestCase<A> {
|
||||||
|
|
||||||
|
protected RdapSearchActionTestCase(Class<A> rdapActionClass, String path) {
|
||||||
|
super(rdapActionClass, path);
|
||||||
|
}
|
||||||
|
|
||||||
RdapAuthorization.Role metricRole = PUBLIC;
|
|
||||||
SearchType metricSearchType = SearchType.NONE;
|
SearchType metricSearchType = SearchType.NONE;
|
||||||
WildcardType metricWildcardType = WildcardType.INVALID;
|
WildcardType metricWildcardType = WildcardType.INVALID;
|
||||||
int metricPrefixLength = 0;
|
int metricPrefixLength = 0;
|
||||||
int metricStatusCode = SC_OK;
|
int metricStatusCode = SC_OK;
|
||||||
final RdapMetrics rdapMetrics = mock(RdapMetrics.class);
|
|
||||||
|
@Before
|
||||||
|
public void initRdapSearchActionTestCase() {
|
||||||
|
action.parameterMap = ImmutableListMultimap.of();
|
||||||
|
action.cursorTokenParam = Optional.empty();
|
||||||
|
action.rdapResultSetMaxSize = 4;
|
||||||
|
action.requestUrl = "https://example.tld" + actionPath;
|
||||||
|
action.requestPath = actionPath;
|
||||||
|
}
|
||||||
|
|
||||||
void rememberWildcardType(String queryString) {
|
void rememberWildcardType(String queryString) {
|
||||||
try {
|
try {
|
||||||
|
|
|
@ -5,9 +5,9 @@
|
||||||
"links" :
|
"links" :
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"value" : "https://example.com/rdap/entity/%NAME%",
|
"value" : "https://example.tld/rdap/entity/%NAME%",
|
||||||
"rel" : "self",
|
"rel" : "self",
|
||||||
"href": "https://example.com/rdap/entity/%NAME%",
|
"href": "https://example.tld/rdap/entity/%NAME%",
|
||||||
"type" : "application/rdap+json"
|
"type" : "application/rdap+json"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
|
@ -5,9 +5,9 @@
|
||||||
"links" :
|
"links" :
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"value" : "https://example.com/rdap/entity/%NAME%",
|
"value" : "https://example.tld/rdap/entity/%NAME%",
|
||||||
"rel" : "self",
|
"rel" : "self",
|
||||||
"href": "https://example.com/rdap/entity/%NAME%",
|
"href": "https://example.tld/rdap/entity/%NAME%",
|
||||||
"type" : "application/rdap+json"
|
"type" : "application/rdap+json"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
|
@ -5,9 +5,9 @@
|
||||||
"links" :
|
"links" :
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"value" : "https://example.com/rdap/entity/%NAME%",
|
"value" : "https://example.tld/rdap/entity/%NAME%",
|
||||||
"rel" : "self",
|
"rel" : "self",
|
||||||
"href": "https://example.com/rdap/entity/%NAME%",
|
"href": "https://example.tld/rdap/entity/%NAME%",
|
||||||
"type" : "application/rdap+json"
|
"type" : "application/rdap+json"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
|
@ -5,9 +5,9 @@
|
||||||
"links" :
|
"links" :
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"value" : "https://example.com/rdap/entity/%NAME%",
|
"value" : "https://example.tld/rdap/entity/%NAME%",
|
||||||
"rel" : "self",
|
"rel" : "self",
|
||||||
"href": "https://example.com/rdap/entity/%NAME%",
|
"href": "https://example.tld/rdap/entity/%NAME%",
|
||||||
"type" : "application/rdap+json"
|
"type" : "application/rdap+json"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
|
@ -5,9 +5,9 @@
|
||||||
"links" :
|
"links" :
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"value" : "https://example.com/rdap/entity/%NAME%",
|
"value" : "https://example.tld/rdap/entity/%NAME%",
|
||||||
"rel" : "self",
|
"rel" : "self",
|
||||||
"href": "https://example.com/rdap/entity/%NAME%",
|
"href": "https://example.tld/rdap/entity/%NAME%",
|
||||||
"type" : "application/rdap+json"
|
"type" : "application/rdap+json"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
|
@ -8,10 +8,10 @@
|
||||||
"handle": "%HANDLE%",
|
"handle": "%HANDLE%",
|
||||||
"links": [
|
"links": [
|
||||||
{
|
{
|
||||||
"href": "https://example.com/rdap/domain/%NAME%",
|
"href": "https://example.tld/rdap/domain/%NAME%",
|
||||||
"type": "application/rdap+json",
|
"type": "application/rdap+json",
|
||||||
"rel": "self",
|
"rel": "self",
|
||||||
"value": "https://example.com/rdap/domain/%NAME%"
|
"value": "https://example.tld/rdap/domain/%NAME%"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"events": [
|
"events": [
|
||||||
|
@ -42,10 +42,10 @@
|
||||||
"handle": "%NAMESERVER1ROID%",
|
"handle": "%NAMESERVER1ROID%",
|
||||||
"links": [
|
"links": [
|
||||||
{
|
{
|
||||||
"href": "https://example.com/rdap/nameserver/%NAMESERVER1NAME%",
|
"href": "https://example.tld/rdap/nameserver/%NAMESERVER1NAME%",
|
||||||
"type": "application/rdap+json",
|
"type": "application/rdap+json",
|
||||||
"rel": "self",
|
"rel": "self",
|
||||||
"value": "https://example.com/rdap/nameserver/%NAMESERVER1NAME%"
|
"value": "https://example.tld/rdap/nameserver/%NAMESERVER1NAME%"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"ldhName": "%NAMESERVER1NAME%",
|
"ldhName": "%NAMESERVER1NAME%",
|
||||||
|
@ -74,10 +74,10 @@
|
||||||
"roles": [ "registrar" ],
|
"roles": [ "registrar" ],
|
||||||
"links": [
|
"links": [
|
||||||
{
|
{
|
||||||
"href": "https://example.com/rdap/entity/1",
|
"href": "https://example.tld/rdap/entity/1",
|
||||||
"type": "application/rdap+json",
|
"type": "application/rdap+json",
|
||||||
"rel": "self",
|
"rel": "self",
|
||||||
"value": "https://example.com/rdap/entity/1"
|
"value": "https://example.tld/rdap/entity/1"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"vcardArray" : [
|
"vcardArray" : [
|
||||||
|
@ -129,10 +129,10 @@
|
||||||
"handle": "%NAMESERVER2ROID%",
|
"handle": "%NAMESERVER2ROID%",
|
||||||
"links": [
|
"links": [
|
||||||
{
|
{
|
||||||
"href": "https://example.com/rdap/nameserver/%NAMESERVER2NAME%",
|
"href": "https://example.tld/rdap/nameserver/%NAMESERVER2NAME%",
|
||||||
"type": "application/rdap+json",
|
"type": "application/rdap+json",
|
||||||
"rel": "self",
|
"rel": "self",
|
||||||
"value": "https://example.com/rdap/nameserver/%NAMESERVER2NAME%"
|
"value": "https://example.tld/rdap/nameserver/%NAMESERVER2NAME%"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"ldhName": "%NAMESERVER2NAME%",
|
"ldhName": "%NAMESERVER2NAME%",
|
||||||
|
@ -161,10 +161,10 @@
|
||||||
"roles": [ "registrar" ],
|
"roles": [ "registrar" ],
|
||||||
"links": [
|
"links": [
|
||||||
{
|
{
|
||||||
"href": "https://example.com/rdap/entity/1",
|
"href": "https://example.tld/rdap/entity/1",
|
||||||
"type": "application/rdap+json",
|
"type": "application/rdap+json",
|
||||||
"rel": "self",
|
"rel": "self",
|
||||||
"value": "https://example.com/rdap/entity/1"
|
"value": "https://example.tld/rdap/entity/1"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"vcardArray" : [
|
"vcardArray" : [
|
||||||
|
@ -222,10 +222,10 @@
|
||||||
],
|
],
|
||||||
"links": [
|
"links": [
|
||||||
{
|
{
|
||||||
"href": "https://example.com/rdap/entity/%CONTACT1ROID%",
|
"href": "https://example.tld/rdap/entity/%CONTACT1ROID%",
|
||||||
"type": "application/rdap+json",
|
"type": "application/rdap+json",
|
||||||
"rel": "self",
|
"rel": "self",
|
||||||
"value": "https://example.com/rdap/entity/%CONTACT1ROID%"
|
"value": "https://example.tld/rdap/entity/%CONTACT1ROID%"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"events": [
|
"events": [
|
||||||
|
@ -315,10 +315,10 @@
|
||||||
],
|
],
|
||||||
"links": [
|
"links": [
|
||||||
{
|
{
|
||||||
"href": "https://example.com/rdap/entity/%CONTACT2ROID%",
|
"href": "https://example.tld/rdap/entity/%CONTACT2ROID%",
|
||||||
"type": "application/rdap+json",
|
"type": "application/rdap+json",
|
||||||
"rel": "self",
|
"rel": "self",
|
||||||
"value": "https://example.com/rdap/entity/%CONTACT2ROID%"
|
"value": "https://example.tld/rdap/entity/%CONTACT2ROID%"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"events": [
|
"events": [
|
||||||
|
@ -408,10 +408,10 @@
|
||||||
],
|
],
|
||||||
"links": [
|
"links": [
|
||||||
{
|
{
|
||||||
"href": "https://example.com/rdap/entity/%CONTACT3ROID%",
|
"href": "https://example.tld/rdap/entity/%CONTACT3ROID%",
|
||||||
"type": "application/rdap+json",
|
"type": "application/rdap+json",
|
||||||
"rel": "self",
|
"rel": "self",
|
||||||
"value": "https://example.com/rdap/entity/%CONTACT3ROID%"
|
"value": "https://example.tld/rdap/entity/%CONTACT3ROID%"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"events": [
|
"events": [
|
||||||
|
@ -497,10 +497,10 @@
|
||||||
"roles": [ "registrar" ],
|
"roles": [ "registrar" ],
|
||||||
"links": [
|
"links": [
|
||||||
{
|
{
|
||||||
"href": "https://example.com/rdap/entity/1",
|
"href": "https://example.tld/rdap/entity/1",
|
||||||
"type": "application/rdap+json",
|
"type": "application/rdap+json",
|
||||||
"rel": "self",
|
"rel": "self",
|
||||||
"value": "https://example.com/rdap/entity/1"
|
"value": "https://example.tld/rdap/entity/1"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"vcardArray" : [
|
"vcardArray" : [
|
||||||
|
|
|
@ -8,10 +8,10 @@
|
||||||
"handle": "%HANDLE%",
|
"handle": "%HANDLE%",
|
||||||
"links": [
|
"links": [
|
||||||
{
|
{
|
||||||
"href": "https://example.com/rdap/domain/%NAME%",
|
"href": "https://example.tld/rdap/domain/%NAME%",
|
||||||
"type": "application/rdap+json",
|
"type": "application/rdap+json",
|
||||||
"rel": "self",
|
"rel": "self",
|
||||||
"value": "https://example.com/rdap/domain/%NAME%"
|
"value": "https://example.tld/rdap/domain/%NAME%"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"events": [
|
"events": [
|
||||||
|
@ -42,10 +42,10 @@
|
||||||
"handle": "%NAMESERVER1ROID%",
|
"handle": "%NAMESERVER1ROID%",
|
||||||
"links": [
|
"links": [
|
||||||
{
|
{
|
||||||
"href": "https://example.com/rdap/nameserver/%NAMESERVER1NAME%",
|
"href": "https://example.tld/rdap/nameserver/%NAMESERVER1NAME%",
|
||||||
"type": "application/rdap+json",
|
"type": "application/rdap+json",
|
||||||
"rel": "self",
|
"rel": "self",
|
||||||
"value": "https://example.com/rdap/nameserver/%NAMESERVER1NAME%"
|
"value": "https://example.tld/rdap/nameserver/%NAMESERVER1NAME%"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"ldhName": "%NAMESERVER1NAME%",
|
"ldhName": "%NAMESERVER1NAME%",
|
||||||
|
@ -74,10 +74,10 @@
|
||||||
"roles": [ "registrar" ],
|
"roles": [ "registrar" ],
|
||||||
"links": [
|
"links": [
|
||||||
{
|
{
|
||||||
"href": "https://example.com/rdap/entity/1",
|
"href": "https://example.tld/rdap/entity/1",
|
||||||
"type": "application/rdap+json",
|
"type": "application/rdap+json",
|
||||||
"rel": "self",
|
"rel": "self",
|
||||||
"value": "https://example.com/rdap/entity/1"
|
"value": "https://example.tld/rdap/entity/1"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"vcardArray" : [
|
"vcardArray" : [
|
||||||
|
@ -129,10 +129,10 @@
|
||||||
"handle": "%NAMESERVER2ROID%",
|
"handle": "%NAMESERVER2ROID%",
|
||||||
"links": [
|
"links": [
|
||||||
{
|
{
|
||||||
"href": "https://example.com/rdap/nameserver/%NAMESERVER2NAME%",
|
"href": "https://example.tld/rdap/nameserver/%NAMESERVER2NAME%",
|
||||||
"type": "application/rdap+json",
|
"type": "application/rdap+json",
|
||||||
"rel": "self",
|
"rel": "self",
|
||||||
"value": "https://example.com/rdap/nameserver/%NAMESERVER2NAME%"
|
"value": "https://example.tld/rdap/nameserver/%NAMESERVER2NAME%"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"ldhName": "%NAMESERVER2NAME%",
|
"ldhName": "%NAMESERVER2NAME%",
|
||||||
|
@ -161,10 +161,10 @@
|
||||||
"roles": [ "registrar" ],
|
"roles": [ "registrar" ],
|
||||||
"links": [
|
"links": [
|
||||||
{
|
{
|
||||||
"href": "https://example.com/rdap/entity/1",
|
"href": "https://example.tld/rdap/entity/1",
|
||||||
"type": "application/rdap+json",
|
"type": "application/rdap+json",
|
||||||
"rel": "self",
|
"rel": "self",
|
||||||
"value": "https://example.com/rdap/entity/1"
|
"value": "https://example.tld/rdap/entity/1"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"vcardArray" : [
|
"vcardArray" : [
|
||||||
|
@ -222,10 +222,10 @@
|
||||||
],
|
],
|
||||||
"links": [
|
"links": [
|
||||||
{
|
{
|
||||||
"href": "https://example.com/rdap/entity/%CONTACT1ROID%",
|
"href": "https://example.tld/rdap/entity/%CONTACT1ROID%",
|
||||||
"type": "application/rdap+json",
|
"type": "application/rdap+json",
|
||||||
"rel": "self",
|
"rel": "self",
|
||||||
"value": "https://example.com/rdap/entity/%CONTACT1ROID%"
|
"value": "https://example.tld/rdap/entity/%CONTACT1ROID%"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"events": [
|
"events": [
|
||||||
|
@ -315,10 +315,10 @@
|
||||||
],
|
],
|
||||||
"links": [
|
"links": [
|
||||||
{
|
{
|
||||||
"href": "https://example.com/rdap/entity/%CONTACT2ROID%",
|
"href": "https://example.tld/rdap/entity/%CONTACT2ROID%",
|
||||||
"type": "application/rdap+json",
|
"type": "application/rdap+json",
|
||||||
"rel": "self",
|
"rel": "self",
|
||||||
"value": "https://example.com/rdap/entity/%CONTACT2ROID%"
|
"value": "https://example.tld/rdap/entity/%CONTACT2ROID%"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"events": [
|
"events": [
|
||||||
|
@ -408,10 +408,10 @@
|
||||||
],
|
],
|
||||||
"links": [
|
"links": [
|
||||||
{
|
{
|
||||||
"href": "https://example.com/rdap/entity/%CONTACT3ROID%",
|
"href": "https://example.tld/rdap/entity/%CONTACT3ROID%",
|
||||||
"type": "application/rdap+json",
|
"type": "application/rdap+json",
|
||||||
"rel": "self",
|
"rel": "self",
|
||||||
"value": "https://example.com/rdap/entity/%CONTACT3ROID%"
|
"value": "https://example.tld/rdap/entity/%CONTACT3ROID%"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"events": [
|
"events": [
|
||||||
|
@ -497,10 +497,10 @@
|
||||||
"roles": [ "registrar" ],
|
"roles": [ "registrar" ],
|
||||||
"links": [
|
"links": [
|
||||||
{
|
{
|
||||||
"href": "https://example.com/rdap/entity/1",
|
"href": "https://example.tld/rdap/entity/1",
|
||||||
"type": "application/rdap+json",
|
"type": "application/rdap+json",
|
||||||
"rel": "self",
|
"rel": "self",
|
||||||
"value": "https://example.com/rdap/entity/1"
|
"value": "https://example.tld/rdap/entity/1"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"vcardArray" : [
|
"vcardArray" : [
|
||||||
|
|
|
@ -9,10 +9,10 @@
|
||||||
"handle": "%HANDLE%",
|
"handle": "%HANDLE%",
|
||||||
"links": [
|
"links": [
|
||||||
{
|
{
|
||||||
"href": "https://example.com/rdap/domain/%NAME%",
|
"href": "https://example.tld/rdap/domain/%NAME%",
|
||||||
"type": "application/rdap+json",
|
"type": "application/rdap+json",
|
||||||
"rel": "self",
|
"rel": "self",
|
||||||
"value": "https://example.com/rdap/domain/%NAME%"
|
"value": "https://example.tld/rdap/domain/%NAME%"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"events": [
|
"events": [
|
||||||
|
@ -48,10 +48,10 @@
|
||||||
"handle": "%NAMESERVER1ROID%",
|
"handle": "%NAMESERVER1ROID%",
|
||||||
"links": [
|
"links": [
|
||||||
{
|
{
|
||||||
"href": "https://example.com/rdap/nameserver/%NAMESERVER1NAME%",
|
"href": "https://example.tld/rdap/nameserver/%NAMESERVER1NAME%",
|
||||||
"type": "application/rdap+json",
|
"type": "application/rdap+json",
|
||||||
"rel": "self",
|
"rel": "self",
|
||||||
"value": "https://example.com/rdap/nameserver/%NAMESERVER1NAME%"
|
"value": "https://example.tld/rdap/nameserver/%NAMESERVER1NAME%"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"ldhName": "%NAMESERVER1NAME%",
|
"ldhName": "%NAMESERVER1NAME%",
|
||||||
|
@ -80,10 +80,10 @@
|
||||||
"roles": [ "registrar" ],
|
"roles": [ "registrar" ],
|
||||||
"links": [
|
"links": [
|
||||||
{
|
{
|
||||||
"href": "https://example.com/rdap/entity/1",
|
"href": "https://example.tld/rdap/entity/1",
|
||||||
"type": "application/rdap+json",
|
"type": "application/rdap+json",
|
||||||
"rel": "self",
|
"rel": "self",
|
||||||
"value": "https://example.com/rdap/entity/1"
|
"value": "https://example.tld/rdap/entity/1"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"vcardArray" : [
|
"vcardArray" : [
|
||||||
|
@ -134,10 +134,10 @@
|
||||||
"handle": "%NAMESERVER2ROID%",
|
"handle": "%NAMESERVER2ROID%",
|
||||||
"links": [
|
"links": [
|
||||||
{
|
{
|
||||||
"href": "https://example.com/rdap/nameserver/%NAMESERVER2NAME%",
|
"href": "https://example.tld/rdap/nameserver/%NAMESERVER2NAME%",
|
||||||
"type": "application/rdap+json",
|
"type": "application/rdap+json",
|
||||||
"rel": "self",
|
"rel": "self",
|
||||||
"value": "https://example.com/rdap/nameserver/%NAMESERVER2NAME%"
|
"value": "https://example.tld/rdap/nameserver/%NAMESERVER2NAME%"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"ldhName": "%NAMESERVER2NAME%",
|
"ldhName": "%NAMESERVER2NAME%",
|
||||||
|
@ -166,10 +166,10 @@
|
||||||
"roles": [ "registrar" ],
|
"roles": [ "registrar" ],
|
||||||
"links": [
|
"links": [
|
||||||
{
|
{
|
||||||
"href": "https://example.com/rdap/entity/1",
|
"href": "https://example.tld/rdap/entity/1",
|
||||||
"type": "application/rdap+json",
|
"type": "application/rdap+json",
|
||||||
"rel": "self",
|
"rel": "self",
|
||||||
"value": "https://example.com/rdap/entity/1"
|
"value": "https://example.tld/rdap/entity/1"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"vcardArray" : [
|
"vcardArray" : [
|
||||||
|
@ -226,10 +226,10 @@
|
||||||
],
|
],
|
||||||
"links": [
|
"links": [
|
||||||
{
|
{
|
||||||
"href": "https://example.com/rdap/entity/%CONTACT1ROID%",
|
"href": "https://example.tld/rdap/entity/%CONTACT1ROID%",
|
||||||
"type": "application/rdap+json",
|
"type": "application/rdap+json",
|
||||||
"rel": "self",
|
"rel": "self",
|
||||||
"value": "https://example.com/rdap/entity/%CONTACT1ROID%"
|
"value": "https://example.tld/rdap/entity/%CONTACT1ROID%"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"events": [
|
"events": [
|
||||||
|
@ -318,10 +318,10 @@
|
||||||
],
|
],
|
||||||
"links": [
|
"links": [
|
||||||
{
|
{
|
||||||
"href": "https://example.com/rdap/entity/%CONTACT2ROID%",
|
"href": "https://example.tld/rdap/entity/%CONTACT2ROID%",
|
||||||
"type": "application/rdap+json",
|
"type": "application/rdap+json",
|
||||||
"rel": "self",
|
"rel": "self",
|
||||||
"value": "https://example.com/rdap/entity/%CONTACT2ROID%"
|
"value": "https://example.tld/rdap/entity/%CONTACT2ROID%"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"events": [
|
"events": [
|
||||||
|
@ -410,10 +410,10 @@
|
||||||
],
|
],
|
||||||
"links": [
|
"links": [
|
||||||
{
|
{
|
||||||
"href": "https://example.com/rdap/entity/%CONTACT3ROID%",
|
"href": "https://example.tld/rdap/entity/%CONTACT3ROID%",
|
||||||
"type": "application/rdap+json",
|
"type": "application/rdap+json",
|
||||||
"rel": "self",
|
"rel": "self",
|
||||||
"value": "https://example.com/rdap/entity/%CONTACT3ROID%"
|
"value": "https://example.tld/rdap/entity/%CONTACT3ROID%"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"events": [
|
"events": [
|
||||||
|
@ -499,10 +499,10 @@
|
||||||
"roles": [ "registrar" ],
|
"roles": [ "registrar" ],
|
||||||
"links": [
|
"links": [
|
||||||
{
|
{
|
||||||
"href": "https://example.com/rdap/entity/1",
|
"href": "https://example.tld/rdap/entity/1",
|
||||||
"type": "application/rdap+json",
|
"type": "application/rdap+json",
|
||||||
"rel": "self",
|
"rel": "self",
|
||||||
"value": "https://example.com/rdap/entity/1"
|
"value": "https://example.tld/rdap/entity/1"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"vcardArray" : [
|
"vcardArray" : [
|
||||||
|
|
|
@ -10,10 +10,10 @@
|
||||||
],
|
],
|
||||||
"links": [
|
"links": [
|
||||||
{
|
{
|
||||||
"href": "https://example.com/rdap/domain/%NAME%",
|
"href": "https://example.tld/rdap/domain/%NAME%",
|
||||||
"type": "application/rdap+json",
|
"type": "application/rdap+json",
|
||||||
"rel": "self",
|
"rel": "self",
|
||||||
"value": "https://example.com/rdap/domain/%NAME%"
|
"value": "https://example.tld/rdap/domain/%NAME%"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"events": [
|
"events": [
|
||||||
|
@ -44,10 +44,10 @@
|
||||||
"handle": "%NAMESERVER1ROID%",
|
"handle": "%NAMESERVER1ROID%",
|
||||||
"links": [
|
"links": [
|
||||||
{
|
{
|
||||||
"href": "https://example.com/rdap/nameserver/%NAMESERVER1NAME%",
|
"href": "https://example.tld/rdap/nameserver/%NAMESERVER1NAME%",
|
||||||
"type": "application/rdap+json",
|
"type": "application/rdap+json",
|
||||||
"rel": "self",
|
"rel": "self",
|
||||||
"value": "https://example.com/rdap/nameserver/%NAMESERVER1NAME%"
|
"value": "https://example.tld/rdap/nameserver/%NAMESERVER1NAME%"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"ldhName": "%NAMESERVER1NAME%",
|
"ldhName": "%NAMESERVER1NAME%",
|
||||||
|
@ -76,10 +76,10 @@
|
||||||
"roles": [ "registrar" ],
|
"roles": [ "registrar" ],
|
||||||
"links": [
|
"links": [
|
||||||
{
|
{
|
||||||
"href": "https://example.com/rdap/entity/1",
|
"href": "https://example.tld/rdap/entity/1",
|
||||||
"type": "application/rdap+json",
|
"type": "application/rdap+json",
|
||||||
"rel": "self",
|
"rel": "self",
|
||||||
"value": "https://example.com/rdap/entity/1"
|
"value": "https://example.tld/rdap/entity/1"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"vcardArray" : [
|
"vcardArray" : [
|
||||||
|
@ -131,10 +131,10 @@
|
||||||
"handle": "%NAMESERVER2ROID%",
|
"handle": "%NAMESERVER2ROID%",
|
||||||
"links": [
|
"links": [
|
||||||
{
|
{
|
||||||
"href": "https://example.com/rdap/nameserver/%NAMESERVER2NAME%",
|
"href": "https://example.tld/rdap/nameserver/%NAMESERVER2NAME%",
|
||||||
"type": "application/rdap+json",
|
"type": "application/rdap+json",
|
||||||
"rel": "self",
|
"rel": "self",
|
||||||
"value": "https://example.com/rdap/nameserver/%NAMESERVER2NAME%"
|
"value": "https://example.tld/rdap/nameserver/%NAMESERVER2NAME%"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"ldhName": "%NAMESERVER2NAME%",
|
"ldhName": "%NAMESERVER2NAME%",
|
||||||
|
@ -163,10 +163,10 @@
|
||||||
"roles": [ "registrar" ],
|
"roles": [ "registrar" ],
|
||||||
"links": [
|
"links": [
|
||||||
{
|
{
|
||||||
"href": "https://example.com/rdap/entity/1",
|
"href": "https://example.tld/rdap/entity/1",
|
||||||
"type": "application/rdap+json",
|
"type": "application/rdap+json",
|
||||||
"rel": "self",
|
"rel": "self",
|
||||||
"value": "https://example.com/rdap/entity/1"
|
"value": "https://example.tld/rdap/entity/1"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"vcardArray" : [
|
"vcardArray" : [
|
||||||
|
@ -220,9 +220,9 @@
|
||||||
"links" :
|
"links" :
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"value" : "https://example.com/rdap/entity/1",
|
"value" : "https://example.tld/rdap/entity/1",
|
||||||
"rel" : "self",
|
"rel" : "self",
|
||||||
"href" : "https://example.com/rdap/entity/1",
|
"href" : "https://example.tld/rdap/entity/1",
|
||||||
"type" : "application/rdap+json"
|
"type" : "application/rdap+json"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
|
@ -10,10 +10,10 @@
|
||||||
],
|
],
|
||||||
"links": [
|
"links": [
|
||||||
{
|
{
|
||||||
"href": "https://example.com/rdap/domain/%NAME%",
|
"href": "https://example.tld/rdap/domain/%NAME%",
|
||||||
"type": "application/rdap+json",
|
"type": "application/rdap+json",
|
||||||
"rel": "self",
|
"rel": "self",
|
||||||
"value": "https://example.com/rdap/domain/%NAME%"
|
"value": "https://example.tld/rdap/domain/%NAME%"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"events": [
|
"events": [
|
||||||
|
@ -44,10 +44,10 @@
|
||||||
"handle": "%NAMESERVER1ROID%",
|
"handle": "%NAMESERVER1ROID%",
|
||||||
"links": [
|
"links": [
|
||||||
{
|
{
|
||||||
"href": "https://example.com/rdap/nameserver/%NAMESERVER1NAME%",
|
"href": "https://example.tld/rdap/nameserver/%NAMESERVER1NAME%",
|
||||||
"type": "application/rdap+json",
|
"type": "application/rdap+json",
|
||||||
"rel": "self",
|
"rel": "self",
|
||||||
"value": "https://example.com/rdap/nameserver/%NAMESERVER1NAME%"
|
"value": "https://example.tld/rdap/nameserver/%NAMESERVER1NAME%"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"ldhName": "%NAMESERVER1NAME%",
|
"ldhName": "%NAMESERVER1NAME%",
|
||||||
|
@ -76,10 +76,10 @@
|
||||||
"roles": [ "registrar" ],
|
"roles": [ "registrar" ],
|
||||||
"links": [
|
"links": [
|
||||||
{
|
{
|
||||||
"href": "https://example.com/rdap/entity/1",
|
"href": "https://example.tld/rdap/entity/1",
|
||||||
"type": "application/rdap+json",
|
"type": "application/rdap+json",
|
||||||
"rel": "self",
|
"rel": "self",
|
||||||
"value": "https://example.com/rdap/entity/1"
|
"value": "https://example.tld/rdap/entity/1"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"vcardArray" : [
|
"vcardArray" : [
|
||||||
|
@ -131,10 +131,10 @@
|
||||||
"handle": "%NAMESERVER2ROID%",
|
"handle": "%NAMESERVER2ROID%",
|
||||||
"links": [
|
"links": [
|
||||||
{
|
{
|
||||||
"href": "https://example.com/rdap/nameserver/%NAMESERVER2NAME%",
|
"href": "https://example.tld/rdap/nameserver/%NAMESERVER2NAME%",
|
||||||
"type": "application/rdap+json",
|
"type": "application/rdap+json",
|
||||||
"rel": "self",
|
"rel": "self",
|
||||||
"value": "https://example.com/rdap/nameserver/%NAMESERVER2NAME%"
|
"value": "https://example.tld/rdap/nameserver/%NAMESERVER2NAME%"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"ldhName": "%NAMESERVER2NAME%",
|
"ldhName": "%NAMESERVER2NAME%",
|
||||||
|
@ -163,10 +163,10 @@
|
||||||
"roles": [ "registrar" ],
|
"roles": [ "registrar" ],
|
||||||
"links": [
|
"links": [
|
||||||
{
|
{
|
||||||
"href": "https://example.com/rdap/entity/1",
|
"href": "https://example.tld/rdap/entity/1",
|
||||||
"type": "application/rdap+json",
|
"type": "application/rdap+json",
|
||||||
"rel": "self",
|
"rel": "self",
|
||||||
"value": "https://example.com/rdap/entity/1"
|
"value": "https://example.tld/rdap/entity/1"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"vcardArray" : [
|
"vcardArray" : [
|
||||||
|
@ -220,9 +220,9 @@
|
||||||
"links" :
|
"links" :
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"value" : "https://example.com/rdap/entity/1",
|
"value" : "https://example.tld/rdap/entity/1",
|
||||||
"rel" : "self",
|
"rel" : "self",
|
||||||
"href" : "https://example.com/rdap/entity/1",
|
"href" : "https://example.tld/rdap/entity/1",
|
||||||
"type" : "application/rdap+json"
|
"type" : "application/rdap+json"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
|
@ -9,10 +9,10 @@
|
||||||
"handle": "%HANDLE%",
|
"handle": "%HANDLE%",
|
||||||
"links": [
|
"links": [
|
||||||
{
|
{
|
||||||
"href": "https://example.com/rdap/domain/%PUNYCODENAME%",
|
"href": "https://example.tld/rdap/domain/%PUNYCODENAME%",
|
||||||
"type": "application/rdap+json",
|
"type": "application/rdap+json",
|
||||||
"rel": "self",
|
"rel": "self",
|
||||||
"value": "https://example.com/rdap/domain/%PUNYCODENAME%"
|
"value": "https://example.tld/rdap/domain/%PUNYCODENAME%"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"events": [
|
"events": [
|
||||||
|
@ -44,11 +44,11 @@
|
||||||
"links": [
|
"links": [
|
||||||
{
|
{
|
||||||
"href":
|
"href":
|
||||||
"https://example.com/rdap/nameserver/%NAMESERVER1PUNYCODENAME%",
|
"https://example.tld/rdap/nameserver/%NAMESERVER1PUNYCODENAME%",
|
||||||
"type": "application/rdap+json",
|
"type": "application/rdap+json",
|
||||||
"rel": "self",
|
"rel": "self",
|
||||||
"value":
|
"value":
|
||||||
"https://example.com/rdap/nameserver/%NAMESERVER1PUNYCODENAME%"
|
"https://example.tld/rdap/nameserver/%NAMESERVER1PUNYCODENAME%"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"ldhName": "%NAMESERVER1PUNYCODENAME%",
|
"ldhName": "%NAMESERVER1PUNYCODENAME%",
|
||||||
|
@ -77,10 +77,10 @@
|
||||||
"roles": [ "registrar" ],
|
"roles": [ "registrar" ],
|
||||||
"links": [
|
"links": [
|
||||||
{
|
{
|
||||||
"href": "https://example.com/rdap/entity/1",
|
"href": "https://example.tld/rdap/entity/1",
|
||||||
"type": "application/rdap+json",
|
"type": "application/rdap+json",
|
||||||
"rel": "self",
|
"rel": "self",
|
||||||
"value": "https://example.com/rdap/entity/1"
|
"value": "https://example.tld/rdap/entity/1"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"vcardArray" : [
|
"vcardArray" : [
|
||||||
|
@ -133,11 +133,11 @@
|
||||||
"links": [
|
"links": [
|
||||||
{
|
{
|
||||||
"href":
|
"href":
|
||||||
"https://example.com/rdap/nameserver/%NAMESERVER2PUNYCODENAME%",
|
"https://example.tld/rdap/nameserver/%NAMESERVER2PUNYCODENAME%",
|
||||||
"type": "application/rdap+json",
|
"type": "application/rdap+json",
|
||||||
"rel": "self",
|
"rel": "self",
|
||||||
"value":
|
"value":
|
||||||
"https://example.com/rdap/nameserver/%NAMESERVER2PUNYCODENAME%"
|
"https://example.tld/rdap/nameserver/%NAMESERVER2PUNYCODENAME%"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"ldhName": "%NAMESERVER2PUNYCODENAME%",
|
"ldhName": "%NAMESERVER2PUNYCODENAME%",
|
||||||
|
@ -166,10 +166,10 @@
|
||||||
"roles": [ "registrar" ],
|
"roles": [ "registrar" ],
|
||||||
"links": [
|
"links": [
|
||||||
{
|
{
|
||||||
"href": "https://example.com/rdap/entity/1",
|
"href": "https://example.tld/rdap/entity/1",
|
||||||
"type": "application/rdap+json",
|
"type": "application/rdap+json",
|
||||||
"rel": "self",
|
"rel": "self",
|
||||||
"value": "https://example.com/rdap/entity/1"
|
"value": "https://example.tld/rdap/entity/1"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"vcardArray" : [
|
"vcardArray" : [
|
||||||
|
@ -227,10 +227,10 @@
|
||||||
],
|
],
|
||||||
"links": [
|
"links": [
|
||||||
{
|
{
|
||||||
"href": "https://example.com/rdap/entity/%CONTACT1ROID%",
|
"href": "https://example.tld/rdap/entity/%CONTACT1ROID%",
|
||||||
"type": "application/rdap+json",
|
"type": "application/rdap+json",
|
||||||
"rel": "self",
|
"rel": "self",
|
||||||
"value": "https://example.com/rdap/entity/%CONTACT1ROID%"
|
"value": "https://example.tld/rdap/entity/%CONTACT1ROID%"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"events": [
|
"events": [
|
||||||
|
@ -320,10 +320,10 @@
|
||||||
],
|
],
|
||||||
"links": [
|
"links": [
|
||||||
{
|
{
|
||||||
"href": "https://example.com/rdap/entity/%CONTACT2ROID%",
|
"href": "https://example.tld/rdap/entity/%CONTACT2ROID%",
|
||||||
"type": "application/rdap+json",
|
"type": "application/rdap+json",
|
||||||
"rel": "self",
|
"rel": "self",
|
||||||
"value": "https://example.com/rdap/entity/%CONTACT2ROID%"
|
"value": "https://example.tld/rdap/entity/%CONTACT2ROID%"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"events": [
|
"events": [
|
||||||
|
@ -413,10 +413,10 @@
|
||||||
],
|
],
|
||||||
"links": [
|
"links": [
|
||||||
{
|
{
|
||||||
"href": "https://example.com/rdap/entity/%CONTACT3ROID%",
|
"href": "https://example.tld/rdap/entity/%CONTACT3ROID%",
|
||||||
"type": "application/rdap+json",
|
"type": "application/rdap+json",
|
||||||
"rel": "self",
|
"rel": "self",
|
||||||
"value": "https://example.com/rdap/entity/%CONTACT3ROID%"
|
"value": "https://example.tld/rdap/entity/%CONTACT3ROID%"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"events": [
|
"events": [
|
||||||
|
@ -502,10 +502,10 @@
|
||||||
"roles": [ "registrar" ],
|
"roles": [ "registrar" ],
|
||||||
"links": [
|
"links": [
|
||||||
{
|
{
|
||||||
"href": "https://example.com/rdap/entity/1",
|
"href": "https://example.tld/rdap/entity/1",
|
||||||
"type": "application/rdap+json",
|
"type": "application/rdap+json",
|
||||||
"rel": "self",
|
"rel": "self",
|
||||||
"value": "https://example.com/rdap/entity/1"
|
"value": "https://example.tld/rdap/entity/1"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"vcardArray" : [
|
"vcardArray" : [
|
||||||
|
|
|
@ -11,10 +11,10 @@
|
||||||
],
|
],
|
||||||
"links": [
|
"links": [
|
||||||
{
|
{
|
||||||
"href": "https://example.com/rdap/domain/%PUNYCODENAME%",
|
"href": "https://example.tld/rdap/domain/%PUNYCODENAME%",
|
||||||
"type": "application/rdap+json",
|
"type": "application/rdap+json",
|
||||||
"rel": "self",
|
"rel": "self",
|
||||||
"value": "https://example.com/rdap/domain/%PUNYCODENAME%"
|
"value": "https://example.tld/rdap/domain/%PUNYCODENAME%"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"events": [
|
"events": [
|
||||||
|
@ -45,10 +45,10 @@
|
||||||
"handle": "%NAMESERVER1ROID%",
|
"handle": "%NAMESERVER1ROID%",
|
||||||
"links": [
|
"links": [
|
||||||
{
|
{
|
||||||
"href": "https://example.com/rdap/nameserver/%NAMESERVER1PUNYCODENAME%",
|
"href": "https://example.tld/rdap/nameserver/%NAMESERVER1PUNYCODENAME%",
|
||||||
"type": "application/rdap+json",
|
"type": "application/rdap+json",
|
||||||
"rel": "self",
|
"rel": "self",
|
||||||
"value": "https://example.com/rdap/nameserver/%NAMESERVER1PUNYCODENAME%"
|
"value": "https://example.tld/rdap/nameserver/%NAMESERVER1PUNYCODENAME%"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"ldhName": "%NAMESERVER1PUNYCODENAME%",
|
"ldhName": "%NAMESERVER1PUNYCODENAME%",
|
||||||
|
@ -78,10 +78,10 @@
|
||||||
"roles": [ "registrar" ],
|
"roles": [ "registrar" ],
|
||||||
"links": [
|
"links": [
|
||||||
{
|
{
|
||||||
"href": "https://example.com/rdap/entity/1",
|
"href": "https://example.tld/rdap/entity/1",
|
||||||
"type": "application/rdap+json",
|
"type": "application/rdap+json",
|
||||||
"rel": "self",
|
"rel": "self",
|
||||||
"value": "https://example.com/rdap/entity/1"
|
"value": "https://example.tld/rdap/entity/1"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"vcardArray" : [
|
"vcardArray" : [
|
||||||
|
@ -133,10 +133,10 @@
|
||||||
"handle": "%NAMESERVER2ROID%",
|
"handle": "%NAMESERVER2ROID%",
|
||||||
"links": [
|
"links": [
|
||||||
{
|
{
|
||||||
"href": "https://example.com/rdap/nameserver/%NAMESERVER2PUNYCODENAME%",
|
"href": "https://example.tld/rdap/nameserver/%NAMESERVER2PUNYCODENAME%",
|
||||||
"type": "application/rdap+json",
|
"type": "application/rdap+json",
|
||||||
"rel": "self",
|
"rel": "self",
|
||||||
"value": "https://example.com/rdap/nameserver/%NAMESERVER2PUNYCODENAME%"
|
"value": "https://example.tld/rdap/nameserver/%NAMESERVER2PUNYCODENAME%"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"ldhName": "%NAMESERVER2PUNYCODENAME%",
|
"ldhName": "%NAMESERVER2PUNYCODENAME%",
|
||||||
|
@ -166,10 +166,10 @@
|
||||||
"roles": [ "registrar" ],
|
"roles": [ "registrar" ],
|
||||||
"links": [
|
"links": [
|
||||||
{
|
{
|
||||||
"href": "https://example.com/rdap/entity/1",
|
"href": "https://example.tld/rdap/entity/1",
|
||||||
"type": "application/rdap+json",
|
"type": "application/rdap+json",
|
||||||
"rel": "self",
|
"rel": "self",
|
||||||
"value": "https://example.com/rdap/entity/1"
|
"value": "https://example.tld/rdap/entity/1"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"vcardArray" : [
|
"vcardArray" : [
|
||||||
|
@ -223,9 +223,9 @@
|
||||||
"links" :
|
"links" :
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"value" : "https://example.com/rdap/entity/1",
|
"value" : "https://example.tld/rdap/entity/1",
|
||||||
"rel" : "self",
|
"rel" : "self",
|
||||||
"href" : "https://example.com/rdap/entity/1",
|
"href" : "https://example.tld/rdap/entity/1",
|
||||||
"type" : "application/rdap+json"
|
"type" : "application/rdap+json"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
|
@ -10,10 +10,10 @@
|
||||||
"handle": "%DOMAINHANDLE1%",
|
"handle": "%DOMAINHANDLE1%",
|
||||||
"links": [
|
"links": [
|
||||||
{
|
{
|
||||||
"href": "https://example.com/rdap/domain/%DOMAINNAME1%",
|
"href": "https://example.tld/rdap/domain/%DOMAINNAME1%",
|
||||||
"type": "application/rdap+json",
|
"type": "application/rdap+json",
|
||||||
"rel": "self",
|
"rel": "self",
|
||||||
"value": "https://example.com/rdap/domain/%DOMAINNAME1%"
|
"value": "https://example.tld/rdap/domain/%DOMAINNAME1%"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"ldhName": "%DOMAINNAME1%",
|
"ldhName": "%DOMAINNAME1%",
|
||||||
|
@ -38,10 +38,10 @@
|
||||||
"handle": "%DOMAINHANDLE2%",
|
"handle": "%DOMAINHANDLE2%",
|
||||||
"links": [
|
"links": [
|
||||||
{
|
{
|
||||||
"href": "https://example.com/rdap/domain/%DOMAINNAME2%",
|
"href": "https://example.tld/rdap/domain/%DOMAINNAME2%",
|
||||||
"type": "application/rdap+json",
|
"type": "application/rdap+json",
|
||||||
"rel": "self",
|
"rel": "self",
|
||||||
"value": "https://example.com/rdap/domain/%DOMAINNAME2%"
|
"value": "https://example.tld/rdap/domain/%DOMAINNAME2%"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"ldhName": "%DOMAINNAME2%",
|
"ldhName": "%DOMAINNAME2%",
|
||||||
|
@ -66,10 +66,10 @@
|
||||||
"handle": "%DOMAINHANDLE3%",
|
"handle": "%DOMAINHANDLE3%",
|
||||||
"links": [
|
"links": [
|
||||||
{
|
{
|
||||||
"href": "https://example.com/rdap/domain/%DOMAINNAME3%",
|
"href": "https://example.tld/rdap/domain/%DOMAINNAME3%",
|
||||||
"type": "application/rdap+json",
|
"type": "application/rdap+json",
|
||||||
"rel": "self",
|
"rel": "self",
|
||||||
"value": "https://example.com/rdap/domain/%DOMAINNAME3%"
|
"value": "https://example.tld/rdap/domain/%DOMAINNAME3%"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"ldhName": "%DOMAINNAME3%",
|
"ldhName": "%DOMAINNAME3%",
|
||||||
|
@ -94,10 +94,10 @@
|
||||||
"handle": "%DOMAINHANDLE4%",
|
"handle": "%DOMAINHANDLE4%",
|
||||||
"links": [
|
"links": [
|
||||||
{
|
{
|
||||||
"href": "https://example.com/rdap/domain/%DOMAINNAME4%",
|
"href": "https://example.tld/rdap/domain/%DOMAINNAME4%",
|
||||||
"type": "application/rdap+json",
|
"type": "application/rdap+json",
|
||||||
"rel": "self",
|
"rel": "self",
|
||||||
"value": "https://example.com/rdap/domain/%DOMAINNAME4%"
|
"value": "https://example.tld/rdap/domain/%DOMAINNAME4%"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"ldhName": "%DOMAINNAME4%",
|
"ldhName": "%DOMAINNAME4%",
|
||||||
|
@ -134,7 +134,7 @@
|
||||||
{
|
{
|
||||||
"type" : "application/rdap+json",
|
"type" : "application/rdap+json",
|
||||||
"rel" : "next",
|
"rel" : "next",
|
||||||
"href" : "https://example.com/rdap/domains?%NEXT_QUERY%"
|
"href" : "https://example.tld/rdap/domains?%NEXT_QUERY%"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
@ -156,7 +156,7 @@
|
||||||
"links" :
|
"links" :
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"value" : "https://example.com/rdap/help/tos",
|
"value" : "https://example.tld/rdap/help/tos",
|
||||||
"rel" : "alternate",
|
"rel" : "alternate",
|
||||||
"href" : "https://www.registry.tld/about/rdap/tos.html",
|
"href" : "https://www.registry.tld/about/rdap/tos.html",
|
||||||
"type" : "text/html"
|
"type" : "text/html"
|
||||||
|
|
|
@ -10,10 +10,10 @@
|
||||||
"handle": "%DOMAINHANDLE1%",
|
"handle": "%DOMAINHANDLE1%",
|
||||||
"links": [
|
"links": [
|
||||||
{
|
{
|
||||||
"href": "https://example.com/rdap/domain/%DOMAINNAME1%",
|
"href": "https://example.tld/rdap/domain/%DOMAINNAME1%",
|
||||||
"type": "application/rdap+json",
|
"type": "application/rdap+json",
|
||||||
"rel": "self",
|
"rel": "self",
|
||||||
"value": "https://example.com/rdap/domain/%DOMAINNAME1%"
|
"value": "https://example.tld/rdap/domain/%DOMAINNAME1%"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"ldhName": "%DOMAINNAME1%",
|
"ldhName": "%DOMAINNAME1%",
|
||||||
|
@ -38,10 +38,10 @@
|
||||||
"handle": "%DOMAINHANDLE2%",
|
"handle": "%DOMAINHANDLE2%",
|
||||||
"links": [
|
"links": [
|
||||||
{
|
{
|
||||||
"href": "https://example.com/rdap/domain/%DOMAINNAME2%",
|
"href": "https://example.tld/rdap/domain/%DOMAINNAME2%",
|
||||||
"type": "application/rdap+json",
|
"type": "application/rdap+json",
|
||||||
"rel": "self",
|
"rel": "self",
|
||||||
"value": "https://example.com/rdap/domain/%DOMAINNAME2%"
|
"value": "https://example.tld/rdap/domain/%DOMAINNAME2%"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"ldhName": "%DOMAINNAME2%",
|
"ldhName": "%DOMAINNAME2%",
|
||||||
|
@ -66,10 +66,10 @@
|
||||||
"handle": "%DOMAINHANDLE3%",
|
"handle": "%DOMAINHANDLE3%",
|
||||||
"links": [
|
"links": [
|
||||||
{
|
{
|
||||||
"href": "https://example.com/rdap/domain/%DOMAINNAME3%",
|
"href": "https://example.tld/rdap/domain/%DOMAINNAME3%",
|
||||||
"type": "application/rdap+json",
|
"type": "application/rdap+json",
|
||||||
"rel": "self",
|
"rel": "self",
|
||||||
"value": "https://example.com/rdap/domain/%DOMAINNAME3%"
|
"value": "https://example.tld/rdap/domain/%DOMAINNAME3%"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"ldhName": "%DOMAINNAME3%",
|
"ldhName": "%DOMAINNAME3%",
|
||||||
|
@ -94,10 +94,10 @@
|
||||||
"handle": "%DOMAINHANDLE4%",
|
"handle": "%DOMAINHANDLE4%",
|
||||||
"links": [
|
"links": [
|
||||||
{
|
{
|
||||||
"href": "https://example.com/rdap/domain/%DOMAINPUNYCODENAME4%",
|
"href": "https://example.tld/rdap/domain/%DOMAINPUNYCODENAME4%",
|
||||||
"type": "application/rdap+json",
|
"type": "application/rdap+json",
|
||||||
"rel": "self",
|
"rel": "self",
|
||||||
"value": "https://example.com/rdap/domain/%DOMAINPUNYCODENAME4%"
|
"value": "https://example.tld/rdap/domain/%DOMAINPUNYCODENAME4%"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"ldhName": "%DOMAINPUNYCODENAME4%",
|
"ldhName": "%DOMAINPUNYCODENAME4%",
|
||||||
|
@ -137,7 +137,7 @@
|
||||||
"links" :
|
"links" :
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"value" : "https://example.com/rdap/help/tos",
|
"value" : "https://example.tld/rdap/help/tos",
|
||||||
"rel" : "alternate",
|
"rel" : "alternate",
|
||||||
"href" : "https://www.registry.tld/about/rdap/tos.html",
|
"href" : "https://www.registry.tld/about/rdap/tos.html",
|
||||||
"type" : "text/html"
|
"type" : "text/html"
|
||||||
|
|
|
@ -10,10 +10,10 @@
|
||||||
"handle": "%DOMAINHANDLE1%",
|
"handle": "%DOMAINHANDLE1%",
|
||||||
"links": [
|
"links": [
|
||||||
{
|
{
|
||||||
"href": "https://example.com/rdap/domain/%DOMAINPUNYCODENAME1%",
|
"href": "https://example.tld/rdap/domain/%DOMAINPUNYCODENAME1%",
|
||||||
"type": "application/rdap+json",
|
"type": "application/rdap+json",
|
||||||
"rel": "self",
|
"rel": "self",
|
||||||
"value": "https://example.com/rdap/domain/%DOMAINPUNYCODENAME1%"
|
"value": "https://example.tld/rdap/domain/%DOMAINPUNYCODENAME1%"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"ldhName": "%DOMAINPUNYCODENAME1%",
|
"ldhName": "%DOMAINPUNYCODENAME1%",
|
||||||
|
@ -38,10 +38,10 @@
|
||||||
"handle": "%DOMAINHANDLE2%",
|
"handle": "%DOMAINHANDLE2%",
|
||||||
"links": [
|
"links": [
|
||||||
{
|
{
|
||||||
"href": "https://example.com/rdap/domain/%DOMAINPUNYCODENAME2%",
|
"href": "https://example.tld/rdap/domain/%DOMAINPUNYCODENAME2%",
|
||||||
"type": "application/rdap+json",
|
"type": "application/rdap+json",
|
||||||
"rel": "self",
|
"rel": "self",
|
||||||
"value": "https://example.com/rdap/domain/%DOMAINPUNYCODENAME2%"
|
"value": "https://example.tld/rdap/domain/%DOMAINPUNYCODENAME2%"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"ldhName": "%DOMAINPUNYCODENAME2%",
|
"ldhName": "%DOMAINPUNYCODENAME2%",
|
||||||
|
@ -66,10 +66,10 @@
|
||||||
"handle": "%DOMAINHANDLE3%",
|
"handle": "%DOMAINHANDLE3%",
|
||||||
"links": [
|
"links": [
|
||||||
{
|
{
|
||||||
"href": "https://example.com/rdap/domain/%DOMAINPUNYCODENAME3%",
|
"href": "https://example.tld/rdap/domain/%DOMAINPUNYCODENAME3%",
|
||||||
"type": "application/rdap+json",
|
"type": "application/rdap+json",
|
||||||
"rel": "self",
|
"rel": "self",
|
||||||
"value": "https://example.com/rdap/domain/%DOMAINPUNYCODENAME3%"
|
"value": "https://example.tld/rdap/domain/%DOMAINPUNYCODENAME3%"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"ldhName": "%DOMAINPUNYCODENAME3%",
|
"ldhName": "%DOMAINPUNYCODENAME3%",
|
||||||
|
@ -94,10 +94,10 @@
|
||||||
"handle": "%DOMAINHANDLE4%",
|
"handle": "%DOMAINHANDLE4%",
|
||||||
"links": [
|
"links": [
|
||||||
{
|
{
|
||||||
"href": "https://example.com/rdap/domain/%DOMAINPUNYCODENAME4%",
|
"href": "https://example.tld/rdap/domain/%DOMAINPUNYCODENAME4%",
|
||||||
"type": "application/rdap+json",
|
"type": "application/rdap+json",
|
||||||
"rel": "self",
|
"rel": "self",
|
||||||
"value": "https://example.com/rdap/domain/%DOMAINPUNYCODENAME4%"
|
"value": "https://example.tld/rdap/domain/%DOMAINPUNYCODENAME4%"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"ldhName": "%DOMAINPUNYCODENAME4%",
|
"ldhName": "%DOMAINPUNYCODENAME4%",
|
||||||
|
@ -135,7 +135,7 @@
|
||||||
{
|
{
|
||||||
"type" : "application/rdap+json",
|
"type" : "application/rdap+json",
|
||||||
"rel" : "next",
|
"rel" : "next",
|
||||||
"href" : "https://example.com/rdap/domains?%NEXT_QUERY%"
|
"href" : "https://example.tld/rdap/domains?%NEXT_QUERY%"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
@ -157,7 +157,7 @@
|
||||||
"links" :
|
"links" :
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"value" : "https://example.com/rdap/help/tos",
|
"value" : "https://example.tld/rdap/help/tos",
|
||||||
"rel" : "alternate",
|
"rel" : "alternate",
|
||||||
"href" : "https://www.registry.tld/about/rdap/tos.html",
|
"href" : "https://www.registry.tld/about/rdap/tos.html",
|
||||||
"type" : "text/html"
|
"type" : "text/html"
|
||||||
|
|
|
@ -10,10 +10,10 @@
|
||||||
"handle": "%DOMAINHANDLE1%",
|
"handle": "%DOMAINHANDLE1%",
|
||||||
"links": [
|
"links": [
|
||||||
{
|
{
|
||||||
"href": "https://example.com/rdap/domain/%DOMAINNAME1%",
|
"href": "https://example.tld/rdap/domain/%DOMAINNAME1%",
|
||||||
"type": "application/rdap+json",
|
"type": "application/rdap+json",
|
||||||
"rel": "self",
|
"rel": "self",
|
||||||
"value": "https://example.com/rdap/domain/%DOMAINNAME1%"
|
"value": "https://example.tld/rdap/domain/%DOMAINNAME1%"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"ldhName": "%DOMAINNAME1%",
|
"ldhName": "%DOMAINNAME1%",
|
||||||
|
@ -38,10 +38,10 @@
|
||||||
"handle": "%DOMAINHANDLE2%",
|
"handle": "%DOMAINHANDLE2%",
|
||||||
"links": [
|
"links": [
|
||||||
{
|
{
|
||||||
"href": "https://example.com/rdap/domain/%DOMAINNAME2%",
|
"href": "https://example.tld/rdap/domain/%DOMAINNAME2%",
|
||||||
"type": "application/rdap+json",
|
"type": "application/rdap+json",
|
||||||
"rel": "self",
|
"rel": "self",
|
||||||
"value": "https://example.com/rdap/domain/%DOMAINNAME2%"
|
"value": "https://example.tld/rdap/domain/%DOMAINNAME2%"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"ldhName": "%DOMAINNAME2%",
|
"ldhName": "%DOMAINNAME2%",
|
||||||
|
@ -80,7 +80,7 @@
|
||||||
"links" :
|
"links" :
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"value" : "https://example.com/rdap/help/tos",
|
"value" : "https://example.tld/rdap/help/tos",
|
||||||
"rel" : "alternate",
|
"rel" : "alternate",
|
||||||
"href" : "https://www.registry.tld/about/rdap/tos.html",
|
"href" : "https://www.registry.tld/about/rdap/tos.html",
|
||||||
"type" : "text/html"
|
"type" : "text/html"
|
||||||
|
|
|
@ -7,8 +7,8 @@
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"rel":"self",
|
"rel":"self",
|
||||||
"href":"https://example.com/rdap/domain/%DOMAINNAME1%",
|
"href":"https://example.tld/rdap/domain/%DOMAINNAME1%",
|
||||||
"value":"https://example.com/rdap/domain/%DOMAINNAME1%",
|
"value":"https://example.tld/rdap/domain/%DOMAINNAME1%",
|
||||||
"type":"application/rdap+json"
|
"type":"application/rdap+json"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
@ -39,8 +39,8 @@
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"rel":"self",
|
"rel":"self",
|
||||||
"href":"https://example.com/rdap/domain/%DOMAINNAME2%",
|
"href":"https://example.tld/rdap/domain/%DOMAINNAME2%",
|
||||||
"value":"https://example.com/rdap/domain/%DOMAINNAME2%",
|
"value":"https://example.tld/rdap/domain/%DOMAINNAME2%",
|
||||||
"type":"application/rdap+json"
|
"type":"application/rdap+json"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
@ -71,8 +71,8 @@
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"rel":"self",
|
"rel":"self",
|
||||||
"href":"https://example.com/rdap/domain/%DOMAINNAME3%",
|
"href":"https://example.tld/rdap/domain/%DOMAINNAME3%",
|
||||||
"value":"https://example.com/rdap/domain/%DOMAINNAME3%",
|
"value":"https://example.tld/rdap/domain/%DOMAINNAME3%",
|
||||||
"type":"application/rdap+json"
|
"type":"application/rdap+json"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
@ -127,7 +127,7 @@
|
||||||
{
|
{
|
||||||
"rel":"alternate",
|
"rel":"alternate",
|
||||||
"href":"https://www.registry.tld/about/rdap/tos.html",
|
"href":"https://www.registry.tld/about/rdap/tos.html",
|
||||||
"value":"https://example.com/rdap/help/tos",
|
"value":"https://example.tld/rdap/help/tos",
|
||||||
"type":"text/html"
|
"type":"text/html"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
|
@ -20,10 +20,10 @@
|
||||||
"handle":"%DOMAINHANDLE1%",
|
"handle":"%DOMAINHANDLE1%",
|
||||||
"links":[
|
"links":[
|
||||||
{
|
{
|
||||||
"value":"https://example.com/rdap/domain/%DOMAINNAME1%",
|
"value":"https://example.tld/rdap/domain/%DOMAINNAME1%",
|
||||||
"type":"application/rdap+json",
|
"type":"application/rdap+json",
|
||||||
"rel":"self",
|
"rel":"self",
|
||||||
"href":"https://example.com/rdap/domain/%DOMAINNAME1%"
|
"href":"https://example.tld/rdap/domain/%DOMAINNAME1%"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"objectClassName":"domain"
|
"objectClassName":"domain"
|
||||||
|
@ -48,10 +48,10 @@
|
||||||
"handle":"%DOMAINHANDLE2%",
|
"handle":"%DOMAINHANDLE2%",
|
||||||
"links":[
|
"links":[
|
||||||
{
|
{
|
||||||
"value":"https://example.com/rdap/domain/%DOMAINNAME2%",
|
"value":"https://example.tld/rdap/domain/%DOMAINNAME2%",
|
||||||
"type":"application/rdap+json",
|
"type":"application/rdap+json",
|
||||||
"rel":"self",
|
"rel":"self",
|
||||||
"href":"https://example.com/rdap/domain/%DOMAINNAME2%"
|
"href":"https://example.tld/rdap/domain/%DOMAINNAME2%"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"objectClassName":"domain"
|
"objectClassName":"domain"
|
||||||
|
@ -81,7 +81,7 @@
|
||||||
],
|
],
|
||||||
"links":[
|
"links":[
|
||||||
{
|
{
|
||||||
"value":"https://example.com/rdap/help/tos",
|
"value":"https://example.tld/rdap/help/tos",
|
||||||
"type":"text/html",
|
"type":"text/html",
|
||||||
"rel":"alternate",
|
"rel":"alternate",
|
||||||
"href":"https://www.registry.tld/about/rdap/tos.html"
|
"href":"https://www.registry.tld/about/rdap/tos.html"
|
||||||
|
|
|
@ -8,9 +8,9 @@
|
||||||
"links" :
|
"links" :
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"value" : "https://example.com/rdap/entity/2-ROID",
|
"value" : "https://example.tld/rdap/entity/2-ROID",
|
||||||
"rel" : "self",
|
"rel" : "self",
|
||||||
"href": "https://example.com/rdap/entity/2-ROID",
|
"href": "https://example.tld/rdap/entity/2-ROID",
|
||||||
"type" : "application/rdap+json"
|
"type" : "application/rdap+json"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
@ -55,9 +55,9 @@
|
||||||
"links" :
|
"links" :
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"value" : "https://example.com/rdap/entity/2-Registrar",
|
"value" : "https://example.tld/rdap/entity/2-Registrar",
|
||||||
"rel" : "self",
|
"rel" : "self",
|
||||||
"href": "https://example.com/rdap/entity/2-Registrar",
|
"href": "https://example.tld/rdap/entity/2-Registrar",
|
||||||
"type" : "application/rdap+json"
|
"type" : "application/rdap+json"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
@ -122,7 +122,7 @@
|
||||||
"links" :
|
"links" :
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"value" : "https://example.com/rdap/help/tos",
|
"value" : "https://example.tld/rdap/help/tos",
|
||||||
"rel" : "alternate",
|
"rel" : "alternate",
|
||||||
"href" : "https://www.registry.tld/about/rdap/tos.html",
|
"href" : "https://www.registry.tld/about/rdap/tos.html",
|
||||||
"type" : "text/html"
|
"type" : "text/html"
|
||||||
|
|
|
@ -8,9 +8,9 @@
|
||||||
"links" :
|
"links" :
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"value" : "https://example.com/rdap/entity/4-ROID",
|
"value" : "https://example.tld/rdap/entity/4-ROID",
|
||||||
"rel" : "self",
|
"rel" : "self",
|
||||||
"href": "https://example.com/rdap/entity/4-ROID",
|
"href": "https://example.tld/rdap/entity/4-ROID",
|
||||||
"type" : "application/rdap+json"
|
"type" : "application/rdap+json"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
@ -54,9 +54,9 @@
|
||||||
"links" :
|
"links" :
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"value" : "https://example.com/rdap/entity/2-ROID",
|
"value" : "https://example.tld/rdap/entity/2-ROID",
|
||||||
"rel" : "self",
|
"rel" : "self",
|
||||||
"href": "https://example.com/rdap/entity/2-ROID",
|
"href": "https://example.tld/rdap/entity/2-ROID",
|
||||||
"type" : "application/rdap+json"
|
"type" : "application/rdap+json"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
@ -115,7 +115,7 @@
|
||||||
"links" :
|
"links" :
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"value" : "https://example.com/rdap/help/tos",
|
"value" : "https://example.tld/rdap/help/tos",
|
||||||
"rel" : "alternate",
|
"rel" : "alternate",
|
||||||
"href" : "https://www.registry.tld/about/rdap/tos.html",
|
"href" : "https://www.registry.tld/about/rdap/tos.html",
|
||||||
"type" : "text/html"
|
"type" : "text/html"
|
||||||
|
|
|
@ -8,9 +8,9 @@
|
||||||
"links" :
|
"links" :
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"value" : "https://example.com/rdap/entity/0001-ROID",
|
"value" : "https://example.tld/rdap/entity/0001-ROID",
|
||||||
"rel" : "self",
|
"rel" : "self",
|
||||||
"href": "https://example.com/rdap/entity/0001-ROID",
|
"href": "https://example.tld/rdap/entity/0001-ROID",
|
||||||
"type" : "application/rdap+json"
|
"type" : "application/rdap+json"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
@ -54,9 +54,9 @@
|
||||||
"links" :
|
"links" :
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"value" : "https://example.com/rdap/entity/0002-ROID",
|
"value" : "https://example.tld/rdap/entity/0002-ROID",
|
||||||
"rel" : "self",
|
"rel" : "self",
|
||||||
"href": "https://example.com/rdap/entity/0002-ROID",
|
"href": "https://example.tld/rdap/entity/0002-ROID",
|
||||||
"type" : "application/rdap+json"
|
"type" : "application/rdap+json"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
@ -100,9 +100,9 @@
|
||||||
"links" :
|
"links" :
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"value" : "https://example.com/rdap/entity/0003-ROID",
|
"value" : "https://example.tld/rdap/entity/0003-ROID",
|
||||||
"rel" : "self",
|
"rel" : "self",
|
||||||
"href": "https://example.com/rdap/entity/0003-ROID",
|
"href": "https://example.tld/rdap/entity/0003-ROID",
|
||||||
"type" : "application/rdap+json"
|
"type" : "application/rdap+json"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
@ -146,9 +146,9 @@
|
||||||
"links" :
|
"links" :
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"value" : "https://example.com/rdap/entity/0004-ROID",
|
"value" : "https://example.tld/rdap/entity/0004-ROID",
|
||||||
"rel" : "self",
|
"rel" : "self",
|
||||||
"href": "https://example.com/rdap/entity/0004-ROID",
|
"href": "https://example.tld/rdap/entity/0004-ROID",
|
||||||
"type" : "application/rdap+json"
|
"type" : "application/rdap+json"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
@ -207,7 +207,7 @@
|
||||||
"links" :
|
"links" :
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"value" : "https://example.com/rdap/help/tos",
|
"value" : "https://example.tld/rdap/help/tos",
|
||||||
"rel" : "alternate",
|
"rel" : "alternate",
|
||||||
"href" : "https://www.registry.tld/about/rdap/tos.html",
|
"href" : "https://www.registry.tld/about/rdap/tos.html",
|
||||||
"type" : "text/html"
|
"type" : "text/html"
|
||||||
|
|
|
@ -10,10 +10,10 @@
|
||||||
"handle": "%DOMAINHANDLE1%",
|
"handle": "%DOMAINHANDLE1%",
|
||||||
"links": [
|
"links": [
|
||||||
{
|
{
|
||||||
"href": "https://example.com/rdap/domain/%DOMAINNAME1%",
|
"href": "https://example.tld/rdap/domain/%DOMAINNAME1%",
|
||||||
"type": "application/rdap+json",
|
"type": "application/rdap+json",
|
||||||
"rel": "self",
|
"rel": "self",
|
||||||
"value": "https://example.com/rdap/domain/%DOMAINNAME1%"
|
"value": "https://example.tld/rdap/domain/%DOMAINNAME1%"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"ldhName": "%DOMAINNAME1%",
|
"ldhName": "%DOMAINNAME1%",
|
||||||
|
@ -38,10 +38,10 @@
|
||||||
"handle": "%DOMAINHANDLE2%",
|
"handle": "%DOMAINHANDLE2%",
|
||||||
"links": [
|
"links": [
|
||||||
{
|
{
|
||||||
"href": "https://example.com/rdap/domain/%DOMAINNAME2%",
|
"href": "https://example.tld/rdap/domain/%DOMAINNAME2%",
|
||||||
"type": "application/rdap+json",
|
"type": "application/rdap+json",
|
||||||
"rel": "self",
|
"rel": "self",
|
||||||
"value": "https://example.com/rdap/domain/%DOMAINNAME2%"
|
"value": "https://example.tld/rdap/domain/%DOMAINNAME2%"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"ldhName": "%DOMAINNAME2%",
|
"ldhName": "%DOMAINNAME2%",
|
||||||
|
@ -66,10 +66,10 @@
|
||||||
"handle": "%DOMAINHANDLE3%",
|
"handle": "%DOMAINHANDLE3%",
|
||||||
"links": [
|
"links": [
|
||||||
{
|
{
|
||||||
"href": "https://example.com/rdap/domain/%DOMAINNAME3%",
|
"href": "https://example.tld/rdap/domain/%DOMAINNAME3%",
|
||||||
"type": "application/rdap+json",
|
"type": "application/rdap+json",
|
||||||
"rel": "self",
|
"rel": "self",
|
||||||
"value": "https://example.com/rdap/domain/%DOMAINNAME3%"
|
"value": "https://example.tld/rdap/domain/%DOMAINNAME3%"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"ldhName": "%DOMAINNAME3%",
|
"ldhName": "%DOMAINNAME3%",
|
||||||
|
@ -94,10 +94,10 @@
|
||||||
"handle": "%DOMAINHANDLE4%",
|
"handle": "%DOMAINHANDLE4%",
|
||||||
"links": [
|
"links": [
|
||||||
{
|
{
|
||||||
"href": "https://example.com/rdap/domain/%DOMAINNAME4%",
|
"href": "https://example.tld/rdap/domain/%DOMAINNAME4%",
|
||||||
"type": "application/rdap+json",
|
"type": "application/rdap+json",
|
||||||
"rel": "self",
|
"rel": "self",
|
||||||
"value": "https://example.com/rdap/domain/%DOMAINNAME4%"
|
"value": "https://example.tld/rdap/domain/%DOMAINNAME4%"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"ldhName": "%DOMAINNAME4%",
|
"ldhName": "%DOMAINNAME4%",
|
||||||
|
@ -136,7 +136,7 @@
|
||||||
"links" :
|
"links" :
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"value" : "https://example.com/rdap/help/tos",
|
"value" : "https://example.tld/rdap/help/tos",
|
||||||
"rel" : "alternate",
|
"rel" : "alternate",
|
||||||
"href" : "https://www.registry.tld/about/rdap/tos.html",
|
"href" : "https://www.registry.tld/about/rdap/tos.html",
|
||||||
"type" : "text/html"
|
"type" : "text/html"
|
||||||
|
|
|
@ -8,9 +8,9 @@
|
||||||
"links" :
|
"links" :
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"value" : "https://example.com/rdap/entity/301",
|
"value" : "https://example.tld/rdap/entity/301",
|
||||||
"rel" : "self",
|
"rel" : "self",
|
||||||
"href": "https://example.com/rdap/entity/301",
|
"href": "https://example.tld/rdap/entity/301",
|
||||||
"type" : "application/rdap+json"
|
"type" : "application/rdap+json"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
@ -61,9 +61,9 @@
|
||||||
"links" :
|
"links" :
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"value" : "https://example.com/rdap/entity/302",
|
"value" : "https://example.tld/rdap/entity/302",
|
||||||
"rel" : "self",
|
"rel" : "self",
|
||||||
"href": "https://example.com/rdap/entity/302",
|
"href": "https://example.tld/rdap/entity/302",
|
||||||
"type" : "application/rdap+json"
|
"type" : "application/rdap+json"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
@ -114,9 +114,9 @@
|
||||||
"links" :
|
"links" :
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"value" : "https://example.com/rdap/entity/303",
|
"value" : "https://example.tld/rdap/entity/303",
|
||||||
"rel" : "self",
|
"rel" : "self",
|
||||||
"href": "https://example.com/rdap/entity/303",
|
"href": "https://example.tld/rdap/entity/303",
|
||||||
"type" : "application/rdap+json"
|
"type" : "application/rdap+json"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
@ -167,9 +167,9 @@
|
||||||
"links" :
|
"links" :
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"value" : "https://example.com/rdap/entity/304",
|
"value" : "https://example.tld/rdap/entity/304",
|
||||||
"rel" : "self",
|
"rel" : "self",
|
||||||
"href": "https://example.com/rdap/entity/304",
|
"href": "https://example.tld/rdap/entity/304",
|
||||||
"type" : "application/rdap+json"
|
"type" : "application/rdap+json"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
@ -235,7 +235,7 @@
|
||||||
"links" :
|
"links" :
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"value" : "https://example.com/rdap/help/tos",
|
"value" : "https://example.tld/rdap/help/tos",
|
||||||
"rel" : "alternate",
|
"rel" : "alternate",
|
||||||
"href" : "https://www.registry.tld/about/rdap/tos.html",
|
"href" : "https://www.registry.tld/about/rdap/tos.html",
|
||||||
"type" : "text/html"
|
"type" : "text/html"
|
||||||
|
|
|
@ -6,9 +6,9 @@
|
||||||
"links" :
|
"links" :
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"value" : "https://example.com/rdap/entity/%NAME%",
|
"value" : "https://example.tld/rdap/entity/%NAME%",
|
||||||
"rel" : "self",
|
"rel" : "self",
|
||||||
"href": "https://example.com/rdap/entity/%NAME%",
|
"href": "https://example.tld/rdap/entity/%NAME%",
|
||||||
"type" : "application/rdap+json"
|
"type" : "application/rdap+json"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
|
@ -8,9 +8,9 @@
|
||||||
"links" :
|
"links" :
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"value" : "https://example.com/rdap/entity/0001-ROID",
|
"value" : "https://example.tld/rdap/entity/0001-ROID",
|
||||||
"rel" : "self",
|
"rel" : "self",
|
||||||
"href": "https://example.com/rdap/entity/0001-ROID",
|
"href": "https://example.tld/rdap/entity/0001-ROID",
|
||||||
"type" : "application/rdap+json"
|
"type" : "application/rdap+json"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
@ -54,9 +54,9 @@
|
||||||
"links" :
|
"links" :
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"value" : "https://example.com/rdap/entity/0002-ROID",
|
"value" : "https://example.tld/rdap/entity/0002-ROID",
|
||||||
"rel" : "self",
|
"rel" : "self",
|
||||||
"href": "https://example.com/rdap/entity/0002-ROID",
|
"href": "https://example.tld/rdap/entity/0002-ROID",
|
||||||
"type" : "application/rdap+json"
|
"type" : "application/rdap+json"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
@ -100,9 +100,9 @@
|
||||||
"links" :
|
"links" :
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"value" : "https://example.com/rdap/entity/0003-ROID",
|
"value" : "https://example.tld/rdap/entity/0003-ROID",
|
||||||
"rel" : "self",
|
"rel" : "self",
|
||||||
"href": "https://example.com/rdap/entity/0003-ROID",
|
"href": "https://example.tld/rdap/entity/0003-ROID",
|
||||||
"type" : "application/rdap+json"
|
"type" : "application/rdap+json"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
@ -146,9 +146,9 @@
|
||||||
"links" :
|
"links" :
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"value" : "https://example.com/rdap/entity/0004-ROID",
|
"value" : "https://example.tld/rdap/entity/0004-ROID",
|
||||||
"rel" : "self",
|
"rel" : "self",
|
||||||
"href": "https://example.com/rdap/entity/0004-ROID",
|
"href": "https://example.tld/rdap/entity/0004-ROID",
|
||||||
"type" : "application/rdap+json"
|
"type" : "application/rdap+json"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
@ -203,7 +203,7 @@
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"type" : "application/rdap+json",
|
"type" : "application/rdap+json",
|
||||||
"href" : "https://example.com/rdap/entities?%NAME%",
|
"href" : "https://example.tld/rdap/entities?%NAME%",
|
||||||
"rel" : "next"
|
"rel" : "next"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
@ -227,7 +227,7 @@
|
||||||
"links" :
|
"links" :
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"value" : "https://example.com/rdap/help/tos",
|
"value" : "https://example.tld/rdap/help/tos",
|
||||||
"rel" : "alternate",
|
"rel" : "alternate",
|
||||||
"href" : "https://www.registry.tld/about/rdap/tos.html",
|
"href" : "https://www.registry.tld/about/rdap/tos.html",
|
||||||
"type" : "text/html"
|
"type" : "text/html"
|
||||||
|
|
|
@ -8,9 +8,9 @@
|
||||||
"links" :
|
"links" :
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"value" : "https://example.com/rdap/entity/0001-ROID",
|
"value" : "https://example.tld/rdap/entity/0001-ROID",
|
||||||
"rel" : "self",
|
"rel" : "self",
|
||||||
"href": "https://example.com/rdap/entity/0001-ROID",
|
"href": "https://example.tld/rdap/entity/0001-ROID",
|
||||||
"type" : "application/rdap+json"
|
"type" : "application/rdap+json"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
@ -54,9 +54,9 @@
|
||||||
"links" :
|
"links" :
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"value" : "https://example.com/rdap/entity/0002-ROID",
|
"value" : "https://example.tld/rdap/entity/0002-ROID",
|
||||||
"rel" : "self",
|
"rel" : "self",
|
||||||
"href": "https://example.com/rdap/entity/0002-ROID",
|
"href": "https://example.tld/rdap/entity/0002-ROID",
|
||||||
"type" : "application/rdap+json"
|
"type" : "application/rdap+json"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
@ -100,9 +100,9 @@
|
||||||
"links" :
|
"links" :
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"value" : "https://example.com/rdap/entity/0003-ROID",
|
"value" : "https://example.tld/rdap/entity/0003-ROID",
|
||||||
"rel" : "self",
|
"rel" : "self",
|
||||||
"href": "https://example.com/rdap/entity/0003-ROID",
|
"href": "https://example.tld/rdap/entity/0003-ROID",
|
||||||
"type" : "application/rdap+json"
|
"type" : "application/rdap+json"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
@ -146,9 +146,9 @@
|
||||||
"links" :
|
"links" :
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"value" : "https://example.com/rdap/entity/301",
|
"value" : "https://example.tld/rdap/entity/301",
|
||||||
"rel" : "self",
|
"rel" : "self",
|
||||||
"href": "https://example.com/rdap/entity/301",
|
"href": "https://example.tld/rdap/entity/301",
|
||||||
"type" : "application/rdap+json"
|
"type" : "application/rdap+json"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
@ -210,7 +210,7 @@
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"type" : "application/rdap+json",
|
"type" : "application/rdap+json",
|
||||||
"href" : "https://example.com/rdap/entities?%NAME%",
|
"href" : "https://example.tld/rdap/entities?%NAME%",
|
||||||
"rel" : "next"
|
"rel" : "next"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
@ -234,7 +234,7 @@
|
||||||
"links" :
|
"links" :
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"value" : "https://example.com/rdap/help/tos",
|
"value" : "https://example.tld/rdap/help/tos",
|
||||||
"rel" : "alternate",
|
"rel" : "alternate",
|
||||||
"href" : "https://www.registry.tld/about/rdap/tos.html",
|
"href" : "https://www.registry.tld/about/rdap/tos.html",
|
||||||
"type" : "text/html"
|
"type" : "text/html"
|
||||||
|
|
|
@ -8,9 +8,9 @@
|
||||||
"links" :
|
"links" :
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"value" : "https://example.com/rdap/entity/301",
|
"value" : "https://example.tld/rdap/entity/301",
|
||||||
"rel" : "self",
|
"rel" : "self",
|
||||||
"href": "https://example.com/rdap/entity/301",
|
"href": "https://example.tld/rdap/entity/301",
|
||||||
"type" : "application/rdap+json"
|
"type" : "application/rdap+json"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
@ -61,9 +61,9 @@
|
||||||
"links" :
|
"links" :
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"value" : "https://example.com/rdap/entity/302",
|
"value" : "https://example.tld/rdap/entity/302",
|
||||||
"rel" : "self",
|
"rel" : "self",
|
||||||
"href": "https://example.com/rdap/entity/302",
|
"href": "https://example.tld/rdap/entity/302",
|
||||||
"type" : "application/rdap+json"
|
"type" : "application/rdap+json"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
@ -114,9 +114,9 @@
|
||||||
"links" :
|
"links" :
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"value" : "https://example.com/rdap/entity/303",
|
"value" : "https://example.tld/rdap/entity/303",
|
||||||
"rel" : "self",
|
"rel" : "self",
|
||||||
"href": "https://example.com/rdap/entity/303",
|
"href": "https://example.tld/rdap/entity/303",
|
||||||
"type" : "application/rdap+json"
|
"type" : "application/rdap+json"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
@ -167,9 +167,9 @@
|
||||||
"links" :
|
"links" :
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"value" : "https://example.com/rdap/entity/304",
|
"value" : "https://example.tld/rdap/entity/304",
|
||||||
"rel" : "self",
|
"rel" : "self",
|
||||||
"href": "https://example.com/rdap/entity/304",
|
"href": "https://example.tld/rdap/entity/304",
|
||||||
"type" : "application/rdap+json"
|
"type" : "application/rdap+json"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
@ -231,7 +231,7 @@
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"type" : "application/rdap+json",
|
"type" : "application/rdap+json",
|
||||||
"href" : "https://example.com/rdap/entities?%NAME%",
|
"href" : "https://example.tld/rdap/entities?%NAME%",
|
||||||
"rel" : "next"
|
"rel" : "next"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
@ -255,7 +255,7 @@
|
||||||
"links" :
|
"links" :
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"value" : "https://example.com/rdap/help/tos",
|
"value" : "https://example.tld/rdap/help/tos",
|
||||||
"rel" : "alternate",
|
"rel" : "alternate",
|
||||||
"href" : "https://www.registry.tld/about/rdap/tos.html",
|
"href" : "https://www.registry.tld/about/rdap/tos.html",
|
||||||
"type" : "text/html"
|
"type" : "text/html"
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue