From 8a76171417b21db96b181733c5b2dcc967f07a51 Mon Sep 17 00:00:00 2001 From: mcilwain Date: Mon, 8 Aug 2016 12:38:25 -0700 Subject: [PATCH] Unbreak build by including DNS packages and modules ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=129660098 --- java/google/registry/dns/writer/BUILD | 19 ++++++ .../google/registry/dns/writer/DnsWriter.java | 56 ++++++++++++++++++ .../registry/dns/writer/DnsWriterZone.java | 23 ++++++++ .../registry/dns/writer/VoidDnsWriter.java | 58 +++++++++++++++++++ .../dns/writer/VoidDnsWriterModule.java | 32 ++++++++++ .../backend/BackendRequestComponent.java | 2 + 6 files changed, 190 insertions(+) create mode 100644 java/google/registry/dns/writer/BUILD create mode 100644 java/google/registry/dns/writer/DnsWriter.java create mode 100644 java/google/registry/dns/writer/DnsWriterZone.java create mode 100644 java/google/registry/dns/writer/VoidDnsWriter.java create mode 100644 java/google/registry/dns/writer/VoidDnsWriterModule.java diff --git a/java/google/registry/dns/writer/BUILD b/java/google/registry/dns/writer/BUILD new file mode 100644 index 000000000..258362341 --- /dev/null +++ b/java/google/registry/dns/writer/BUILD @@ -0,0 +1,19 @@ +package( + default_visibility = ["//java/google/registry:registry_project"], +) + +licenses(["notice"]) # Apache 2.0 + + +java_library( + name = "writer", + srcs = glob( + ["*.java"], + ), + deps = [ + "//java/com/google/common/annotations", + "//java/com/google/common/base", + "//java/com/google/common/collect", + "//third_party/java/dagger", + ], +) diff --git a/java/google/registry/dns/writer/DnsWriter.java b/java/google/registry/dns/writer/DnsWriter.java new file mode 100644 index 000000000..7e8b8be4c --- /dev/null +++ b/java/google/registry/dns/writer/DnsWriter.java @@ -0,0 +1,56 @@ +// Copyright 2016 The Domain Registry 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.dns.writer; + +/** + * Transaction object for sending an atomic batch of updates for a single zone to the DNS server. + * + *

Here's an example of how you would publish updates for a domain and host: + *

+ * @Inject Provider<DnsWriter> dnsWriter;
+ * try (DnsWriter writer = dnsWriter.get()) {
+ *   writer.publishDomain(domainName);
+ *   writer.publishHost(hostName);
+ * }
+ * 
+ */ +public interface DnsWriter extends AutoCloseable { + + /** + * Loads {@code domainName} from datastore and publishes its NS/DS records to the DNS server. + * Replaces existing records for the exact name supplied with an NS record for each name server + * and a DS record for each delegation signer stored in the registry for the supplied domain name. + * If the domain is deleted or is in a "non-publish" state then any existing records are deleted. + * + * @param domainName the fully qualified domain name, with no trailing dot + */ + void publishDomain(String domainName); + + /** + * Loads {@code hostName} from datastore and publishes its A/AAAA glue records to the DNS server, + * if it is used as an in-bailiwick nameserver. Orphaned glue records are prohibited. Replaces + * existing records for the exact name supplied, with an A or AAAA record (as appropriate) for + * each address stored in the registry, for the supplied host name. If the host is deleted then + * the existing records are deleted. Assumes that this method will only be called for in-bailiwick + * hosts. The registry does not have addresses for other hosts. + * + * @param hostName the fully qualified host name, with no trailing dot + */ + void publishHost(String hostName); + + /** Commits the updates to the DNS server atomically. */ + @Override + void close(); +} diff --git a/java/google/registry/dns/writer/DnsWriterZone.java b/java/google/registry/dns/writer/DnsWriterZone.java new file mode 100644 index 000000000..162186694 --- /dev/null +++ b/java/google/registry/dns/writer/DnsWriterZone.java @@ -0,0 +1,23 @@ +// Copyright 2016 The Domain Registry 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.dns.writer; + +import java.lang.annotation.Documented; +import javax.inject.Qualifier; + +/** Dagger qualifier for the fully-qualified zone name that's being updated. */ +@Qualifier +@Documented +public @interface DnsWriterZone {} diff --git a/java/google/registry/dns/writer/VoidDnsWriter.java b/java/google/registry/dns/writer/VoidDnsWriter.java new file mode 100644 index 000000000..dbe68b017 --- /dev/null +++ b/java/google/registry/dns/writer/VoidDnsWriter.java @@ -0,0 +1,58 @@ +// Copyright 2016 The Domain Registry 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.dns.writer; + +import com.google.common.base.Joiner; +import java.util.HashSet; +import java.util.Set; +import java.util.logging.Logger; +import javax.inject.Inject; + +/** + * {@link DnsWriter} that doesn't actually update records in a DNS server. + * + *

