diff --git a/java/google/registry/config/RegistryConfig.java b/java/google/registry/config/RegistryConfig.java index f3bc7bf1d..55ec838ec 100644 --- a/java/google/registry/config/RegistryConfig.java +++ b/java/google/registry/config/RegistryConfig.java @@ -29,19 +29,13 @@ import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import dagger.Module; import dagger.Provides; -import google.registry.util.RandomStringGenerator; -import google.registry.util.StringGenerator; import google.registry.util.TaskQueueUtils; import google.registry.util.YamlUtils; import java.lang.annotation.Documented; import java.lang.annotation.Retention; import java.net.URI; import java.net.URL; -import java.security.NoSuchAlgorithmException; -import java.security.ProviderException; -import java.security.SecureRandom; import java.util.Optional; -import java.util.Random; import java.util.stream.Collectors; import javax.annotation.Nullable; import javax.inject.Named; @@ -57,6 +51,9 @@ import org.joda.time.Duration; * meant for settings that need to be configured once. Settings which may be subject to * change in the future, should instead be retrieved from Datastore. The {@link * google.registry.model.registry.Registry Registry} class is one such example of this. + * + *

Note: Only settings that are actually configurable belong in this file. It's not a catch-all + * for anything widely used throughout the code base. */ public final class RegistryConfig { @@ -1356,54 +1353,6 @@ public final class RegistryConfig { .build()) .build(); } - - /** - * Returns a singleton insecure random number generator that is fast. - * - *

