diff --git a/java/google/registry/flows/domain/DomainCheckFlow.java b/java/google/registry/flows/domain/DomainCheckFlow.java index 609b03099..089c66533 100644 --- a/java/google/registry/flows/domain/DomainCheckFlow.java +++ b/java/google/registry/flows/domain/DomainCheckFlow.java @@ -31,6 +31,7 @@ import google.registry.model.domain.fee.FeeCheckExtension; import google.registry.model.domain.fee.FeeCheckResponseExtension; import google.registry.model.domain.fee.FeeCheckResponseExtension.FeeCheck; import google.registry.model.domain.launch.LaunchCheckExtension; +import google.registry.model.domain.regtype.RegTypeCheckExtension; import google.registry.model.eppcommon.ProtocolDefinition.ServiceExtension; import google.registry.model.eppoutput.CheckData; import google.registry.model.eppoutput.CheckData.DomainCheck; @@ -65,9 +66,13 @@ import java.util.Set; */ public class DomainCheckFlow extends BaseDomainCheckFlow { + protected RegTypeCheckExtension regTypeExtension; + @Override protected void initDomainCheckFlow() throws EppException { - registerExtensions(LaunchCheckExtension.class, FeeCheckExtension.class); + registerExtensions( + LaunchCheckExtension.class, FeeCheckExtension.class, RegTypeCheckExtension.class); + regTypeExtension = eppInput.getSingleExtension(RegTypeCheckExtension.class); } private String getMessageForCheck(String targetId, Set existingIds) { diff --git a/java/google/registry/flows/domain/DomainUpdateFlow.java b/java/google/registry/flows/domain/DomainUpdateFlow.java index 7cd33b680..e9e9df15c 100644 --- a/java/google/registry/flows/domain/DomainUpdateFlow.java +++ b/java/google/registry/flows/domain/DomainUpdateFlow.java @@ -28,6 +28,7 @@ import google.registry.model.billing.BillingEvent.Reason; import google.registry.model.domain.DomainResource; import google.registry.model.domain.DomainResource.Builder; import google.registry.model.domain.GracePeriod; +import google.registry.model.domain.regtype.RegTypeUpdateExtension; import google.registry.model.domain.rgp.GracePeriodStatus; import google.registry.model.domain.secdns.SecDnsUpdateExtension; import google.registry.model.eppcommon.StatusValue; @@ -67,9 +68,12 @@ import java.util.Set; */ public class DomainUpdateFlow extends BaseDomainUpdateFlow { + protected RegTypeUpdateExtension regTypeExtension; + @Override protected void initDomainUpdateFlow() { - registerExtensions(SecDnsUpdateExtension.class); + registerExtensions(SecDnsUpdateExtension.class, RegTypeUpdateExtension.class); + regTypeExtension = eppInput.getSingleExtension(RegTypeUpdateExtension.class); } @Override diff --git a/java/google/registry/model/domain/regtype/BaseRegTypeCommand.java b/java/google/registry/model/domain/regtype/BaseRegTypeCommand.java index 1b07e7b7e..4e9c906e6 100644 --- a/java/google/registry/model/domain/regtype/BaseRegTypeCommand.java +++ b/java/google/registry/model/domain/regtype/BaseRegTypeCommand.java @@ -17,7 +17,6 @@ package google.registry.model.domain.regtype; import com.google.common.base.Splitter; import google.registry.model.ImmutableObject; -import google.registry.model.eppinput.EppInput.CommandExtension; import java.util.List; @@ -29,7 +28,7 @@ import javax.xml.bind.annotation.XmlElement; * * @see "https://gitlab.centralnic.com/centralnic/epp-registration-type-extension/tree/master" */ -public class BaseRegTypeCommand extends ImmutableObject implements CommandExtension { +public class BaseRegTypeCommand extends ImmutableObject { /** The registration type (which may be a comma-delimited list of values). */ @XmlElement(name = "type") diff --git a/java/google/registry/model/domain/regtype/RegTypeCheckExtension.java b/java/google/registry/model/domain/regtype/RegTypeCheckExtension.java new file mode 100644 index 000000000..2ca0ef4a9 --- /dev/null +++ b/java/google/registry/model/domain/regtype/RegTypeCheckExtension.java @@ -0,0 +1,25 @@ +// Copyright 2016 The Domain Registry 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.model.domain.regtype; + +import google.registry.model.eppinput.EppInput.CommandExtension; + +import javax.xml.bind.annotation.XmlRootElement; + +/** + * A registration type extension that may be present on domain check EPP commands. + */ +@XmlRootElement(name = "check") +public class RegTypeCheckExtension extends BaseRegTypeCommand implements CommandExtension {} diff --git a/java/google/registry/model/domain/regtype/RegTypeCreateExtension.java b/java/google/registry/model/domain/regtype/RegTypeCreateExtension.java index f7c12e911..d867a56f2 100644 --- a/java/google/registry/model/domain/regtype/RegTypeCreateExtension.java +++ b/java/google/registry/model/domain/regtype/RegTypeCreateExtension.java @@ -14,10 +14,12 @@ package google.registry.model.domain.regtype; +import google.registry.model.eppinput.EppInput.CommandExtension; + import javax.xml.bind.annotation.XmlRootElement; /** - * A registration type extension that may be present on EPP domain create commands. + * A registration type extension that may be present on domain create EPP commands. */ @XmlRootElement(name = "create") -public class RegTypeCreateExtension extends BaseRegTypeCommand {} +public class RegTypeCreateExtension extends BaseRegTypeCommand implements CommandExtension {} diff --git a/java/google/registry/model/domain/regtype/RegTypeUpdateExtension.java b/java/google/registry/model/domain/regtype/RegTypeUpdateExtension.java new file mode 100644 index 000000000..9f7cc2654 --- /dev/null +++ b/java/google/registry/model/domain/regtype/RegTypeUpdateExtension.java @@ -0,0 +1,37 @@ +// Copyright 2016 The Domain Registry 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.model.domain.regtype; + +import google.registry.model.ImmutableObject; +import google.registry.model.eppinput.EppInput.CommandExtension; + +import java.util.List; + +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +/** + * A registration type extension that may be present on domain update EPP commands. + */ +@XmlRootElement(name = "update") +public class RegTypeUpdateExtension extends ImmutableObject implements CommandExtension { + + @XmlElement(name = "chg") + protected BaseRegTypeCommand regTypeChg; + + public List getRegistrationTypes() { + return regTypeChg.getRegistrationTypes(); + } +} diff --git a/java/google/registry/model/eppinput/EppInput.java b/java/google/registry/model/eppinput/EppInput.java index 2327f27ac..d519796f0 100644 --- a/java/google/registry/model/eppinput/EppInput.java +++ b/java/google/registry/model/eppinput/EppInput.java @@ -37,7 +37,9 @@ import google.registry.model.domain.launch.LaunchDeleteExtension; import google.registry.model.domain.launch.LaunchInfoExtension; import google.registry.model.domain.launch.LaunchUpdateExtension; import google.registry.model.domain.metadata.MetadataExtension; +import google.registry.model.domain.regtype.RegTypeCheckExtension; import google.registry.model.domain.regtype.RegTypeCreateExtension; +import google.registry.model.domain.regtype.RegTypeUpdateExtension; import google.registry.model.domain.rgp.RgpUpdateExtension; import google.registry.model.domain.secdns.SecDnsCreateExtension; import google.registry.model.domain.secdns.SecDnsUpdateExtension; @@ -277,7 +279,9 @@ public class EppInput extends ImmutableObject { @XmlElementRef(type = LaunchInfoExtension.class), @XmlElementRef(type = LaunchUpdateExtension.class), @XmlElementRef(type = MetadataExtension.class), + @XmlElementRef(type = RegTypeCheckExtension.class), @XmlElementRef(type = RegTypeCreateExtension.class), + @XmlElementRef(type = RegTypeUpdateExtension.class), @XmlElementRef(type = RgpUpdateExtension.class), @XmlElementRef(type = SecDnsCreateExtension.class), @XmlElementRef(type = SecDnsUpdateExtension.class) }) diff --git a/javatests/google/registry/flows/domain/DomainCheckFlowTest.java b/javatests/google/registry/flows/domain/DomainCheckFlowTest.java index 913243849..119ea351c 100644 --- a/javatests/google/registry/flows/domain/DomainCheckFlowTest.java +++ b/javatests/google/registry/flows/domain/DomainCheckFlowTest.java @@ -408,4 +408,14 @@ public class DomainCheckFlowTest setEppInput("domain_check_fee_invalid_command.xml"); runFlow(); } + + @Test + public void testSuccess_regTypeExtensionValidates() throws Exception { + setEppInput("domain_check_regtype.xml"); + persistActiveDomain("example1.tld"); + doCheckTest( + create(false, "example1.tld", "In use"), + create(true, "example2.tld", null), + create(true, "example3.tld", null)); + } } diff --git a/javatests/google/registry/flows/domain/DomainUpdateFlowTest.java b/javatests/google/registry/flows/domain/DomainUpdateFlowTest.java index 8aa4ac299..48740b0d8 100644 --- a/javatests/google/registry/flows/domain/DomainUpdateFlowTest.java +++ b/javatests/google/registry/flows/domain/DomainUpdateFlowTest.java @@ -1108,4 +1108,12 @@ public class DomainUpdateFlowTest extends ResourceFlowTestCase + + + + example1.tld + example2.tld + example3.tld + + + + + foo,bar,baz + + + ABC-12345 + + diff --git a/javatests/google/registry/flows/domain/testdata/domain_update_regtype.xml b/javatests/google/registry/flows/domain/testdata/domain_update_regtype.xml new file mode 100644 index 000000000..b156a87cb --- /dev/null +++ b/javatests/google/registry/flows/domain/testdata/domain_update_regtype.xml @@ -0,0 +1,40 @@ + + + + + example.tld + + + ns2.example.foo + + mak21 + Payment overdue. + + + + ns1.example.foo + + sh8013 + + + + sh8013 + + 2BARfoo + + + + + + + + bar,foo + + + + ABC-12345 + +