Standardize hostname handling in URS command (#1886)

This commit is contained in:
Ben McIlwain
2022-12-19 16:22:52 -05:00
committed by GitHub
parent 4ede5f0c8a
commit 0aeb92ee16
7 changed files with 73 additions and 21 deletions
@@ -40,8 +40,8 @@ import google.registry.model.transfer.DomainTransferData;
import google.registry.model.transfer.TransferData;
import google.registry.model.transfer.TransferStatus;
import google.registry.persistence.VKey;
import java.util.Collection;
import java.util.Comparator;
import java.util.List;
import java.util.Optional;
import java.util.function.Function;
import java.util.function.Supplier;
@@ -183,7 +183,7 @@ public final class EppResourceUtils {
* @param now the logical time of the check
*/
public static <T extends EppResource> ImmutableSet<String> checkResourcesExist(
Class<T> clazz, List<String> uniqueIds, final DateTime now) {
Class<T> clazz, Collection<String> uniqueIds, final DateTime now) {
return ForeignKeyUtils.load(clazz, uniqueIds, now).keySet();
}
@@ -35,11 +35,12 @@ import google.registry.model.domain.Domain;
import google.registry.model.domain.secdns.DomainDsData;
import google.registry.model.eppcommon.StatusValue;
import google.registry.model.host.Host;
import google.registry.tools.params.NameserversParameter;
import google.registry.tools.soy.DomainRenewSoyInfo;
import google.registry.tools.soy.UniformRapidSuspensionSoyInfo;
import google.registry.util.Clock;
import google.registry.util.DomainNameUtils;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Optional;
import java.util.Set;
@@ -69,9 +70,12 @@ final class UniformRapidSuspensionCommand extends MutatingEppToolCommand {
@Parameter(
names = {"-h", "--hosts"},
description = "Comma-delimited set of fully qualified host names to replace the current hosts"
+ " on the domain.")
private List<String> newHosts = new ArrayList<>();
description =
"Comma-delimited set of fully qualified host names to replace the current hosts"
+ " on the domain.",
converter = NameserversParameter.class,
validateWith = NameserversParameter.class)
private Set<String> newHosts = new HashSet<>();
@Parameter(
names = {"-s", "--dsdata"},
@@ -126,14 +130,10 @@ final class UniformRapidSuspensionCommand extends MutatingEppToolCommand {
protected void initMutatingEppToolCommand() {
superuser = true;
DateTime now = clock.nowUtc();
ImmutableList<String> newCanonicalHosts =
newHosts.stream().map(DomainNameUtils::canonicalizeHostname).collect(toImmutableList());
ImmutableSet<String> newHostsSet = ImmutableSet.copyOf(newCanonicalHosts);
Optional<Domain> domainOpt = loadByForeignKey(Domain.class, domainName, now);
checkArgumentPresent(domainOpt, "Domain '%s' does not exist or is deleted", domainName);
Domain domain = domainOpt.get();
Set<String> missingHosts =
difference(newHostsSet, checkResourcesExist(Host.class, newCanonicalHosts, now));
Set<String> missingHosts = difference(newHosts, checkResourcesExist(Host.class, newHosts, now));
checkArgument(missingHosts.isEmpty(), "Hosts do not exist: %s", missingHosts);
checkArgument(
locksToPreserve.isEmpty() || undo,
@@ -187,9 +187,9 @@ final class UniformRapidSuspensionCommand extends MutatingEppToolCommand {
"domainName",
domainName,
"hostsToAdd",
difference(newHostsSet, existingNameservers),
difference(newHosts, existingNameservers),
"hostsToRemove",
difference(existingNameservers, newHostsSet),
difference(existingNameservers, newHosts),
"statusesToApply",
statusesToApply,
"statusesToRemove",
@@ -25,6 +25,7 @@ import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import com.google.re2j.Matcher;
import com.google.re2j.Pattern;
import google.registry.util.DomainNameUtils;
import java.util.Set;
import java.util.stream.Stream;
@@ -50,12 +51,9 @@ public final class NameserversParameter extends ParameterConverterValidator<Set<
if (Strings.isNullOrEmpty(value)) {
return ImmutableSet.of();
}
return Splitter.on(',')
.trimResults()
.omitEmptyStrings()
.splitToList(value)
.stream()
return Splitter.on(',').trimResults().omitEmptyStrings().splitToList(value).stream()
.flatMap(NameserversParameter::splitNameservers)
.map(DomainNameUtils::canonicalizeHostname)
.collect(toImmutableSet());
}