mirror of
https://github.com/google/nomulus
synced 2026-05-21 23:31:51 +00:00
Compare commits
6 Commits
nomulus-20
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
bd70cd91a5 | ||
|
|
73725e94fe | ||
|
|
c3f8ec8c85 | ||
|
|
3894ca6971 | ||
|
|
5f06581572 | ||
|
|
17b851de42 |
48
.github/workflows/update-dependency-reminder.yml
vendored
Normal file
48
.github/workflows/update-dependency-reminder.yml
vendored
Normal file
@@ -0,0 +1,48 @@
|
||||
name: Request Lockfile Review
|
||||
|
||||
on:
|
||||
pull_request_target:
|
||||
branches: ["master"]
|
||||
types: [opened, synchronize, reopened]
|
||||
|
||||
jobs:
|
||||
review-lockfiles:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
pull-requests: write
|
||||
|
||||
steps:
|
||||
# We intentionally do NOT use actions/checkout here.
|
||||
# This keeps the environment completely secure and satisfies CodeQL.
|
||||
|
||||
- name: Check files via GitHub API
|
||||
id: check_files
|
||||
uses: actions/github-script@v7
|
||||
with:
|
||||
script: |
|
||||
const prNumber = context.payload.pull_request.number;
|
||||
|
||||
// Get the list of files in the PR directly from the API
|
||||
const { data: files } = await github.rest.pulls.listFiles({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
pull_number: prNumber,
|
||||
per_page: 100
|
||||
});
|
||||
|
||||
// Look for any file **ending** in gradle.lockfile
|
||||
const hasLockfile = files.some(file => file.filename.endsWith('gradle.lockfile'));
|
||||
core.setOutput('has_lockfile', hasLockfile ? 'true' : 'false');
|
||||
|
||||
- name: Post unresolved review comment
|
||||
if: steps.check_files.outputs.has_lockfile == 'true'
|
||||
uses: actions/github-script@v7
|
||||
with:
|
||||
script: |
|
||||
await github.rest.pulls.createReview({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
pull_number: context.payload.pull_request.number,
|
||||
event: 'REQUEST_CHANGES',
|
||||
body: `### ⚠️ Attention Required: Lockfile Detected\nThis pull request contains modifications to one or more \`*.lockfile\` files. Please confirm that you have run update_dependency.sh to push new dependencies to the private repo.\n\n_Someone with Admin role must manually dismiss this review before merging._`
|
||||
});
|
||||
@@ -54,9 +54,9 @@ public class BatchModule {
|
||||
static final int DEFAULT_MAX_QPS = 10;
|
||||
|
||||
@Provides
|
||||
@Parameter("sender")
|
||||
static String provideSender(HttpServletRequest req) {
|
||||
return extractRequiredParameter(req, "sender");
|
||||
@Parameter("replyTo")
|
||||
static String provideReplyTo(HttpServletRequest req) {
|
||||
return extractRequiredParameter(req, "replyTo");
|
||||
}
|
||||
|
||||
@Provides
|
||||
|
||||
@@ -18,7 +18,9 @@ import static google.registry.request.Action.Method.GET;
|
||||
import static google.registry.request.Action.Method.POST;
|
||||
|
||||
import com.google.api.services.gmail.Gmail;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.flogger.FluentLogger;
|
||||
import com.google.common.net.MediaType;
|
||||
import dagger.Lazy;
|
||||
import google.registry.config.RegistryConfig.Config;
|
||||
import google.registry.groups.GmailClient;
|
||||
@@ -31,6 +33,7 @@ import google.registry.util.Retrier;
|
||||
import jakarta.inject.Inject;
|
||||
import jakarta.mail.internet.AddressException;
|
||||
import jakarta.mail.internet.InternetAddress;
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* Action that executes a canned script specified by the caller.
|
||||
@@ -62,13 +65,16 @@ public class CannedScriptExecutionAction implements Runnable {
|
||||
@Inject Response response;
|
||||
|
||||
@Inject
|
||||
@Parameter("sender")
|
||||
String sender;
|
||||
@Parameter("replyTo")
|
||||
String replyTo;
|
||||
|
||||
@Inject
|
||||
@Parameter("receiver")
|
||||
String receiver;
|
||||
|
||||
@Config("invoiceReplyToEmailAddress")
|
||||
Optional<InternetAddress> replyToEmailAddressFromConfig;
|
||||
|
||||
@Inject
|
||||
CannedScriptExecutionAction() {}
|
||||
|
||||
@@ -77,20 +83,36 @@ public class CannedScriptExecutionAction implements Runnable {
|
||||
// For b/510340944, validating a new G Workspace user can send email. Code below can be
|
||||
// removed or changed afterward.
|
||||
try {
|
||||
logger.atInfo().log("Sending email from %s to %s", sender, receiver);
|
||||
logger.atInfo().log("Sending email to %s with replyTo %s", receiver, replyTo);
|
||||
GmailClient gmailClient =
|
||||
new GmailClient(
|
||||
gmail, retrier, isEmailSendingEnabled, sender, sender, new InternetAddress(sender));
|
||||
new GmailClient(gmail, retrier, isEmailSendingEnabled, new InternetAddress(replyTo));
|
||||
gmailClient.sendEmail(
|
||||
EmailMessage.newBuilder()
|
||||
.addRecipient(new InternetAddress(receiver))
|
||||
.setSubject(String.format("Email send test from %s", sender))
|
||||
.setBody(String.format("This is a test email sent from %s to %s.", sender, receiver))
|
||||
.setSubject(String.format("Email with manually set replyTo header %s", replyTo))
|
||||
.setBody("See subject")
|
||||
.build());
|
||||
response.setPayload("Email sent successfully.");
|
||||
|
||||
try {
|
||||
Thread.sleep(1000);
|
||||
} catch (InterruptedException e) {
|
||||
Thread.currentThread().interrupt();
|
||||
}
|
||||
|
||||
gmailClient.sendEmail(
|
||||
EmailMessage.newBuilder()
|
||||
.setSubject(
|
||||
String.format(
|
||||
"Email with injected replyTo header %s", replyToEmailAddressFromConfig))
|
||||
.setBody("See header")
|
||||
.setRecipients(ImmutableList.of(new InternetAddress(receiver)))
|
||||
.setReplyToEmailAddress(replyToEmailAddressFromConfig)
|
||||
.setContentType(MediaType.HTML_UTF_8)
|
||||
.build());
|
||||
response.setPayload("Emails sent successfully.");
|
||||
} catch (AddressException e) {
|
||||
logger.atWarning().withCause(e).log(
|
||||
"Invalid email address: sender=%s, receiver=%s", sender, receiver);
|
||||
"Invalid email address: sender=%s, receiver=%s", replyTo, receiver);
|
||||
response.setStatus(400);
|
||||
response.setPayload("Invalid email address provided.");
|
||||
} catch (Exception e) {
|
||||
|
||||
@@ -21,7 +21,6 @@ import static google.registry.beam.rde.RdePipeline.TupleTags.DOMAIN_FRAGMENTS;
|
||||
import static google.registry.beam.rde.RdePipeline.TupleTags.EXTERNAL_HOST_FRAGMENTS;
|
||||
import static google.registry.beam.rde.RdePipeline.TupleTags.HOST_TO_PENDING_DEPOSIT;
|
||||
import static google.registry.beam.rde.RdePipeline.TupleTags.PENDING_DEPOSIT;
|
||||
import static google.registry.beam.rde.RdePipeline.TupleTags.REFERENCED_CONTACTS;
|
||||
import static google.registry.beam.rde.RdePipeline.TupleTags.REFERENCED_HOSTS;
|
||||
import static google.registry.beam.rde.RdePipeline.TupleTags.REVISION_ID;
|
||||
import static google.registry.beam.rde.RdePipeline.TupleTags.SUPERORDINATE_DOMAINS;
|
||||
@@ -131,9 +130,8 @@ import org.apache.beam.sdk.values.TypeDescriptor;
|
||||
*
|
||||
* After the most recent (live) domain resources are loaded from the corresponding history objects,
|
||||
* we marshall them to deposit fragments and emit the (pending deposit: deposit fragment) pairs for
|
||||
* further processing. We also find all the contacts and hosts referenced by a given domain and emit
|
||||
* pairs of (contact/host repo ID: pending deposit) for all RDE pending deposits for further
|
||||
* processing.
|
||||
* further processing. We also find all the hosts referenced by a given domain and emit pairs of
|
||||
* (host repo ID: pending deposit) for all RDE pending deposits for further processing.
|
||||
*
|
||||
* <h3>{@link Host}</h3>
|
||||
*
|
||||
@@ -358,7 +356,6 @@ public class RdePipeline implements Serializable {
|
||||
|
||||
private <T extends HistoryEntry> EppResource loadResourceByHistoryEntryId(
|
||||
Class<T> historyEntryClazz, String repoId, long revisionId) {
|
||||
|
||||
return tm().transact(
|
||||
() ->
|
||||
tm().loadByKey(
|
||||
@@ -372,8 +369,8 @@ public class RdePipeline implements Serializable {
|
||||
* Remove unreferenced resources by joining the (repoId, pendingDeposit) pair with the (repoId,
|
||||
* revisionId) on the repoId.
|
||||
*
|
||||
* <p>The (repoId, pendingDeposit) pairs denote resources (contact, host) that are referenced from
|
||||
* a domain, that are to be included in the corresponding pending deposit.
|
||||
* <p>The (repoId, pendingDeposit) pairs denote hosts that are referenced from a domain, that are
|
||||
* to be included in the corresponding pending deposit.
|
||||
*
|
||||
* <p>The (repoId, revisionId) paris come from the most recent history entry query, which can be
|
||||
* used to load the embedded resources themselves.
|
||||
@@ -423,7 +420,7 @@ public class RdePipeline implements Serializable {
|
||||
Counter domainFragmentCounter = Metrics.counter("RDE", "DomainFragment");
|
||||
Counter referencedHostCounter = Metrics.counter("RDE", "ReferencedHost");
|
||||
return domainHistories.apply(
|
||||
"Map DomainHistory to DepositFragment " + "and emit referenced Contact and Host",
|
||||
"Map DomainHistory to DepositFragment and emit referenced Host",
|
||||
ParDo.of(
|
||||
new DoFn<KV<String, Long>, KV<PendingDeposit, DepositFragment>>() {
|
||||
@ProcessElement
|
||||
@@ -465,8 +462,7 @@ public class RdePipeline implements Serializable {
|
||||
});
|
||||
}
|
||||
})
|
||||
.withOutputTags(
|
||||
DOMAIN_FRAGMENTS, TupleTagList.of(REFERENCED_CONTACTS).and(REFERENCED_HOSTS)));
|
||||
.withOutputTags(DOMAIN_FRAGMENTS, TupleTagList.of(REFERENCED_HOSTS)));
|
||||
}
|
||||
|
||||
private PCollectionTuple processHostHistories(
|
||||
@@ -627,9 +623,6 @@ public class RdePipeline implements Serializable {
|
||||
protected static final TupleTag<KV<PendingDeposit, DepositFragment>> DOMAIN_FRAGMENTS =
|
||||
new TupleTag<>() {};
|
||||
|
||||
protected static final TupleTag<KV<String, PendingDeposit>> REFERENCED_CONTACTS =
|
||||
new TupleTag<>() {};
|
||||
|
||||
protected static final TupleTag<KV<String, PendingDeposit>> REFERENCED_HOSTS =
|
||||
new TupleTag<>() {};
|
||||
|
||||
|
||||
@@ -60,12 +60,15 @@ public final class CacheModule {
|
||||
public static Optional<UnifiedJedis> provideJedis(
|
||||
@ApplicationDefaultCredential GoogleCredentialsBundle credentialsBundle,
|
||||
@Config("valkeyHostsAndPorts") Optional<ImmutableList<String>> valkeyHostsAndPorts,
|
||||
@Config("valkeySslSocketFactory") SSLSocketFactory valkeySslSocketFactory) {
|
||||
if (valkeyHostsAndPorts.map(ImmutableList::isEmpty).orElse(true)) {
|
||||
@Config("valkeyCertificateAuthority") Optional<String> valkeyCertificateAuthority) {
|
||||
if (valkeyHostsAndPorts.map(ImmutableList::isEmpty).orElse(true)
|
||||
|| valkeyCertificateAuthority.isEmpty()) {
|
||||
return Optional.empty();
|
||||
}
|
||||
ImmutableSet<HostAndPort> hostsAndPorts =
|
||||
valkeyHostsAndPorts.get().stream().map(HostAndPort::from).collect(toImmutableSet());
|
||||
SSLSocketFactory valkeySslSocketFactory =
|
||||
createValkeySslSocketFactory(valkeyCertificateAuthority.get());
|
||||
JedisClientConfig clientConfig =
|
||||
DefaultJedisClientConfig.builder()
|
||||
.ssl(true)
|
||||
@@ -111,11 +114,7 @@ public final class CacheModule {
|
||||
return new MultilayerHostCache(jedisClient.get(), cacheMetrics);
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
@Config("valkeySslSocketFactory")
|
||||
static SSLSocketFactory provideValkeySslSocketFactory(
|
||||
@Config("valkeyCertificateAuthority") String valkeyCertificateAuthority) {
|
||||
private static SSLSocketFactory createValkeySslSocketFactory(String valkeyCertificateAuthority) {
|
||||
try {
|
||||
ImmutableList<X509Certificate> trustedCerts =
|
||||
CertificateFactory.getInstance("X.509")
|
||||
|
||||
@@ -19,16 +19,6 @@ import dagger.Provides;
|
||||
import dagger.Subcomponent;
|
||||
import google.registry.batch.BatchModule;
|
||||
import google.registry.dns.DnsModule;
|
||||
import google.registry.flows.contact.ContactCheckFlow;
|
||||
import google.registry.flows.contact.ContactCreateFlow;
|
||||
import google.registry.flows.contact.ContactDeleteFlow;
|
||||
import google.registry.flows.contact.ContactInfoFlow;
|
||||
import google.registry.flows.contact.ContactTransferApproveFlow;
|
||||
import google.registry.flows.contact.ContactTransferCancelFlow;
|
||||
import google.registry.flows.contact.ContactTransferQueryFlow;
|
||||
import google.registry.flows.contact.ContactTransferRejectFlow;
|
||||
import google.registry.flows.contact.ContactTransferRequestFlow;
|
||||
import google.registry.flows.contact.ContactUpdateFlow;
|
||||
import google.registry.flows.custom.CustomLogicModule;
|
||||
import google.registry.flows.domain.DomainCheckFlow;
|
||||
import google.registry.flows.domain.DomainClaimsCheckFlow;
|
||||
@@ -54,6 +44,8 @@ import google.registry.flows.session.HelloFlow;
|
||||
import google.registry.flows.session.LoginFlow;
|
||||
import google.registry.flows.session.LogoutFlow;
|
||||
import google.registry.model.eppcommon.Trid;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
|
||||
/** Dagger component for flow classes. */
|
||||
@FlowScope
|
||||
@@ -69,16 +61,6 @@ public interface FlowComponent {
|
||||
FlowRunner flowRunner();
|
||||
|
||||
// Flows must be added here and in FlowComponentModule below.
|
||||
ContactCheckFlow contactCheckFlow();
|
||||
ContactCreateFlow contactCreateFlow();
|
||||
ContactDeleteFlow contactDeleteFlow();
|
||||
ContactInfoFlow contactInfoFlow();
|
||||
ContactTransferApproveFlow contactTransferApproveFlow();
|
||||
ContactTransferCancelFlow contactTransferCancelFlow();
|
||||
ContactTransferQueryFlow contactTransferQueryFlow();
|
||||
ContactTransferRejectFlow contactTransferRejectFlow();
|
||||
ContactTransferRequestFlow contactTransferRequestFlow();
|
||||
ContactUpdateFlow contactUpdateFlow();
|
||||
DomainCheckFlow domainCheckFlow();
|
||||
DomainClaimsCheckFlow domainClaimsCheckFlow();
|
||||
DomainCreateFlow domainCreateFlow();
|
||||
@@ -118,40 +100,16 @@ public interface FlowComponent {
|
||||
// TODO(b/29874464): fix this in a cleaner way.
|
||||
@Provides
|
||||
static Flow provideFlow(FlowComponent flows, Class<? extends Flow> clazz) {
|
||||
return clazz.equals(ContactCheckFlow.class) ? flows.contactCheckFlow()
|
||||
: clazz.equals(ContactCreateFlow.class) ? flows.contactCreateFlow()
|
||||
: clazz.equals(ContactDeleteFlow.class) ? flows.contactDeleteFlow()
|
||||
: clazz.equals(ContactInfoFlow.class) ? flows.contactInfoFlow()
|
||||
: clazz.equals(ContactTransferApproveFlow.class) ? flows.contactTransferApproveFlow()
|
||||
: clazz.equals(ContactTransferCancelFlow.class) ? flows.contactTransferCancelFlow()
|
||||
: clazz.equals(ContactTransferQueryFlow.class) ? flows.contactTransferQueryFlow()
|
||||
: clazz.equals(ContactTransferRejectFlow.class) ? flows.contactTransferRejectFlow()
|
||||
: clazz.equals(ContactTransferRequestFlow.class) ? flows.contactTransferRequestFlow()
|
||||
: clazz.equals(ContactUpdateFlow.class) ? flows.contactUpdateFlow()
|
||||
: clazz.equals(DomainCheckFlow.class) ? flows.domainCheckFlow()
|
||||
: clazz.equals(DomainClaimsCheckFlow.class) ? flows.domainClaimsCheckFlow()
|
||||
: clazz.equals(DomainCreateFlow.class) ? flows.domainCreateFlow()
|
||||
: clazz.equals(DomainDeleteFlow.class) ? flows.domainDeleteFlow()
|
||||
: clazz.equals(DomainInfoFlow.class) ? flows.domainInfoFlow()
|
||||
: clazz.equals(DomainRenewFlow.class) ? flows.domainRenewFlow()
|
||||
: clazz.equals(DomainRestoreRequestFlow.class) ? flows.domainRestoreRequestFlow()
|
||||
: clazz.equals(DomainTransferApproveFlow.class) ? flows.domainTransferApproveFlow()
|
||||
: clazz.equals(DomainTransferCancelFlow.class) ? flows.domainTransferCancelFlow()
|
||||
: clazz.equals(DomainTransferQueryFlow.class) ? flows.domainTransferQueryFlow()
|
||||
: clazz.equals(DomainTransferRejectFlow.class) ? flows.domainTransferRejectFlow()
|
||||
: clazz.equals(DomainTransferRequestFlow.class) ? flows.domainTransferRequestFlow()
|
||||
: clazz.equals(DomainUpdateFlow.class) ? flows.domainUpdateFlow()
|
||||
: clazz.equals(HostCheckFlow.class) ? flows.hostCheckFlow()
|
||||
: clazz.equals(HostCreateFlow.class) ? flows.hostCreateFlow()
|
||||
: clazz.equals(HostDeleteFlow.class) ? flows.hostDeleteFlow()
|
||||
: clazz.equals(HostInfoFlow.class) ? flows.hostInfoFlow()
|
||||
: clazz.equals(HostUpdateFlow.class) ? flows.hostUpdateFlow()
|
||||
: clazz.equals(PollAckFlow.class) ? flows.pollAckFlow()
|
||||
: clazz.equals(PollRequestFlow.class) ? flows.pollRequestFlow()
|
||||
: clazz.equals(HelloFlow.class) ? flows.helloFlow()
|
||||
: clazz.equals(LoginFlow.class) ? flows.loginFlow()
|
||||
: clazz.equals(LogoutFlow.class) ? flows.logoutFlow()
|
||||
: null;
|
||||
String simpleName = clazz.getSimpleName();
|
||||
// The method name is the same as the class name but with the first character being lowercase
|
||||
String methodName = Character.toLowerCase(simpleName.charAt(0)) + simpleName.substring(1);
|
||||
try {
|
||||
Method method = FlowComponent.class.getMethod(methodName);
|
||||
method.setAccessible(true);
|
||||
return (Flow) method.invoke(flows);
|
||||
} catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,31 +0,0 @@
|
||||
// Copyright 2017 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.flows.contact;
|
||||
|
||||
import google.registry.flows.annotations.ReportingSpec;
|
||||
import google.registry.flows.exceptions.ContactsProhibitedException;
|
||||
import google.registry.model.reporting.IcannReportingTypes.ActivityReportField;
|
||||
import jakarta.inject.Inject;
|
||||
|
||||
/**
|
||||
* An EPP flow that is meant to check whether a contact can be provisioned.
|
||||
*
|
||||
* @error {@link ContactsProhibitedException}
|
||||
*/
|
||||
@Deprecated
|
||||
@ReportingSpec(ActivityReportField.CONTACT_CHECK)
|
||||
public final class ContactCheckFlow extends ContactsProhibitedFlow {
|
||||
@Inject ContactCheckFlow() {}
|
||||
}
|
||||
@@ -1,31 +0,0 @@
|
||||
// Copyright 2017 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.flows.contact;
|
||||
|
||||
import google.registry.flows.annotations.ReportingSpec;
|
||||
import google.registry.flows.exceptions.ContactsProhibitedException;
|
||||
import google.registry.model.reporting.IcannReportingTypes.ActivityReportField;
|
||||
import jakarta.inject.Inject;
|
||||
|
||||
/**
|
||||
* An EPP flow meant to create a new contact.
|
||||
*
|
||||
* @error {@link ContactsProhibitedException}
|
||||
*/
|
||||
@Deprecated
|
||||
@ReportingSpec(ActivityReportField.CONTACT_CREATE)
|
||||
public final class ContactCreateFlow extends ContactsProhibitedFlow {
|
||||
@Inject ContactCreateFlow() {}
|
||||
}
|
||||
@@ -1,32 +0,0 @@
|
||||
// Copyright 2017 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.flows.contact;
|
||||
|
||||
import google.registry.flows.annotations.ReportingSpec;
|
||||
import google.registry.flows.exceptions.ContactsProhibitedException;
|
||||
import google.registry.model.reporting.IcannReportingTypes.ActivityReportField;
|
||||
import jakarta.inject.Inject;
|
||||
|
||||
/**
|
||||
* An EPP flow that is meant to delete a contact.
|
||||
*
|
||||
* @error {@link ContactsProhibitedException}
|
||||
*/
|
||||
@Deprecated
|
||||
@ReportingSpec(ActivityReportField.CONTACT_DELETE)
|
||||
public final class ContactDeleteFlow extends ContactsProhibitedFlow {
|
||||
@Inject
|
||||
ContactDeleteFlow() {}
|
||||
}
|
||||
@@ -1,32 +0,0 @@
|
||||
// Copyright 2017 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.flows.contact;
|
||||
|
||||
import google.registry.flows.annotations.ReportingSpec;
|
||||
import google.registry.flows.exceptions.ContactsProhibitedException;
|
||||
import google.registry.model.reporting.IcannReportingTypes.ActivityReportField;
|
||||
import jakarta.inject.Inject;
|
||||
|
||||
/**
|
||||
* An EPP flow that is meant to return information about a contact.
|
||||
*
|
||||
* @error {@link ContactsProhibitedException}
|
||||
*/
|
||||
@Deprecated
|
||||
@ReportingSpec(ActivityReportField.CONTACT_INFO)
|
||||
public final class ContactInfoFlow extends ContactsProhibitedFlow {
|
||||
@Inject
|
||||
ContactInfoFlow() {}
|
||||
}
|
||||
@@ -1,31 +0,0 @@
|
||||
// Copyright 2017 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.flows.contact;
|
||||
|
||||
import google.registry.flows.annotations.ReportingSpec;
|
||||
import google.registry.flows.exceptions.ContactsProhibitedException;
|
||||
import google.registry.model.reporting.IcannReportingTypes.ActivityReportField;
|
||||
import jakarta.inject.Inject;
|
||||
|
||||
/**
|
||||
* An EPP flow that is meant to approve a pending transfer on a contact.
|
||||
*
|
||||
* @error {@link ContactsProhibitedException}
|
||||
*/
|
||||
@Deprecated
|
||||
@ReportingSpec(ActivityReportField.CONTACT_TRANSFER_APPROVE)
|
||||
public final class ContactTransferApproveFlow extends ContactsProhibitedFlow {
|
||||
@Inject ContactTransferApproveFlow() {}
|
||||
}
|
||||
@@ -1,31 +0,0 @@
|
||||
// Copyright 2017 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.flows.contact;
|
||||
|
||||
import google.registry.flows.annotations.ReportingSpec;
|
||||
import google.registry.flows.exceptions.ContactsProhibitedException;
|
||||
import google.registry.model.reporting.IcannReportingTypes.ActivityReportField;
|
||||
import jakarta.inject.Inject;
|
||||
|
||||
/**
|
||||
* An EPP flow that is meant to cancel a pending transfer on a contact.
|
||||
*
|
||||
* @error {@link ContactsProhibitedException}
|
||||
*/
|
||||
@Deprecated
|
||||
@ReportingSpec(ActivityReportField.CONTACT_TRANSFER_CANCEL)
|
||||
public final class ContactTransferCancelFlow extends ContactsProhibitedFlow {
|
||||
@Inject ContactTransferCancelFlow() {}
|
||||
}
|
||||
@@ -1,31 +0,0 @@
|
||||
// Copyright 2017 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.flows.contact;
|
||||
|
||||
import google.registry.flows.annotations.ReportingSpec;
|
||||
import google.registry.flows.exceptions.ContactsProhibitedException;
|
||||
import google.registry.model.reporting.IcannReportingTypes.ActivityReportField;
|
||||
import jakarta.inject.Inject;
|
||||
|
||||
/**
|
||||
* An EPP flow that is meant to query a pending transfer on a contact.
|
||||
*
|
||||
* @error {@link ContactsProhibitedException}
|
||||
*/
|
||||
@Deprecated
|
||||
@ReportingSpec(ActivityReportField.CONTACT_TRANSFER_QUERY)
|
||||
public final class ContactTransferQueryFlow extends ContactsProhibitedFlow {
|
||||
@Inject ContactTransferQueryFlow() {}
|
||||
}
|
||||
@@ -1,31 +0,0 @@
|
||||
// Copyright 2017 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.flows.contact;
|
||||
|
||||
import google.registry.flows.annotations.ReportingSpec;
|
||||
import google.registry.flows.exceptions.ContactsProhibitedException;
|
||||
import google.registry.model.reporting.IcannReportingTypes.ActivityReportField;
|
||||
import jakarta.inject.Inject;
|
||||
|
||||
/**
|
||||
* An EPP flow that is meant to reject a pending transfer on a contact.
|
||||
*
|
||||
* @error {@link ContactsProhibitedException}
|
||||
*/
|
||||
@Deprecated
|
||||
@ReportingSpec(ActivityReportField.CONTACT_TRANSFER_REJECT)
|
||||
public final class ContactTransferRejectFlow extends ContactsProhibitedFlow {
|
||||
@Inject ContactTransferRejectFlow() {}
|
||||
}
|
||||
@@ -1,32 +0,0 @@
|
||||
// Copyright 2017 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.flows.contact;
|
||||
|
||||
import google.registry.flows.annotations.ReportingSpec;
|
||||
import google.registry.flows.exceptions.ContactsProhibitedException;
|
||||
import google.registry.model.reporting.IcannReportingTypes.ActivityReportField;
|
||||
import jakarta.inject.Inject;
|
||||
|
||||
/**
|
||||
* An EPP flow that is meant to request a transfer on a contact.
|
||||
*
|
||||
* @error {@link ContactsProhibitedException}
|
||||
*/
|
||||
@Deprecated
|
||||
@ReportingSpec(ActivityReportField.CONTACT_TRANSFER_REQUEST)
|
||||
public final class ContactTransferRequestFlow extends ContactsProhibitedFlow {
|
||||
@Inject
|
||||
ContactTransferRequestFlow() {}
|
||||
}
|
||||
@@ -1,31 +0,0 @@
|
||||
// Copyright 2017 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.flows.contact;
|
||||
|
||||
import google.registry.flows.annotations.ReportingSpec;
|
||||
import google.registry.flows.exceptions.ContactsProhibitedException;
|
||||
import google.registry.model.reporting.IcannReportingTypes.ActivityReportField;
|
||||
import jakarta.inject.Inject;
|
||||
|
||||
/**
|
||||
* An EPP flow meant to update a contact.
|
||||
*
|
||||
* @error {@link ContactsProhibitedException}
|
||||
*/
|
||||
@Deprecated
|
||||
@ReportingSpec(ActivityReportField.CONTACT_UPDATE)
|
||||
public final class ContactUpdateFlow extends ContactsProhibitedFlow {
|
||||
@Inject ContactUpdateFlow() {}
|
||||
}
|
||||
@@ -1,28 +0,0 @@
|
||||
// Copyright 2025 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.flows.contact;
|
||||
|
||||
import google.registry.flows.EppException;
|
||||
import google.registry.flows.Flow;
|
||||
import google.registry.flows.exceptions.ContactsProhibitedException;
|
||||
import google.registry.model.eppoutput.EppResponse;
|
||||
|
||||
/** Nomulus follows the Minimum Dataset Requirements, meaning it stores no contact information. */
|
||||
public abstract class ContactsProhibitedFlow implements Flow {
|
||||
@Override
|
||||
public EppResponse run() throws EppException {
|
||||
throw new ContactsProhibitedException();
|
||||
}
|
||||
}
|
||||
@@ -22,16 +22,6 @@ import google.registry.flows.EppException;
|
||||
import google.registry.flows.EppException.SyntaxErrorException;
|
||||
import google.registry.flows.EppException.UnimplementedCommandException;
|
||||
import google.registry.flows.Flow;
|
||||
import google.registry.flows.contact.ContactCheckFlow;
|
||||
import google.registry.flows.contact.ContactCreateFlow;
|
||||
import google.registry.flows.contact.ContactDeleteFlow;
|
||||
import google.registry.flows.contact.ContactInfoFlow;
|
||||
import google.registry.flows.contact.ContactTransferApproveFlow;
|
||||
import google.registry.flows.contact.ContactTransferCancelFlow;
|
||||
import google.registry.flows.contact.ContactTransferQueryFlow;
|
||||
import google.registry.flows.contact.ContactTransferRejectFlow;
|
||||
import google.registry.flows.contact.ContactTransferRequestFlow;
|
||||
import google.registry.flows.contact.ContactUpdateFlow;
|
||||
import google.registry.flows.domain.DomainCheckFlow;
|
||||
import google.registry.flows.domain.DomainClaimsCheckFlow;
|
||||
import google.registry.flows.domain.DomainCreateFlow;
|
||||
@@ -55,7 +45,6 @@ import google.registry.flows.poll.PollRequestFlow;
|
||||
import google.registry.flows.session.HelloFlow;
|
||||
import google.registry.flows.session.LoginFlow;
|
||||
import google.registry.flows.session.LogoutFlow;
|
||||
import google.registry.model.contact.ContactCommand;
|
||||
import google.registry.model.domain.DomainCommand;
|
||||
import google.registry.model.domain.launch.LaunchCheckExtension;
|
||||
import google.registry.model.domain.launch.LaunchCheckExtension.CheckType;
|
||||
@@ -202,11 +191,6 @@ public class FlowPicker {
|
||||
private static final FlowProvider RESOURCE_CRUD_FLOW_PROVIDER = new FlowProvider() {
|
||||
private final Map<Class<?>, Class<? extends Flow>> resourceCrudFlows =
|
||||
new ImmutableMap.Builder<Class<?>, Class<? extends Flow>>()
|
||||
.put(ContactCommand.Check.class, ContactCheckFlow.class)
|
||||
.put(ContactCommand.Create.class, ContactCreateFlow.class)
|
||||
.put(ContactCommand.Delete.class, ContactDeleteFlow.class)
|
||||
.put(ContactCommand.Info.class, ContactInfoFlow.class)
|
||||
.put(ContactCommand.Update.class, ContactUpdateFlow.class)
|
||||
.put(DomainCommand.Create.class, DomainCreateFlow.class)
|
||||
.put(DomainCommand.Delete.class, DomainDeleteFlow.class)
|
||||
.put(DomainCommand.Info.class, DomainInfoFlow.class)
|
||||
@@ -230,24 +214,6 @@ public class FlowPicker {
|
||||
new FlowProvider() {
|
||||
private final Table<Class<?>, TransferOp, Class<? extends Flow>> transferFlows =
|
||||
ImmutableTable.<Class<?>, TransferOp, Class<? extends Flow>>builder()
|
||||
.put(
|
||||
ContactCommand.Transfer.class,
|
||||
TransferOp.APPROVE,
|
||||
ContactTransferApproveFlow.class)
|
||||
.put(
|
||||
ContactCommand.Transfer.class,
|
||||
TransferOp.CANCEL,
|
||||
ContactTransferCancelFlow.class)
|
||||
.put(
|
||||
ContactCommand.Transfer.class, TransferOp.QUERY, ContactTransferQueryFlow.class)
|
||||
.put(
|
||||
ContactCommand.Transfer.class,
|
||||
TransferOp.REJECT,
|
||||
ContactTransferRejectFlow.class)
|
||||
.put(
|
||||
ContactCommand.Transfer.class,
|
||||
TransferOp.REQUEST,
|
||||
ContactTransferRequestFlow.class)
|
||||
.put(
|
||||
DomainCommand.Transfer.class,
|
||||
TransferOp.APPROVE,
|
||||
|
||||
@@ -15,7 +15,6 @@
|
||||
package google.registry.flows.session;
|
||||
|
||||
import static com.google.common.collect.Sets.difference;
|
||||
import static google.registry.model.common.FeatureFlag.FeatureName.PROHIBIT_CONTACT_OBJECTS_ON_LOGIN;
|
||||
import static google.registry.persistence.transaction.TransactionManagerFactory.tm;
|
||||
import static google.registry.util.CollectionUtils.nullToEmpty;
|
||||
|
||||
@@ -40,7 +39,6 @@ import google.registry.flows.TlsCredentials.BadRegistrarIpAddressException;
|
||||
import google.registry.flows.TlsCredentials.MissingRegistrarCertificateException;
|
||||
import google.registry.flows.TransportCredentials;
|
||||
import google.registry.flows.TransportCredentials.BadRegistrarPasswordException;
|
||||
import google.registry.model.common.FeatureFlag;
|
||||
import google.registry.model.eppcommon.ProtocolDefinition;
|
||||
import google.registry.model.eppcommon.ProtocolDefinition.ServiceExtension;
|
||||
import google.registry.model.eppinput.EppInput;
|
||||
@@ -120,9 +118,7 @@ public class LoginFlow implements MutatingFlow {
|
||||
Set<String> unsupportedObjectServices =
|
||||
difference(
|
||||
nullToEmpty(services.getObjectServices()),
|
||||
FeatureFlag.isActiveNow(PROHIBIT_CONTACT_OBJECTS_ON_LOGIN)
|
||||
? ProtocolDefinition.SUPPORTED_OBJECT_SERVICES
|
||||
: ProtocolDefinition.SUPPORTED_OBJECT_SERVICES_WITH_CONTACT);
|
||||
ProtocolDefinition.SUPPORTED_OBJECT_SERVICES);
|
||||
stopwatch.tick("LoginFlow difference unsupportedObjectServices");
|
||||
if (!unsupportedObjectServices.isEmpty()) {
|
||||
throw new UnimplementedObjectServiceException();
|
||||
|
||||
@@ -56,9 +56,9 @@ public final class GmailClient {
|
||||
private final InternetAddress outgoingEmailAddressWithUsername;
|
||||
private final InternetAddress replyToEmailAddress;
|
||||
|
||||
// TODO(b/510340944): make package private after feature is rolled out
|
||||
// TODO(b/510340944): drop sender info. Sender is determined by the Gmail credential owner.
|
||||
@Inject
|
||||
public GmailClient(
|
||||
GmailClient(
|
||||
Lazy<Gmail> gmail,
|
||||
Retrier retrier,
|
||||
@Config("isEmailSendingEnabled") boolean isEmailSendingEnabled,
|
||||
@@ -78,6 +78,20 @@ public final class GmailClient {
|
||||
}
|
||||
}
|
||||
|
||||
// TODO(b/510340944): Remove this experiment method
|
||||
public GmailClient(
|
||||
Lazy<Gmail> gmail,
|
||||
Retrier retrier,
|
||||
@Config("isEmailSendingEnabled") boolean isEmailSendingEnabled,
|
||||
@Config("replyToEmailAddress") InternetAddress replyToEmailAddress) {
|
||||
|
||||
this.gmail = gmail;
|
||||
this.retrier = retrier;
|
||||
this.isEmailSendingEnabled = isEmailSendingEnabled;
|
||||
this.replyToEmailAddress = replyToEmailAddress;
|
||||
this.outgoingEmailAddressWithUsername = null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sends {@code emailMessage} using {@link Gmail}.
|
||||
*/
|
||||
@@ -117,7 +131,9 @@ public final class GmailClient {
|
||||
try {
|
||||
MimeMessage msg =
|
||||
new MimeMessage(Session.getDefaultInstance(new Properties(), /* authenticator= */ null));
|
||||
msg.setFrom(this.outgoingEmailAddressWithUsername);
|
||||
if (this.outgoingEmailAddressWithUsername != null) {
|
||||
msg.setFrom(this.outgoingEmailAddressWithUsername);
|
||||
}
|
||||
msg.setReplyTo(
|
||||
new InternetAddress[] {emailMessage.replyToEmailAddress().orElse(replyToEmailAddress)});
|
||||
msg.addRecipients(
|
||||
|
||||
@@ -22,6 +22,7 @@ import google.registry.config.RegistryConfig.Config;
|
||||
import google.registry.keyring.api.Keyring;
|
||||
import google.registry.keyring.secretmanager.SecretManagerKeyring;
|
||||
import jakarta.inject.Singleton;
|
||||
import java.util.Optional;
|
||||
|
||||
/** Dagger module for {@link Keyring} */
|
||||
@Module
|
||||
@@ -55,7 +56,7 @@ public abstract class KeyringModule {
|
||||
|
||||
@Provides
|
||||
@Config("valkeyCertificateAuthority")
|
||||
public static String provideValkeyCertificateAuthority(Keyring keyring) {
|
||||
return keyring.getValkeyCertificateAuthority();
|
||||
public static Optional<String> provideValkeyCertificateAuthority(Keyring keyring) {
|
||||
return Optional.ofNullable(keyring.getValkeyCertificateAuthority());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,37 +0,0 @@
|
||||
// Copyright 2017 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.model.contact;
|
||||
|
||||
import google.registry.model.eppcommon.Address;
|
||||
import jakarta.persistence.Embeddable;
|
||||
|
||||
/**
|
||||
* EPP Contact Address
|
||||
*
|
||||
* <p>This class is embedded inside the {@link PostalInfo} of an EPP contact to hold its address.
|
||||
* The fields are all defined in parent class {@link Address}, but the subclass is still necessary
|
||||
* to pick up the contact namespace.
|
||||
*
|
||||
* <p>This does not implement {@code Overlayable} because it is intended to be bulk replaced on
|
||||
* update.
|
||||
*
|
||||
* @see PostalInfo
|
||||
*/
|
||||
@Embeddable
|
||||
public class ContactAddress extends Address {
|
||||
|
||||
/** Builder for {@link ContactAddress}. */
|
||||
public static class Builder extends Address.Builder<ContactAddress> {}
|
||||
}
|
||||
@@ -1,30 +0,0 @@
|
||||
// Copyright 2017 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.model.contact;
|
||||
|
||||
import google.registry.model.eppcommon.AuthInfo;
|
||||
import jakarta.persistence.Embeddable;
|
||||
import jakarta.xml.bind.annotation.XmlType;
|
||||
|
||||
/** A version of authInfo specifically for contacts. */
|
||||
@Embeddable
|
||||
@XmlType(namespace = "urn:ietf:params:xml:ns:contact-1.0")
|
||||
public class ContactAuthInfo extends AuthInfo {
|
||||
public static ContactAuthInfo create(PasswordAuth pw) {
|
||||
ContactAuthInfo instance = new ContactAuthInfo();
|
||||
instance.pw = pw;
|
||||
return instance;
|
||||
}
|
||||
}
|
||||
@@ -1,198 +0,0 @@
|
||||
// Copyright 2017 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.model.contact;
|
||||
|
||||
import static com.google.common.base.Preconditions.checkState;
|
||||
import static google.registry.util.CollectionUtils.nullToEmpty;
|
||||
|
||||
import com.google.common.collect.Maps;
|
||||
import google.registry.model.EppResource;
|
||||
import google.registry.model.ImmutableObject;
|
||||
import google.registry.model.contact.PostalInfo.Type;
|
||||
import google.registry.model.eppinput.ResourceCommand.AbstractSingleResourceCommand;
|
||||
import google.registry.model.eppinput.ResourceCommand.ResourceCheck;
|
||||
import google.registry.model.eppinput.ResourceCommand.ResourceCreateOrChange;
|
||||
import google.registry.model.eppinput.ResourceCommand.ResourceUpdate;
|
||||
import google.registry.model.eppinput.ResourceCommand.SingleResourceCommand;
|
||||
import jakarta.xml.bind.annotation.XmlElement;
|
||||
import jakarta.xml.bind.annotation.XmlRootElement;
|
||||
import jakarta.xml.bind.annotation.XmlTransient;
|
||||
import jakarta.xml.bind.annotation.XmlType;
|
||||
import jakarta.xml.bind.annotation.adapters.CollapsedStringAdapter;
|
||||
import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/** A collection of (vestigial) Contact commands. */
|
||||
public class ContactCommand {
|
||||
|
||||
/** The fields on "chgType" from <a href="http://tools.ietf.org/html/rfc5733">RFC5733</a>. */
|
||||
@XmlTransient
|
||||
public static class ContactCreateOrChange extends ImmutableObject
|
||||
implements ResourceCreateOrChange<EppResource.Builder<?, ?>> {
|
||||
|
||||
/** Postal info for the contact. */
|
||||
List<PostalInfo> postalInfo;
|
||||
|
||||
/** Contact’s voice number. */
|
||||
ContactPhoneNumber voice;
|
||||
|
||||
/** Contact’s fax number. */
|
||||
ContactPhoneNumber fax;
|
||||
|
||||
/** Contact’s email address. */
|
||||
@XmlJavaTypeAdapter(CollapsedStringAdapter.class)
|
||||
String email;
|
||||
|
||||
/** Authorization info (aka transfer secret) of the contact. */
|
||||
ContactAuthInfo authInfo;
|
||||
|
||||
/** Disclosure policy. */
|
||||
Disclose disclose;
|
||||
|
||||
/** Helper method to move between the postal infos list and the individual getters. */
|
||||
protected Map<Type, PostalInfo> getPostalInfosAsMap() {
|
||||
// There can be no more than 2 postalInfos (enforced by the schema), and if there are 2 they
|
||||
// must be of different types (not enforced). If the type is repeated, uniqueIndex will throw.
|
||||
checkState(nullToEmpty(postalInfo).size() <= 2);
|
||||
return Maps.uniqueIndex(nullToEmpty(postalInfo), PostalInfo::getType);
|
||||
}
|
||||
|
||||
public ContactPhoneNumber getVoice() {
|
||||
return voice;
|
||||
}
|
||||
|
||||
public ContactPhoneNumber getFax() {
|
||||
return fax;
|
||||
}
|
||||
|
||||
public String getEmail() {
|
||||
return email;
|
||||
}
|
||||
|
||||
public ContactAuthInfo getAuthInfo() {
|
||||
return authInfo;
|
||||
}
|
||||
|
||||
public Disclose getDisclose() {
|
||||
return disclose;
|
||||
}
|
||||
|
||||
public PostalInfo getInternationalizedPostalInfo() {
|
||||
return getPostalInfosAsMap().get(Type.INTERNATIONALIZED);
|
||||
}
|
||||
|
||||
public PostalInfo getLocalizedPostalInfo() {
|
||||
return getPostalInfosAsMap().get(Type.LOCALIZED);
|
||||
}
|
||||
}
|
||||
|
||||
/** An abstract contact command that contains authorization info. */
|
||||
@XmlTransient
|
||||
public static class AbstractContactAuthCommand extends AbstractSingleResourceCommand {
|
||||
/** Authorization info used to validate if client has permissions to perform this operation. */
|
||||
ContactAuthInfo authInfo;
|
||||
|
||||
@Override
|
||||
public ContactAuthInfo getAuthInfo() {
|
||||
return authInfo;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* A create command for a (vestigial) Contact, mapping "createType" from <a
|
||||
* href="http://tools.ietf.org/html/rfc5733">RFC5733</a>}.
|
||||
*/
|
||||
@XmlType(propOrder = {"contactId", "postalInfo", "voice", "fax", "email", "authInfo", "disclose"})
|
||||
@XmlRootElement
|
||||
public static class Create extends ContactCreateOrChange
|
||||
implements SingleResourceCommand, ResourceCreateOrChange<EppResource.Builder<?, ?>> {
|
||||
/**
|
||||
* Unique identifier for this contact.
|
||||
*
|
||||
* <p>This is only unique in the sense that for any given lifetime specified as the time range
|
||||
* from (creationTime, deletionTime) there can only be one contact in the database with this id.
|
||||
* However, there can be many contacts with the same id and non-overlapping lifetimes.
|
||||
*/
|
||||
@XmlElement(name = "id")
|
||||
String contactId;
|
||||
|
||||
@Override
|
||||
public String getTargetId() {
|
||||
return contactId;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ContactAuthInfo getAuthInfo() {
|
||||
return authInfo;
|
||||
}
|
||||
}
|
||||
|
||||
/** A delete command for a (vestigial) Contact. */
|
||||
@XmlRootElement
|
||||
public static class Delete extends AbstractSingleResourceCommand {}
|
||||
|
||||
/** An info request for a (vestigial) Contact. */
|
||||
@XmlRootElement
|
||||
@XmlType(propOrder = {"targetId", "authInfo"})
|
||||
public static class Info extends AbstractContactAuthCommand {}
|
||||
|
||||
/** A check request for (vestigial) Contact. */
|
||||
@XmlRootElement
|
||||
public static class Check extends ResourceCheck {}
|
||||
|
||||
/** A transfer operation for a (vestigial) Contact. */
|
||||
@XmlRootElement
|
||||
@XmlType(propOrder = {"targetId", "authInfo"})
|
||||
public static class Transfer extends AbstractContactAuthCommand {}
|
||||
|
||||
/** An update to a (vestigial) Contact. */
|
||||
@XmlRootElement
|
||||
@XmlType(propOrder = {"targetId", "innerAdd", "innerRemove", "innerChange"})
|
||||
public static class Update
|
||||
extends ResourceUpdate<Update.AddRemove, EppResource.Builder<?, ?>, Update.Change> {
|
||||
|
||||
@XmlElement(name = "chg")
|
||||
protected Change innerChange;
|
||||
|
||||
@XmlElement(name = "add")
|
||||
protected AddRemove innerAdd;
|
||||
|
||||
@XmlElement(name = "rem")
|
||||
protected AddRemove innerRemove;
|
||||
|
||||
@Override
|
||||
protected Change getNullableInnerChange() {
|
||||
return innerChange;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected AddRemove getNullableInnerAdd() {
|
||||
return innerAdd;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected AddRemove getNullableInnerRemove() {
|
||||
return innerRemove;
|
||||
}
|
||||
|
||||
/** The inner change type on a contact update command. */
|
||||
public static class AddRemove extends ResourceUpdate.AddRemove {}
|
||||
|
||||
/** The inner change type on a contact update command. */
|
||||
@XmlType(propOrder = {"postalInfo", "voice", "fax", "email", "authInfo", "disclose"})
|
||||
public static class Change extends ContactCreateOrChange {}
|
||||
}
|
||||
}
|
||||
@@ -1,140 +0,0 @@
|
||||
// Copyright 2017 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.model.contact;
|
||||
|
||||
import com.google.auto.value.AutoValue;
|
||||
import com.google.auto.value.AutoValue.CopyAnnotations;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import google.registry.model.eppcommon.StatusValue;
|
||||
import google.registry.model.eppoutput.EppResponse.ResponseData;
|
||||
import jakarta.xml.bind.annotation.XmlElement;
|
||||
import jakarta.xml.bind.annotation.XmlRootElement;
|
||||
import jakarta.xml.bind.annotation.XmlType;
|
||||
import jakarta.xml.bind.annotation.adapters.CollapsedStringAdapter;
|
||||
import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
|
||||
import java.time.Instant;
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
/** The {@link ResponseData} returned for an EPP info flow on a contact. */
|
||||
@XmlRootElement(name = "infData")
|
||||
@XmlType(
|
||||
propOrder = {
|
||||
"contactId",
|
||||
"repoId",
|
||||
"statusValues",
|
||||
"postalInfos",
|
||||
"voiceNumber",
|
||||
"faxNumber",
|
||||
"emailAddress",
|
||||
"currentSponsorRegistrarId",
|
||||
"creationRegistrarId",
|
||||
"creationTime",
|
||||
"lastEppUpdateRegistrarId",
|
||||
"lastEppUpdateTime",
|
||||
"lastTransferTime",
|
||||
"authInfo",
|
||||
"disclose"
|
||||
})
|
||||
@AutoValue
|
||||
@CopyAnnotations
|
||||
public abstract class ContactInfoData implements ResponseData {
|
||||
|
||||
@XmlElement(name = "id")
|
||||
abstract String getContactId();
|
||||
|
||||
@XmlElement(name = "roid")
|
||||
abstract String getRepoId();
|
||||
|
||||
@XmlElement(name = "status")
|
||||
abstract ImmutableSet<StatusValue> getStatusValues();
|
||||
|
||||
@XmlElement(name = "postalInfo")
|
||||
abstract ImmutableList<PostalInfo> getPostalInfos();
|
||||
|
||||
@XmlElement(name = "voice")
|
||||
@Nullable
|
||||
abstract ContactPhoneNumber getVoiceNumber();
|
||||
|
||||
@XmlElement(name = "fax")
|
||||
@Nullable
|
||||
abstract ContactPhoneNumber getFaxNumber();
|
||||
|
||||
@XmlElement(name = "email")
|
||||
@XmlJavaTypeAdapter(CollapsedStringAdapter.class)
|
||||
@Nullable
|
||||
abstract String getEmailAddress();
|
||||
|
||||
@XmlElement(name = "clID")
|
||||
abstract String getCurrentSponsorRegistrarId();
|
||||
|
||||
@XmlElement(name = "crID")
|
||||
abstract String getCreationRegistrarId();
|
||||
|
||||
@XmlElement(name = "crDate")
|
||||
abstract Instant getCreationTime();
|
||||
|
||||
@XmlElement(name = "upID")
|
||||
@Nullable
|
||||
abstract String getLastEppUpdateRegistrarId();
|
||||
|
||||
@XmlElement(name = "upDate")
|
||||
@Nullable
|
||||
abstract Instant getLastEppUpdateTime();
|
||||
|
||||
@XmlElement(name = "trDate")
|
||||
@Nullable
|
||||
abstract Instant getLastTransferTime();
|
||||
|
||||
@XmlElement(name = "authInfo")
|
||||
@Nullable
|
||||
abstract ContactAuthInfo getAuthInfo();
|
||||
|
||||
@XmlElement(name = "disclose")
|
||||
@Nullable
|
||||
abstract Disclose getDisclose();
|
||||
|
||||
/** Builder for {@link ContactInfoData}. */
|
||||
@AutoValue.Builder
|
||||
public abstract static class Builder {
|
||||
public abstract Builder setContactId(String contactId);
|
||||
public abstract Builder setRepoId(String repoId);
|
||||
public abstract Builder setStatusValues(ImmutableSet<StatusValue> statusValues);
|
||||
public abstract Builder setPostalInfos(ImmutableList<PostalInfo> postalInfos);
|
||||
public abstract Builder setVoiceNumber(@Nullable ContactPhoneNumber voiceNumber);
|
||||
public abstract Builder setFaxNumber(@Nullable ContactPhoneNumber faxNumber);
|
||||
public abstract Builder setEmailAddress(@Nullable String emailAddress);
|
||||
|
||||
public abstract Builder setCurrentSponsorRegistrarId(String currentSponsorRegistrarId);
|
||||
|
||||
public abstract Builder setCreationRegistrarId(String creationRegistrarId);
|
||||
|
||||
public abstract Builder setCreationTime(Instant creationTime);
|
||||
|
||||
public abstract Builder setLastEppUpdateRegistrarId(@Nullable String lastEppUpdateRegistrarId);
|
||||
|
||||
public abstract Builder setLastEppUpdateTime(@Nullable Instant lastEppUpdateTime);
|
||||
|
||||
public abstract Builder setLastTransferTime(@Nullable Instant lastTransferTime);
|
||||
|
||||
public abstract Builder setAuthInfo(@Nullable ContactAuthInfo authInfo);
|
||||
public abstract Builder setDisclose(@Nullable Disclose disclose);
|
||||
public abstract ContactInfoData build();
|
||||
}
|
||||
|
||||
public static Builder newBuilder() {
|
||||
return new AutoValue_ContactInfoData.Builder();
|
||||
}
|
||||
}
|
||||
@@ -1,32 +0,0 @@
|
||||
// Copyright 2017 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.model.contact;
|
||||
|
||||
import google.registry.model.eppcommon.PhoneNumber;
|
||||
import jakarta.persistence.Embeddable;
|
||||
|
||||
/**
|
||||
* EPP Contact Phone Number
|
||||
*
|
||||
* <p>This class is embedded inside a (vestigial) Contact to hold the phone number of an EPP
|
||||
* contact. The fields are all defined in the parent class {@link PhoneNumber}, but the subclass is
|
||||
* still necessary to pick up the contact namespace.
|
||||
*/
|
||||
@Embeddable
|
||||
public class ContactPhoneNumber extends PhoneNumber {
|
||||
|
||||
/** Builder for {@link ContactPhoneNumber}. */
|
||||
public static class Builder extends PhoneNumber.Builder<ContactPhoneNumber> {}
|
||||
}
|
||||
@@ -1,137 +0,0 @@
|
||||
// Copyright 2017 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.model.contact;
|
||||
|
||||
import static google.registry.util.CollectionUtils.nullToEmptyImmutableCopy;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import google.registry.model.Buildable;
|
||||
import google.registry.model.ImmutableObject;
|
||||
import google.registry.model.UnsafeSerializable;
|
||||
import google.registry.model.eppcommon.PresenceMarker;
|
||||
import google.registry.persistence.converter.PostalInfoChoiceListUserType;
|
||||
import jakarta.persistence.Embeddable;
|
||||
import jakarta.persistence.Embedded;
|
||||
import jakarta.xml.bind.annotation.XmlAttribute;
|
||||
import jakarta.xml.bind.annotation.XmlType;
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
import org.hibernate.annotations.Type;
|
||||
|
||||
/** The "discloseType" from <a href="http://tools.ietf.org/html/rfc5733">RFC5733</a>. */
|
||||
@Embeddable
|
||||
@XmlType(propOrder = {"name", "org", "addr", "voice", "fax", "email"})
|
||||
public class Disclose extends ImmutableObject implements UnsafeSerializable {
|
||||
|
||||
@Type(PostalInfoChoiceListUserType.class)
|
||||
List<PostalInfoChoice> name;
|
||||
|
||||
@Type(PostalInfoChoiceListUserType.class)
|
||||
List<PostalInfoChoice> org;
|
||||
|
||||
@Type(PostalInfoChoiceListUserType.class)
|
||||
List<PostalInfoChoice> addr;
|
||||
|
||||
@Embedded PresenceMarker voice;
|
||||
|
||||
@Embedded PresenceMarker fax;
|
||||
|
||||
@Embedded PresenceMarker email;
|
||||
|
||||
@XmlAttribute
|
||||
Boolean flag;
|
||||
|
||||
public ImmutableList<PostalInfoChoice> getNames() {
|
||||
return nullToEmptyImmutableCopy(name);
|
||||
}
|
||||
|
||||
public ImmutableList<PostalInfoChoice> getOrgs() {
|
||||
return nullToEmptyImmutableCopy(org);
|
||||
}
|
||||
|
||||
public ImmutableList<PostalInfoChoice> getAddrs() {
|
||||
return nullToEmptyImmutableCopy(addr);
|
||||
}
|
||||
|
||||
public PresenceMarker getVoice() {
|
||||
return voice;
|
||||
}
|
||||
|
||||
public PresenceMarker getFax() {
|
||||
return fax;
|
||||
}
|
||||
|
||||
public PresenceMarker getEmail() {
|
||||
return email;
|
||||
}
|
||||
|
||||
public Boolean getFlag() {
|
||||
return flag;
|
||||
}
|
||||
|
||||
/** The "intLocType" from <a href="http://tools.ietf.org/html/rfc5733">RFC5733</a>. */
|
||||
public static class PostalInfoChoice extends ImmutableObject implements Serializable {
|
||||
@XmlAttribute
|
||||
PostalInfo.Type type;
|
||||
|
||||
public PostalInfo.Type getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public static PostalInfoChoice create(PostalInfo.Type type) {
|
||||
PostalInfoChoice instance = new PostalInfoChoice();
|
||||
instance.type = type;
|
||||
return instance;
|
||||
}
|
||||
}
|
||||
|
||||
/** A builder for {@link Disclose} since it is immutable. */
|
||||
public static class Builder extends Buildable.Builder<Disclose> {
|
||||
public Builder setNames(ImmutableList<PostalInfoChoice> names) {
|
||||
getInstance().name = names;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setOrgs(ImmutableList<PostalInfoChoice> orgs) {
|
||||
getInstance().org = orgs;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setAddrs(ImmutableList<PostalInfoChoice> addrs) {
|
||||
getInstance().addr = addrs;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setVoice(PresenceMarker voice) {
|
||||
getInstance().voice = voice;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setFax(PresenceMarker fax) {
|
||||
getInstance().fax = fax;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setEmail(PresenceMarker email) {
|
||||
getInstance().email = email;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setFlag(boolean flag) {
|
||||
getInstance().flag = flag;
|
||||
return this;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,124 +0,0 @@
|
||||
// Copyright 2017 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.model.contact;
|
||||
|
||||
import static com.google.common.base.Preconditions.checkState;
|
||||
|
||||
import google.registry.model.Buildable;
|
||||
import google.registry.model.Buildable.Overlayable;
|
||||
import google.registry.model.ImmutableObject;
|
||||
import google.registry.model.UnsafeSerializable;
|
||||
import jakarta.persistence.Embeddable;
|
||||
import jakarta.persistence.EnumType;
|
||||
import jakarta.persistence.Enumerated;
|
||||
import jakarta.xml.bind.annotation.XmlAttribute;
|
||||
import jakarta.xml.bind.annotation.XmlElement;
|
||||
import jakarta.xml.bind.annotation.XmlEnumValue;
|
||||
import jakarta.xml.bind.annotation.XmlType;
|
||||
import jakarta.xml.bind.annotation.adapters.NormalizedStringAdapter;
|
||||
import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* Implementation of both "postalInfoType" and "chgPostalInfoType" from <a href=
|
||||
* "http://tools.ietf.org/html/rfc5733">RFC5733</a>.
|
||||
*/
|
||||
@Embeddable
|
||||
@XmlType(propOrder = {"name", "org", "address", "type"})
|
||||
public class PostalInfo extends ImmutableObject
|
||||
implements Overlayable<PostalInfo>, UnsafeSerializable {
|
||||
|
||||
/** The type of the address, either localized or international. */
|
||||
public enum Type {
|
||||
@XmlEnumValue("loc")
|
||||
LOCALIZED,
|
||||
@XmlEnumValue("int")
|
||||
INTERNATIONALIZED
|
||||
}
|
||||
|
||||
@XmlJavaTypeAdapter(NormalizedStringAdapter.class)
|
||||
String name;
|
||||
|
||||
@XmlJavaTypeAdapter(NormalizedStringAdapter.class)
|
||||
String org;
|
||||
|
||||
@XmlElement(name = "addr")
|
||||
ContactAddress address;
|
||||
|
||||
@Enumerated(EnumType.STRING)
|
||||
@XmlAttribute
|
||||
Type type;
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public String getOrg() {
|
||||
return org;
|
||||
}
|
||||
|
||||
public ContactAddress getAddress() {
|
||||
return address;
|
||||
}
|
||||
|
||||
public Type getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PostalInfo overlay(PostalInfo source) {
|
||||
// Don't overlay the type field, as that should never change.
|
||||
checkState(source.type == null || source.type == type);
|
||||
return asBuilder()
|
||||
.setName(Optional.ofNullable(source.getName()).orElse(name))
|
||||
.setOrg(Optional.ofNullable(source.getOrg()).orElse(org))
|
||||
.setAddress(Optional.ofNullable(source.getAddress()).orElse(address))
|
||||
.build();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Builder asBuilder() {
|
||||
return new Builder(clone(this));
|
||||
}
|
||||
|
||||
/** A builder for constructing {@link PostalInfo}, since its changes get overlayed. */
|
||||
public static class Builder extends Buildable.Builder<PostalInfo> {
|
||||
public Builder() {}
|
||||
|
||||
private Builder(PostalInfo instance) {
|
||||
super(instance);
|
||||
}
|
||||
|
||||
public Builder setName(String name) {
|
||||
getInstance().name = name;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setOrg(String org) {
|
||||
getInstance().org = org;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setAddress(ContactAddress address) {
|
||||
getInstance().address = address;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setType(Type type) {
|
||||
getInstance().type = type;
|
||||
return this;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,30 +0,0 @@
|
||||
// Copyright 2017 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.
|
||||
|
||||
@XmlSchema(
|
||||
namespace = "urn:ietf:params:xml:ns:contact-1.0",
|
||||
xmlns = @XmlNs(prefix = "contact", namespaceURI = "urn:ietf:params:xml:ns:contact-1.0"),
|
||||
elementFormDefault = XmlNsForm.QUALIFIED)
|
||||
@XmlAccessorType(XmlAccessType.FIELD)
|
||||
@XmlJavaTypeAdapters({@XmlJavaTypeAdapter(UtcInstantAdapter.class)})
|
||||
package google.registry.model.contact;
|
||||
|
||||
import google.registry.xml.UtcInstantAdapter;
|
||||
import jakarta.xml.bind.annotation.XmlAccessType;
|
||||
import jakarta.xml.bind.annotation.XmlAccessorType;
|
||||
import jakarta.xml.bind.annotation.XmlNs;
|
||||
import jakarta.xml.bind.annotation.XmlNsForm;
|
||||
import jakarta.xml.bind.annotation.XmlSchema;
|
||||
import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
|
||||
import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapters;
|
||||
@@ -49,7 +49,6 @@ import java.util.stream.Stream;
|
||||
* also matches the "addrType" type from <a
|
||||
* href="http://tools.ietf.org/html/draft-lozano-tmch-smd">Mark and Signed Mark Objects Mapping</a>.
|
||||
*
|
||||
* @see google.registry.model.contact.ContactAddress
|
||||
* @see google.registry.model.mark.MarkAddress
|
||||
* @see google.registry.model.registrar.RegistrarAddress
|
||||
*/
|
||||
|
||||
@@ -40,7 +40,6 @@ public class EppXmlTransformer {
|
||||
ImmutableList.of(
|
||||
"eppcom.xsd",
|
||||
"epp.xsd",
|
||||
"contact.xsd",
|
||||
"host.xsd",
|
||||
"domain.xsd",
|
||||
"rgp.xsd",
|
||||
|
||||
@@ -44,7 +44,6 @@ import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
|
||||
*
|
||||
* </blockquote>
|
||||
*
|
||||
* @see google.registry.model.contact.ContactPhoneNumber
|
||||
* @see google.registry.model.mark.MarkPhoneNumber
|
||||
*/
|
||||
@XmlTransient
|
||||
|
||||
@@ -52,12 +52,6 @@ public class ProtocolDefinition {
|
||||
public static final ImmutableSet<String> SUPPORTED_OBJECT_SERVICES =
|
||||
ImmutableSet.of("urn:ietf:params:xml:ns:host-1.0", "urn:ietf:params:xml:ns:domain-1.0");
|
||||
|
||||
public static final ImmutableSet<String> SUPPORTED_OBJECT_SERVICES_WITH_CONTACT =
|
||||
new ImmutableSet.Builder<String>()
|
||||
.addAll(SUPPORTED_OBJECT_SERVICES)
|
||||
.add("urn:ietf:params:xml:ns:contact-1.0")
|
||||
.build();
|
||||
|
||||
/** Enum representing which environments should have which service extensions enabled. */
|
||||
private enum ServiceExtensionVisibility {
|
||||
ALL,
|
||||
|
||||
@@ -21,7 +21,6 @@ import com.google.common.base.Ascii;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import google.registry.model.ImmutableObject;
|
||||
import google.registry.model.contact.ContactCommand;
|
||||
import google.registry.model.domain.DomainCommand;
|
||||
import google.registry.model.domain.bulktoken.BulkTokenExtension;
|
||||
import google.registry.model.domain.fee06.FeeCheckCommandExtensionV06;
|
||||
@@ -170,12 +169,6 @@ public class EppInput extends ImmutableObject {
|
||||
/** A command that has an extension inside of it. */
|
||||
public static class ResourceCommandWrapper extends InnerCommand {
|
||||
@XmlElementRefs({
|
||||
@XmlElementRef(type = ContactCommand.Check.class),
|
||||
@XmlElementRef(type = ContactCommand.Create.class),
|
||||
@XmlElementRef(type = ContactCommand.Delete.class),
|
||||
@XmlElementRef(type = ContactCommand.Info.class),
|
||||
@XmlElementRef(type = ContactCommand.Transfer.class),
|
||||
@XmlElementRef(type = ContactCommand.Update.class),
|
||||
@XmlElementRef(type = DomainCommand.Check.class),
|
||||
@XmlElementRef(type = DomainCommand.Create.class),
|
||||
@XmlElementRef(type = DomainCommand.Delete.class),
|
||||
|
||||
@@ -32,8 +32,6 @@ public abstract class CheckData extends ImmutableObject implements ResponseData
|
||||
|
||||
/** The check responses. We must explicitly list the namespaced versions of {@link Check}. */
|
||||
@XmlElements({
|
||||
@XmlElement(
|
||||
name = "cd", namespace = "urn:ietf:params:xml:ns:contact-1.0", type = ContactCheck.class),
|
||||
@XmlElement(
|
||||
name = "cd", namespace = "urn:ietf:params:xml:ns:domain-1.0", type = DomainCheck.class),
|
||||
@XmlElement(
|
||||
@@ -114,14 +112,6 @@ public abstract class CheckData extends ImmutableObject implements ResponseData
|
||||
}
|
||||
}
|
||||
|
||||
/** A version with contact namespacing. */
|
||||
@XmlType(namespace = "urn:ietf:params:xml:ns:contact-1.0")
|
||||
public static class ContactCheck extends Check {
|
||||
public static ContactCheck create(boolean avail, String id, String reason) {
|
||||
return init(new ContactCheck(), CheckID.create(avail, id), reason);
|
||||
}
|
||||
}
|
||||
|
||||
/** A version with domain namespacing. */
|
||||
@XmlType(namespace = "urn:ietf:params:xml:ns:domain-1.0")
|
||||
public static class DomainCheck extends Check {
|
||||
@@ -146,14 +136,6 @@ public abstract class CheckData extends ImmutableObject implements ResponseData
|
||||
}
|
||||
}
|
||||
|
||||
/** A version with contact namespacing. */
|
||||
@XmlRootElement(name = "chkData", namespace = "urn:ietf:params:xml:ns:contact-1.0")
|
||||
public static class ContactCheckData extends CheckData {
|
||||
public static ContactCheckData create(ImmutableList<ContactCheck> checks) {
|
||||
return init(new ContactCheckData(), checks);
|
||||
}
|
||||
}
|
||||
|
||||
/** A version with domain namespacing. */
|
||||
@XmlRootElement(name = "chkData", namespace = "urn:ietf:params:xml:ns:domain-1.0")
|
||||
public static class DomainCheckData extends CheckData {
|
||||
|
||||
@@ -28,21 +28,6 @@ public abstract class CreateData implements ResponseData {
|
||||
@XmlElement(name = "crDate")
|
||||
protected Instant creationDate;
|
||||
|
||||
/** An acknowledgment message indicating that a contact was created. */
|
||||
@XmlRootElement(name = "creData", namespace = "urn:ietf:params:xml:ns:contact-1.0")
|
||||
@XmlType(propOrder = {"id", "creationDate"}, namespace = "urn:ietf:params:xml:ns:contact-1.0")
|
||||
public static class ContactCreateData extends CreateData {
|
||||
|
||||
String id;
|
||||
|
||||
public static ContactCreateData create(String id, Instant creationDate) {
|
||||
ContactCreateData instance = new ContactCreateData();
|
||||
instance.id = id;
|
||||
instance.creationDate = creationDate;
|
||||
return instance;
|
||||
}
|
||||
}
|
||||
|
||||
/** An acknowledgment message indicating that a domain was created. */
|
||||
@XmlRootElement(name = "creData", namespace = "urn:ietf:params:xml:ns:domain-1.0")
|
||||
@XmlType(
|
||||
|
||||
@@ -20,7 +20,6 @@ import static google.registry.util.CollectionUtils.nullToEmptyImmutableCopy;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import google.registry.model.Buildable;
|
||||
import google.registry.model.ImmutableObject;
|
||||
import google.registry.model.contact.ContactInfoData;
|
||||
import google.registry.model.domain.DomainInfoData;
|
||||
import google.registry.model.domain.DomainRenewData;
|
||||
import google.registry.model.domain.bulktoken.BulkTokenResponseExtension;
|
||||
@@ -53,19 +52,15 @@ import google.registry.model.domain.launch.LaunchCheckResponseExtension;
|
||||
import google.registry.model.domain.rgp.RgpInfoExtension;
|
||||
import google.registry.model.domain.secdns.SecDnsInfoExtension;
|
||||
import google.registry.model.eppcommon.Trid;
|
||||
import google.registry.model.eppoutput.CheckData.ContactCheckData;
|
||||
import google.registry.model.eppoutput.CheckData.DomainCheckData;
|
||||
import google.registry.model.eppoutput.CheckData.HostCheckData;
|
||||
import google.registry.model.eppoutput.CreateData.ContactCreateData;
|
||||
import google.registry.model.eppoutput.CreateData.DomainCreateData;
|
||||
import google.registry.model.eppoutput.CreateData.HostCreateData;
|
||||
import google.registry.model.eppoutput.EppOutput.ResponseOrGreeting;
|
||||
import google.registry.model.host.HostInfoData;
|
||||
import google.registry.model.poll.MessageQueueInfo;
|
||||
import google.registry.model.poll.PendingActionNotificationResponse.ContactPendingActionNotificationResponse;
|
||||
import google.registry.model.poll.PendingActionNotificationResponse.DomainPendingActionNotificationResponse;
|
||||
import google.registry.model.poll.PendingActionNotificationResponse.HostPendingActionNotificationResponse;
|
||||
import google.registry.model.transfer.TransferResponse.ContactTransferResponse;
|
||||
import google.registry.model.transfer.TransferResponse.DomainTransferResponse;
|
||||
import jakarta.xml.bind.annotation.XmlElement;
|
||||
import jakarta.xml.bind.annotation.XmlElementRef;
|
||||
@@ -107,11 +102,6 @@ public class EppResponse extends ImmutableObject implements ResponseOrGreeting {
|
||||
|
||||
/** Zero or more response "resData" results. */
|
||||
@XmlElementRefs({
|
||||
@XmlElementRef(type = ContactCheckData.class),
|
||||
@XmlElementRef(type = ContactCreateData.class),
|
||||
@XmlElementRef(type = ContactInfoData.class),
|
||||
@XmlElementRef(type = ContactPendingActionNotificationResponse.class),
|
||||
@XmlElementRef(type = ContactTransferResponse.class),
|
||||
@XmlElementRef(type = DomainCheckData.class),
|
||||
@XmlElementRef(type = DomainCreateData.class),
|
||||
@XmlElementRef(type = DomainInfoData.class),
|
||||
|
||||
@@ -39,15 +39,13 @@ public class PendingActionNotificationResponse extends ImmutableObject
|
||||
/** The inner name type that contains a name and the result boolean. */
|
||||
@Embeddable
|
||||
static class NameOrId extends ImmutableObject implements UnsafeSerializable {
|
||||
@XmlValue
|
||||
String value;
|
||||
@XmlValue String value;
|
||||
|
||||
@XmlAttribute(name = "paResult")
|
||||
boolean actionResult;
|
||||
}
|
||||
|
||||
@XmlTransient
|
||||
NameOrId nameOrId;
|
||||
@XmlTransient NameOrId nameOrId;
|
||||
|
||||
@XmlElement(name = "paTRID")
|
||||
Trid trid;
|
||||
@@ -104,36 +102,11 @@ public class PendingActionNotificationResponse extends ImmutableObject
|
||||
}
|
||||
}
|
||||
|
||||
/** An adapter to output the XML in response to resolving a pending command on a contact. */
|
||||
@XmlRootElement(name = "panData", namespace = "urn:ietf:params:xml:ns:contact-1.0")
|
||||
@XmlType(
|
||||
propOrder = {"id", "trid", "processedDate"},
|
||||
namespace = "urn:ietf:params:xml:ns:contact-1.0")
|
||||
public static class ContactPendingActionNotificationResponse
|
||||
extends PendingActionNotificationResponse {
|
||||
|
||||
@XmlElement
|
||||
NameOrId getId() {
|
||||
return nameOrId;
|
||||
}
|
||||
|
||||
public static ContactPendingActionNotificationResponse create(
|
||||
String contactId, boolean actionResult, Trid trid, Instant processedDate) {
|
||||
return init(
|
||||
new ContactPendingActionNotificationResponse(),
|
||||
contactId,
|
||||
actionResult,
|
||||
trid,
|
||||
processedDate);
|
||||
}
|
||||
}
|
||||
|
||||
/** An adapter to output the XML in response to resolving a pending command on a host. */
|
||||
@XmlRootElement(name = "panData", namespace = "urn:ietf:params:xml:ns:domain-1.0")
|
||||
@XmlType(
|
||||
propOrder = {"name", "trid", "processedDate"},
|
||||
namespace = "urn:ietf:params:xml:ns:domain-1.0"
|
||||
)
|
||||
propOrder = {"name", "trid", "processedDate"},
|
||||
namespace = "urn:ietf:params:xml:ns:domain-1.0")
|
||||
public static class HostPendingActionNotificationResponse
|
||||
extends PendingActionNotificationResponse {
|
||||
|
||||
|
||||
@@ -182,7 +182,7 @@ public class Registrar extends UpdateAutoTimestampEntity implements Buildable, J
|
||||
DISABLED
|
||||
}
|
||||
|
||||
/** Regex for E.164 phone number format specified by {@code contact.xsd}. */
|
||||
/** Regex for E.164 phone number format. */
|
||||
private static final Pattern E164_PATTERN = Pattern.compile("\\+[0-9]{1,3}\\.[0-9]{1,14}");
|
||||
|
||||
/** Regex for telephone support passcode (5 digit string). */
|
||||
|
||||
@@ -43,17 +43,7 @@ public final class IcannReportingTypes {
|
||||
HOST_CREATE("srs-host-create"),
|
||||
HOST_DELETE("srs-host-delete"),
|
||||
HOST_INFO("srs-host-info"),
|
||||
HOST_UPDATE("srs-host-update"),
|
||||
CONTACT_CHECK("srs-cont-check"),
|
||||
CONTACT_CREATE("srs-cont-create"),
|
||||
CONTACT_DELETE("srs-cont-delete"),
|
||||
CONTACT_INFO("srs-cont-info"),
|
||||
CONTACT_TRANSFER_APPROVE("srs-cont-transfer-approve"),
|
||||
CONTACT_TRANSFER_CANCEL("srs-cont-transfer-cancel"),
|
||||
CONTACT_TRANSFER_QUERY("srs-cont-transfer-query"),
|
||||
CONTACT_TRANSFER_REJECT("srs-cont-transfer-reject"),
|
||||
CONTACT_TRANSFER_REQUEST("srs-cont-transfer-request"),
|
||||
CONTACT_UPDATE("srs-cont-update");
|
||||
HOST_UPDATE("srs-host-update");
|
||||
|
||||
/** Returns the actual field name from the specification. */
|
||||
private final String fieldName;
|
||||
|
||||
@@ -83,33 +83,4 @@ public class TransferResponse extends BaseTransferObject implements ResponseData
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/** An adapter to output the XML in response to a transfer command on a contact. */
|
||||
@XmlRootElement(name = "trnData", namespace = "urn:ietf:params:xml:ns:contact-1.0")
|
||||
@XmlType(propOrder = {
|
||||
"contactId",
|
||||
"transferStatus",
|
||||
"gainingClientId",
|
||||
"transferRequestTime",
|
||||
"losingClientId",
|
||||
"pendingTransferExpirationTime"},
|
||||
namespace = "urn:ietf:params:xml:ns:contact-1.0")
|
||||
public static class ContactTransferResponse extends TransferResponse {
|
||||
|
||||
@XmlElement(name = "id")
|
||||
String contactId;
|
||||
|
||||
public String getContactId() {
|
||||
return contactId;
|
||||
}
|
||||
|
||||
/** Builder for {@link ContactTransferResponse}. */
|
||||
public static class Builder
|
||||
extends BaseTransferObject.Builder<ContactTransferResponse, Builder> {
|
||||
public Builder setContactId(String contactId) {
|
||||
getInstance().contactId = contactId;
|
||||
return this;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,50 +0,0 @@
|
||||
// Copyright 2024 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.persistence.converter;
|
||||
|
||||
import static com.google.common.collect.ImmutableList.toImmutableList;
|
||||
|
||||
import google.registry.model.contact.Disclose.PostalInfoChoice;
|
||||
import google.registry.model.contact.PostalInfo;
|
||||
import java.util.List;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
/** Hibernate custom type for {@link List} of {@link PostalInfoChoice}. */
|
||||
public class PostalInfoChoiceListUserType
|
||||
extends StringCollectionUserType<PostalInfoChoice, List<PostalInfoChoice>> {
|
||||
|
||||
@Override
|
||||
String[] toJdbcObject(List<PostalInfoChoice> collection) {
|
||||
return collection.stream()
|
||||
.map(PostalInfoChoice::getType)
|
||||
.map(Enum::name)
|
||||
.toList()
|
||||
.toArray(new String[0]);
|
||||
}
|
||||
|
||||
@Override
|
||||
List<PostalInfoChoice> toEntity(String[] data) {
|
||||
return Stream.of(data)
|
||||
.map(PostalInfo.Type::valueOf)
|
||||
.map(PostalInfoChoice::create)
|
||||
.collect(toImmutableList());
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public Class<List<PostalInfoChoice>> returnedClass() {
|
||||
return (Class<List<PostalInfoChoice>>) ((Object) List.class);
|
||||
}
|
||||
}
|
||||
@@ -21,7 +21,7 @@ import com.google.common.collect.ImmutableMap;
|
||||
import google.registry.model.registrar.Registrar;
|
||||
import google.registry.model.registrar.Registrar.State;
|
||||
import google.registry.model.registrar.RegistrarAddress;
|
||||
import google.registry.xjc.contact.XjcContactE164Type;
|
||||
import google.registry.xjc.eppcom.XjcEppcomE164Type;
|
||||
import google.registry.xjc.rderegistrar.XjcRdeRegistrar;
|
||||
import google.registry.xjc.rderegistrar.XjcRdeRegistrarAddrType;
|
||||
import google.registry.xjc.rderegistrar.XjcRdeRegistrarElement;
|
||||
@@ -103,7 +103,7 @@ final class RegistrarToXjcConverter {
|
||||
// telephone number.
|
||||
// XXX: Make Registrar use PhoneNumber.
|
||||
if (model.getPhoneNumber() != null) {
|
||||
XjcContactE164Type phone = new XjcContactE164Type();
|
||||
XjcEppcomE164Type phone = new XjcEppcomE164Type();
|
||||
phone.setValue(model.getPhoneNumber());
|
||||
bean.setVoice(phone);
|
||||
}
|
||||
@@ -111,7 +111,7 @@ final class RegistrarToXjcConverter {
|
||||
// o An OPTIONAL <fax> element that contains the registrar's facsimile
|
||||
// telephone number.
|
||||
if (model.getFaxNumber() != null) {
|
||||
XjcContactE164Type fax = new XjcContactE164Type();
|
||||
XjcEppcomE164Type fax = new XjcEppcomE164Type();
|
||||
fax.setValue(model.getFaxNumber());
|
||||
bean.setFax(fax);
|
||||
}
|
||||
|
||||
@@ -26,10 +26,8 @@ import google.registry.keyring.api.Keyring;
|
||||
import google.registry.rde.Ghostryde;
|
||||
import google.registry.tools.params.PathParameter;
|
||||
import google.registry.xjc.XjcXmlTransformer;
|
||||
import google.registry.xjc.domain.XjcDomainContactType;
|
||||
import google.registry.xjc.domain.XjcDomainHostAttrType;
|
||||
import google.registry.xjc.rde.XjcRdeDeposit;
|
||||
import google.registry.xjc.rdecontact.XjcRdeContact;
|
||||
import google.registry.xjc.rdedomain.XjcRdeDomain;
|
||||
import google.registry.xjc.rdehost.XjcRdeHost;
|
||||
import google.registry.xjc.rderegistrar.XjcRdeRegistrar;
|
||||
@@ -103,13 +101,6 @@ final class ValidateEscrowDepositCommand implements Command {
|
||||
if (host.getUpRr() != null) {
|
||||
addIfNotNull(registrarRefs, host.getUpRr().getValue());
|
||||
}
|
||||
} else if (XjcRdeContact.class.isAssignableFrom(item.getDeclaredType())) {
|
||||
XjcRdeContact contact = (XjcRdeContact) item.getValue();
|
||||
contacts.add(checkNotNull(contact.getId()));
|
||||
addIfNotNull(registrarRefs, contact.getClID());
|
||||
if (contact.getUpRr() != null) {
|
||||
addIfNotNull(registrarRefs, contact.getUpRr().getValue());
|
||||
}
|
||||
} else if (XjcRdeDomain.class.isAssignableFrom(item.getDeclaredType())) {
|
||||
XjcRdeDomain domain = (XjcRdeDomain) item.getValue();
|
||||
addIfNotNull(registrarRefs, domain.getClID());
|
||||
@@ -122,9 +113,6 @@ final class ValidateEscrowDepositCommand implements Command {
|
||||
addIfNotNull(hostnameRefs, hostAttr.getHostName());
|
||||
}
|
||||
}
|
||||
for (XjcDomainContactType contact : domain.getContacts()) {
|
||||
contactRefs.add(contact.getValue());
|
||||
}
|
||||
} else if (XjcRdeRegistrar.class.isAssignableFrom(item.getDeclaredType())) {
|
||||
XjcRdeRegistrar registrar = (XjcRdeRegistrar) item.getValue();
|
||||
registrars.add(checkNotNull(registrar.getId()));
|
||||
|
||||
@@ -36,7 +36,6 @@ public class XjcXmlTransformer {
|
||||
new ImmutableMap.Builder<String, String>()
|
||||
.put("eppcom", "eppcom.xsd")
|
||||
.put("epp", "epp.xsd")
|
||||
.put("contact", "contact.xsd")
|
||||
.put("host", "host.xsd")
|
||||
.put("domain", "domain.xsd")
|
||||
.put("rgp", "rgp.xsd")
|
||||
@@ -52,7 +51,6 @@ public class XjcXmlTransformer {
|
||||
.put("rde", "rde.xsd")
|
||||
.put("rdeheader", "rde-header.xsd")
|
||||
.put("rdereport", "rde-report.xsd")
|
||||
.put("rdecontact", "rde-contact.xsd")
|
||||
.put("rdehost", "rde-host.xsd")
|
||||
.put("rdeidn", "rde-idn.xsd")
|
||||
.put("rdedomain", "rde-domain.xsd")
|
||||
|
||||
@@ -60,15 +60,6 @@
|
||||
</nameXmlTransform>
|
||||
</schemaBindings>
|
||||
</bindings>
|
||||
<bindings schemaLocation="contact.xsd" node="/xsd:schema">
|
||||
<schemaBindings>
|
||||
<package name="google.registry.xjc.contact"/>
|
||||
<nameXmlTransform>
|
||||
<elementName prefix="XjcContact"/>
|
||||
<typeName prefix="XjcContact"/>
|
||||
</nameXmlTransform>
|
||||
</schemaBindings>
|
||||
</bindings>
|
||||
<bindings schemaLocation="rgp.xsd" node="/xsd:schema">
|
||||
<schemaBindings>
|
||||
<package name="google.registry.xjc.rgp"/>
|
||||
@@ -203,24 +194,6 @@
|
||||
<class name="XjcRdeMenuType"/>
|
||||
</bindings>
|
||||
</bindings>
|
||||
<bindings schemaLocation="rde-contact.xsd" node="/xsd:schema">
|
||||
<schemaBindings>
|
||||
<package name="google.registry.xjc.rdecontact"/>
|
||||
<nameXmlTransform>
|
||||
<elementName prefix="XjcRdeContact"/>
|
||||
<typeName prefix="XjcRdeContact"/>
|
||||
</nameXmlTransform>
|
||||
</schemaBindings>
|
||||
<bindings node="//xsd:complexType[@name='abstractContentType']">
|
||||
<class name="XjcRdeContact"/>
|
||||
</bindings>
|
||||
<bindings node="//xsd:element[@name='contact']">
|
||||
<class name="XjcRdeContactElement"/>
|
||||
</bindings>
|
||||
<bindings node="//xsd:element[@name='abstractContact']">
|
||||
<class name="XjcRdeContactAbstract"/>
|
||||
</bindings>
|
||||
</bindings>
|
||||
<bindings schemaLocation="rde-domain.xsd" node="/xsd:schema">
|
||||
<schemaBindings>
|
||||
<package name="google.registry.xjc.rdedomain"/>
|
||||
|
||||
@@ -8,9 +8,6 @@
|
||||
@jakarta.xml.bind.annotation.XmlNs(
|
||||
prefix = "eppcom",
|
||||
namespaceURI = "urn:ietf:params:xml:ns:eppcom-1.0"),
|
||||
@jakarta.xml.bind.annotation.XmlNs(
|
||||
prefix = "contact",
|
||||
namespaceURI = "urn:ietf:params:xml:ns:contact-1.0"),
|
||||
@jakarta.xml.bind.annotation.XmlNs(
|
||||
prefix = "domain",
|
||||
namespaceURI = "urn:ietf:params:xml:ns:domain-1.0"),
|
||||
@@ -44,9 +41,6 @@
|
||||
@jakarta.xml.bind.annotation.XmlNs(
|
||||
prefix = "rde",
|
||||
namespaceURI = "urn:ietf:params:xml:ns:rde-1.0"),
|
||||
@jakarta.xml.bind.annotation.XmlNs(
|
||||
prefix = "rdeContact",
|
||||
namespaceURI = "urn:ietf:params:xml:ns:rdeContact-1.0"),
|
||||
@jakarta.xml.bind.annotation.XmlNs(
|
||||
prefix = "rdeDomain",
|
||||
namespaceURI = "urn:ietf:params:xml:ns:rdeDomain-1.0"),
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
contact urn:ietf:params:xml:ns:contact-1.0
|
||||
domain urn:ietf:params:xml:ns:domain-1.0
|
||||
dsig http://www.w3.org/2000/09/xmldsig#
|
||||
epp urn:ietf:params:xml:ns:epp-1.0
|
||||
@@ -12,7 +11,6 @@ iirdea urn:ietf:params:xml:ns:iirdea-1.0
|
||||
launch urn:ietf:params:xml:ns:launch-1.0
|
||||
mark urn:ietf:params:xml:ns:mark-1.0
|
||||
rde urn:ietf:params:xml:ns:rde-1.0
|
||||
rdecontact urn:ietf:params:xml:ns:rdeContact-1.0
|
||||
rdedomain urn:ietf:params:xml:ns:rdeDomain-1.0
|
||||
rdeeppparams urn:ietf:params:xml:ns:rdeEppParams-1.0
|
||||
rdeheader urn:ietf:params:xml:ns:rdeHeader-1.0
|
||||
|
||||
@@ -1,389 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<schema targetNamespace="urn:ietf:params:xml:ns:contact-1.0"
|
||||
xmlns:contact="urn:ietf:params:xml:ns:contact-1.0"
|
||||
xmlns:epp="urn:ietf:params:xml:ns:epp-1.0"
|
||||
xmlns:eppcom="urn:ietf:params:xml:ns:eppcom-1.0"
|
||||
xmlns="http://www.w3.org/2001/XMLSchema"
|
||||
elementFormDefault="qualified">
|
||||
|
||||
<!--
|
||||
Import common element types.
|
||||
-->
|
||||
<import namespace="urn:ietf:params:xml:ns:eppcom-1.0"
|
||||
schemaLocation="eppcom.xsd"/>
|
||||
<import namespace="urn:ietf:params:xml:ns:epp-1.0"
|
||||
schemaLocation="epp.xsd"/>
|
||||
|
||||
<annotation>
|
||||
<documentation>
|
||||
Extensible Provisioning Protocol v1.0
|
||||
contact provisioning schema.
|
||||
</documentation>
|
||||
</annotation>
|
||||
|
||||
<!--
|
||||
Child elements found in EPP commands.
|
||||
-->
|
||||
<element name="check" type="contact:mIDType"/>
|
||||
<element name="create" type="contact:createType"/>
|
||||
<element name="delete" type="contact:sIDType"/>
|
||||
<element name="info" type="contact:authIDType"/>
|
||||
<element name="transfer" type="contact:authIDType"/>
|
||||
<element name="update" type="contact:updateType"/>
|
||||
|
||||
<!--
|
||||
Utility types.
|
||||
-->
|
||||
<simpleType name="ccType">
|
||||
<restriction base="token">
|
||||
<length value="2"/>
|
||||
</restriction>
|
||||
</simpleType>
|
||||
<complexType name="e164Type">
|
||||
<simpleContent>
|
||||
<extension base="contact:e164StringType">
|
||||
<attribute name="x" type="token"/>
|
||||
</extension>
|
||||
</simpleContent>
|
||||
</complexType>
|
||||
|
||||
<simpleType name="e164StringType">
|
||||
<restriction base="token">
|
||||
<pattern value="(\+[0-9]{1,3}\.[0-9]{1,14})?"/>
|
||||
<maxLength value="17"/>
|
||||
</restriction>
|
||||
</simpleType>
|
||||
|
||||
<simpleType name="pcType">
|
||||
<restriction base="token">
|
||||
<maxLength value="16"/>
|
||||
</restriction>
|
||||
</simpleType>
|
||||
|
||||
<simpleType name="postalLineType">
|
||||
<restriction base="normalizedString">
|
||||
<minLength value="1"/>
|
||||
<maxLength value="255"/>
|
||||
</restriction>
|
||||
</simpleType>
|
||||
|
||||
<simpleType name="optPostalLineType">
|
||||
<restriction base="normalizedString">
|
||||
<maxLength value="255"/>
|
||||
</restriction>
|
||||
</simpleType>
|
||||
|
||||
<!--
|
||||
Child elements of the <create> command.
|
||||
-->
|
||||
<complexType name="createType">
|
||||
<sequence>
|
||||
<element name="id" type="eppcom:clIDType"/>
|
||||
<element name="postalInfo" type="contact:postalInfoType"
|
||||
maxOccurs="2"/>
|
||||
<element name="voice" type="contact:e164Type"
|
||||
minOccurs="0"/>
|
||||
<element name="fax" type="contact:e164Type"
|
||||
minOccurs="0"/>
|
||||
<element name="email" type="eppcom:minTokenType"/>
|
||||
<element name="authInfo" type="contact:authInfoType"/>
|
||||
<element name="disclose" type="contact:discloseType"
|
||||
minOccurs="0"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
|
||||
<complexType name="postalInfoType">
|
||||
<sequence>
|
||||
<element name="name" type="contact:postalLineType"/>
|
||||
<element name="org" type="contact:optPostalLineType"
|
||||
minOccurs="0"/>
|
||||
<element name="addr" type="contact:addrType"/>
|
||||
</sequence>
|
||||
<attribute name="type" type="contact:postalInfoEnumType"
|
||||
use="required"/>
|
||||
</complexType>
|
||||
|
||||
<simpleType name="postalInfoEnumType">
|
||||
<restriction base="token">
|
||||
<enumeration value="loc"/>
|
||||
<enumeration value="int"/>
|
||||
</restriction>
|
||||
</simpleType>
|
||||
|
||||
<complexType name="addrType">
|
||||
<sequence>
|
||||
<element name="street" type="contact:optPostalLineType"
|
||||
minOccurs="0" maxOccurs="3"/>
|
||||
<element name="city" type="contact:postalLineType"/>
|
||||
<element name="sp" type="contact:optPostalLineType"
|
||||
minOccurs="0"/>
|
||||
<element name="pc" type="contact:pcType"
|
||||
minOccurs="0"/>
|
||||
<element name="cc" type="contact:ccType"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
|
||||
<complexType name="authInfoType">
|
||||
<choice>
|
||||
<element name="pw" type="eppcom:pwAuthInfoType"/>
|
||||
<element name="ext" type="eppcom:extAuthInfoType"/>
|
||||
</choice>
|
||||
</complexType>
|
||||
|
||||
<complexType name="discloseType">
|
||||
<sequence>
|
||||
<element name="name" type="contact:intLocType"
|
||||
minOccurs="0" maxOccurs="2"/>
|
||||
<element name="org" type="contact:intLocType"
|
||||
minOccurs="0" maxOccurs="2"/>
|
||||
<element name="addr" type="contact:intLocType"
|
||||
minOccurs="0" maxOccurs="2"/>
|
||||
<element name="voice" minOccurs="0"/>
|
||||
<element name="fax" minOccurs="0"/>
|
||||
<element name="email" minOccurs="0"/>
|
||||
</sequence>
|
||||
<attribute name="flag" type="boolean" use="required"/>
|
||||
</complexType>
|
||||
|
||||
<complexType name="intLocType">
|
||||
<attribute name="type" type="contact:postalInfoEnumType"
|
||||
use="required"/>
|
||||
</complexType>
|
||||
|
||||
<!--
|
||||
Child element of commands that require only an identifier.
|
||||
-->
|
||||
<complexType name="sIDType">
|
||||
<sequence>
|
||||
<element name="id" type="eppcom:clIDType"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
|
||||
<!--
|
||||
Child element of commands that accept multiple identifiers.
|
||||
-->
|
||||
<complexType name="mIDType">
|
||||
<sequence>
|
||||
<element name="id" type="eppcom:clIDType"
|
||||
maxOccurs="unbounded"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
|
||||
<!--
|
||||
Child elements of the <info> and <transfer> commands.
|
||||
-->
|
||||
<complexType name="authIDType">
|
||||
<sequence>
|
||||
<element name="id" type="eppcom:clIDType"/>
|
||||
<element name="authInfo" type="contact:authInfoType"
|
||||
minOccurs="0"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
|
||||
<!--
|
||||
Child elements of the <update> command.
|
||||
-->
|
||||
<complexType name="updateType">
|
||||
<sequence>
|
||||
<element name="id" type="eppcom:clIDType"/>
|
||||
<element name="add" type="contact:addRemType"
|
||||
minOccurs="0"/>
|
||||
<element name="rem" type="contact:addRemType"
|
||||
minOccurs="0"/>
|
||||
<element name="chg" type="contact:chgType"
|
||||
minOccurs="0"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
|
||||
<!--
|
||||
Data elements that can be added or removed.
|
||||
-->
|
||||
<complexType name="addRemType">
|
||||
<sequence>
|
||||
<element name="status" type="contact:statusType"
|
||||
maxOccurs="7"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
|
||||
<!--
|
||||
Data elements that can be changed.
|
||||
-->
|
||||
<complexType name="chgType">
|
||||
<sequence>
|
||||
<element name="postalInfo" type="contact:chgPostalInfoType"
|
||||
minOccurs="0" maxOccurs="2"/>
|
||||
<element name="voice" type="contact:e164Type"
|
||||
minOccurs="0"/>
|
||||
<element name="fax" type="contact:e164Type"
|
||||
minOccurs="0"/>
|
||||
<element name="email" type="eppcom:minTokenType"
|
||||
minOccurs="0"/>
|
||||
<element name="authInfo" type="contact:authInfoType"
|
||||
minOccurs="0"/>
|
||||
<element name="disclose" type="contact:discloseType"
|
||||
minOccurs="0"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
|
||||
<complexType name="chgPostalInfoType">
|
||||
<sequence>
|
||||
<element name="name" type="contact:postalLineType"
|
||||
minOccurs="0"/>
|
||||
<element name="org" type="contact:optPostalLineType"
|
||||
minOccurs="0"/>
|
||||
<element name="addr" type="contact:addrType"
|
||||
minOccurs="0"/>
|
||||
</sequence>
|
||||
<attribute name="type" type="contact:postalInfoEnumType"
|
||||
use="required"/>
|
||||
</complexType>
|
||||
|
||||
<!--
|
||||
Child response elements.
|
||||
-->
|
||||
<element name="chkData" type="contact:chkDataType"/>
|
||||
<element name="creData" type="contact:creDataType"/>
|
||||
<element name="infData" type="contact:infDataType"/>
|
||||
<element name="panData" type="contact:panDataType"/>
|
||||
<element name="trnData" type="contact:trnDataType"/>
|
||||
|
||||
<!--
|
||||
<check> response elements.
|
||||
-->
|
||||
<complexType name="chkDataType">
|
||||
<sequence>
|
||||
<element name="cd" type="contact:checkType"
|
||||
maxOccurs="unbounded"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
|
||||
<complexType name="checkType">
|
||||
<sequence>
|
||||
<element name="id" type="contact:checkIDType"/>
|
||||
<element name="reason" type="eppcom:reasonType"
|
||||
minOccurs="0"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
|
||||
<complexType name="checkIDType">
|
||||
<simpleContent>
|
||||
<extension base="eppcom:clIDType">
|
||||
<attribute name="avail" type="boolean"
|
||||
use="required"/>
|
||||
</extension>
|
||||
</simpleContent>
|
||||
</complexType>
|
||||
|
||||
<!--
|
||||
<create> response elements.
|
||||
-->
|
||||
<complexType name="creDataType">
|
||||
<sequence>
|
||||
<element name="id" type="eppcom:clIDType"/>
|
||||
<element name="crDate" type="dateTime"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
|
||||
<!--
|
||||
<info> response elements.
|
||||
-->
|
||||
<complexType name="infDataType">
|
||||
<sequence>
|
||||
<element name="id" type="eppcom:clIDType"/>
|
||||
<element name="roid" type="eppcom:roidType"/>
|
||||
<element name="status" type="contact:statusType"
|
||||
maxOccurs="7"/>
|
||||
<element name="postalInfo" type="contact:postalInfoType"
|
||||
maxOccurs="2"/>
|
||||
<element name="voice" type="contact:e164Type"
|
||||
minOccurs="0"/>
|
||||
<element name="fax" type="contact:e164Type"
|
||||
minOccurs="0"/>
|
||||
<element name="email" type="eppcom:minTokenType"/>
|
||||
<element name="clID" type="eppcom:clIDType"/>
|
||||
<element name="crID" type="eppcom:clIDType"/>
|
||||
<element name="crDate" type="dateTime"/>
|
||||
<element name="upID" type="eppcom:clIDType"
|
||||
minOccurs="0"/>
|
||||
<element name="upDate" type="dateTime"
|
||||
minOccurs="0"/>
|
||||
<element name="trDate" type="dateTime"
|
||||
minOccurs="0"/>
|
||||
<element name="authInfo" type="contact:authInfoType"
|
||||
minOccurs="0"/>
|
||||
<element name="disclose" type="contact:discloseType"
|
||||
minOccurs="0"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
|
||||
<!--
|
||||
Status is a combination of attributes and an optional human-readable
|
||||
message that may be expressed in languages other than English.
|
||||
-->
|
||||
<complexType name="statusType">
|
||||
<simpleContent>
|
||||
<extension base="normalizedString">
|
||||
<attribute name="s" type="contact:statusValueType"
|
||||
use="required"/>
|
||||
<attribute name="lang" type="language"
|
||||
default="en"/>
|
||||
</extension>
|
||||
</simpleContent>
|
||||
</complexType>
|
||||
|
||||
<simpleType name="statusValueType">
|
||||
<restriction base="token">
|
||||
<enumeration value="clientDeleteProhibited"/>
|
||||
<enumeration value="clientTransferProhibited"/>
|
||||
<enumeration value="clientUpdateProhibited"/>
|
||||
<enumeration value="linked"/>
|
||||
<enumeration value="ok"/>
|
||||
<enumeration value="pendingCreate"/>
|
||||
<enumeration value="pendingDelete"/>
|
||||
<enumeration value="pendingTransfer"/>
|
||||
<enumeration value="pendingUpdate"/>
|
||||
<enumeration value="serverDeleteProhibited"/>
|
||||
<enumeration value="serverTransferProhibited"/>
|
||||
<enumeration value="serverUpdateProhibited"/>
|
||||
</restriction>
|
||||
</simpleType>
|
||||
|
||||
<!--
|
||||
Pending action notification response elements.
|
||||
-->
|
||||
<complexType name="panDataType">
|
||||
<sequence>
|
||||
<element name="id" type="contact:paCLIDType"/>
|
||||
<element name="paTRID" type="epp:trIDType"/>
|
||||
<element name="paDate" type="dateTime"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
|
||||
<complexType name="paCLIDType">
|
||||
<simpleContent>
|
||||
<extension base="eppcom:clIDType">
|
||||
<attribute name="paResult" type="boolean"
|
||||
use="required"/>
|
||||
</extension>
|
||||
</simpleContent>
|
||||
</complexType>
|
||||
|
||||
<!--
|
||||
<transfer> response elements.
|
||||
-->
|
||||
<complexType name="trnDataType">
|
||||
<sequence>
|
||||
<element name="id" type="eppcom:clIDType"/>
|
||||
<element name="trStatus" type="eppcom:trStatusType"/>
|
||||
<element name="reID" type="eppcom:clIDType"/>
|
||||
<element name="reDate" type="dateTime"/>
|
||||
<element name="acID" type="eppcom:clIDType"/>
|
||||
<element name="acDate" type="dateTime"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
|
||||
<!--
|
||||
End of schema.
|
||||
-->
|
||||
</schema>
|
||||
@@ -47,8 +47,6 @@ Child elements of the <create> command.
|
||||
minOccurs="0"/>
|
||||
<element name="registrant" type="eppcom:clIDType"
|
||||
minOccurs="0"/>
|
||||
<element name="contact" type="domain:contactType"
|
||||
minOccurs="0" maxOccurs="unbounded"/>
|
||||
<element name="authInfo" type="domain:authInfoType"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
@@ -100,22 +98,6 @@ If attributes, addresses are optional and follow the
|
||||
structure defined in the host mapping.
|
||||
-->
|
||||
|
||||
<complexType name="contactType">
|
||||
<simpleContent>
|
||||
<extension base="eppcom:clIDType">
|
||||
<attribute name="type" type="domain:contactAttrType"/>
|
||||
</extension>
|
||||
</simpleContent>
|
||||
</complexType>
|
||||
|
||||
<simpleType name="contactAttrType">
|
||||
<restriction base="token">
|
||||
<enumeration value="admin"/>
|
||||
<enumeration value="billing"/>
|
||||
<enumeration value="tech"/>
|
||||
</restriction>
|
||||
</simpleType>
|
||||
|
||||
<complexType name="authInfoType">
|
||||
<choice>
|
||||
<element name="pw" type="eppcom:pwAuthInfoType"/>
|
||||
@@ -216,8 +198,6 @@ Data elements that can be added or removed.
|
||||
<sequence>
|
||||
<element name="ns" type="domain:nsType"
|
||||
minOccurs="0"/>
|
||||
<element name="contact" type="domain:contactType"
|
||||
minOccurs="0" maxOccurs="unbounded"/>
|
||||
<element name="status" type="domain:statusType"
|
||||
minOccurs="0" maxOccurs="11"/>
|
||||
</sequence>
|
||||
@@ -319,8 +299,6 @@ Child response elements.
|
||||
minOccurs="0" maxOccurs="11"/>
|
||||
<element name="registrant" type="eppcom:clIDType"
|
||||
minOccurs="0"/>
|
||||
<element name="contact" type="domain:contactType"
|
||||
minOccurs="0" maxOccurs="unbounded"/>
|
||||
<element name="ns" type="domain:nsType"
|
||||
minOccurs="0"/>
|
||||
<element name="host" type="eppcom:labelType"
|
||||
|
||||
@@ -101,6 +101,24 @@ Transfer status identifiers.
|
||||
</restriction>
|
||||
</simpleType>
|
||||
|
||||
<!--
|
||||
Phone number types
|
||||
-->
|
||||
<complexType name="e164Type">
|
||||
<simpleContent>
|
||||
<extension base="eppcom:e164StringType">
|
||||
<attribute name="x" type="token"/>
|
||||
</extension>
|
||||
</simpleContent>
|
||||
</complexType>
|
||||
|
||||
<simpleType name="e164StringType">
|
||||
<restriction base="token">
|
||||
<pattern value="(\+[0-9]{1,3}\.[0-9]{1,14})?"/>
|
||||
<maxLength value="17"/>
|
||||
</restriction>
|
||||
</simpleType>
|
||||
|
||||
<!--
|
||||
End of schema.
|
||||
-->
|
||||
|
||||
@@ -1,96 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<schema targetNamespace="urn:ietf:params:xml:ns:rdeContact-1.0"
|
||||
xmlns:rdeContact="urn:ietf:params:xml:ns:rdeContact-1.0"
|
||||
xmlns:rde="urn:ietf:params:xml:ns:rde-1.0"
|
||||
xmlns:contact="urn:ietf:params:xml:ns:contact-1.0"
|
||||
xmlns:eppcom="urn:ietf:params:xml:ns:eppcom-1.0"
|
||||
xmlns="http://www.w3.org/2001/XMLSchema"
|
||||
elementFormDefault="qualified">
|
||||
|
||||
<!-- Import common element types. -->
|
||||
<import namespace="urn:ietf:params:xml:ns:eppcom-1.0"
|
||||
schemaLocation="eppcom.xsd"/>
|
||||
<import namespace="urn:ietf:params:xml:ns:contact-1.0"
|
||||
schemaLocation="contact.xsd"/>
|
||||
<import namespace="urn:ietf:params:xml:ns:rde-1.0"
|
||||
schemaLocation="rde.xsd"/>
|
||||
|
||||
<annotation>
|
||||
<documentation>
|
||||
Registry Data Escrow contact provisioning schema
|
||||
</documentation>
|
||||
</annotation>
|
||||
|
||||
<element name="abstractContact"
|
||||
type="rdeContact:abstractContentType"
|
||||
substitutionGroup="rde:content" abstract="true"/>
|
||||
<element name="contact"
|
||||
substitutionGroup="rdeContact:abstractContact"/>
|
||||
<element name="delete"
|
||||
type="rdeContact:deleteType"
|
||||
substitutionGroup="rde:delete"/>
|
||||
|
||||
<!-- Contact Type -->
|
||||
<complexType name="abstractContentType">
|
||||
<complexContent>
|
||||
<extension base="rde:contentType">
|
||||
<sequence>
|
||||
<element name="id"
|
||||
type="eppcom:clIDType"/>
|
||||
<element name="roid"
|
||||
type="eppcom:roidType"/>
|
||||
<element name="status"
|
||||
type="contact:statusType" maxOccurs="7"/>
|
||||
<element name="postalInfo"
|
||||
type="contact:postalInfoType" maxOccurs="2"/>
|
||||
<element name="voice"
|
||||
type="contact:e164Type" minOccurs="0"/>
|
||||
<element name="fax"
|
||||
type="contact:e164Type" minOccurs="0"/>
|
||||
<element name="email"
|
||||
type="eppcom:minTokenType"/>
|
||||
<element name="clID"
|
||||
type="eppcom:clIDType"/>
|
||||
<element name="crRr"
|
||||
type="rde:rrType"/>
|
||||
<element name="crDate"
|
||||
type="dateTime"/>
|
||||
<element name="upRr"
|
||||
type="rde:rrType" minOccurs="0"/>
|
||||
<element name="upDate"
|
||||
type="dateTime" minOccurs="0"/>
|
||||
<element name="trDate"
|
||||
type="dateTime" minOccurs="0"/>
|
||||
<element name="trnData"
|
||||
type="rdeContact:transferDataType" minOccurs="0"/>
|
||||
<element name="disclose"
|
||||
type="contact:discloseType" minOccurs="0"/>
|
||||
</sequence>
|
||||
</extension>
|
||||
</complexContent>
|
||||
</complexType>
|
||||
|
||||
<complexType name="transferDataType">
|
||||
<sequence>
|
||||
<element name="trStatus" type="eppcom:trStatusType"/>
|
||||
<element name="reRr" type="rde:rrType"/>
|
||||
<element name="reDate" type="dateTime"/>
|
||||
<element name="acRr" type="rde:rrType"/>
|
||||
<element name="acDate" type="dateTime"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
|
||||
|
||||
<!-- Delete Type -->
|
||||
<complexType name="deleteType">
|
||||
<complexContent>
|
||||
<extension base="rde:deleteType">
|
||||
<sequence>
|
||||
<element name="id"
|
||||
type="eppcom:clIDType" minOccurs="0"
|
||||
maxOccurs="unbounded"/>
|
||||
</sequence>
|
||||
</extension>
|
||||
</complexContent>
|
||||
</complexType>
|
||||
</schema>
|
||||
@@ -60,9 +60,6 @@
|
||||
maxOccurs="unbounded"/>
|
||||
<element name="registrant"
|
||||
type="eppcom:clIDType" minOccurs="0"/>
|
||||
<element name="contact"
|
||||
type="domain:contactType"
|
||||
minOccurs="0" maxOccurs="unbounded"/>
|
||||
<element name="ns"
|
||||
type="domain:nsType" minOccurs="0"/>
|
||||
<element name="clID"
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
<schema targetNamespace="urn:ietf:params:xml:ns:rdeRegistrar-1.0"
|
||||
xmlns:rdeRegistrar="urn:ietf:params:xml:ns:rdeRegistrar-1.0"
|
||||
xmlns:rde="urn:ietf:params:xml:ns:rde-1.0"
|
||||
xmlns:contact="urn:ietf:params:xml:ns:contact-1.0"
|
||||
xmlns:domain="urn:ietf:params:xml:ns:domain-1.0"
|
||||
xmlns:eppcom="urn:ietf:params:xml:ns:eppcom-1.0"
|
||||
xmlns="http://www.w3.org/2001/XMLSchema"
|
||||
@@ -13,8 +12,6 @@
|
||||
schemaLocation="eppcom.xsd"/>
|
||||
<import namespace="urn:ietf:params:xml:ns:domain-1.0"
|
||||
schemaLocation="domain.xsd"/>
|
||||
<import namespace="urn:ietf:params:xml:ns:contact-1.0"
|
||||
schemaLocation="contact.xsd"/>
|
||||
<import namespace="urn:ietf:params:xml:ns:rde-1.0"
|
||||
schemaLocation="rde.xsd"/>
|
||||
|
||||
@@ -49,9 +46,9 @@
|
||||
type="rdeRegistrar:postalInfoType"
|
||||
maxOccurs="2"/>
|
||||
<element name="voice"
|
||||
type="contact:e164Type" minOccurs="0"/>
|
||||
type="eppcom:e164Type" minOccurs="0"/>
|
||||
<element name="fax"
|
||||
type="contact:e164Type" minOccurs="0"/>
|
||||
type="eppcom:e164Type" minOccurs="0"/>
|
||||
<element name="email"
|
||||
type="eppcom:minTokenType"/>
|
||||
<element name="url"
|
||||
|
||||
@@ -49,16 +49,17 @@ SELECT
|
||||
SUM(IF(metricName = 'srs-host-delete', count, 0)) AS srs_host_delete,
|
||||
SUM(IF(metricName = 'srs-host-info', count, 0)) AS srs_host_info,
|
||||
SUM(IF(metricName = 'srs-host-update', count, 0)) AS srs_host_update,
|
||||
SUM(IF(metricName = 'srs-cont-check', count, 0)) AS srs_cont_check,
|
||||
SUM(IF(metricName = 'srs-cont-create', count, 0)) AS srs_cont_create,
|
||||
SUM(IF(metricName = 'srs-cont-delete', count, 0)) AS srs_cont_delete,
|
||||
SUM(IF(metricName = 'srs-cont-info', count, 0)) AS srs_cont_info,
|
||||
SUM(IF(metricName = 'srs-cont-transfer-approve', count, 0)) AS srs_cont_transfer_approve,
|
||||
SUM(IF(metricName = 'srs-cont-transfer-cancel', count, 0)) AS srs_cont_transfer_cancel,
|
||||
SUM(IF(metricName = 'srs-cont-transfer-query', count, 0)) AS srs_cont_transfer_query,
|
||||
SUM(IF(metricName = 'srs-cont-transfer-reject', count, 0)) AS srs_cont_transfer_reject,
|
||||
SUM(IF(metricName = 'srs-cont-transfer-request', count, 0)) AS srs_cont_transfer_request,
|
||||
SUM(IF(metricName = 'srs-cont-update', count, 0)) AS srs_cont_update,
|
||||
-- Contacts are no longer supported
|
||||
0 AS srs_cont_check,
|
||||
0 AS srs_cont_create,
|
||||
0 AS srs_cont_delete,
|
||||
0 AS srs_cont_info,
|
||||
0 AS srs_cont_transfer_approve,
|
||||
0 AS srs_cont_transfer_cancel,
|
||||
0 AS srs_cont_transfer_query,
|
||||
0 AS srs_cont_transfer_reject,
|
||||
0 AS srs_cont_transfer_request,
|
||||
0 AS srs_cont_update,
|
||||
SUM(IF(metricName = 'rdap-queries', count, 0)) AS rdap_queries
|
||||
-- Cross join a list of all TLDs against TLD-specific metrics and then
|
||||
-- filter so that only metrics with that TLD or a NULL TLD are counted
|
||||
|
||||
@@ -1,86 +0,0 @@
|
||||
// Copyright 2017 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.
|
||||
|
||||
{namespace domain.registry.tools.contact_create}
|
||||
/**
|
||||
* Create contact
|
||||
*/
|
||||
{template contactcreate stricthtml="false"}
|
||||
{@param? id: string|null}
|
||||
{@param? name: string|null}
|
||||
{@param? org: string|null}
|
||||
{@param? street: list<string>|null}
|
||||
{@param? city: string|null}
|
||||
{@param? state: string|null}
|
||||
{@param? zip: string|null}
|
||||
{@param? cc: string|null}
|
||||
{@param? phone: string|null}
|
||||
{@param? fax: string|null}
|
||||
{@param? email: string|null}
|
||||
{@param password: string}
|
||||
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
|
||||
<command>
|
||||
<create>
|
||||
<contact:create
|
||||
xmlns:contact="urn:ietf:params:xml:ns:contact-1.0">
|
||||
{if $id}
|
||||
<contact:id>{$id}</contact:id>
|
||||
{/if}
|
||||
<contact:postalInfo type="loc">
|
||||
{if $name}
|
||||
<contact:name>{$name}</contact:name>
|
||||
{/if}
|
||||
{if $org}
|
||||
<contact:org>{$org}</contact:org>
|
||||
{/if}
|
||||
<contact:addr>
|
||||
{if $street}
|
||||
{for $s in $street}
|
||||
<contact:street>{$s}</contact:street>
|
||||
{/for}
|
||||
{/if}
|
||||
{if $city}
|
||||
<contact:city>{$city}</contact:city>
|
||||
{/if}
|
||||
{if $state}
|
||||
<contact:sp>{$state}</contact:sp>
|
||||
{/if}
|
||||
{if $zip}
|
||||
<contact:pc>{$zip}</contact:pc>
|
||||
{/if}
|
||||
{if $cc}
|
||||
<contact:cc>{$cc}</contact:cc>
|
||||
{/if}
|
||||
</contact:addr>
|
||||
</contact:postalInfo>
|
||||
{if $phone}
|
||||
<contact:voice>{$phone}</contact:voice>
|
||||
{/if}
|
||||
{if $fax}
|
||||
<contact:fax>{$fax}</contact:fax>
|
||||
{/if}
|
||||
{if $email}
|
||||
<contact:email>{$email}</contact:email>
|
||||
{/if}
|
||||
<contact:authInfo>
|
||||
<contact:pw>{$password}</contact:pw>
|
||||
</contact:authInfo>
|
||||
</contact:create>
|
||||
</create>
|
||||
<clTRID>RegistryTool</clTRID>
|
||||
</command>
|
||||
</epp>
|
||||
{/template}
|
||||
@@ -73,21 +73,11 @@ class EppXmlSanitizerTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
void testSanitize_contactAuthInfo_sanitized() throws Exception {
|
||||
byte[] inputXmlBytes = loadBytes(getClass(), "contact_info.xml").read();
|
||||
void testSanitize_domainAuthInfo_sanitized() throws Exception {
|
||||
byte[] inputXmlBytes = loadBytes(getClass(), "domain_info_response.xml").read();
|
||||
String expectedXml =
|
||||
UTF8_HEADER
|
||||
+ new EppLoader(this, "contact_info_sanitized.xml", ImmutableMap.of()).getEppXml();
|
||||
assertXmlEqualsIgnoreHeader(expectedXml, sanitizeEppXml(inputXmlBytes));
|
||||
}
|
||||
|
||||
@Test
|
||||
void testSanitize_contactCreateResponseAuthInfo_sanitized() throws Exception {
|
||||
byte[] inputXmlBytes = loadBytes(getClass(), "contact_info_from_create_response.xml").read();
|
||||
String expectedXml =
|
||||
UTF8_HEADER
|
||||
+ new EppLoader(
|
||||
this, "contact_info_from_create_response_sanitized.xml", ImmutableMap.of())
|
||||
+ new EppLoader(this, "domain_info_response_sanitized.xml", ImmutableMap.of())
|
||||
.getEppXml();
|
||||
assertXmlEqualsIgnoreHeader(expectedXml, sanitizeEppXml(inputXmlBytes));
|
||||
}
|
||||
@@ -124,7 +114,6 @@ class EppXmlSanitizerTest {
|
||||
String inputXml =
|
||||
"<?xml version=\"1.0\" encoding=\"UTF-16LE\" standalone=\"no\"?>" + "<p>\u03bc</p>\n";
|
||||
String sanitizedXml = sanitizeEppXml(inputXml.getBytes(UTF_16LE));
|
||||
|
||||
assertThat(sanitizedXml).isEqualTo(inputXml);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -30,12 +30,14 @@ class EppXxeAttackTest extends EppTestCase {
|
||||
@Test
|
||||
void testRemoteXmlExternalEntity() throws Exception {
|
||||
assertThatLoginSucceeds("NewRegistrar", "foo-BAR2");
|
||||
assertThatCommand("contact_create_remote_xxe.xml")
|
||||
assertThatCommand("host_create_remote_xxe.xml")
|
||||
.hasResponse(
|
||||
"response_error_no_cltrid.xml",
|
||||
ImmutableMap.of(
|
||||
"CODE", "2001",
|
||||
"MSG", "Syntax error at line 11, column 34: "
|
||||
"CODE",
|
||||
"2001",
|
||||
"MSG",
|
||||
"Syntax error at line 8, column 41: "
|
||||
+ "The entity "remote" was referenced, but not declared."));
|
||||
assertThatLogoutSucceeds();
|
||||
}
|
||||
@@ -43,12 +45,14 @@ class EppXxeAttackTest extends EppTestCase {
|
||||
@Test
|
||||
void testLocalXmlExtrernalEntity() throws Exception {
|
||||
assertThatLoginSucceeds("NewRegistrar", "foo-BAR2");
|
||||
assertThatCommand("contact_create_local_xxe.xml")
|
||||
assertThatCommand("host_create_local_xxe.xml")
|
||||
.hasResponse(
|
||||
"response_error_no_cltrid.xml",
|
||||
ImmutableMap.of(
|
||||
"CODE", "2001",
|
||||
"MSG", "Syntax error at line 11, column 31: "
|
||||
"CODE",
|
||||
"2001",
|
||||
"MSG",
|
||||
"Syntax error at line 8, column 38: "
|
||||
+ "The entity "ent" was referenced, but not declared."));
|
||||
assertThatLogoutSucceeds();
|
||||
}
|
||||
@@ -56,12 +60,14 @@ class EppXxeAttackTest extends EppTestCase {
|
||||
@Test
|
||||
void testBillionLaughsAttack() throws Exception {
|
||||
assertThatLoginSucceeds("NewRegistrar", "foo-BAR2");
|
||||
assertThatCommand("contact_create_billion_laughs.xml")
|
||||
assertThatCommand("host_create_billion_laughs.xml")
|
||||
.hasResponse(
|
||||
"response_error_no_cltrid.xml",
|
||||
ImmutableMap.of(
|
||||
"CODE", "2001",
|
||||
"MSG", "Syntax error at line 20, column 32: "
|
||||
"CODE",
|
||||
"2001",
|
||||
"MSG",
|
||||
"Syntax error at line 17, column 39: "
|
||||
+ "The entity "lol9" was referenced, but not declared."));
|
||||
assertThatLogoutSucceeds();
|
||||
}
|
||||
|
||||
@@ -45,7 +45,7 @@ class FlowReporterTest {
|
||||
}
|
||||
}
|
||||
|
||||
@ReportingSpec(ActivityReportField.CONTACT_CHECK)
|
||||
@ReportingSpec(ActivityReportField.DOMAIN_CHECK)
|
||||
static class TestReportingSpecCommandFlow implements Flow {
|
||||
@Override
|
||||
public ResponseOrGreeting run() {
|
||||
@@ -96,7 +96,7 @@ class FlowReporterTest {
|
||||
Map<String, Object> json =
|
||||
parseJsonMap(findFirstLogMessageByPrefix(handler, "FLOW-LOG-SIGNATURE-METADATA: "));
|
||||
assertThat(json).containsEntry("flowClassName", "TestReportingSpecCommandFlow");
|
||||
assertThat(json).containsEntry("icannActivityReportField", "srs-cont-check");
|
||||
assertThat(json).containsEntry("icannActivityReportField", "srs-dom-check");
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@@ -1,38 +0,0 @@
|
||||
// Copyright 2017 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.flows.contact;
|
||||
|
||||
import static google.registry.testing.EppExceptionSubject.assertAboutEppExceptions;
|
||||
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||
|
||||
import google.registry.flows.FlowTestCase;
|
||||
import google.registry.flows.exceptions.ContactsProhibitedException;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
/** Unit tests for {@link ContactCheckFlow}. */
|
||||
class ContactCheckFlowTest extends FlowTestCase<ContactCheckFlow> {
|
||||
|
||||
ContactCheckFlowTest() {
|
||||
setEppInput("contact_check.xml");
|
||||
}
|
||||
|
||||
@Test
|
||||
void testThrowsException() {
|
||||
assertAboutEppExceptions()
|
||||
.that(assertThrows(ContactsProhibitedException.class, this::runFlow))
|
||||
.marshalsToXml();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,37 +0,0 @@
|
||||
// Copyright 2017 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.flows.contact;
|
||||
|
||||
import static google.registry.testing.EppExceptionSubject.assertAboutEppExceptions;
|
||||
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||
|
||||
import google.registry.flows.FlowTestCase;
|
||||
import google.registry.flows.exceptions.ContactsProhibitedException;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
/** Unit tests for {@link ContactCreateFlow}. */
|
||||
class ContactCreateFlowTest extends FlowTestCase<ContactCreateFlow> {
|
||||
|
||||
ContactCreateFlowTest() {
|
||||
setEppInput("contact_create.xml");
|
||||
}
|
||||
|
||||
@Test
|
||||
void testThrowsException() {
|
||||
assertAboutEppExceptions()
|
||||
.that(assertThrows(ContactsProhibitedException.class, this::runFlow))
|
||||
.marshalsToXml();
|
||||
}
|
||||
}
|
||||
@@ -1,37 +0,0 @@
|
||||
// Copyright 2017 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.flows.contact;
|
||||
|
||||
import static google.registry.testing.EppExceptionSubject.assertAboutEppExceptions;
|
||||
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||
|
||||
import google.registry.flows.FlowTestCase;
|
||||
import google.registry.flows.exceptions.ContactsProhibitedException;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
/** Unit tests for {@link ContactDeleteFlow}. */
|
||||
class ContactDeleteFlowTest extends FlowTestCase<ContactDeleteFlow> {
|
||||
|
||||
ContactDeleteFlowTest() {
|
||||
setEppInput("contact_delete.xml");
|
||||
}
|
||||
|
||||
@Test
|
||||
void testThrowsException() {
|
||||
assertAboutEppExceptions()
|
||||
.that(assertThrows(ContactsProhibitedException.class, this::runFlow))
|
||||
.marshalsToXml();
|
||||
}
|
||||
}
|
||||
@@ -1,37 +0,0 @@
|
||||
// Copyright 2017 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.flows.contact;
|
||||
|
||||
import static google.registry.testing.EppExceptionSubject.assertAboutEppExceptions;
|
||||
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||
|
||||
import google.registry.flows.FlowTestCase;
|
||||
import google.registry.flows.exceptions.ContactsProhibitedException;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
/** Unit tests for {@link ContactInfoFlow}. */
|
||||
class ContactInfoFlowTest extends FlowTestCase<ContactInfoFlow> {
|
||||
|
||||
ContactInfoFlowTest() {
|
||||
setEppInput("contact_info.xml");
|
||||
}
|
||||
|
||||
@Test
|
||||
void testThrowsException() {
|
||||
assertAboutEppExceptions()
|
||||
.that(assertThrows(ContactsProhibitedException.class, this::runFlow))
|
||||
.marshalsToXml();
|
||||
}
|
||||
}
|
||||
@@ -1,37 +0,0 @@
|
||||
// Copyright 2017 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.flows.contact;
|
||||
|
||||
import static google.registry.testing.EppExceptionSubject.assertAboutEppExceptions;
|
||||
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||
|
||||
import google.registry.flows.FlowTestCase;
|
||||
import google.registry.flows.exceptions.ContactsProhibitedException;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
/** Unit tests for {@link ContactTransferApproveFlow}. */
|
||||
class ContactTransferApproveFlowTest extends FlowTestCase<ContactTransferApproveFlow> {
|
||||
|
||||
ContactTransferApproveFlowTest() {
|
||||
setEppInput("contact_transfer_approve.xml");
|
||||
}
|
||||
|
||||
@Test
|
||||
void testThrowsException() {
|
||||
assertAboutEppExceptions()
|
||||
.that(assertThrows(ContactsProhibitedException.class, this::runFlow))
|
||||
.marshalsToXml();
|
||||
}
|
||||
}
|
||||
@@ -1,37 +0,0 @@
|
||||
// Copyright 2017 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.flows.contact;
|
||||
|
||||
import static google.registry.testing.EppExceptionSubject.assertAboutEppExceptions;
|
||||
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||
|
||||
import google.registry.flows.FlowTestCase;
|
||||
import google.registry.flows.exceptions.ContactsProhibitedException;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
/** Unit tests for {@link ContactTransferCancelFlow}. */
|
||||
class ContactTransferCancelFlowTest extends FlowTestCase<ContactTransferCancelFlow> {
|
||||
|
||||
ContactTransferCancelFlowTest() {
|
||||
setEppInput("contact_transfer_cancel.xml");
|
||||
}
|
||||
|
||||
@Test
|
||||
void testThrowsException() {
|
||||
assertAboutEppExceptions()
|
||||
.that(assertThrows(ContactsProhibitedException.class, this::runFlow))
|
||||
.marshalsToXml();
|
||||
}
|
||||
}
|
||||
@@ -1,37 +0,0 @@
|
||||
// Copyright 2017 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.flows.contact;
|
||||
|
||||
import static google.registry.testing.EppExceptionSubject.assertAboutEppExceptions;
|
||||
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||
|
||||
import google.registry.flows.FlowTestCase;
|
||||
import google.registry.flows.exceptions.ContactsProhibitedException;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
/** Unit tests for {@link ContactTransferQueryFlow}. */
|
||||
class ContactTransferQueryFlowTest extends FlowTestCase<ContactTransferQueryFlow> {
|
||||
|
||||
ContactTransferQueryFlowTest() {
|
||||
setEppInput("contact_transfer_query.xml");
|
||||
}
|
||||
|
||||
@Test
|
||||
void testThrowsException() {
|
||||
assertAboutEppExceptions()
|
||||
.that(assertThrows(ContactsProhibitedException.class, this::runFlow))
|
||||
.marshalsToXml();
|
||||
}
|
||||
}
|
||||
@@ -1,37 +0,0 @@
|
||||
// Copyright 2017 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.flows.contact;
|
||||
|
||||
import static google.registry.testing.EppExceptionSubject.assertAboutEppExceptions;
|
||||
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||
|
||||
import google.registry.flows.FlowTestCase;
|
||||
import google.registry.flows.exceptions.ContactsProhibitedException;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
/** Unit tests for {@link ContactTransferRejectFlow}. */
|
||||
class ContactTransferRejectFlowTest extends FlowTestCase<ContactTransferRejectFlow> {
|
||||
|
||||
ContactTransferRejectFlowTest() {
|
||||
setEppInput("contact_transfer_reject.xml");
|
||||
}
|
||||
|
||||
@Test
|
||||
void testThrowsException() {
|
||||
assertAboutEppExceptions()
|
||||
.that(assertThrows(ContactsProhibitedException.class, this::runFlow))
|
||||
.marshalsToXml();
|
||||
}
|
||||
}
|
||||
@@ -1,37 +0,0 @@
|
||||
// Copyright 2017 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.flows.contact;
|
||||
|
||||
import static google.registry.testing.EppExceptionSubject.assertAboutEppExceptions;
|
||||
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||
|
||||
import google.registry.flows.FlowTestCase;
|
||||
import google.registry.flows.exceptions.ContactsProhibitedException;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
/** Unit tests for {@link ContactTransferRequestFlow}. */
|
||||
class ContactTransferRequestFlowTest extends FlowTestCase<ContactTransferRequestFlow> {
|
||||
|
||||
ContactTransferRequestFlowTest() {
|
||||
setEppInput("contact_transfer_request.xml");
|
||||
}
|
||||
|
||||
@Test
|
||||
void testThrowsException() {
|
||||
assertAboutEppExceptions()
|
||||
.that(assertThrows(ContactsProhibitedException.class, this::runFlow))
|
||||
.marshalsToXml();
|
||||
}
|
||||
}
|
||||
@@ -1,37 +0,0 @@
|
||||
// Copyright 2017 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.flows.contact;
|
||||
|
||||
import static google.registry.testing.EppExceptionSubject.assertAboutEppExceptions;
|
||||
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||
|
||||
import google.registry.flows.FlowTestCase;
|
||||
import google.registry.flows.exceptions.ContactsProhibitedException;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
/** Unit tests for {@link ContactUpdateFlow}. */
|
||||
class ContactUpdateFlowTest extends FlowTestCase<ContactUpdateFlow> {
|
||||
|
||||
ContactUpdateFlowTest() {
|
||||
setEppInput("contact_update.xml");
|
||||
}
|
||||
|
||||
@Test
|
||||
void testThrowsException() {
|
||||
assertAboutEppExceptions()
|
||||
.that(assertThrows(ContactsProhibitedException.class, this::runFlow))
|
||||
.marshalsToXml();
|
||||
}
|
||||
}
|
||||
@@ -79,6 +79,7 @@ import google.registry.flows.EppException;
|
||||
import google.registry.flows.EppException.UnimplementedExtensionException;
|
||||
import google.registry.flows.EppRequestSource;
|
||||
import google.registry.flows.ExtensionManager.UndeclaredServiceExtensionException;
|
||||
import google.registry.flows.FlowUtils;
|
||||
import google.registry.flows.FlowUtils.NotLoggedInException;
|
||||
import google.registry.flows.FlowUtils.UnknownCurrencyEppException;
|
||||
import google.registry.flows.ResourceFlowTestCase;
|
||||
@@ -141,7 +142,6 @@ import google.registry.flows.domain.token.AllocationTokenFlowUtils.AllocationTok
|
||||
import google.registry.flows.domain.token.AllocationTokenFlowUtils.AllocationTokenNotValidForRegistrarException;
|
||||
import google.registry.flows.domain.token.AllocationTokenFlowUtils.AlreadyRedeemedAllocationTokenException;
|
||||
import google.registry.flows.domain.token.AllocationTokenFlowUtils.NonexistentAllocationTokenException;
|
||||
import google.registry.flows.exceptions.ContactsProhibitedException;
|
||||
import google.registry.flows.exceptions.OnlyToolCanPassMetadataException;
|
||||
import google.registry.flows.exceptions.ResourceCreateContentionException;
|
||||
import google.registry.model.billing.BillingBase;
|
||||
@@ -1878,7 +1878,8 @@ class DomainCreateFlowTest extends ResourceFlowTestCase<DomainCreateFlow, Domain
|
||||
void testFailure_minimumDataset_noRegistrantButSomeOtherContactTypes() throws Exception {
|
||||
setEppInput("domain_create_other_contact_types.xml");
|
||||
persistHosts();
|
||||
EppException thrown = assertThrows(ContactsProhibitedException.class, this::runFlow);
|
||||
EppException thrown =
|
||||
assertThrows(FlowUtils.GenericXmlSyntaxErrorException.class, this::runFlow);
|
||||
assertAboutEppExceptions().that(thrown).marshalsToXml();
|
||||
}
|
||||
|
||||
|
||||
@@ -65,6 +65,7 @@ import google.registry.config.RegistryConfig;
|
||||
import google.registry.flows.EppException;
|
||||
import google.registry.flows.EppException.UnimplementedExtensionException;
|
||||
import google.registry.flows.EppRequestSource;
|
||||
import google.registry.flows.FlowUtils;
|
||||
import google.registry.flows.FlowUtils.NotLoggedInException;
|
||||
import google.registry.flows.ResourceFlowTestCase;
|
||||
import google.registry.flows.ResourceFlowUtils.AddExistingValueException;
|
||||
@@ -87,7 +88,6 @@ import google.registry.flows.domain.DomainFlowUtils.SecDnsAllUsageException;
|
||||
import google.registry.flows.domain.DomainFlowUtils.TooManyDsRecordsException;
|
||||
import google.registry.flows.domain.DomainFlowUtils.TooManyNameserversException;
|
||||
import google.registry.flows.domain.DomainFlowUtils.UrgentAttributeNotSupportedException;
|
||||
import google.registry.flows.exceptions.ContactsProhibitedException;
|
||||
import google.registry.flows.exceptions.OnlyToolCanPassMetadataException;
|
||||
import google.registry.flows.exceptions.ResourceHasClientUpdateProhibitedException;
|
||||
import google.registry.flows.exceptions.ResourceStatusProhibitsOperationException;
|
||||
@@ -273,15 +273,12 @@ class DomainUpdateFlowTest extends ResourceFlowTestCase<DomainUpdateFlow, Domain
|
||||
}
|
||||
|
||||
@Test
|
||||
void testFailure_minimumDataset_whenAddingNewContacts() throws Exception {
|
||||
void testFailure_whenAddingNewContacts() throws Exception {
|
||||
// This EPP adds a new technical contact mak21 that wasn't already present.
|
||||
setEppInput("domain_update_empty_registrant.xml");
|
||||
persistReferencedEntities();
|
||||
persistDomain();
|
||||
// Fails because the update adds some new contacts, although the registrant has been removed.
|
||||
ContactsProhibitedException thrown =
|
||||
assertThrows(ContactsProhibitedException.class, this::runFlow);
|
||||
assertAboutEppExceptions().that(thrown).marshalsToXml();
|
||||
assertThrows(FlowUtils.GenericXmlSyntaxErrorException.class, this::persistDomain);
|
||||
}
|
||||
|
||||
private void modifyDomainToHave13Nameservers() throws Exception {
|
||||
|
||||
@@ -127,31 +127,6 @@ public abstract class LoginFlowTestCase extends FlowTestCase<LoginFlow> {
|
||||
doFailingTest("login_invalid_extension.xml", UnimplementedExtensionException.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testFailure_invalidContactObjectUri() {
|
||||
doFailingTest("login_with_contact_objuri.xml", UnimplementedObjectServiceException.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testSuccess_contactObjectUriSent_worksWhenNotProhibited() throws Exception {
|
||||
persistResource(
|
||||
FeatureFlag.get(PROHIBIT_CONTACT_OBJECTS_ON_LOGIN)
|
||||
.asBuilder()
|
||||
.setStatusMap(ImmutableSortedMap.of(START_INSTANT, FeatureStatus.INACTIVE))
|
||||
.build());
|
||||
doSuccessfulTest("login_with_contact_objuri.xml");
|
||||
}
|
||||
|
||||
@Test
|
||||
void testSuccess_contactObjectUriNotSent_worksWhenNotProhibited() throws Exception {
|
||||
persistResource(
|
||||
FeatureFlag.get(PROHIBIT_CONTACT_OBJECTS_ON_LOGIN)
|
||||
.asBuilder()
|
||||
.setStatusMap(ImmutableSortedMap.of(START_INSTANT, FeatureStatus.INACTIVE))
|
||||
.build());
|
||||
doSuccessfulTest("login_valid.xml");
|
||||
}
|
||||
|
||||
@Test
|
||||
void testFailure_invalidTypes() {
|
||||
doFailingTest("login_invalid_types.xml", UnimplementedObjectServiceException.class);
|
||||
|
||||
@@ -1,119 +0,0 @@
|
||||
// Copyright 2017 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.model.contact;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
import static google.registry.model.eppcommon.EppXmlTransformer.marshalInput;
|
||||
import static google.registry.model.eppcommon.EppXmlTransformer.validateInput;
|
||||
import static google.registry.xml.ValidationMode.LENIENT;
|
||||
import static google.registry.xml.XmlTestUtils.assertXmlEquals;
|
||||
import static java.nio.charset.StandardCharsets.UTF_8;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import google.registry.model.contact.ContactCommand.Update;
|
||||
import google.registry.model.contact.ContactCommand.Update.Change;
|
||||
import google.registry.model.eppinput.EppInput.ResourceCommandWrapper;
|
||||
import google.registry.testing.EppLoader;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
/** Test xml roundtripping of commands. */
|
||||
public class ContactCommandTest {
|
||||
|
||||
private void doXmlRoundtripTest(String inputFilename) throws Exception {
|
||||
EppLoader eppLoader = new EppLoader(this, inputFilename);
|
||||
// JAXB can unmarshal a "name" or an "id" into the "targetId" field, but when marshaling it
|
||||
// chooses "name" always since it is last on the list of @XmlElement choices on that field. This
|
||||
// is fine because we never marshal an input command... except for this test which verifies
|
||||
// roundtripping, so we hack the output here. Since the marshal step won't validate, we use
|
||||
// the non-validating lenient marshal, do the change, and then do the validate afterwards.
|
||||
String marshaled = new String(marshalInput(eppLoader.getEpp(), LENIENT), UTF_8).replaceAll(
|
||||
"<contact:name>(sh8013|sah8013|8013sah)</contact:name>",
|
||||
"<contact:id>$1</contact:id>");
|
||||
validateInput(marshaled);
|
||||
assertXmlEquals(eppLoader.getEppXml(), marshaled);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testCreate() throws Exception {
|
||||
doXmlRoundtripTest("contact_create.xml");
|
||||
}
|
||||
|
||||
@Test
|
||||
void testDelete() throws Exception {
|
||||
doXmlRoundtripTest("contact_delete.xml");
|
||||
}
|
||||
|
||||
@Test
|
||||
void testUpdate() throws Exception {
|
||||
doXmlRoundtripTest("contact_update.xml");
|
||||
}
|
||||
|
||||
@Test
|
||||
void testUpdate_individualStreetFieldsGetPopulatedCorrectly() throws Exception {
|
||||
EppLoader eppLoader = new EppLoader(this, "contact_update.xml");
|
||||
Update command =
|
||||
(Update)
|
||||
((ResourceCommandWrapper) eppLoader.getEpp().getCommandWrapper().getCommand())
|
||||
.getResourceCommand();
|
||||
Change change = command.getInnerChange();
|
||||
assertThat(change.getInternationalizedPostalInfo().getAddress())
|
||||
.isEqualTo(
|
||||
new ContactAddress.Builder()
|
||||
.setCity("Dulles")
|
||||
.setCountryCode("US")
|
||||
.setState("VA")
|
||||
.setZip("20166-6503")
|
||||
.setStreet(
|
||||
ImmutableList.of(
|
||||
"124 Example Dr.",
|
||||
"Suite 200")) // streetLine1 and streetLine2 get set inside the builder
|
||||
.build());
|
||||
}
|
||||
|
||||
@Test
|
||||
void testInfo() throws Exception {
|
||||
doXmlRoundtripTest("contact_info.xml");
|
||||
}
|
||||
|
||||
@Test
|
||||
void testCheck() throws Exception {
|
||||
doXmlRoundtripTest("contact_check.xml");
|
||||
}
|
||||
|
||||
@Test
|
||||
void testTransferApprove() throws Exception {
|
||||
doXmlRoundtripTest("contact_transfer_approve.xml");
|
||||
}
|
||||
|
||||
@Test
|
||||
void testTransferReject() throws Exception {
|
||||
doXmlRoundtripTest("contact_transfer_reject.xml");
|
||||
}
|
||||
|
||||
@Test
|
||||
void testTransferCancel() throws Exception {
|
||||
doXmlRoundtripTest("contact_transfer_cancel.xml");
|
||||
}
|
||||
|
||||
@Test
|
||||
void testTransferQuery() throws Exception {
|
||||
doXmlRoundtripTest("contact_transfer_query.xml");
|
||||
}
|
||||
|
||||
@Test
|
||||
void testTransferRequest() throws Exception {
|
||||
doXmlRoundtripTest("contact_transfer_request.xml");
|
||||
}
|
||||
}
|
||||
@@ -17,8 +17,8 @@ package google.registry.model.domain;
|
||||
import static google.registry.testing.DatabaseHelper.persistActiveHost;
|
||||
import static org.junit.Assert.assertThrows;
|
||||
|
||||
import google.registry.flows.FlowUtils;
|
||||
import google.registry.flows.domain.DomainFlowUtils.RegistrantProhibitedException;
|
||||
import google.registry.flows.exceptions.ContactsProhibitedException;
|
||||
import google.registry.model.ResourceCommandTestCase;
|
||||
import google.registry.model.eppinput.EppInput;
|
||||
import google.registry.model.eppinput.EppInput.ResourceCommandWrapper;
|
||||
@@ -88,10 +88,9 @@ class DomainCommandTest extends ResourceCommandTestCase {
|
||||
void testCreate_cloneAndLinkReferences_failsWithContacts() throws Exception {
|
||||
persistActiveHost("ns1.example.net");
|
||||
persistActiveHost("ns2.example.net");
|
||||
DomainCommand.Create create =
|
||||
(DomainCommand.Create) loadEppResourceCommand("domain_create_with_contacts.xml");
|
||||
assertThrows(
|
||||
RegistrantProhibitedException.class, () -> create.cloneAndLinkReferences(fakeClock.now()));
|
||||
FlowUtils.GenericXmlSyntaxErrorException.class,
|
||||
() -> loadEppResourceCommand("domain_create_with_contacts.xml"));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -139,10 +138,9 @@ class DomainCommandTest extends ResourceCommandTestCase {
|
||||
void testUpdate_cloneAndLinkReferences_failsWithContacts() throws Exception {
|
||||
persistActiveHost("ns1.example.com");
|
||||
persistActiveHost("ns2.example.com");
|
||||
DomainCommand.Update update =
|
||||
(DomainCommand.Update) loadEppResourceCommand("domain_update_with_contacts.xml");
|
||||
assertThrows(
|
||||
ContactsProhibitedException.class, () -> update.cloneAndLinkReferences(fakeClock.now()));
|
||||
FlowUtils.GenericXmlSyntaxErrorException.class,
|
||||
() -> loadEppResourceCommand("domain_update_with_contacts.xml"));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@@ -59,7 +59,7 @@ class EppXmlTransformerTest {
|
||||
|
||||
@Test
|
||||
void testUnmarshalingEppInput() throws Exception {
|
||||
EppInput input = unmarshal(EppInput.class, loadBytes(getClass(), "contact_info.xml").read());
|
||||
EppInput input = unmarshal(EppInput.class, loadBytes(getClass(), "domain_info.xml").read());
|
||||
assertThat(input.getCommandType()).isEqualTo("info");
|
||||
}
|
||||
|
||||
@@ -67,7 +67,7 @@ class EppXmlTransformerTest {
|
||||
void testUnmarshalingWrongClassThrows() {
|
||||
assertThrows(
|
||||
ClassCastException.class,
|
||||
() -> unmarshal(EppOutput.class, loadBytes(getClass(), "contact_info.xml").read()));
|
||||
() -> unmarshal(EppOutput.class, loadBytes(getClass(), "domain_info.xml").read()));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@@ -97,11 +97,6 @@ public class DomainToXjcConverterTest {
|
||||
|
||||
assertThat(bean.getClID()).isEqualTo("TheRegistrar");
|
||||
|
||||
assertThat(
|
||||
bean.getContacts().stream()
|
||||
.map(input -> String.format("%s %s", input.getType().toString(), input.getValue())))
|
||||
.isEmpty();
|
||||
|
||||
assertThat(bean.getCrDate()).isEqualTo(Instant.parse("1900-01-01T00:00:00Z"));
|
||||
|
||||
// o A <crRr> element that contains the identifier of the registrar
|
||||
@@ -176,7 +171,6 @@ public class DomainToXjcConverterTest {
|
||||
void testConvertThin() {
|
||||
XjcRdeDomain bean = DomainToXjcConverter.convertDomain(makeDomain(clock), RdeMode.THIN);
|
||||
assertThat(bean.getRegistrant()).isNull();
|
||||
assertThat(bean.getContacts()).isEmpty();
|
||||
assertThat(bean.getSecDNS()).isNull();
|
||||
}
|
||||
|
||||
@@ -197,7 +191,6 @@ public class DomainToXjcConverterTest {
|
||||
Domain domain = makeDomain(clock);
|
||||
XjcRdeDomain bean = DomainToXjcConverter.convertDomain(domain, RdeMode.FULL);
|
||||
assertThat(bean.getRegistrant()).isNull();
|
||||
assertThat(bean.getContacts()).isEmpty();
|
||||
wrapDeposit(bean).marshal(new ByteArrayOutputStream(), UTF_8);
|
||||
}
|
||||
|
||||
|
||||
@@ -52,10 +52,8 @@ public class EppToolCommandTest extends EppToolCommandTestCase<EppToolCommand> {
|
||||
@Test
|
||||
void testSuccess_singleXmlCommand() throws Exception {
|
||||
// The choice of xml file is arbitrary.
|
||||
runCommandForced(
|
||||
"--client=NewRegistrar",
|
||||
ToolsTestData.loadFile("contact_create.xml"));
|
||||
eppVerifier.verifySent("contact_create.xml");
|
||||
runCommandForced("--client=NewRegistrar", ToolsTestData.loadFile("domain_create_minimal.xml"));
|
||||
eppVerifier.verifySent("domain_create_minimal.xml");
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -63,11 +61,11 @@ public class EppToolCommandTest extends EppToolCommandTestCase<EppToolCommand> {
|
||||
// The choice of xml files is arbitrary.
|
||||
runCommandForced(
|
||||
"--client=NewRegistrar",
|
||||
ToolsTestData.loadFile("contact_create.xml"),
|
||||
ToolsTestData.loadFile("domain_create_minimal.xml"),
|
||||
ToolsTestData.loadFile("domain_check.xml"),
|
||||
ToolsTestData.loadFile("domain_check_fee.xml"));
|
||||
eppVerifier
|
||||
.verifySent("contact_create.xml")
|
||||
.verifySent("domain_create_minimal.xml")
|
||||
.verifySent("domain_check.xml")
|
||||
.verifySent("domain_check_fee.xml");
|
||||
}
|
||||
|
||||
@@ -32,33 +32,33 @@ class ExecuteEppCommandTest extends EppToolCommandTestCase<ExecuteEppCommand> {
|
||||
|
||||
@BeforeEach
|
||||
void beforeEach() throws Exception {
|
||||
xmlInput = ToolsTestData.loadFile("contact_create.xml");
|
||||
xmlInput = ToolsTestData.loadFile("domain_create_minimal.xml");
|
||||
eppFile = writeToNamedTmpFile("eppFile", xmlInput);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testSuccess() throws Exception {
|
||||
runCommand("--client=NewRegistrar", "--force", eppFile);
|
||||
eppVerifier.verifySent("contact_create.xml");
|
||||
eppVerifier.verifySent("domain_create_minimal.xml");
|
||||
}
|
||||
|
||||
@Test
|
||||
void testSuccess_dryRun() throws Exception {
|
||||
runCommand("--client=NewRegistrar", "--dry_run", eppFile);
|
||||
eppVerifier.expectDryRun().verifySent("contact_create.xml");
|
||||
eppVerifier.expectDryRun().verifySent("domain_create_minimal.xml");
|
||||
}
|
||||
|
||||
@Test
|
||||
void testSuccess_withSuperuser() throws Exception {
|
||||
runCommand("--client=NewRegistrar", "--superuser", "--force", eppFile);
|
||||
eppVerifier.expectSuperuser().verifySent("contact_create.xml");
|
||||
eppVerifier.expectSuperuser().verifySent("domain_create_minimal.xml");
|
||||
}
|
||||
|
||||
@Test
|
||||
void testSuccess_fromStdin() throws Exception {
|
||||
System.setIn(new ByteArrayInputStream(xmlInput.getBytes(UTF_8)));
|
||||
runCommand("--client=NewRegistrar", "--force");
|
||||
eppVerifier.verifySent("contact_create.xml");
|
||||
eppVerifier.verifySent("domain_create_minimal.xml");
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -66,9 +66,7 @@ class ExecuteEppCommandTest extends EppToolCommandTestCase<ExecuteEppCommand> {
|
||||
String xmlInput2 = ToolsTestData.loadFile("domain_check.xml");
|
||||
String eppFile2 = writeToNamedTmpFile("eppFile2", xmlInput2);
|
||||
runCommand("--client=NewRegistrar", "--force", eppFile, eppFile2);
|
||||
eppVerifier
|
||||
.verifySent("contact_create.xml")
|
||||
.verifySent("domain_check.xml");
|
||||
eppVerifier.verifySent("domain_create_minimal.xml").verifySent("domain_check.xml");
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@@ -53,10 +53,8 @@ public class MutatingEppToolCommandTest extends EppToolCommandTestCase<MutatingE
|
||||
void testSuccess_dryrun() throws Exception {
|
||||
// The choice of xml file is arbitrary.
|
||||
runCommand(
|
||||
"--client=NewRegistrar",
|
||||
"--dry_run",
|
||||
ToolsTestData.loadFile("contact_create.xml"));
|
||||
eppVerifier.expectDryRun().verifySent("contact_create.xml");
|
||||
"--client=NewRegistrar", "--dry_run", ToolsTestData.loadFile("domain_create_minimal.xml"));
|
||||
eppVerifier.expectDryRun().verifySent("domain_create_minimal.xml");
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@@ -26,7 +26,7 @@ import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||
import com.google.re2j.Pattern;
|
||||
import google.registry.xjc.rde.XjcRdeDeposit;
|
||||
import google.registry.xjc.rde.XjcRdeDepositTypeType;
|
||||
import google.registry.xjc.rdecontact.XjcRdeContact;
|
||||
import google.registry.xjc.rdedomain.XjcRdeDomain;
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import org.junit.jupiter.api.Test;
|
||||
@@ -109,8 +109,8 @@ class XjcObjectTest {
|
||||
|
||||
@Test
|
||||
void testToStringNoValidation() {
|
||||
String xml = new XjcRdeContact().toString();
|
||||
assertWithMessage(xml).that(xml).startsWith("<XjcRdeContact ");
|
||||
String xml = new XjcRdeDomain().toString();
|
||||
assertWithMessage(xml).that(xml).startsWith("<XjcRdeDomain ");
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@@ -54,21 +54,6 @@ class XmlTestdataTest {
|
||||
@SuppressWarnings("unused")
|
||||
static Stream<Arguments> provideTestCombinations() {
|
||||
return Stream.of(
|
||||
Arguments.of("contact_check_response.xml", XjcEpp.class),
|
||||
Arguments.of("contact_check.xml", XjcEpp.class),
|
||||
Arguments.of("contact_create_response_offline_review_completed.xml", XjcEpp.class),
|
||||
Arguments.of("contact_create_response_offline_review.xml", XjcEpp.class),
|
||||
Arguments.of("contact_create_response.xml", XjcEpp.class),
|
||||
Arguments.of("contact_create.xml", XjcEpp.class),
|
||||
Arguments.of("contact_delete_response.xml", XjcEpp.class),
|
||||
Arguments.of("contact_delete.xml", XjcEpp.class),
|
||||
Arguments.of("contact_info_response.xml", XjcEpp.class),
|
||||
Arguments.of("contact_info.xml", XjcEpp.class),
|
||||
Arguments.of("contact_transfer_query_response.xml", XjcEpp.class),
|
||||
Arguments.of("contact_transfer_query.xml", XjcEpp.class),
|
||||
Arguments.of("contact_transfer_request_response.xml", XjcEpp.class),
|
||||
Arguments.of("contact_transfer_request.xml", XjcEpp.class),
|
||||
Arguments.of("contact_update.xml", XjcEpp.class),
|
||||
Arguments.of("domain_check_response.xml", XjcEpp.class),
|
||||
Arguments.of("domain_check.xml", XjcEpp.class),
|
||||
Arguments.of("domain_create_response_offline_review_completed.xml", XjcEpp.class),
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<rde:deposit xmlns:contact="urn:ietf:params:xml:ns:contact-1.0" xmlns:rdeContact="urn:ietf:params:xml:ns:rdeContact-1.0" xmlns:launch="urn:ietf:params:xml:ns:launch-1.0" xmlns:rdeEppParams="urn:ietf:params:xml:ns:rdeEppParams-1.0" xmlns:rdeNotification="urn:ietf:params:xml:ns:rdeNotification-1.0" xmlns:host="urn:ietf:params:xml:ns:host-1.0" xmlns:rdeIDN="urn:ietf:params:xml:ns:rdeIDN-1.0" xmlns:eppcom="urn:ietf:params:xml:ns:eppcom-1.0" xmlns:smd="urn:ietf:params:xml:ns:signedMark-1.0" xmlns:rdeHost="urn:ietf:params:xml:ns:rdeHost-1.0" xmlns:rdeReport="urn:ietf:params:xml:ns:rdeReport-1.0" xmlns:fee11="urn:ietf:params:xml:ns:fee-0.11" xmlns:fee12="urn:ietf:params:xml:ns:fee-0.12" xmlns:iirdea="urn:ietf:params:xml:ns:iirdea-1.0" xmlns:rdeHeader="urn:ietf:params:xml:ns:rdeHeader-1.0" xmlns:domain="urn:ietf:params:xml:ns:domain-1.0" xmlns:rdeDomain="urn:ietf:params:xml:ns:rdeDomain-1.0" xmlns:epp="urn:ietf:params:xml:ns:epp-1.0" xmlns:rdeNNDN="urn:ietf:params:xml:ns:rdeNNDN-1.0" xmlns:rdeRegistrar="urn:ietf:params:xml:ns:rdeRegistrar-1.0" xmlns:rgp="urn:ietf:params:xml:ns:rgp-1.0" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" xmlns:rde="urn:ietf:params:xml:ns:rde-1.0" xmlns:secDNS="urn:ietf:params:xml:ns:secDNS-1.1" xmlns:mark="urn:ietf:params:xml:ns:mark-1.0" xmlns:rdePolicy="urn:ietf:params:xml:ns:rdePolicy-1.0" xmlns:fee_1_00="urn:ietf:params:xml:ns:epp:fee-1.0" xmlns:fee06="urn:ietf:params:xml:ns:fee-0.6" type="FULL" id="AAAABXDKZ6WAA"%RESEND%>
|
||||
<rde:deposit xmlns:launch="urn:ietf:params:xml:ns:launch-1.0" xmlns:rdeEppParams="urn:ietf:params:xml:ns:rdeEppParams-1.0" xmlns:rdeNotification="urn:ietf:params:xml:ns:rdeNotification-1.0" xmlns:host="urn:ietf:params:xml:ns:host-1.0" xmlns:rdeIDN="urn:ietf:params:xml:ns:rdeIDN-1.0" xmlns:eppcom="urn:ietf:params:xml:ns:eppcom-1.0" xmlns:smd="urn:ietf:params:xml:ns:signedMark-1.0" xmlns:rdeHost="urn:ietf:params:xml:ns:rdeHost-1.0" xmlns:rdeReport="urn:ietf:params:xml:ns:rdeReport-1.0" xmlns:fee11="urn:ietf:params:xml:ns:fee-0.11" xmlns:fee12="urn:ietf:params:xml:ns:fee-0.12" xmlns:iirdea="urn:ietf:params:xml:ns:iirdea-1.0" xmlns:rdeHeader="urn:ietf:params:xml:ns:rdeHeader-1.0" xmlns:domain="urn:ietf:params:xml:ns:domain-1.0" xmlns:rdeDomain="urn:ietf:params:xml:ns:rdeDomain-1.0" xmlns:epp="urn:ietf:params:xml:ns:epp-1.0" xmlns:rdeNNDN="urn:ietf:params:xml:ns:rdeNNDN-1.0" xmlns:rdeRegistrar="urn:ietf:params:xml:ns:rdeRegistrar-1.0" xmlns:rgp="urn:ietf:params:xml:ns:rgp-1.0" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" xmlns:rde="urn:ietf:params:xml:ns:rde-1.0" xmlns:secDNS="urn:ietf:params:xml:ns:secDNS-1.1" xmlns:mark="urn:ietf:params:xml:ns:mark-1.0" xmlns:rdePolicy="urn:ietf:params:xml:ns:rdePolicy-1.0" xmlns:fee_1_00="urn:ietf:params:xml:ns:epp:fee-1.0" xmlns:fee06="urn:ietf:params:xml:ns:fee-0.6" type="FULL" id="AAAABXDKZ6WAA"%RESEND%>
|
||||
<rde:watermark>2000-01-01T00:00:00.000Z</rde:watermark>
|
||||
<rde:rdeMenu>
|
||||
<rde:version>1.0</rde:version>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<rde:deposit xmlns:contact="urn:ietf:params:xml:ns:contact-1.0" xmlns:rdeContact="urn:ietf:params:xml:ns:rdeContact-1.0" xmlns:launch="urn:ietf:params:xml:ns:launch-1.0" xmlns:rdeEppParams="urn:ietf:params:xml:ns:rdeEppParams-1.0" xmlns:rdeNotification="urn:ietf:params:xml:ns:rdeNotification-1.0" xmlns:host="urn:ietf:params:xml:ns:host-1.0" xmlns:rdeIDN="urn:ietf:params:xml:ns:rdeIDN-1.0" xmlns:eppcom="urn:ietf:params:xml:ns:eppcom-1.0" xmlns:smd="urn:ietf:params:xml:ns:signedMark-1.0" xmlns:rdeHost="urn:ietf:params:xml:ns:rdeHost-1.0" xmlns:rdeReport="urn:ietf:params:xml:ns:rdeReport-1.0" xmlns:fee11="urn:ietf:params:xml:ns:fee-0.11" xmlns:fee12="urn:ietf:params:xml:ns:fee-0.12" xmlns:iirdea="urn:ietf:params:xml:ns:iirdea-1.0" xmlns:rdeHeader="urn:ietf:params:xml:ns:rdeHeader-1.0" xmlns:domain="urn:ietf:params:xml:ns:domain-1.0" xmlns:rdeDomain="urn:ietf:params:xml:ns:rdeDomain-1.0" xmlns:epp="urn:ietf:params:xml:ns:epp-1.0" xmlns:rdeNNDN="urn:ietf:params:xml:ns:rdeNNDN-1.0" xmlns:rdeRegistrar="urn:ietf:params:xml:ns:rdeRegistrar-1.0" xmlns:rgp="urn:ietf:params:xml:ns:rgp-1.0" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" xmlns:rde="urn:ietf:params:xml:ns:rde-1.0" xmlns:secDNS="urn:ietf:params:xml:ns:secDNS-1.1" xmlns:mark="urn:ietf:params:xml:ns:mark-1.0" xmlns:rdePolicy="urn:ietf:params:xml:ns:rdePolicy-1.0" xmlns:fee_1_00="urn:ietf:params:xml:ns:epp:fee-1.0" xmlns:fee06="urn:ietf:params:xml:ns:fee-0.6" type="FULL" id="AAAABXDKZ6WAA"%RESEND%>
|
||||
<rde:deposit xmlns:launch="urn:ietf:params:xml:ns:launch-1.0" xmlns:rdeEppParams="urn:ietf:params:xml:ns:rdeEppParams-1.0" xmlns:rdeNotification="urn:ietf:params:xml:ns:rdeNotification-1.0" xmlns:host="urn:ietf:params:xml:ns:host-1.0" xmlns:rdeIDN="urn:ietf:params:xml:ns:rdeIDN-1.0" xmlns:eppcom="urn:ietf:params:xml:ns:eppcom-1.0" xmlns:smd="urn:ietf:params:xml:ns:signedMark-1.0" xmlns:rdeHost="urn:ietf:params:xml:ns:rdeHost-1.0" xmlns:rdeReport="urn:ietf:params:xml:ns:rdeReport-1.0" xmlns:fee11="urn:ietf:params:xml:ns:fee-0.11" xmlns:fee12="urn:ietf:params:xml:ns:fee-0.12" xmlns:iirdea="urn:ietf:params:xml:ns:iirdea-1.0" xmlns:rdeHeader="urn:ietf:params:xml:ns:rdeHeader-1.0" xmlns:domain="urn:ietf:params:xml:ns:domain-1.0" xmlns:rdeDomain="urn:ietf:params:xml:ns:rdeDomain-1.0" xmlns:epp="urn:ietf:params:xml:ns:epp-1.0" xmlns:rdeNNDN="urn:ietf:params:xml:ns:rdeNNDN-1.0" xmlns:rdeRegistrar="urn:ietf:params:xml:ns:rdeRegistrar-1.0" xmlns:rgp="urn:ietf:params:xml:ns:rgp-1.0" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" xmlns:rde="urn:ietf:params:xml:ns:rde-1.0" xmlns:secDNS="urn:ietf:params:xml:ns:secDNS-1.1" xmlns:mark="urn:ietf:params:xml:ns:mark-1.0" xmlns:rdePolicy="urn:ietf:params:xml:ns:rdePolicy-1.0" xmlns:fee_1_00="urn:ietf:params:xml:ns:epp:fee-1.0" xmlns:fee06="urn:ietf:params:xml:ns:fee-0.6" type="FULL" id="AAAABXDKZ6WAA"%RESEND%>
|
||||
<rde:watermark>2000-01-01T00:00:00.000Z</rde:watermark>
|
||||
<rde:rdeMenu>
|
||||
<rde:version>1.0</rde:version>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<rdeReport:report xmlns:contact="urn:ietf:params:xml:ns:contact-1.0" xmlns:rdeContact="urn:ietf:params:xml:ns:rdeContact-1.0" xmlns:launch="urn:ietf:params:xml:ns:launch-1.0" xmlns:rdeEppParams="urn:ietf:params:xml:ns:rdeEppParams-1.0" xmlns:rdeNotification="urn:ietf:params:xml:ns:rdeNotification-1.0" xmlns:host="urn:ietf:params:xml:ns:host-1.0" xmlns:rdeIDN="urn:ietf:params:xml:ns:rdeIDN-1.0" xmlns:eppcom="urn:ietf:params:xml:ns:eppcom-1.0" xmlns:smd="urn:ietf:params:xml:ns:signedMark-1.0" xmlns:rdeHost="urn:ietf:params:xml:ns:rdeHost-1.0" xmlns:rdeReport="urn:ietf:params:xml:ns:rdeReport-1.0" xmlns:fee11="urn:ietf:params:xml:ns:fee-0.11" xmlns:fee12="urn:ietf:params:xml:ns:fee-0.12" xmlns:iirdea="urn:ietf:params:xml:ns:iirdea-1.0" xmlns:rdeHeader="urn:ietf:params:xml:ns:rdeHeader-1.0" xmlns:domain="urn:ietf:params:xml:ns:domain-1.0" xmlns:rdeDomain="urn:ietf:params:xml:ns:rdeDomain-1.0" xmlns:epp="urn:ietf:params:xml:ns:epp-1.0" xmlns:rdeNNDN="urn:ietf:params:xml:ns:rdeNNDN-1.0" xmlns:rdeRegistrar="urn:ietf:params:xml:ns:rdeRegistrar-1.0" xmlns:rgp="urn:ietf:params:xml:ns:rgp-1.0" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" xmlns:rde="urn:ietf:params:xml:ns:rde-1.0" xmlns:secDNS="urn:ietf:params:xml:ns:secDNS-1.1" xmlns:mark="urn:ietf:params:xml:ns:mark-1.0" xmlns:rdePolicy="urn:ietf:params:xml:ns:rdePolicy-1.0" xmlns:fee_1_00="urn:ietf:params:xml:ns:epp:fee-1.0" xmlns:fee06="urn:ietf:params:xml:ns:fee-0.6">
|
||||
<rdeReport:report xmlns:launch="urn:ietf:params:xml:ns:launch-1.0" xmlns:rdeEppParams="urn:ietf:params:xml:ns:rdeEppParams-1.0" xmlns:rdeNotification="urn:ietf:params:xml:ns:rdeNotification-1.0" xmlns:host="urn:ietf:params:xml:ns:host-1.0" xmlns:rdeIDN="urn:ietf:params:xml:ns:rdeIDN-1.0" xmlns:eppcom="urn:ietf:params:xml:ns:eppcom-1.0" xmlns:smd="urn:ietf:params:xml:ns:signedMark-1.0" xmlns:rdeHost="urn:ietf:params:xml:ns:rdeHost-1.0" xmlns:rdeReport="urn:ietf:params:xml:ns:rdeReport-1.0" xmlns:fee11="urn:ietf:params:xml:ns:fee-0.11" xmlns:fee12="urn:ietf:params:xml:ns:fee-0.12" xmlns:iirdea="urn:ietf:params:xml:ns:iirdea-1.0" xmlns:rdeHeader="urn:ietf:params:xml:ns:rdeHeader-1.0" xmlns:domain="urn:ietf:params:xml:ns:domain-1.0" xmlns:rdeDomain="urn:ietf:params:xml:ns:rdeDomain-1.0" xmlns:epp="urn:ietf:params:xml:ns:epp-1.0" xmlns:rdeNNDN="urn:ietf:params:xml:ns:rdeNNDN-1.0" xmlns:rdeRegistrar="urn:ietf:params:xml:ns:rdeRegistrar-1.0" xmlns:rgp="urn:ietf:params:xml:ns:rgp-1.0" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" xmlns:rde="urn:ietf:params:xml:ns:rde-1.0" xmlns:secDNS="urn:ietf:params:xml:ns:secDNS-1.1" xmlns:mark="urn:ietf:params:xml:ns:mark-1.0" xmlns:rdePolicy="urn:ietf:params:xml:ns:rdePolicy-1.0" xmlns:fee_1_00="urn:ietf:params:xml:ns:epp:fee-1.0" xmlns:fee06="urn:ietf:params:xml:ns:fee-0.6">
|
||||
<rdeReport:id>AAAABXDKZ6WAA</rdeReport:id>
|
||||
<rdeReport:version>1</rdeReport:version>
|
||||
<rdeReport:rydeSpecEscrow>draft-arias-noguchi-registry-data-escrow-06</rdeReport:rydeSpecEscrow>
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
|
||||
<command>
|
||||
<check>
|
||||
<contact:check
|
||||
xmlns:contact="urn:ietf:params:xml:ns:contact-1.0">
|
||||
<contact:id>sh8013</contact:id>
|
||||
<contact:id>sah8013</contact:id>
|
||||
<contact:id>8013sah</contact:id>
|
||||
</contact:check>
|
||||
</check>
|
||||
<clTRID>ABC-12345</clTRID>
|
||||
</command>
|
||||
</epp>
|
||||
@@ -1,60 +0,0 @@
|
||||
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
|
||||
<command>
|
||||
<check>
|
||||
<contact:check
|
||||
xmlns:contact="urn:ietf:params:xml:ns:contact-1.0">
|
||||
<contact:id>contact1</contact:id>
|
||||
<contact:id>contact2</contact:id>
|
||||
<contact:id>contact3</contact:id>
|
||||
<contact:id>contact4</contact:id>
|
||||
<contact:id>contact5</contact:id>
|
||||
<contact:id>contact6</contact:id>
|
||||
<contact:id>contact7</contact:id>
|
||||
<contact:id>contact8</contact:id>
|
||||
<contact:id>contact9</contact:id>
|
||||
<contact:id>contact10</contact:id>
|
||||
<contact:id>contact11</contact:id>
|
||||
<contact:id>contact12</contact:id>
|
||||
<contact:id>contact13</contact:id>
|
||||
<contact:id>contact14</contact:id>
|
||||
<contact:id>contact15</contact:id>
|
||||
<contact:id>contact16</contact:id>
|
||||
<contact:id>contact17</contact:id>
|
||||
<contact:id>contact18</contact:id>
|
||||
<contact:id>contact19</contact:id>
|
||||
<contact:id>contact20</contact:id>
|
||||
<contact:id>contact21</contact:id>
|
||||
<contact:id>contact22</contact:id>
|
||||
<contact:id>contact23</contact:id>
|
||||
<contact:id>contact24</contact:id>
|
||||
<contact:id>contact25</contact:id>
|
||||
<contact:id>contact26</contact:id>
|
||||
<contact:id>contact27</contact:id>
|
||||
<contact:id>contact28</contact:id>
|
||||
<contact:id>contact29</contact:id>
|
||||
<contact:id>contact30</contact:id>
|
||||
<contact:id>contact31</contact:id>
|
||||
<contact:id>contact32</contact:id>
|
||||
<contact:id>contact33</contact:id>
|
||||
<contact:id>contact34</contact:id>
|
||||
<contact:id>contact35</contact:id>
|
||||
<contact:id>contact36</contact:id>
|
||||
<contact:id>contact37</contact:id>
|
||||
<contact:id>contact38</contact:id>
|
||||
<contact:id>contact39</contact:id>
|
||||
<contact:id>contact40</contact:id>
|
||||
<contact:id>contact41</contact:id>
|
||||
<contact:id>contact42</contact:id>
|
||||
<contact:id>contact43</contact:id>
|
||||
<contact:id>contact44</contact:id>
|
||||
<contact:id>contact45</contact:id>
|
||||
<contact:id>contact46</contact:id>
|
||||
<contact:id>contact47</contact:id>
|
||||
<contact:id>contact48</contact:id>
|
||||
<contact:id>contact49</contact:id>
|
||||
<contact:id>contact50</contact:id>
|
||||
</contact:check>
|
||||
</check>
|
||||
<clTRID>ABC-12345</clTRID>
|
||||
</command>
|
||||
</epp>
|
||||
@@ -1,61 +0,0 @@
|
||||
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
|
||||
<command>
|
||||
<check>
|
||||
<contact:check
|
||||
xmlns:contact="urn:ietf:params:xml:ns:contact-1.0">
|
||||
<contact:id>contact1</contact:id>
|
||||
<contact:id>contact2</contact:id>
|
||||
<contact:id>contact3</contact:id>
|
||||
<contact:id>contact4</contact:id>
|
||||
<contact:id>contact5</contact:id>
|
||||
<contact:id>contact6</contact:id>
|
||||
<contact:id>contact7</contact:id>
|
||||
<contact:id>contact8</contact:id>
|
||||
<contact:id>contact9</contact:id>
|
||||
<contact:id>contact10</contact:id>
|
||||
<contact:id>contact11</contact:id>
|
||||
<contact:id>contact12</contact:id>
|
||||
<contact:id>contact13</contact:id>
|
||||
<contact:id>contact14</contact:id>
|
||||
<contact:id>contact15</contact:id>
|
||||
<contact:id>contact16</contact:id>
|
||||
<contact:id>contact17</contact:id>
|
||||
<contact:id>contact18</contact:id>
|
||||
<contact:id>contact19</contact:id>
|
||||
<contact:id>contact20</contact:id>
|
||||
<contact:id>contact21</contact:id>
|
||||
<contact:id>contact22</contact:id>
|
||||
<contact:id>contact23</contact:id>
|
||||
<contact:id>contact24</contact:id>
|
||||
<contact:id>contact25</contact:id>
|
||||
<contact:id>contact26</contact:id>
|
||||
<contact:id>contact27</contact:id>
|
||||
<contact:id>contact28</contact:id>
|
||||
<contact:id>contact29</contact:id>
|
||||
<contact:id>contact30</contact:id>
|
||||
<contact:id>contact31</contact:id>
|
||||
<contact:id>contact32</contact:id>
|
||||
<contact:id>contact33</contact:id>
|
||||
<contact:id>contact34</contact:id>
|
||||
<contact:id>contact35</contact:id>
|
||||
<contact:id>contact36</contact:id>
|
||||
<contact:id>contact37</contact:id>
|
||||
<contact:id>contact38</contact:id>
|
||||
<contact:id>contact39</contact:id>
|
||||
<contact:id>contact40</contact:id>
|
||||
<contact:id>contact41</contact:id>
|
||||
<contact:id>contact42</contact:id>
|
||||
<contact:id>contact43</contact:id>
|
||||
<contact:id>contact44</contact:id>
|
||||
<contact:id>contact45</contact:id>
|
||||
<contact:id>contact46</contact:id>
|
||||
<contact:id>contact47</contact:id>
|
||||
<contact:id>contact48</contact:id>
|
||||
<contact:id>contact49</contact:id>
|
||||
<contact:id>contact50</contact:id>
|
||||
<contact:id>contact51</contact:id>
|
||||
</contact:check>
|
||||
</check>
|
||||
<clTRID>ABC-12345</clTRID>
|
||||
</command>
|
||||
</epp>
|
||||
@@ -1,26 +0,0 @@
|
||||
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
|
||||
<response>
|
||||
<result code="1000">
|
||||
<msg>Command completed successfully</msg>
|
||||
</result>
|
||||
<resData>
|
||||
<contact:chkData
|
||||
xmlns:contact="urn:ietf:params:xml:ns:contact-1.0">
|
||||
<contact:cd>
|
||||
<contact:id avail="1">sh8013</contact:id>
|
||||
</contact:cd>
|
||||
<contact:cd>
|
||||
<contact:id avail="0">sah8013</contact:id>
|
||||
<contact:reason>In use</contact:reason>
|
||||
</contact:cd>
|
||||
<contact:cd>
|
||||
<contact:id avail="1">8013sah</contact:id>
|
||||
</contact:cd>
|
||||
</contact:chkData>
|
||||
</resData>
|
||||
<trID>
|
||||
<clTRID>ABC-12345</clTRID>
|
||||
<svTRID>server-trid</svTRID>
|
||||
</trID>
|
||||
</response>
|
||||
</epp>
|
||||
@@ -1,33 +0,0 @@
|
||||
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
|
||||
<command>
|
||||
<create>
|
||||
<contact:create
|
||||
xmlns:contact="urn:ietf:params:xml:ns:contact-1.0">
|
||||
<contact:id>sh8013</contact:id>
|
||||
<contact:postalInfo type="int">
|
||||
<contact:name>John Doe</contact:name>
|
||||
<contact:org>Example Inc.</contact:org>
|
||||
<contact:addr>
|
||||
<contact:street>123 Example Dr.</contact:street>
|
||||
<contact:street>Suite 100</contact:street>
|
||||
<contact:city>Dulles</contact:city>
|
||||
<contact:sp>VA</contact:sp>
|
||||
<contact:pc>20166-6503</contact:pc>
|
||||
<contact:cc>US</contact:cc>
|
||||
</contact:addr>
|
||||
</contact:postalInfo>
|
||||
<contact:voice x="1234">+1.7035555555</contact:voice>
|
||||
<contact:fax>+1.7035555556</contact:fax>
|
||||
<contact:email>jdoe@example.com</contact:email>
|
||||
<contact:authInfo>
|
||||
<contact:pw>2fooBAR</contact:pw>
|
||||
</contact:authInfo>
|
||||
<contact:disclose flag="1">
|
||||
<contact:voice/>
|
||||
<contact:email/>
|
||||
</contact:disclose>
|
||||
</contact:create>
|
||||
</create>
|
||||
<clTRID>ABC-12345</clTRID>
|
||||
</command>
|
||||
</epp>
|
||||
@@ -1,33 +0,0 @@
|
||||
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
|
||||
<command>
|
||||
<create>
|
||||
<contact:create
|
||||
xmlns:contact="urn:ietf:params:xml:ns:contact-1.0">
|
||||
<contact:id>sh8013</contact:id>
|
||||
<contact:postalInfo type="int">
|
||||
<contact:name>John Doe</contact:name>
|
||||
<contact:org>Example Inc.</contact:org>
|
||||
<contact:addr>
|
||||
<contact:street>123 Example Dr.</contact:street>
|
||||
<contact:street>Suite 100</contact:street>
|
||||
<contact:city>Dulles</contact:city>
|
||||
<contact:sp>VA</contact:sp>
|
||||
<contact:pc>20166-6503</contact:pc>
|
||||
<contact:cc>US</contact:cc>
|
||||
</contact:addr>
|
||||
</contact:postalInfo>
|
||||
<contact:voice x="1234">+1.7035555555</contact:voice>
|
||||
<contact:fax>+1.7035555556</contact:fax>
|
||||
<contact:email>jdoe@example.com</contact:email>
|
||||
<contact:authInfo>
|
||||
<contact:pw>2fooBAR</contact:pw>
|
||||
</contact:authInfo>
|
||||
<contact:disclose flag="0">
|
||||
<contact:voice/>
|
||||
<contact:email/>
|
||||
</contact:disclose>
|
||||
</contact:create>
|
||||
</create>
|
||||
<clTRID>ABC-12345</clTRID>
|
||||
</command>
|
||||
</epp>
|
||||
@@ -1,45 +0,0 @@
|
||||
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
|
||||
<command>
|
||||
<create>
|
||||
<contact:create
|
||||
xmlns:contact="urn:ietf:params:xml:ns:contact-1.0">
|
||||
<contact:id>sh8013</contact:id>
|
||||
<contact:postalInfo type="int">
|
||||
<contact:name>חנוך גולדפדר</contact:name>
|
||||
<contact:org>Example Inc.</contact:org>
|
||||
<contact:addr>
|
||||
<contact:street>123 Example Dr.</contact:street>
|
||||
<contact:street>Suite 100</contact:street>
|
||||
<contact:city>Dulles</contact:city>
|
||||
<contact:sp>VA</contact:sp>
|
||||
<contact:pc>20166-6503</contact:pc>
|
||||
<contact:cc>US</contact:cc>
|
||||
</contact:addr>
|
||||
</contact:postalInfo>
|
||||
<contact:postalInfo type="loc">
|
||||
<contact:name>John Doe</contact:name>
|
||||
<contact:org>Example Inc.</contact:org>
|
||||
<contact:addr>
|
||||
<contact:street>123 Example Dr.</contact:street>
|
||||
<contact:street>Suite 100</contact:street>
|
||||
<contact:city>Dulles</contact:city>
|
||||
<contact:sp>VA</contact:sp>
|
||||
<contact:pc>20166-6503</contact:pc>
|
||||
<contact:cc>US</contact:cc>
|
||||
</contact:addr>
|
||||
</contact:postalInfo>
|
||||
<contact:voice x="1234">+1.7035555555</contact:voice>
|
||||
<contact:fax>+1.7035555556</contact:fax>
|
||||
<contact:email>jdoe@example.com</contact:email>
|
||||
<contact:authInfo>
|
||||
<contact:pw>2fooBAR</contact:pw>
|
||||
</contact:authInfo>
|
||||
<contact:disclose flag="1">
|
||||
<contact:voice/>
|
||||
<contact:email/>
|
||||
</contact:disclose>
|
||||
</contact:create>
|
||||
</create>
|
||||
<clTRID>ABC-12345</clTRID>
|
||||
</command>
|
||||
</epp>
|
||||
@@ -1,45 +0,0 @@
|
||||
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
|
||||
<command>
|
||||
<create>
|
||||
<contact:create
|
||||
xmlns:contact="urn:ietf:params:xml:ns:contact-1.0">
|
||||
<contact:id>sh8013</contact:id>
|
||||
<contact:postalInfo type="int">
|
||||
<contact:name>John Doe</contact:name>
|
||||
<contact:org>Example Inc.</contact:org>
|
||||
<contact:addr>
|
||||
<contact:street>123 Example Dr.</contact:street>
|
||||
<contact:street>Suite 100</contact:street>
|
||||
<contact:city>Dulles</contact:city>
|
||||
<contact:sp>VA</contact:sp>
|
||||
<contact:pc>20166-6503</contact:pc>
|
||||
<contact:cc>US</contact:cc>
|
||||
</contact:addr>
|
||||
</contact:postalInfo>
|
||||
<contact:postalInfo type="loc">
|
||||
<contact:name>חנוך גולדפדר</contact:name>
|
||||
<contact:org>Example Inc.</contact:org>
|
||||
<contact:addr>
|
||||
<contact:street>123 Example Dr.</contact:street>
|
||||
<contact:street>Suite 100</contact:street>
|
||||
<contact:city>Dulles</contact:city>
|
||||
<contact:sp>VA</contact:sp>
|
||||
<contact:pc>20166-6503</contact:pc>
|
||||
<contact:cc>US</contact:cc>
|
||||
</contact:addr>
|
||||
</contact:postalInfo>
|
||||
<contact:voice x="1234">+1.7035555555</contact:voice>
|
||||
<contact:fax>+1.7035555556</contact:fax>
|
||||
<contact:email>jdoe@example.com</contact:email>
|
||||
<contact:authInfo>
|
||||
<contact:pw>2fooBAR</contact:pw>
|
||||
</contact:authInfo>
|
||||
<contact:disclose flag="1">
|
||||
<contact:voice/>
|
||||
<contact:email/>
|
||||
</contact:disclose>
|
||||
</contact:create>
|
||||
</create>
|
||||
<clTRID>ABC-12345</clTRID>
|
||||
</command>
|
||||
</epp>
|
||||
@@ -1,18 +0,0 @@
|
||||
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
|
||||
<response>
|
||||
<result code="1000">
|
||||
<msg>Command completed successfully</msg>
|
||||
</result>
|
||||
<resData>
|
||||
<contact:creData
|
||||
xmlns:contact="urn:ietf:params:xml:ns:contact-1.0">
|
||||
<contact:id>sh8013</contact:id>
|
||||
<contact:crDate>1999-04-03T22:00:00.0Z</contact:crDate>
|
||||
</contact:creData>
|
||||
</resData>
|
||||
<trID>
|
||||
<clTRID>ABC-12345</clTRID>
|
||||
<svTRID>server-trid</svTRID>
|
||||
</trID>
|
||||
</response>
|
||||
</epp>
|
||||
@@ -1,11 +0,0 @@
|
||||
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
|
||||
<command>
|
||||
<delete>
|
||||
<contact:delete
|
||||
xmlns:contact="urn:ietf:params:xml:ns:contact-1.0">
|
||||
<contact:id>sh8013</contact:id>
|
||||
</contact:delete>
|
||||
</delete>
|
||||
<clTRID>ABC-12345</clTRID>
|
||||
</command>
|
||||
</epp>
|
||||
@@ -1,10 +0,0 @@
|
||||
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
|
||||
<command>
|
||||
<delete>
|
||||
<contact:delete
|
||||
xmlns:contact="urn:ietf:params:xml:ns:contact-1.0">
|
||||
<contact:id>sh8013</contact:id>
|
||||
</contact:delete>
|
||||
</delete>
|
||||
</command>
|
||||
</epp>
|
||||
@@ -1,11 +0,0 @@
|
||||
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
|
||||
<response>
|
||||
<result code="1000">
|
||||
<msg>Command completed successfully</msg>
|
||||
</result>
|
||||
<trID>
|
||||
<clTRID>ABC-12345</clTRID>
|
||||
<svTRID>server-trid</svTRID>
|
||||
</trID>
|
||||
</response>
|
||||
</epp>
|
||||
@@ -1,10 +0,0 @@
|
||||
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
|
||||
<response>
|
||||
<result code="1000">
|
||||
<msg>Command completed successfully</msg>
|
||||
</result>
|
||||
<trID>
|
||||
<svTRID>server-trid</svTRID>
|
||||
</trID>
|
||||
</response>
|
||||
</epp>
|
||||
@@ -1,14 +0,0 @@
|
||||
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
|
||||
<command>
|
||||
<info>
|
||||
<contact:info
|
||||
xmlns:contact="urn:ietf:params:xml:ns:contact-1.0">
|
||||
<contact:id>sh8013</contact:id>
|
||||
<contact:authInfo>
|
||||
<contact:pw>2fooBAR</contact:pw>
|
||||
</contact:authInfo>
|
||||
</contact:info>
|
||||
</info>
|
||||
<clTRID>ABC-12345</clTRID>
|
||||
</command>
|
||||
</epp>
|
||||
@@ -1,11 +0,0 @@
|
||||
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
|
||||
<command>
|
||||
<info>
|
||||
<contact:info
|
||||
xmlns:contact="urn:ietf:params:xml:ns:contact-1.0">
|
||||
<contact:id>sh8013</contact:id>
|
||||
</contact:info>
|
||||
</info>
|
||||
<clTRID>ABC-12345</clTRID>
|
||||
</command>
|
||||
</epp>
|
||||
@@ -1,47 +0,0 @@
|
||||
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
|
||||
<response>
|
||||
<result code="1000">
|
||||
<msg>Command completed successfully</msg>
|
||||
</result>
|
||||
<resData>
|
||||
<contact:infData
|
||||
xmlns:contact="urn:ietf:params:xml:ns:contact-1.0">
|
||||
<contact:id>sh8013</contact:id>
|
||||
<contact:roid>SH8013-REP</contact:roid>
|
||||
<contact:status s="clientDeleteProhibited"/>
|
||||
<contact:postalInfo type="int">
|
||||
<contact:name>John Doe</contact:name>
|
||||
<contact:org>Example Inc.</contact:org>
|
||||
<contact:addr>
|
||||
<contact:street>123 Example Dr.</contact:street>
|
||||
<contact:street>Suite 100</contact:street>
|
||||
<contact:city>Dulles</contact:city>
|
||||
<contact:sp>VA</contact:sp>
|
||||
<contact:pc>20166-6503</contact:pc>
|
||||
<contact:cc>US</contact:cc>
|
||||
</contact:addr>
|
||||
</contact:postalInfo>
|
||||
<contact:voice x="1234">+1.7035555555</contact:voice>
|
||||
<contact:fax>+1.7035555556</contact:fax>
|
||||
<contact:email>jdoe@example.com</contact:email>
|
||||
<contact:clID>TheRegistrar</contact:clID>
|
||||
<contact:crID>NewRegistrar</contact:crID>
|
||||
<contact:crDate>1999-04-03T22:00:00.0Z</contact:crDate>
|
||||
<contact:upID>NewRegistrar</contact:upID>
|
||||
<contact:upDate>1999-12-03T09:00:00.0Z</contact:upDate>
|
||||
<contact:trDate>2000-04-08T09:00:00.0Z</contact:trDate>
|
||||
<contact:authInfo>
|
||||
<contact:pw>2fooBAR</contact:pw>
|
||||
</contact:authInfo>
|
||||
<contact:disclose flag="1">
|
||||
<contact:voice/>
|
||||
<contact:email/>
|
||||
</contact:disclose>
|
||||
</contact:infData>
|
||||
</resData>
|
||||
<trID>
|
||||
<clTRID>ABC-12345</clTRID>
|
||||
<svTRID>server-trid</svTRID>
|
||||
</trID>
|
||||
</response>
|
||||
</epp>
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user