Change packageToken extension to bulkToken extension (#2091)

* Change packageToken extension to bulkToken extension

* Small fixes
This commit is contained in:
sarahcaseybot 2023-08-02 17:06:20 -04:00 committed by GitHub
parent 48ddbbe4ee
commit 78e1718c52
15 changed files with 89 additions and 90 deletions

View file

@ -41,10 +41,10 @@ import google.registry.model.domain.Domain;
import google.registry.model.domain.DomainCommand.Info;
import google.registry.model.domain.DomainCommand.Info.HostsRequest;
import google.registry.model.domain.DomainInfoData;
import google.registry.model.domain.bulktoken.BulkTokenExtension;
import google.registry.model.domain.bulktoken.BulkTokenResponseExtension;
import google.registry.model.domain.fee06.FeeInfoCommandExtensionV06;
import google.registry.model.domain.fee06.FeeInfoResponseExtensionV06;
import google.registry.model.domain.packagetoken.PackageTokenExtension;
import google.registry.model.domain.packagetoken.PackageTokenResponseExtension;
import google.registry.model.domain.rgp.GracePeriodStatus;
import google.registry.model.domain.rgp.RgpInfoExtension;
import google.registry.model.eppcommon.AuthInfo;
@ -95,7 +95,7 @@ public final class DomainInfoFlow implements Flow {
@Override
public EppResponse run() throws EppException {
extensionManager.register(FeeInfoCommandExtensionV06.class, PackageTokenExtension.class);
extensionManager.register(FeeInfoCommandExtensionV06.class, BulkTokenExtension.class);
flowCustomLogic.beforeValidation();
validateRegistrarIsLoggedIn(registrarId);
extensionManager.validate();
@ -155,13 +155,13 @@ public final class DomainInfoFlow implements Flow {
if (!gracePeriodStatuses.isEmpty()) {
extensions.add(RgpInfoExtension.create(gracePeriodStatuses));
}
Optional<PackageTokenExtension> packageInfo =
eppInput.getSingleExtension(PackageTokenExtension.class);
Optional<BulkTokenExtension> packageInfo =
eppInput.getSingleExtension(BulkTokenExtension.class);
if (packageInfo.isPresent()) {
// Package info was requested.
if (isSuperuser || registrarId.equals(domain.getCurrentSponsorRegistrarId())) {
// Only show package info to owning registrar or superusers
extensions.add(PackageTokenResponseExtension.create(domain.getCurrentPackageToken()));
extensions.add(BulkTokenResponseExtension.create(domain.getCurrentPackageToken()));
}
}
Optional<FeeInfoCommandExtensionV06> feeInfo =

View file

@ -12,12 +12,12 @@
// See the License for the specific language governing permissions and
// limitations under the License.
package google.registry.model.domain.packagetoken;
package google.registry.model.domain.bulktoken;
import google.registry.model.ImmutableObject;
import google.registry.model.eppinput.EppInput.CommandExtension;
import javax.xml.bind.annotation.XmlRootElement;
/** A package token extension that may be present on EPP domain commands. */
/** A bulk token extension that may be present on EPP domain commands. */
@XmlRootElement(name = "info")
public class PackageTokenExtension extends ImmutableObject implements CommandExtension {}
public class BulkTokenExtension extends ImmutableObject implements CommandExtension {}

View file

@ -12,7 +12,7 @@
// See the License for the specific language governing permissions and
// limitations under the License.
package google.registry.model.domain.packagetoken;
package google.registry.model.domain.bulktoken;
import google.registry.model.ImmutableObject;
import google.registry.model.domain.token.AllocationToken;
@ -24,18 +24,18 @@ import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
/**
* An XML data object that represents a package token extension that may be present on the response
* to EPP domain info commands.
* An XML data object that represents a bulk token extension that may be present on the response to
* EPP domain info commands.
*/
@XmlRootElement(name = "packageData")
public class PackageTokenResponseExtension extends ImmutableObject implements ResponseExtension {
@XmlRootElement(name = "bulkData")
public class BulkTokenResponseExtension extends ImmutableObject implements ResponseExtension {
/** Token string of the PACKAGE token the name belongs to. */
@XmlJavaTypeAdapter(TrimWhitespaceAdapter.class)
String token;
public static PackageTokenResponseExtension create(Optional<VKey<AllocationToken>> tokenKey) {
PackageTokenResponseExtension instance = new PackageTokenResponseExtension();
public static BulkTokenResponseExtension create(Optional<VKey<AllocationToken>> tokenKey) {
BulkTokenResponseExtension instance = new BulkTokenResponseExtension();
instance.token = "";
if (tokenKey.isPresent()) {
instance.token = tokenKey.get().getKey().toString();

View file

@ -13,12 +13,11 @@
// limitations under the License.
@XmlSchema(
namespace = "urn:google:params:xml:ns:packageToken-1.0",
xmlns =
@XmlNs(prefix = "packageToken", namespaceURI = "urn:google:params:xml:ns:packageToken-1.0"),
namespace = "urn:google:params:xml:ns:bulkToken-1.0",
xmlns = @XmlNs(prefix = "bulkToken", namespaceURI = "urn:google:params:xml:ns:bulkToken-1.0"),
elementFormDefault = XmlNsForm.QUALIFIED)
@XmlAccessorType(XmlAccessType.FIELD)
package google.registry.model.domain.packagetoken;
package google.registry.model.domain.bulktoken;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;

View file

@ -51,7 +51,7 @@ public class EppXmlTransformer {
"allocate.xsd",
"superuser.xsd",
"allocationToken-1.0.xsd",
"packageToken.xsd");
"bulkToken.xsd");
private static final XmlTransformer INPUT_TRANSFORMER =
new XmlTransformer(SCHEMAS, EppInput.class);

View file

@ -23,6 +23,7 @@ import com.google.common.collect.ImmutableSet;
import google.registry.model.ImmutableObject;
import google.registry.model.contact.ContactCommand;
import google.registry.model.domain.DomainCommand;
import google.registry.model.domain.bulktoken.BulkTokenExtension;
import google.registry.model.domain.fee06.FeeCheckCommandExtensionV06;
import google.registry.model.domain.fee06.FeeCreateCommandExtensionV06;
import google.registry.model.domain.fee06.FeeInfoCommandExtensionV06;
@ -45,7 +46,6 @@ 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.packagetoken.PackageTokenExtension;
import google.registry.model.domain.rgp.RgpUpdateExtension;
import google.registry.model.domain.secdns.SecDnsCreateExtension;
import google.registry.model.domain.secdns.SecDnsUpdateExtension;
@ -362,8 +362,8 @@ public class EppInput extends ImmutableObject {
// Other extensions
@XmlElementRef(type = AllocationTokenExtension.class),
@XmlElementRef(type = BulkTokenExtension.class),
@XmlElementRef(type = MetadataExtension.class),
@XmlElementRef(type = PackageTokenExtension.class),
@XmlElementRef(type = RgpUpdateExtension.class),
@XmlElementRef(type = SecDnsCreateExtension.class),
@XmlElementRef(type = SecDnsUpdateExtension.class)

View file

@ -23,6 +23,7 @@ import google.registry.model.ImmutableObject;
import google.registry.model.contact.ContactInfoData;
import google.registry.model.domain.DomainInfoData;
import google.registry.model.domain.DomainRenewData;
import google.registry.model.domain.bulktoken.BulkTokenResponseExtension;
import google.registry.model.domain.fee06.FeeCheckResponseExtensionV06;
import google.registry.model.domain.fee06.FeeCreateResponseExtensionV06;
import google.registry.model.domain.fee06.FeeDeleteResponseExtensionV06;
@ -43,7 +44,6 @@ import google.registry.model.domain.fee12.FeeRenewResponseExtensionV12;
import google.registry.model.domain.fee12.FeeTransferResponseExtensionV12;
import google.registry.model.domain.fee12.FeeUpdateResponseExtensionV12;
import google.registry.model.domain.launch.LaunchCheckResponseExtension;
import google.registry.model.domain.packagetoken.PackageTokenResponseExtension;
import google.registry.model.domain.rgp.RgpInfoExtension;
import google.registry.model.domain.secdns.SecDnsInfoExtension;
import google.registry.model.eppcommon.Trid;
@ -122,6 +122,7 @@ public class EppResponse extends ImmutableObject implements ResponseOrGreeting {
/** Zero or more response extensions. */
@XmlElementRefs({
@XmlElementRef(type = BulkTokenResponseExtension.class),
@XmlElementRef(type = FeeCheckResponseExtensionV06.class),
@XmlElementRef(type = FeeInfoResponseExtensionV06.class),
@XmlElementRef(type = FeeCreateResponseExtensionV06.class),
@ -142,7 +143,6 @@ public class EppResponse extends ImmutableObject implements ResponseOrGreeting {
@XmlElementRef(type = FeeTransferResponseExtensionV12.class),
@XmlElementRef(type = FeeUpdateResponseExtensionV12.class),
@XmlElementRef(type = LaunchCheckResponseExtension.class),
@XmlElementRef(type = PackageTokenResponseExtension.class),
@XmlElementRef(type = RgpInfoExtension.class),
@XmlElementRef(type = SecDnsInfoExtension.class)
})

View file

@ -0,0 +1,38 @@
<?xml version="1.0" encoding="UTF-8"?>
<schema targetNamespace="urn:google:params:xml:ns:bulkToken-1.0"
xmlns:bulkToken="urn:google:params:xml:ns:bulkToken-1.0"
xmlns="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
<annotation>
<documentation>
Extensible Provisioning Protocol v1.0
Bulk Token Extension.
</documentation>
</annotation>
<!-- Element used in info command request to get a bulk pricing token for a domain. -->
<element name="info"
type="bulkToken:infoType"/>
<complexType name="infoType"/>
<!-- Element returned in an info command response with a bulk token for a domain with bulk pricing. -->
<element name="bulkData"
type="bulkToken:bulkDataType"/>
<complexType name="bulkDataType">
<sequence>
<element name="token" type="bulkToken:tokenType" maxOccurs="unbounded"/>
</sequence>
</complexType>
<simpleType name="tokenType">
<restriction base="string">
</restriction>
</simpleType>
<!-- End of schema.-->
</schema>

View file

@ -1,38 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<schema targetNamespace="urn:google:params:xml:ns:packageToken-1.0"
xmlns:packageToken="urn:google:params:xml:ns:packageToken-1.0"
xmlns="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
<annotation>
<documentation>
Extensible Provisioning Protocol v1.0
Package Token Extension.
</documentation>
</annotation>
<!-- Element used in info command request to get a package token for a domain. -->
<element name="info"
type="packageToken:infoType"/>
<complexType name="infoType"/>
<!-- Element returned in an info command response with a package token for a package domain. -->
<element name="packageData"
type="packageToken:packageDataType"/>
<complexType name="packageDataType">
<sequence>
<element name="token" type="packageToken:tokenType" maxOccurs="unbounded"/>
</sequence>
</complexType>
<simpleType name="tokenType">
<restriction base="string">
</restriction>
</simpleType>
<!-- End of schema.-->
</schema>

View file

@ -1085,7 +1085,7 @@ class DomainInfoFlowTest extends ResourceFlowTestCase<DomainInfoFlow, Domain> {
}
@Test
void testPackageInfoExtension_returnsPackageInfo() throws Exception {
void testBulkInfoExtension_returnsBulkInfo() throws Exception {
persistTestEntities(false);
AllocationToken token =
persistResource(
@ -1100,12 +1100,12 @@ class DomainInfoFlowTest extends ResourceFlowTestCase<DomainInfoFlow, Domain> {
.build());
domain = domain.asBuilder().setCurrentPackageToken(token.createVKey()).build();
persistResource(domain);
setEppInput("domain_info_package.xml");
doSuccessfulTest("domain_info_response_package.xml", false);
setEppInput("domain_info_bulk.xml");
doSuccessfulTest("domain_info_response_bulk.xml", false);
}
@Test
void testPackageInfoExtension_returnsPackageInfoForSuperUser() throws Exception {
void testBulkInfoExtension_returnsBulkInfoForSuperUser() throws Exception {
persistTestEntities(false);
AllocationToken token =
persistResource(
@ -1121,23 +1121,23 @@ class DomainInfoFlowTest extends ResourceFlowTestCase<DomainInfoFlow, Domain> {
domain = domain.asBuilder().setCurrentPackageToken(token.createVKey()).build();
persistResource(domain);
sessionMetadata.setRegistrarId("TheRegistrar");
setEppInput("domain_info_package.xml");
setEppInput("domain_info_bulk.xml");
EppOutput output = runFlowAsSuperuser();
String expectedOutput =
loadFile(
"domain_info_response_superuser_package.xml",
"domain_info_response_superuser_bulk.xml",
updateSubstitutions(ImmutableMap.of(), "ROID", "2FF-TLD"));
assertXmlEquals(expectedOutput, new String(marshal(output, ValidationMode.LENIENT), UTF_8));
}
@Test
void testPackageInfoExtension_nameNotInPackage() throws Exception {
setEppInput("domain_info_package.xml");
doSuccessfulTest("domain_info_response_empty_package.xml");
void testBulkInfoExtension_nameNotInBulkPackage() throws Exception {
setEppInput("domain_info_bulk.xml");
doSuccessfulTest("domain_info_response_empty_bulk_package.xml");
}
@Test
void testPackageInfoExtension_notCurrentSponsorRegistrar() throws Exception {
void testBulkInfoExtension_notCurrentSponsorRegistrar() throws Exception {
persistTestEntities(false);
AllocationToken token =
persistResource(
@ -1153,7 +1153,7 @@ class DomainInfoFlowTest extends ResourceFlowTestCase<DomainInfoFlow, Domain> {
domain = domain.asBuilder().setCurrentPackageToken(token.createVKey()).build();
persistResource(domain);
sessionMetadata.setRegistrarId("TheRegistrar");
setEppInput("domain_info_package.xml");
setEppInput("domain_info_bulk.xml");
doSuccessfulTest("domain_info_response_unauthorized.xml", false);
}
}

View file

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<epp xmlns:domain="urn:ietf:params:xml:ns:domain-1.0" xmlns:contact="urn:ietf:params:xml:ns:contact-1.0" xmlns:fee="urn:ietf:params:xml:ns:fee-0.6" xmlns:packageToken="urn:google:params:xml:ns:packageToken-1.0" xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:rgp="urn:ietf:params:xml:ns:rgp-1.0" xmlns:fee11="urn:ietf:params:xml:ns:fee-0.11" xmlns:fee12="urn:ietf:params:xml:ns:fee-0.12" xmlns:launch="urn:ietf:params:xml:ns:launch-1.0" xmlns:secDNS="urn:ietf:params:xml:ns:secDNS-1.1" xmlns:host="urn:ietf:params:xml:ns:host-1.0">
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:fee12="urn:ietf:params:xml:ns:fee-0.12">
<response>
<result code="1000">
<msg>Command completed successfully</msg>

View file

@ -7,9 +7,9 @@
</domain:info>
</info>
<extension>
<packageToken:info
xmlns:packageToken=
"urn:google:params:xml:ns:packageToken-1.0" />
<bulkToken:info
xmlns:bulkToken=
"urn:google:params:xml:ns:bulkToken-1.0" />
</extension>
<clTRID>ABC-12345</clTRID>
</command>

View file

@ -32,10 +32,10 @@
</domain:infData>
</resData>
<extension>
<packageToken:packageData xmlns:packageToken=
"urn:google:params:xml:ns:packageToken-1.0">
<packageToken:token></packageToken:token>
</packageToken:packageData>
<bulkToken:bulkData xmlns:bulkToken=
"urn:google:params:xml:ns:bulkToken-1.0">
<bulkToken:token>abc123</bulkToken:token>
</bulkToken:bulkData>
</extension>
<trID>
<clTRID>ABC-12345</clTRID>

View file

@ -32,10 +32,10 @@
</domain:infData>
</resData>
<extension>
<packageToken:packageData xmlns:packageToken=
"urn:google:params:xml:ns:packageToken-1.0">
<packageToken:token>abc123</packageToken:token>
</packageToken:packageData>
<bulkToken:bulkData xmlns:bulkToken=
"urn:google:params:xml:ns:bulkToken-1.0">
<bulkToken:token></bulkToken:token>
</bulkToken:bulkData>
</extension>
<trID>
<clTRID>ABC-12345</clTRID>

View file

@ -22,10 +22,10 @@
</domain:infData>
</resData>
<extension>
<packageToken:packageData xmlns:packageToken=
"urn:google:params:xml:ns:packageToken-1.0">
<packageToken:token>abc123</packageToken:token>
</packageToken:packageData>
<bulkToken:bulkData xmlns:bulkToken=
"urn:google:params:xml:ns:bulkToken-1.0">
<bulkToken:token>abc123</bulkToken:token>
</bulkToken:bulkData>
</extension>
<trID>
<clTRID>ABC-12345</clTRID>