diff --git a/java/google/registry/flows/domain/DomainCreateFlow.java b/java/google/registry/flows/domain/DomainCreateFlow.java index d39f1a27e..f415a27a9 100644 --- a/java/google/registry/flows/domain/DomainCreateFlow.java +++ b/java/google/registry/flows/domain/DomainCreateFlow.java @@ -44,6 +44,7 @@ import static google.registry.model.EppResourceUtils.createDomainRepoId; import static google.registry.model.eppcommon.StatusValue.SERVER_HOLD; import static google.registry.model.ofy.ObjectifyService.ofy; import static google.registry.model.registry.Registry.TldState.GENERAL_AVAILABILITY; +import static google.registry.model.registry.Registry.TldState.QUIET_PERIOD; import static google.registry.model.registry.Registry.TldState.START_DATE_SUNRISE; import static google.registry.model.registry.label.ReservationType.NAME_COLLISION; import static google.registry.util.DateTimeUtils.END_OF_TIME; @@ -254,11 +255,12 @@ public class DomainCreateFlow implements TransactionalFlow { // registering premium domains. if (!isSuperuser) { checkAllowedAccessToTld(clientId, registry.getTldStr()); - verifyIsGaOrIsSpecialCase(tldState, isAnchorTenant, hasSignedMarks); + boolean isValidReservedCreate = isValidReservedCreate(domainName, allocationToken); + verifyIsGaOrIsSpecialCase(tldState, isAnchorTenant, isValidReservedCreate, hasSignedMarks); if (launchCreate.isPresent()) { verifyLaunchPhaseMatchesRegistryPhase(registry, launchCreate.get(), now); } - if (!isAnchorTenant && !isValidReservedCreate(domainName, allocationToken)) { + if (!isAnchorTenant && !isValidReservedCreate) { verifyNotReserved(domainName, isSunriseCreate); } if (hasClaimsNotice) { @@ -423,7 +425,10 @@ public class DomainCreateFlow implements TransactionalFlow { * non-superusers. */ private void verifyIsGaOrIsSpecialCase( - TldState tldState, boolean isAnchorTenant, boolean hasSignedMarks) + TldState tldState, + boolean isAnchorTenant, + boolean isValidReservedCreate, + boolean hasSignedMarks) throws NoGeneralRegistrationsInCurrentPhaseException, MustHaveSignedMarksInCurrentPhaseException { // Anchor Tenant overrides any other consideration to allow registration. @@ -444,6 +449,13 @@ public class DomainCreateFlow implements TransactionalFlow { return; } + // We allow creates of specifically reserved domain names during quiet periods. + if (QUIET_PERIOD.equals(tldState)) { + if (isValidReservedCreate) { + return; + } + } + // All other phases do not allow registration throw new NoGeneralRegistrationsInCurrentPhaseException(); } diff --git a/javatests/google/registry/flows/domain/DomainCreateFlowTest.java b/javatests/google/registry/flows/domain/DomainCreateFlowTest.java index f5a4ee21e..b313512d5 100644 --- a/javatests/google/registry/flows/domain/DomainCreateFlowTest.java +++ b/javatests/google/registry/flows/domain/DomainCreateFlowTest.java @@ -1149,6 +1149,30 @@ public class DomainCreateFlowTest extends ResourceFlowTestCase