diff --git a/java/google/registry/flows/domain/DomainTransferApproveFlow.java b/java/google/registry/flows/domain/DomainTransferApproveFlow.java index 3b9d3b297..1bc9d3deb 100644 --- a/java/google/registry/flows/domain/DomainTransferApproveFlow.java +++ b/java/google/registry/flows/domain/DomainTransferApproveFlow.java @@ -177,6 +177,7 @@ public final class DomainTransferApproveFlow implements TransactionalFlow { newDomain.getTransferData(), newExpirationTime, historyEntry); + handleExtraFlowLogic(tld, historyEntry, newDomain); ofy().save().entities( newDomain, historyEntry, @@ -192,4 +193,16 @@ public final class DomainTransferApproveFlow implements TransactionalFlow { targetId, newDomain.getTransferData(), newDomain.getRegistrationExpirationTime())) .build(); } + + private void handleExtraFlowLogic( + String tld, HistoryEntry historyEntry, DomainResource newDomain) throws EppException { + Optional extraFlowLogic = + RegistryExtraFlowLogicProxy.newInstanceForTld(tld); + if (extraFlowLogic.isPresent()) { + extraFlowLogic.get().performAdditionalDomainTransferApproveLogic( + newDomain, + clientId, + historyEntry); + } + } } diff --git a/java/google/registry/flows/domain/DomainTransferCancelFlow.java b/java/google/registry/flows/domain/DomainTransferCancelFlow.java index 8c0edd6fe..ad30a9dfb 100644 --- a/java/google/registry/flows/domain/DomainTransferCancelFlow.java +++ b/java/google/registry/flows/domain/DomainTransferCancelFlow.java @@ -92,6 +92,7 @@ public final class DomainTransferCancelFlow implements TransactionalFlow { .build(); DomainResource newDomain = denyPendingTransfer(existingDomain, TransferStatus.CLIENT_CANCELLED, now); + handleExtraFlowLogic(existingDomain.getTld(), historyEntry, existingDomain); ofy().save().entities( newDomain, historyEntry, @@ -107,4 +108,16 @@ public final class DomainTransferCancelFlow implements TransactionalFlow { .setResData(createTransferResponse(targetId, newDomain.getTransferData(), null)) .build(); } + + private void handleExtraFlowLogic( + String tld, HistoryEntry historyEntry, DomainResource existingDomain) throws EppException { + Optional extraFlowLogic = + RegistryExtraFlowLogicProxy.newInstanceForTld(tld); + if (extraFlowLogic.isPresent()) { + extraFlowLogic.get().performAdditionalDomainTransferCancelLogic( + existingDomain, + clientId, + historyEntry); + } + } } diff --git a/java/google/registry/flows/domain/DomainTransferRejectFlow.java b/java/google/registry/flows/domain/DomainTransferRejectFlow.java index c716d7b7c..f6873c5f4 100644 --- a/java/google/registry/flows/domain/DomainTransferRejectFlow.java +++ b/java/google/registry/flows/domain/DomainTransferRejectFlow.java @@ -90,6 +90,7 @@ public final class DomainTransferRejectFlow implements TransactionalFlow { checkAllowedAccessToTld(clientId, existingDomain.getTld()); DomainResource newDomain = denyPendingTransfer(existingDomain, TransferStatus.CLIENT_REJECTED, now); + handleExtraFlowLogic(existingDomain.getTld(), historyEntry, existingDomain); ofy().save().entities( newDomain, historyEntry, @@ -105,4 +106,16 @@ public final class DomainTransferRejectFlow implements TransactionalFlow { .setResData(createTransferResponse(targetId, newDomain.getTransferData(), null)) .build(); } + + private void handleExtraFlowLogic( + String tld, HistoryEntry historyEntry, DomainResource existingDomain) throws EppException { + Optional extraFlowLogic = + RegistryExtraFlowLogicProxy.newInstanceForTld(tld); + if (extraFlowLogic.isPresent()) { + extraFlowLogic.get().performAdditionalDomainTransferRejectLogic( + existingDomain, + clientId, + historyEntry); + } + } } diff --git a/java/google/registry/flows/domain/DomainTransferRequestFlow.java b/java/google/registry/flows/domain/DomainTransferRequestFlow.java index c82a73196..6c0c2d9cd 100644 --- a/java/google/registry/flows/domain/DomainTransferRequestFlow.java +++ b/java/google/registry/flows/domain/DomainTransferRequestFlow.java @@ -382,7 +382,7 @@ public final class DomainTransferRequestFlow implements TransactionalFlow { Optional extraFlowLogic = RegistryExtraFlowLogicProxy.newInstanceForDomain(existingDomain); if (extraFlowLogic.isPresent()) { - extraFlowLogic.get().performAdditionalDomainTransferLogic( + extraFlowLogic.get().performAdditionalDomainTransferRequestLogic( existingDomain, gainingClientId, now, diff --git a/java/google/registry/flows/domain/RegistryExtraFlowLogic.java b/java/google/registry/flows/domain/RegistryExtraFlowLogic.java index 61da5af24..b442f8ff9 100644 --- a/java/google/registry/flows/domain/RegistryExtraFlowLogic.java +++ b/java/google/registry/flows/domain/RegistryExtraFlowLogic.java @@ -126,8 +126,26 @@ public interface RegistryExtraFlowLogic { EppInput eppInput, HistoryEntry historyEntry) throws EppException; - /** Performs additional tasks required for a transfer command. */ - public void performAdditionalDomainTransferLogic( + /** Performs additional tasks required for a domain transfer approve command. */ + public void performAdditionalDomainTransferApproveLogic( + DomainResource domain, + String clientId, + HistoryEntry historyEntry) throws EppException; + + /** Performs additional tasks required for a domain transfer cancel command. */ + public void performAdditionalDomainTransferCancelLogic( + DomainResource domain, + String clientId, + HistoryEntry historyEntry) throws EppException; + + /** Performs additional tasks required for a domain transfer reject command. */ + public void performAdditionalDomainTransferRejectLogic( + DomainResource domain, + String clientId, + HistoryEntry historyEntry) throws EppException; + + /** Performs additional tasks required for a transfer request command. */ + public void performAdditionalDomainTransferRequestLogic( DomainResource domain, String clientId, DateTime asOfDate, diff --git a/javatests/google/registry/flows/domain/DomainTransferApproveFlowTest.java b/javatests/google/registry/flows/domain/DomainTransferApproveFlowTest.java index d90637ecb..4ccdf2457 100644 --- a/javatests/google/registry/flows/domain/DomainTransferApproveFlowTest.java +++ b/javatests/google/registry/flows/domain/DomainTransferApproveFlowTest.java @@ -51,6 +51,8 @@ import google.registry.model.contact.ContactAuthInfo; import google.registry.model.domain.DomainAuthInfo; import google.registry.model.domain.DomainResource; import google.registry.model.domain.GracePeriod; +import google.registry.model.domain.TestExtraLogicManager; +import google.registry.model.domain.TestExtraLogicManager.TestExtraLogicManagerSuccessException; import google.registry.model.domain.rgp.GracePeriodStatus; import google.registry.model.eppcommon.AuthInfo.PasswordAuth; import google.registry.model.eppcommon.StatusValue; @@ -93,6 +95,8 @@ public class DomainTransferApproveFlowTest .build()) .build()); setClientIdForFlow("TheRegistrar"); + createTld("extra"); + RegistryExtraFlowLogicProxy.setOverride("extra", TestExtraLogicManager.class); setupDomainWithPendingTransfer(); clock.advanceOneMilli(); } @@ -490,5 +494,12 @@ public class DomainTransferApproveFlowTest // NB: No need to test pending delete status since pending transfers will get cancelled upon // entering pending delete phase. So it's already handled in that test case. -} + @Test + public void testSuccess_extra() throws Exception { + setupDomainWithPendingTransfer("extra"); + clock.advanceOneMilli(); + thrown.expect(TestExtraLogicManagerSuccessException.class, "transfer approved"); + doFailingTest("domain_transfer_approve_extra.xml"); + } +} diff --git a/javatests/google/registry/flows/domain/DomainTransferCancelFlowTest.java b/javatests/google/registry/flows/domain/DomainTransferCancelFlowTest.java index 44432fa66..13cbe150a 100644 --- a/javatests/google/registry/flows/domain/DomainTransferCancelFlowTest.java +++ b/javatests/google/registry/flows/domain/DomainTransferCancelFlowTest.java @@ -35,6 +35,8 @@ import google.registry.model.contact.ContactAuthInfo; import google.registry.model.domain.DomainAuthInfo; import google.registry.model.domain.DomainResource; import google.registry.model.domain.GracePeriod; +import google.registry.model.domain.TestExtraLogicManager; +import google.registry.model.domain.TestExtraLogicManager.TestExtraLogicManagerSuccessException; import google.registry.model.eppcommon.AuthInfo.PasswordAuth; import google.registry.model.poll.PollMessage; import google.registry.model.registrar.Registrar; @@ -297,4 +299,13 @@ public class DomainTransferCancelFlowTest // NB: No need to test pending delete status since pending transfers will get cancelled upon // entering pending delete phase. So it's already handled in that test case. + + @Test + public void testSuccess_extra() throws Exception { + setupDomainWithPendingTransfer("extra"); + clock.advanceOneMilli(); + RegistryExtraFlowLogicProxy.setOverride("extra", TestExtraLogicManager.class); + thrown.expect(TestExtraLogicManagerSuccessException.class, "transfer cancelled"); + doFailingTest("domain_transfer_cancel_extra.xml"); + } } diff --git a/javatests/google/registry/flows/domain/DomainTransferRejectFlowTest.java b/javatests/google/registry/flows/domain/DomainTransferRejectFlowTest.java index a952c4761..a19bc629b 100644 --- a/javatests/google/registry/flows/domain/DomainTransferRejectFlowTest.java +++ b/javatests/google/registry/flows/domain/DomainTransferRejectFlowTest.java @@ -35,6 +35,8 @@ import google.registry.model.contact.ContactAuthInfo; import google.registry.model.domain.DomainAuthInfo; import google.registry.model.domain.DomainResource; import google.registry.model.domain.GracePeriod; +import google.registry.model.domain.TestExtraLogicManager; +import google.registry.model.domain.TestExtraLogicManager.TestExtraLogicManagerSuccessException; import google.registry.model.eppcommon.AuthInfo.PasswordAuth; import google.registry.model.eppcommon.Trid; import google.registry.model.poll.PendingActionNotificationResponse; @@ -259,4 +261,13 @@ public class DomainTransferRejectFlowTest // NB: No need to test pending delete status since pending transfers will get cancelled upon // entering pending delete phase. So it's already handled in that test case. + + @Test + public void testSuccess_extra() throws Exception { + setupDomainWithPendingTransfer("extra"); + clock.advanceOneMilli(); + RegistryExtraFlowLogicProxy.setOverride("extra", TestExtraLogicManager.class); + thrown.expect(TestExtraLogicManagerSuccessException.class, "transfer rejected"); + doFailingTest("domain_transfer_reject_extra.xml"); + } } diff --git a/javatests/google/registry/flows/domain/testdata/domain_transfer_approve_extra.xml b/javatests/google/registry/flows/domain/testdata/domain_transfer_approve_extra.xml new file mode 100644 index 000000000..396714d94 --- /dev/null +++ b/javatests/google/registry/flows/domain/testdata/domain_transfer_approve_extra.xml @@ -0,0 +1,11 @@ + + + + + example.extra + + + ABC-12345 + + diff --git a/javatests/google/registry/flows/domain/testdata/domain_transfer_cancel_extra.xml b/javatests/google/registry/flows/domain/testdata/domain_transfer_cancel_extra.xml new file mode 100644 index 000000000..1e97f1797 --- /dev/null +++ b/javatests/google/registry/flows/domain/testdata/domain_transfer_cancel_extra.xml @@ -0,0 +1,11 @@ + + + + + example.extra + + + ABC-12345 + + diff --git a/javatests/google/registry/flows/domain/testdata/domain_transfer_reject_extra.xml b/javatests/google/registry/flows/domain/testdata/domain_transfer_reject_extra.xml new file mode 100644 index 000000000..7e0835f95 --- /dev/null +++ b/javatests/google/registry/flows/domain/testdata/domain_transfer_reject_extra.xml @@ -0,0 +1,11 @@ + + + + + example.extra + + + ABC-12345 + + diff --git a/javatests/google/registry/model/domain/TestExtraLogicManager.java b/javatests/google/registry/model/domain/TestExtraLogicManager.java index c9b3db50d..23bf7b100 100644 --- a/javatests/google/registry/model/domain/TestExtraLogicManager.java +++ b/javatests/google/registry/model/domain/TestExtraLogicManager.java @@ -254,9 +254,30 @@ public class TestExtraLogicManager implements RegistryExtraFlowLogic { throw new TestExtraLogicManagerSuccessException("restored"); } - /** Performs additional tasks required for a transfer command. */ + /** Performs additional tasks required for a transfer approve command. */ @Override - public void performAdditionalDomainTransferLogic( + public void performAdditionalDomainTransferApproveLogic( + DomainResource domain, String clientId, HistoryEntry historyEntry) throws EppException { + throw new TestExtraLogicManagerSuccessException("transfer approved"); + } + + /** Performs additional tasks required for a transfer cancel command. */ + @Override + public void performAdditionalDomainTransferCancelLogic( + DomainResource domain, String clientId, HistoryEntry historyEntry) throws EppException { + throw new TestExtraLogicManagerSuccessException("transfer cancelled"); + } + + /** Performs additional tasks required for a transfer reject command. */ + @Override + public void performAdditionalDomainTransferRejectLogic( + DomainResource domain, String clientId, HistoryEntry historyEntry) throws EppException { + throw new TestExtraLogicManagerSuccessException("transfer rejected"); + } + + /** Performs additional tasks required for a transfer request command. */ + @Override + public void performAdditionalDomainTransferRequestLogic( DomainResource domainResource, String clientId, DateTime asOfDate,