Flatten the domain check flows

Also pull out a small bit of common functionality across contact and host checks.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=133977324
This commit is contained in:
cgoldfeder 2016-09-22 11:24:57 -07:00 committed by Ben McIlwain
parent b5e421cee3
commit 025a4ae012
7 changed files with 161 additions and 101 deletions

View file

@ -14,69 +14,86 @@
package google.registry.flows.domain;
import static google.registry.flows.ResourceFlowUtils.verifyTargetIdCount;
import static google.registry.flows.domain.DomainFlowUtils.checkAllowedAccessToTld;
import static google.registry.flows.domain.DomainFlowUtils.validateDomainName;
import static google.registry.flows.domain.DomainFlowUtils.validateDomainNameWithIdnTables;
import static google.registry.model.domain.launch.LaunchPhase.CLAIMS;
import static google.registry.model.eppoutput.Result.Code.SUCCESS;
import static google.registry.util.DateTimeUtils.isAtOrAfter;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Sets;
import com.google.common.net.InternetDomainName;
import google.registry.config.ConfigModule.Config;
import google.registry.flows.EppException;
import google.registry.flows.LoggedInFlow;
import google.registry.flows.exceptions.BadCommandForRegistryPhaseException;
import google.registry.model.domain.DomainCommand.Check;
import google.registry.model.domain.launch.LaunchCheckExtension;
import google.registry.model.domain.launch.LaunchCheckResponseExtension;
import google.registry.model.domain.launch.LaunchCheckResponseExtension.LaunchCheck;
import google.registry.model.domain.launch.LaunchCheckResponseExtension.LaunchCheckName;
import google.registry.model.eppoutput.CheckData;
import google.registry.model.eppoutput.EppResponse.ResponseExtension;
import google.registry.model.eppinput.ResourceCommand;
import google.registry.model.eppoutput.EppOutput;
import google.registry.model.registry.Registry;
import google.registry.model.registry.Registry.TldState;
import google.registry.model.tmch.ClaimsListShard;
import java.util.Map.Entry;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import javax.inject.Inject;
/**
* An EPP flow that checks whether strings are trademarked.
*
* @error {@link google.registry.flows.ResourceCheckFlow.TooManyResourceChecksException}
* @error {@link google.registry.flows.ResourceFlow.BadCommandForRegistryPhaseException}
* @error {@link google.registry.flows.domain.DomainFlowUtils.NotAuthorizedForTldException}
* @error {@link google.registry.flows.exceptions.BadCommandForRegistryPhaseException}
* @error {@link google.registry.flows.exceptions.TooManyResourceChecksException}
* @error {@link DomainFlowUtils.TldDoesNotExistException}
*/
public class ClaimsCheckFlow extends BaseDomainCheckFlow {
public final class ClaimsCheckFlow extends LoggedInFlow {
public static final ImmutableSet<TldState> DISALLOWED_TLD_STATES = Sets.immutableEnumSet(
TldState.PREDELEGATION, TldState.SUNRISE);
public static final ImmutableSet<TldState> DISALLOWED_TLD_STATES =
Sets.immutableEnumSet(TldState.PREDELEGATION, TldState.SUNRISE);
@Inject ResourceCommand resourceCommand;
@Inject @Config("maxChecks") int maxChecks;
@Inject ClaimsCheckFlow() {}
@Override
protected void initDomainCheckFlow() throws EppException {
protected final void initLoggedInFlow() throws EppException {
registerExtensions(LaunchCheckExtension.class);
}
@Override
protected CheckData getCheckData() {
return null;
}
@Override
protected ImmutableList<? extends ResponseExtension> getResponseExtensions() throws EppException {
public EppOutput run() throws EppException {
List<String> targetIds = ((Check) resourceCommand).getTargetIds();
verifyTargetIdCount(targetIds, maxChecks);
Set<String> seenTlds = new HashSet<>();
ImmutableList.Builder<LaunchCheck> launchChecksBuilder = new ImmutableList.Builder<>();
for (Entry<String, InternetDomainName> entry : domainNames.entrySet()) {
InternetDomainName domainName = entry.getValue();
if (isAtOrAfter(now, Registry.get(domainName.parent().toString()).getClaimsPeriodEnd())) {
throw new BadCommandForRegistryPhaseException();
for (String targetId : ImmutableSet.copyOf(targetIds)) {
InternetDomainName domainName = validateDomainName(targetId);
validateDomainNameWithIdnTables(domainName);
String tld = domainName.parent().toString();
// Only validate access to a TLD the first time it is encountered.
if (seenTlds.add(tld)) {
checkAllowedAccessToTld(getAllowedTlds(), tld);
Registry registry = Registry.get(tld);
if ((!isSuperuser && DISALLOWED_TLD_STATES.contains(registry.getTldState(now)))
|| isAtOrAfter(now, registry.getClaimsPeriodEnd())) {
throw new BadCommandForRegistryPhaseException();
}
}
String claimKey = ClaimsListShard.get().getClaimKey(domainName.parts().get(0));
launchChecksBuilder.add(LaunchCheck.create(
LaunchCheckName.create(claimKey != null, entry.getKey()), claimKey));
launchChecksBuilder.add(
LaunchCheck.create(
LaunchCheckName.create(claimKey != null, targetId), claimKey));
}
return ImmutableList.of(
LaunchCheckResponseExtension.create(CLAIMS, launchChecksBuilder.build()));
}
@Override
protected final ImmutableSet<TldState> getDisallowedTldStates() {
return DISALLOWED_TLD_STATES;
return createOutput(
SUCCESS,
null,
ImmutableList.of(LaunchCheckResponseExtension.create(CLAIMS, launchChecksBuilder.build())));
}
}