This binding is intentionally qualified so that any requester must explicitly acknowledge - * that using an insecure random number generator is fine for its use case. - */ - @Singleton - @Provides - @Config("insecureRandom") - public static Random provideInsecureRandom() { - return new Random(); - } - - /** Returns a singleton secure random number generator this is slow. */ - @Singleton - @Provides - public static SecureRandom provideSecureRandom() { - try { - return SecureRandom.getInstance("NativePRNG"); - } catch (NoSuchAlgorithmException e) { - throw new ProviderException(e); - } - } - - /** Returns a singleton random string generator that uses digits only. */ - @Singleton - @Provides - @Config("digitOnlyStringGenerator") - public static StringGenerator provideDigitsOnlyStringGenerator(SecureRandom secureRandom) { - return new RandomStringGenerator(StringGenerator.Alphabets.DIGITS_ONLY, secureRandom); - } - - /** Returns a singleton random string generator using Base58 encoding. */ - @Singleton - @Provides - @Config("base58StringGenerator") - public static StringGenerator provideBase58StringGenerator(SecureRandom secureRandom) { - return new RandomStringGenerator(StringGenerator.Alphabets.BASE_58, secureRandom); - } - - /** Returns a singleton random string generator using Base58 encoding. */ - @Singleton - @Provides - @Config("base64StringGenerator") - public static StringGenerator provideBase64StringGenerator(SecureRandom secureRandom) { - return new RandomStringGenerator(StringGenerator.Alphabets.BASE_64, secureRandom); - } } /** diff --git a/java/google/registry/module/backend/BackendComponent.java b/java/google/registry/module/backend/BackendComponent.java index 2f792cd9c..82cee8857 100644 --- a/java/google/registry/module/backend/BackendComponent.java +++ b/java/google/registry/module/backend/BackendComponent.java @@ -42,16 +42,13 @@ import google.registry.request.Modules.URLFetchServiceModule; import google.registry.request.Modules.UrlFetchTransportModule; import google.registry.request.Modules.UserServiceModule; import google.registry.request.auth.AuthModule; -import google.registry.util.AppEngineServiceUtilsImpl.AppEngineServiceUtilsModule; -import google.registry.util.SystemClock.SystemClockModule; -import google.registry.util.SystemSleeper.SystemSleeperModule; +import google.registry.util.UtilsModule; import javax.inject.Singleton; /** Dagger component with instance lifetime for "backend" App Engine module. */ @Singleton @Component( modules = { - AppEngineServiceUtilsModule.class, AuthModule.class, BackendRequestComponentModule.class, BigqueryModule.class, @@ -73,12 +70,11 @@ import javax.inject.Singleton; NetHttpTransportModule.class, SheetsServiceModule.class, StackdriverModule.class, - SystemClockModule.class, - SystemSleeperModule.class, URLFetchServiceModule.class, UrlFetchTransportModule.class, UserServiceModule.class, VoidDnsWriterModule.class, + UtilsModule.class }) interface BackendComponent { BackendRequestHandler requestHandler(); diff --git a/java/google/registry/module/frontend/FrontendComponent.java b/java/google/registry/module/frontend/FrontendComponent.java index 04314dbe2..56e867886 100644 --- a/java/google/registry/module/frontend/FrontendComponent.java +++ b/java/google/registry/module/frontend/FrontendComponent.java @@ -36,16 +36,13 @@ import google.registry.request.Modules.UrlFetchTransportModule; import google.registry.request.Modules.UserServiceModule; import google.registry.request.auth.AuthModule; import google.registry.ui.ConsoleDebug.ConsoleConfigModule; -import google.registry.util.AppEngineServiceUtilsImpl.AppEngineServiceUtilsModule; -import google.registry.util.SystemClock.SystemClockModule; -import google.registry.util.SystemSleeper.SystemSleeperModule; +import google.registry.util.UtilsModule; import javax.inject.Singleton; /** Dagger component with instance lifetime for "default" App Engine module. */ @Singleton @Component( modules = { - AppEngineServiceUtilsModule.class, AuthModule.class, ConfigModule.class, ConsoleConfigModule.class, @@ -63,10 +60,9 @@ import javax.inject.Singleton; NetHttpTransportModule.class, ServerTridProviderModule.class, StackdriverModule.class, - SystemClockModule.class, - SystemSleeperModule.class, UrlFetchTransportModule.class, UserServiceModule.class, + UtilsModule.class }) interface FrontendComponent { FrontendRequestHandler requestHandler(); diff --git a/java/google/registry/module/pubapi/PubApiComponent.java b/java/google/registry/module/pubapi/PubApiComponent.java index 1b65390a0..93e2b0c1a 100644 --- a/java/google/registry/module/pubapi/PubApiComponent.java +++ b/java/google/registry/module/pubapi/PubApiComponent.java @@ -35,16 +35,13 @@ import google.registry.request.Modules.NetHttpTransportModule; import google.registry.request.Modules.UrlFetchTransportModule; import google.registry.request.Modules.UserServiceModule; import google.registry.request.auth.AuthModule; -import google.registry.util.AppEngineServiceUtilsImpl.AppEngineServiceUtilsModule; -import google.registry.util.SystemClock.SystemClockModule; -import google.registry.util.SystemSleeper.SystemSleeperModule; +import google.registry.util.UtilsModule; import javax.inject.Singleton; /** Dagger component with instance lifetime for "pubapi" App Engine module. */ @Singleton @Component( modules = { - AppEngineServiceUtilsModule.class, AuthModule.class, ConfigModule.class, CredentialModule.class, @@ -61,10 +58,9 @@ import javax.inject.Singleton; PubApiRequestComponentModule.class, ServerTridProviderModule.class, StackdriverModule.class, - SystemClockModule.class, - SystemSleeperModule.class, UrlFetchTransportModule.class, UserServiceModule.class, + UtilsModule.class }) interface PubApiComponent { PubApiRequestHandler requestHandler(); diff --git a/java/google/registry/module/tools/ToolsComponent.java b/java/google/registry/module/tools/ToolsComponent.java index b7dc1747a..83eb02163 100644 --- a/java/google/registry/module/tools/ToolsComponent.java +++ b/java/google/registry/module/tools/ToolsComponent.java @@ -38,16 +38,13 @@ import google.registry.request.Modules.NetHttpTransportModule; import google.registry.request.Modules.UrlFetchTransportModule; import google.registry.request.Modules.UserServiceModule; import google.registry.request.auth.AuthModule; -import google.registry.util.AppEngineServiceUtilsImpl.AppEngineServiceUtilsModule; -import google.registry.util.SystemClock.SystemClockModule; -import google.registry.util.SystemSleeper.SystemSleeperModule; +import google.registry.util.UtilsModule; import javax.inject.Singleton; /** Dagger component with instance lifetime for "tools" App Engine module. */ @Singleton @Component( modules = { - AppEngineServiceUtilsModule.class, AuthModule.class, ConfigModule.class, CredentialModule.class, @@ -66,11 +63,10 @@ import javax.inject.Singleton; NetHttpTransportModule.class, ServerTridProviderModule.class, StackdriverModule.class, - SystemClockModule.class, - SystemSleeperModule.class, ToolsRequestComponentModule.class, UrlFetchTransportModule.class, UserServiceModule.class, + UtilsModule.class }) interface ToolsComponent { ToolsRequestHandler requestHandler(); diff --git a/java/google/registry/rde/imports/RdeDomainImportAction.java b/java/google/registry/rde/imports/RdeDomainImportAction.java index cc558a0c6..ddca063ff 100644 --- a/java/google/registry/rde/imports/RdeDomainImportAction.java +++ b/java/google/registry/rde/imports/RdeDomainImportAction.java @@ -60,6 +60,7 @@ import google.registry.xjc.rdedomain.XjcRdeDomain; import google.registry.xjc.rdedomain.XjcRdeDomainElement; import java.util.Optional; import javax.inject.Inject; +import javax.inject.Named; import org.joda.money.Money; import org.joda.time.DateTime; @@ -92,7 +93,7 @@ public class RdeDomainImportAction implements Runnable { @Config("rdeImportBucket") String importBucketName, @Parameter(PATH) String importFileName, @Parameter(PARAM_MAP_SHARDS) Optional mapShards, - @Config("base64StringGenerator") StringGenerator stringGenerator) { + @Named("base64StringGenerator") StringGenerator stringGenerator) { this.mrRunner = mrRunner; this.response = response; this.importBucketName = importBucketName; diff --git a/java/google/registry/tmch/NordnUploadAction.java b/java/google/registry/tmch/NordnUploadAction.java index 638d2204c..9033ccf19 100644 --- a/java/google/registry/tmch/NordnUploadAction.java +++ b/java/google/registry/tmch/NordnUploadAction.java @@ -52,6 +52,7 @@ import google.registry.util.TaskQueueUtils; import google.registry.util.UrlFetchException; import java.io.IOException; import java.net.URL; +import java.security.SecureRandom; import java.util.List; import java.util.Optional; import java.util.Random; @@ -90,7 +91,7 @@ public final class NordnUploadAction implements Runnable { @Inject Clock clock; @Inject Retrier retrier; - @Inject @Config("insecureRandom") Random random; + @Inject SecureRandom random; @Inject LordnRequestInitializer lordnRequestInitializer; @Inject URLFetchService fetchService; @Inject @Config("tmchMarksdbUrl") String tmchMarksdbUrl; diff --git a/java/google/registry/tools/CreateAnchorTenantCommand.java b/java/google/registry/tools/CreateAnchorTenantCommand.java index d7ceea2a6..d5606d2d9 100644 --- a/java/google/registry/tools/CreateAnchorTenantCommand.java +++ b/java/google/registry/tools/CreateAnchorTenantCommand.java @@ -25,10 +25,10 @@ import com.beust.jcommander.Parameter; import com.beust.jcommander.Parameters; import com.google.common.net.InternetDomainName; import com.google.template.soy.data.SoyMapData; -import google.registry.config.RegistryConfig.Config; import google.registry.tools.soy.CreateAnchorTenantSoyInfo; import google.registry.util.StringGenerator; import javax.inject.Inject; +import javax.inject.Named; import org.joda.money.Money; import org.joda.time.DateTime; @@ -73,7 +73,7 @@ final class CreateAnchorTenantCommand extends MutatingEppToolCommand { private boolean fee; @Inject - @Config("base64StringGenerator") + @Named("base64StringGenerator") StringGenerator passwordGenerator; @Override diff --git a/java/google/registry/tools/CreateContactCommand.java b/java/google/registry/tools/CreateContactCommand.java index fbd0f597d..347ed6185 100644 --- a/java/google/registry/tools/CreateContactCommand.java +++ b/java/google/registry/tools/CreateContactCommand.java @@ -20,12 +20,12 @@ import static com.google.common.base.Strings.isNullOrEmpty; import com.beust.jcommander.Parameter; import com.beust.jcommander.Parameters; import com.google.template.soy.data.SoyMapData; -import google.registry.config.RegistryConfig.Config; import google.registry.tools.params.PhoneNumberParameter; import google.registry.tools.soy.ContactCreateSoyInfo; import google.registry.util.StringGenerator; import java.util.List; import javax.inject.Inject; +import javax.inject.Named; /** A command to create a new contact via EPP. */ @Parameters(separators = " =", commandDescription = "Create a new contact via EPP.") @@ -104,7 +104,7 @@ final class CreateContactCommand extends MutatingEppToolCommand { private String password; @Inject - @Config("base64StringGenerator") + @Named("base64StringGenerator") StringGenerator passwordGenerator; private static final int PASSWORD_LENGTH = 16; diff --git a/java/google/registry/tools/CreateDomainCommand.java b/java/google/registry/tools/CreateDomainCommand.java index a41e81b4d..680286e62 100644 --- a/java/google/registry/tools/CreateDomainCommand.java +++ b/java/google/registry/tools/CreateDomainCommand.java @@ -23,11 +23,11 @@ import static org.joda.time.DateTimeZone.UTC; import com.beust.jcommander.Parameter; import com.beust.jcommander.Parameters; import com.google.template.soy.data.SoyMapData; -import google.registry.config.RegistryConfig.Config; import google.registry.model.pricing.PremiumPricingEngine.DomainPrices; import google.registry.tools.soy.DomainCreateSoyInfo; import google.registry.util.StringGenerator; import javax.inject.Inject; +import javax.inject.Named; import org.joda.money.Money; import org.joda.time.DateTime; @@ -47,7 +47,7 @@ final class CreateDomainCommand extends CreateOrUpdateDomainCommand private boolean forcePremiums; @Inject - @Config("base64StringGenerator") + @Named("base64StringGenerator") StringGenerator passwordGenerator; private static final int PASSWORD_LENGTH = 16; diff --git a/java/google/registry/tools/GenerateAllocationTokensCommand.java b/java/google/registry/tools/GenerateAllocationTokensCommand.java index 7274f57fa..f0c84fbbf 100644 --- a/java/google/registry/tools/GenerateAllocationTokensCommand.java +++ b/java/google/registry/tools/GenerateAllocationTokensCommand.java @@ -31,7 +31,6 @@ import com.google.common.base.Splitter; import com.google.common.collect.ImmutableSet; import com.google.common.io.Files; import com.googlecode.objectify.Key; -import google.registry.config.RegistryConfig.Config; import google.registry.model.domain.token.AllocationToken; import google.registry.util.NonFinalForTesting; import google.registry.util.Retrier; @@ -41,6 +40,7 @@ import java.io.IOException; import java.util.Collection; import java.util.Deque; import javax.inject.Inject; +import javax.inject.Named; /** Command to generate and persist {@link AllocationToken}s. */ @Parameters( @@ -81,7 +81,7 @@ class GenerateAllocationTokensCommand implements CommandWithRemoteApi { boolean dryRun; @Inject - @Config("base58StringGenerator") + @Named("base58StringGenerator") StringGenerator stringGenerator; @Inject Retrier retrier; diff --git a/java/google/registry/tools/RegistryToolComponent.java b/java/google/registry/tools/RegistryToolComponent.java index a5ef69cfb..08f0acad1 100644 --- a/java/google/registry/tools/RegistryToolComponent.java +++ b/java/google/registry/tools/RegistryToolComponent.java @@ -34,9 +34,7 @@ import google.registry.request.Modules.URLFetchServiceModule; import google.registry.request.Modules.UrlFetchTransportModule; import google.registry.request.Modules.UserServiceModule; import google.registry.tools.AuthModule.LocalCredentialModule; -import google.registry.util.AppEngineServiceUtilsImpl.AppEngineServiceUtilsModule; -import google.registry.util.SystemClock.SystemClockModule; -import google.registry.util.SystemSleeper.SystemSleeperModule; +import google.registry.util.UtilsModule; import google.registry.whois.WhoisModule; import javax.annotation.Nullable; import javax.inject.Named; @@ -52,7 +50,6 @@ import javax.inject.Singleton; @Component( modules = { AppEngineAdminApiModule.class, - AppEngineServiceUtilsModule.class, AuthModule.class, BigqueryModule.class, ConfigModule.class, @@ -68,11 +65,10 @@ import javax.inject.Singleton; LocalCredentialModule.class, RdeModule.class, RequestFactoryModule.class, - SystemClockModule.class, - SystemSleeperModule.class, URLFetchServiceModule.class, UrlFetchTransportModule.class, UserServiceModule.class, + UtilsModule.class, VoidDnsWriterModule.class, WhoisModule.class, }) diff --git a/java/google/registry/tools/SetupOteCommand.java b/java/google/registry/tools/SetupOteCommand.java index 31197cd4f..935bf81fd 100644 --- a/java/google/registry/tools/SetupOteCommand.java +++ b/java/google/registry/tools/SetupOteCommand.java @@ -22,7 +22,6 @@ import com.beust.jcommander.Parameter; import com.beust.jcommander.Parameters; import com.google.common.collect.ImmutableMap; import com.google.common.io.MoreFiles; -import google.registry.config.RegistryConfig.Config; import google.registry.config.RegistryEnvironment; import google.registry.model.OteAccountBuilder; import google.registry.tools.params.PathParameter; @@ -32,6 +31,7 @@ import java.nio.file.Path; import java.util.ArrayList; import java.util.List; import javax.inject.Inject; +import javax.inject.Named; /** Composite command to set up OT&E TLDs and accounts. */ @Parameters(separators = " =", commandDescription = "Set up OT&E TLDs and registrars") @@ -78,7 +78,7 @@ final class SetupOteCommand extends ConfirmingCommand implements CommandWithRemo private boolean overwrite = false; @Inject - @Config("base64StringGenerator") + @Named("base64StringGenerator") StringGenerator passwordGenerator; @Inject Clock clock; diff --git a/java/google/registry/ui/server/registrar/ConsoleOteSetupAction.java b/java/google/registry/ui/server/registrar/ConsoleOteSetupAction.java index 96ad6b292..ac3f1b3c6 100644 --- a/java/google/registry/ui/server/registrar/ConsoleOteSetupAction.java +++ b/java/google/registry/ui/server/registrar/ConsoleOteSetupAction.java @@ -50,6 +50,7 @@ import google.registry.util.StringGenerator; import java.util.HashMap; import java.util.Optional; import javax.inject.Inject; +import javax.inject.Named; import javax.servlet.http.HttpServletRequest; /** @@ -97,7 +98,7 @@ public final class ConsoleOteSetupAction implements Runnable { @Inject SendEmailUtils sendEmailUtils; @Inject @Config("logoFilename") String logoFilename; @Inject @Config("productName") String productName; - @Inject @Config("base58StringGenerator") StringGenerator passwordGenerator; + @Inject @Named("base58StringGenerator") StringGenerator passwordGenerator; @Inject @Parameter("clientId") Optional clientId; @Inject @Parameter("email") Optional email; @Inject @Parameter("password") Optional optionalPassword; diff --git a/java/google/registry/ui/server/registrar/ConsoleRegistrarCreatorAction.java b/java/google/registry/ui/server/registrar/ConsoleRegistrarCreatorAction.java index de79bc103..9d48c100c 100644 --- a/java/google/registry/ui/server/registrar/ConsoleRegistrarCreatorAction.java +++ b/java/google/registry/ui/server/registrar/ConsoleRegistrarCreatorAction.java @@ -59,6 +59,7 @@ import java.util.HashMap; import java.util.Optional; import java.util.stream.Stream; import javax.inject.Inject; +import javax.inject.Named; import javax.servlet.http.HttpServletRequest; import org.joda.money.CurrencyUnit; @@ -108,8 +109,8 @@ public final class ConsoleRegistrarCreatorAction implements Runnable { @Inject SendEmailUtils sendEmailUtils; @Inject @Config("logoFilename") String logoFilename; @Inject @Config("productName") String productName; - @Inject @Config("base58StringGenerator") StringGenerator passwordGenerator; - @Inject @Config("digitOnlyStringGenerator") StringGenerator passcodeGenerator; + @Inject @Named("base58StringGenerator") StringGenerator passwordGenerator; + @Inject @Named("digitOnlyStringGenerator") StringGenerator passcodeGenerator; @Inject @Parameter("clientId") Optional clientId; @Inject @Parameter("name") Optional name; @Inject @Parameter("billingAccount") Optional billingAccount; diff --git a/java/google/registry/util/AppEngineServiceUtilsImpl.java b/java/google/registry/util/AppEngineServiceUtilsImpl.java index 71b700468..1d9c7eb4e 100644 --- a/java/google/registry/util/AppEngineServiceUtilsImpl.java +++ b/java/google/registry/util/AppEngineServiceUtilsImpl.java @@ -18,10 +18,6 @@ import static com.google.common.base.Preconditions.checkArgument; import static google.registry.util.PreconditionsUtils.checkArgumentNotNull; import com.google.appengine.api.modules.ModulesService; -import com.google.appengine.api.modules.ModulesServiceFactory; -import dagger.Binds; -import dagger.Module; -import dagger.Provides; import javax.inject.Inject; /** A wrapper for {@link ModulesService} that provides a saner API. */ @@ -60,20 +56,4 @@ public class AppEngineServiceUtilsImpl implements AppEngineServiceUtils { checkArgument(numInstances > 0, "Number of instances must be greater than 0"); modulesService.setNumInstances(service, version, numInstances); } - - /** Dagger module for AppEngineServiceUtils. */ - @Module - public abstract static class AppEngineServiceUtilsModule { - - private static final ModulesService modulesService = ModulesServiceFactory.getModulesService(); - - @Provides - static ModulesService provideModulesService() { - return modulesService; - } - - @Binds - abstract AppEngineServiceUtils provideAppEngineServiceUtils( - AppEngineServiceUtilsImpl appEngineServiceUtilsImpl); - } } diff --git a/java/google/registry/util/SystemClock.java b/java/google/registry/util/SystemClock.java index ec6693025..7ae85df27 100644 --- a/java/google/registry/util/SystemClock.java +++ b/java/google/registry/util/SystemClock.java @@ -16,9 +16,8 @@ package google.registry.util; import static org.joda.time.DateTimeZone.UTC; -import dagger.Module; -import dagger.Provides; import javax.annotation.concurrent.ThreadSafe; +import javax.inject.Inject; import org.joda.time.DateTime; /** Clock implementation that proxies to the real system clock. */ @@ -27,20 +26,12 @@ public class SystemClock implements Clock { private static final long serialVersionUID = 5165372013848947515L; + @Inject + public SystemClock() {} + /** Returns the current time. */ @Override public DateTime nowUtc() { return DateTime.now(UTC); } - - /** Dagger module for {@link SystemClock}. */ - @Module - public static final class SystemClockModule { - private static final Clock clock = new SystemClock(); - - @Provides - static Clock provideClock() { - return clock; - } - } } diff --git a/java/google/registry/util/SystemSleeper.java b/java/google/registry/util/SystemSleeper.java index e660cf315..a913aa14a 100644 --- a/java/google/registry/util/SystemSleeper.java +++ b/java/google/registry/util/SystemSleeper.java @@ -17,8 +17,6 @@ package google.registry.util; import static com.google.common.base.Preconditions.checkArgument; import com.google.common.util.concurrent.Uninterruptibles; -import dagger.Module; -import dagger.Provides; import java.io.Serializable; import java.util.concurrent.TimeUnit; import javax.annotation.concurrent.ThreadSafe; @@ -45,15 +43,4 @@ public final class SystemSleeper implements Sleeper, Serializable { checkArgument(duration.getMillis() >= 0); Uninterruptibles.sleepUninterruptibly(duration.getMillis(), TimeUnit.MILLISECONDS); } - - /** Dagger module for {@link SystemSleeper}. */ - @Module - public static final class SystemSleeperModule { - private static final Sleeper sleeper = new SystemSleeper(); - - @Provides - static Sleeper provideSleeper() { - return sleeper; - } - } } diff --git a/java/google/registry/util/UtilsModule.java b/java/google/registry/util/UtilsModule.java new file mode 100644 index 000000000..61bb14128 --- /dev/null +++ b/java/google/registry/util/UtilsModule.java @@ -0,0 +1,82 @@ +// Copyright 2019 The Nomulus 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.util; + +import com.google.appengine.api.modules.ModulesService; +import com.google.appengine.api.modules.ModulesServiceFactory; +import dagger.Binds; +import dagger.Module; +import dagger.Provides; +import java.security.NoSuchAlgorithmException; +import java.security.ProviderException; +import java.security.SecureRandom; +import javax.inject.Named; +import javax.inject.Singleton; + +/** Dagger module to provide instances of various utils classes. */ +@Module +public abstract class UtilsModule { + + @Binds + @Singleton + abstract Sleeper provideSleeper(SystemSleeper sleeper); + + @Binds + @Singleton + abstract Clock provideClock(SystemClock clock); + + @Provides + @Singleton + static ModulesService provideModulesService() { + return ModulesServiceFactory.getModulesService(); + } + + @Binds + @Singleton + abstract AppEngineServiceUtils provideAppEngineServiceUtils( + AppEngineServiceUtilsImpl appEngineServiceUtilsImpl); + + + @Singleton + @Provides + public static SecureRandom provideSecureRandom() { + try { + return SecureRandom.getInstance("NativePRNG"); + } catch (NoSuchAlgorithmException e) { + throw new ProviderException(e); + } + } + + @Singleton + @Provides + @Named("base58StringGenerator") + public static StringGenerator provideBase58StringGenerator(SecureRandom secureRandom) { + return new RandomStringGenerator(StringGenerator.Alphabets.BASE_58, secureRandom); + } + + @Singleton + @Provides + @Named("base64StringGenerator") + public static StringGenerator provideBase64StringGenerator(SecureRandom secureRandom) { + return new RandomStringGenerator(StringGenerator.Alphabets.BASE_64, secureRandom); + } + + @Singleton + @Provides + @Named("digitOnlyStringGenerator") + public static StringGenerator provideDigitsOnlyStringGenerator(SecureRandom secureRandom) { + return new RandomStringGenerator(StringGenerator.Alphabets.DIGITS_ONLY, secureRandom); + } +} diff --git a/javatests/google/registry/dns/DnsTestComponent.java b/javatests/google/registry/dns/DnsTestComponent.java index c422f01d5..e3cbae14b 100644 --- a/javatests/google/registry/dns/DnsTestComponent.java +++ b/javatests/google/registry/dns/DnsTestComponent.java @@ -20,19 +20,20 @@ import google.registry.cron.CronModule; import google.registry.dns.writer.VoidDnsWriterModule; import google.registry.module.backend.BackendModule; import google.registry.request.RequestModule; -import google.registry.util.SystemClock.SystemClockModule; -import google.registry.util.SystemSleeper.SystemSleeperModule; +import google.registry.util.UtilsModule; +import javax.inject.Singleton; -@Component(modules = { - SystemClockModule.class, - ConfigModule.class, - BackendModule.class, - DnsModule.class, - RequestModule.class, - VoidDnsWriterModule.class, - SystemSleeperModule.class, - CronModule.class, -}) +@Singleton +@Component( + modules = { + BackendModule.class, + ConfigModule.class, + CronModule.class, + DnsModule.class, + RequestModule.class, + UtilsModule.class, + VoidDnsWriterModule.class, + }) interface DnsTestComponent { DnsQueue dnsQueue(); RefreshDnsAction refreshDns(); diff --git a/javatests/google/registry/tmch/NordnUploadActionTest.java b/javatests/google/registry/tmch/NordnUploadActionTest.java index e17e602e1..529ed2d33 100644 --- a/javatests/google/registry/tmch/NordnUploadActionTest.java +++ b/javatests/google/registry/tmch/NordnUploadActionTest.java @@ -63,9 +63,9 @@ import google.registry.util.Retrier; import google.registry.util.TaskQueueUtils; import google.registry.util.UrlFetchException; import java.net.URL; +import java.security.SecureRandom; import java.util.List; import java.util.Optional; -import java.util.Random; import org.joda.time.DateTime; import org.junit.Before; import org.junit.Rule; @@ -125,7 +125,7 @@ public class NordnUploadActionTest { action.taskQueueUtils = new TaskQueueUtils(new Retrier(new FakeSleeper(clock), 3)); action.tld = "tld"; action.tmchMarksdbUrl = "http://127.0.0.1"; - action.random = new Random(); + action.random = new SecureRandom(); action.retrier = new Retrier(new FakeSleeper(clock), 3); } diff --git a/javatests/google/registry/whois/WhoisTestComponent.java b/javatests/google/registry/whois/WhoisTestComponent.java index 7053a9fb1..1665aa2f7 100644 --- a/javatests/google/registry/whois/WhoisTestComponent.java +++ b/javatests/google/registry/whois/WhoisTestComponent.java @@ -17,18 +17,17 @@ package google.registry.whois; import dagger.Component; import google.registry.config.RegistryConfig.ConfigModule; import google.registry.request.RequestModule; -import google.registry.util.SystemClock.SystemClockModule; -import google.registry.util.SystemSleeper.SystemSleeperModule; +import google.registry.util.UtilsModule; import javax.inject.Singleton; @Singleton -@Component(modules = { - ConfigModule.class, - RequestModule.class, - SystemClockModule.class, - SystemSleeperModule.class, - WhoisModule.class, -}) +@Component( + modules = { + ConfigModule.class, + RequestModule.class, + UtilsModule.class, + WhoisModule.class, + }) interface WhoisTestComponent { WhoisHttpAction whoisHttpAction();