All this class does is write its displeasure to the logs. + */ +public final class VoidDnsWriter implements DnsWriter { + + /** + * The name of the pricing engine, as used in {@code Registry.dnsWriter}. Remember to change + * the value on affected Registry objects to prevent runtime failures. + */ + public static final String NAME = "VoidDnsWriter"; + + private static final Logger logger = Logger.getLogger(VoidDnsWriter.class.getName()); + + private final Set names = new HashSet<>(); + + @Inject + public VoidDnsWriter() {} + + @Override + public void publishDomain(String domainName) { + names.add(domainName); + } + + @Override + public void publishHost(String hostName) { + names.add(hostName); + } + + @Override + public void close() { + logger.warning("Ignoring DNS zone updates! No DnsWriterFactory implementation specified!\n" + + Joiner.on('\n').join(names)); + } +} diff --git a/java/google/registry/dns/writer/VoidDnsWriterModule.java b/java/google/registry/dns/writer/VoidDnsWriterModule.java new file mode 100644 index 000000000..2f4dbb80f --- /dev/null +++ b/java/google/registry/dns/writer/VoidDnsWriterModule.java @@ -0,0 +1,32 @@ +// Copyright 2016 The Domain Registry 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.dns.writer; + +import dagger.Module; +import dagger.Provides; +import dagger.multibindings.IntoMap; +import dagger.multibindings.StringKey; + +/** Dagger module that disables DNS updates. */ +@Module +public final class VoidDnsWriterModule { + + @Provides + @IntoMap + @StringKey(VoidDnsWriter.NAME) + static DnsWriter provideVoidDnsWriter(VoidDnsWriter writer) { + return writer; + } +} diff --git a/java/google/registry/module/backend/BackendRequestComponent.java b/java/google/registry/module/backend/BackendRequestComponent.java index 81d4a7a16..a3ff37a1a 100644 --- a/java/google/registry/module/backend/BackendRequestComponent.java +++ b/java/google/registry/module/backend/BackendRequestComponent.java @@ -29,6 +29,7 @@ import google.registry.dns.PublishDnsUpdatesAction; import google.registry.dns.ReadDnsQueueAction; import google.registry.dns.RefreshDnsAction; import google.registry.dns.writer.clouddns.CloudDnsModule; +import google.registry.dns.writer.dnsupdate.DnsUpdateConfigModule; import google.registry.dns.writer.dnsupdate.DnsUpdateWriterModule; import google.registry.export.BigqueryPollJobAction; import google.registry.export.ExportDomainListsAction; @@ -72,6 +73,7 @@ import google.registry.tmch.TmchSmdrlAction; CloudDnsModule.class, CronModule.class, DnsModule.class, + DnsUpdateConfigModule.class, DnsUpdateWriterModule.class, ExportRequestModule.class, MapreduceModule.class,