diff --git a/java/google/registry/tools/RegistryTool.java b/java/google/registry/tools/RegistryTool.java index 27d0f4c4c..ab803ee0b 100644 --- a/java/google/registry/tools/RegistryTool.java +++ b/java/google/registry/tools/RegistryTool.java @@ -15,6 +15,7 @@ package google.registry.tools; import com.google.common.collect.ImmutableMap; +import google.registry.tools.javascrap.RemoveDomainTransferDataCommand; import google.registry.tools.javascrap.RemoveIpAddressCommand; /** Container class to create and run remote commands against a datastore instance. */ @@ -94,6 +95,7 @@ public final class RegistryTool { .put("publish_detail_report", PublishDetailReportCommand.class) .put("registrar_activity_report", RegistrarActivityReportCommand.class) .put("registrar_contact", RegistrarContactCommand.class) + .put("remove_domain_transfer_data", RemoveDomainTransferDataCommand.class) .put("remove_ip_address", RemoveIpAddressCommand.class) .put("resave_entities", ResaveEntitiesCommand.class) .put("resave_environment_entities", ResaveEnvironmentEntitiesCommand.class) diff --git a/java/google/registry/tools/javascrap/RemoveDomainTransferDataCommand.java b/java/google/registry/tools/javascrap/RemoveDomainTransferDataCommand.java new file mode 100644 index 000000000..fc282942a --- /dev/null +++ b/java/google/registry/tools/javascrap/RemoveDomainTransferDataCommand.java @@ -0,0 +1,51 @@ +// Copyright 2016 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.tools.javascrap; + +import static com.google.common.base.Preconditions.checkNotNull; +import static google.registry.model.EppResourceUtils.loadByForeignKey; +import static org.joda.time.DateTimeZone.UTC; + +import com.beust.jcommander.Parameter; +import com.beust.jcommander.Parameters; +import google.registry.model.domain.DomainResource; +import google.registry.model.transfer.TransferData; +import google.registry.tools.MutatingCommand; +import java.util.List; +import org.joda.time.DateTime; + +/** + * Scrap tool to remove domain transfer data. + * + *

A bug has caused some domains to have invalid transfer data; the status is SERVER_CANCELLED, + * but other fields such as the gaining and losing registrar are blank. Since there was never an + * actual transfer, the proper course of action is to remove the invalid data. See b/33289763. + */ +@Parameters(separators = " =", commandDescription = "Remove transfer data.") +public class RemoveDomainTransferDataCommand extends MutatingCommand { + + @Parameter(description = "Fully-qualified domain names", required = true) + private List mainParameters; + + @Override + protected void init() throws Exception { + DateTime now = DateTime.now(UTC); + for (String domainName : mainParameters) { + DomainResource domain = loadByForeignKey(DomainResource.class, domainName, now); + checkNotNull(domain); + stageEntityChange(domain, domain.asBuilder().setTransferData(TransferData.EMPTY).build()); + } + } +}