diff --git a/java/google/registry/rde/imports/XjcToDomainResourceConverter.java b/java/google/registry/rde/imports/XjcToDomainResourceConverter.java index fa37952f1..a37d9ef2b 100644 --- a/java/google/registry/rde/imports/XjcToDomainResourceConverter.java +++ b/java/google/registry/rde/imports/XjcToDomainResourceConverter.java @@ -34,10 +34,12 @@ import google.registry.model.billing.BillingEvent.Flag; import google.registry.model.billing.BillingEvent.Reason; import google.registry.model.contact.ContactResource; import google.registry.model.domain.DesignatedContact; +import google.registry.model.domain.DomainAuthInfo; import google.registry.model.domain.DomainResource; import google.registry.model.domain.GracePeriod; import google.registry.model.domain.rgp.GracePeriodStatus; import google.registry.model.domain.secdns.DelegationSignerData; +import google.registry.model.eppcommon.AuthInfo.PasswordAuth; import google.registry.model.eppcommon.StatusValue; import google.registry.model.host.HostResource; import google.registry.model.index.ForeignKeyIndex; @@ -47,6 +49,9 @@ import google.registry.model.registry.Registry; import google.registry.model.reporting.HistoryEntry; import google.registry.model.transfer.TransferData; import google.registry.model.transfer.TransferStatus; +import google.registry.util.NonFinalForTesting; +import google.registry.util.RandomStringGenerator; +import google.registry.util.StringGenerator; import google.registry.util.XmlToEnumMapper; import google.registry.xjc.domain.XjcDomainContactType; import google.registry.xjc.domain.XjcDomainNsType; @@ -56,11 +61,27 @@ import google.registry.xjc.rdedomain.XjcRdeDomainElement; import google.registry.xjc.rdedomain.XjcRdeDomainTransferDataType; import google.registry.xjc.rgp.XjcRgpStatusType; import google.registry.xjc.secdns.XjcSecdnsDsDataType; +import java.security.NoSuchAlgorithmException; +import java.security.ProviderException; +import java.security.SecureRandom; +import java.util.Random; import org.joda.time.DateTime; /** Utility class that converts an {@link XjcRdeDomainElement} into a {@link DomainResource}. */ final class XjcToDomainResourceConverter extends XjcToEppResourceConverter { + @NonFinalForTesting + static StringGenerator stringGenerator = new RandomStringGenerator( + StringGenerator.Alphabets.BASE_64, getRandom()); + + static Random getRandom() { + try { + return SecureRandom.getInstance("NativePRNG"); + } catch (NoSuchAlgorithmException e) { + throw new ProviderException(e); + } + } + private static final XmlToEnumMapper TRANSFER_STATUS_MAPPER = XmlToEnumMapper.create(TransferStatus.values()); @@ -194,7 +215,11 @@ final class XjcToDomainResourceConverter extends XjcToEppResourceConverter { ? ImmutableSet.of() : ImmutableSet.copyOf( transform(domain.getSecDNS().getDsDatas(), SECDNS_CONVERTER))) - .setTransferData(convertDomainTransferData(domain.getTrnData())); + .setTransferData(convertDomainTransferData(domain.getTrnData())) + // authInfo pw must be a token between 6 and 16 characters in length + // generate a token of 16 characters as the default authInfo pw + .setAuthInfo(DomainAuthInfo + .create(PasswordAuth.create(stringGenerator.createString(16), domain.getRoid()))); checkArgumentNotNull( domain.getRegistrant(), "Registrant is missing for domain '%s'", domain.getName()); builder = builder.setRegistrant(convertRegistrant(domain.getRegistrant())); diff --git a/java/google/registry/util/RandomStringGenerator.java b/java/google/registry/util/RandomStringGenerator.java index 40cf16e1f..4d8c1dcc0 100644 --- a/java/google/registry/util/RandomStringGenerator.java +++ b/java/google/registry/util/RandomStringGenerator.java @@ -26,7 +26,7 @@ public class RandomStringGenerator extends StringGenerator { private final Random random; @Inject - RandomStringGenerator(@Named("alphabet") String alphabet, Random random) { + public RandomStringGenerator(@Named("alphabet") String alphabet, Random random) { super(alphabet); this.random = random; } diff --git a/javatests/google/registry/rde/imports/BUILD b/javatests/google/registry/rde/imports/BUILD index 7645a244e..541535b00 100644 --- a/javatests/google/registry/rde/imports/BUILD +++ b/javatests/google/registry/rde/imports/BUILD @@ -22,7 +22,6 @@ java_library( "//java/google/registry/xjc", "//javatests/google/registry/testing", "//javatests/google/registry/testing/mapreduce", - "//javatests/google/registry/xml", "//third_party/java/objectify:objectify-v4_1", "@com_google_appengine_api_1_0_sdk//:testonly", "@com_google_appengine_tools_appengine_gcs_client", diff --git a/javatests/google/registry/rde/imports/XjcToDomainResourceConverterTest.java b/javatests/google/registry/rde/imports/XjcToDomainResourceConverterTest.java index e2cf8c17b..526ce216a 100644 --- a/javatests/google/registry/rde/imports/XjcToDomainResourceConverterTest.java +++ b/javatests/google/registry/rde/imports/XjcToDomainResourceConverterTest.java @@ -45,7 +45,10 @@ import google.registry.model.host.HostResource; import google.registry.model.poll.PollMessage; import google.registry.model.reporting.HistoryEntry; import google.registry.testing.AppEngineRule; +import google.registry.testing.DeterministicStringGenerator; import google.registry.testing.ExceptionRule; +import google.registry.testing.InjectRule; +import google.registry.util.StringGenerator; import google.registry.xjc.rdedomain.XjcRdeDomain; import google.registry.xjc.rdedomain.XjcRdeDomainElement; import java.io.ByteArrayInputStream; @@ -86,12 +89,17 @@ public class XjcToDomainResourceConverterTest { @Rule public final ExceptionRule thrown = new ExceptionRule(); + @Rule public final InjectRule inject = new InjectRule(); + private Unmarshaller unmarshaller; + private DeterministicStringGenerator stringGenerator; @Before public void before() throws Exception { createTld("example"); unmarshaller = JAXBContext.newInstance(JAXB_CONTEXT_PACKAGES).createUnmarshaller(); + stringGenerator = new DeterministicStringGenerator(StringGenerator.Alphabets.BASE_64); + inject.setStaticField(XjcToDomainResourceConverter.class, "stringGenerator", stringGenerator); } @Test @@ -120,6 +128,8 @@ public class XjcToDomainResourceConverterTest { assertThat(domain.getLastEppUpdateTime()).isNull(); assertThat(domain.getAutorenewBillingEvent()).isNotNull(); assertThat(domain.getAutorenewPollMessage()).isNotNull(); + assertThat(domain.getAuthInfo()).isNotNull(); + assertThat(domain.getAuthInfo().getPw().getValue()).isEqualTo("0123456789abcdef"); } @Test