JCLOUDS-1362: Proper password generation with custom constraints for each cloud
Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/eebcc001 Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/eebcc001 Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/eebcc001 Branch: refs/heads/master Commit: eebcc0017fbf7b1f1d0d2920cd8f891e1ec36e38 Parents: a2dee2f Author: Ignasi Barrera <[email protected]> Authored: Thu Jan 4 01:44:14 2018 +0100 Committer: Ignasi Barrera <[email protected]> Committed: Mon Jan 8 08:48:37 2018 +0100 ---------------------------------------------------------------------- .../config/AzureComputeServiceContextModule.java | 16 ++++++++++++++++ .../strategy/CreateResourcesThenCreateNodes.java | 9 ++++++--- .../CreateResourcesThenCreateNodesTest.java | 3 ++- 3 files changed, 24 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/jclouds/blob/eebcc001/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/config/AzureComputeServiceContextModule.java ---------------------------------------------------------------------- diff --git a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/config/AzureComputeServiceContextModule.java b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/config/AzureComputeServiceContextModule.java index de33fdf..0a81ecb 100644 --- a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/config/AzureComputeServiceContextModule.java +++ b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/config/AzureComputeServiceContextModule.java @@ -53,6 +53,7 @@ import org.jclouds.compute.functions.NodeAndTemplateOptionsToStatementWithoutPub import org.jclouds.compute.options.TemplateOptions; import org.jclouds.compute.strategy.CreateNodesInGroupThenAddToSet; import org.jclouds.net.domain.IpPermission; +import org.jclouds.util.PasswordGenerator; import com.google.common.base.Function; import com.google.common.cache.CacheBuilder; @@ -102,6 +103,21 @@ public class AzureComputeServiceContextModule extends bind(new TypeLiteral<SecurityGroupExtension>() { }).to(AzureComputeSecurityGroupExtension.class); } + + @Provides + @Singleton + protected PasswordGenerator.Config providePasswordGenerator() { + // Guest passwords must be between 6-72 characters long. + // Must contain an upper case character. + // Must contain a lower case character. + // Must contain a numeric digit. + // Must contain a special character. Control characters are not allowed. + return new PasswordGenerator() + .lower().min(2).max(10) + .upper().min(2).max(10) + .numbers().min(2).max(10) + .symbols().min(2).max(10); + } @Provides @Singleton http://git-wip-us.apache.org/repos/asf/jclouds/blob/eebcc001/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/strategy/CreateResourcesThenCreateNodes.java ---------------------------------------------------------------------- diff --git a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/strategy/CreateResourcesThenCreateNodes.java b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/strategy/CreateResourcesThenCreateNodes.java index e5d38fb..511d531 100644 --- a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/strategy/CreateResourcesThenCreateNodes.java +++ b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/strategy/CreateResourcesThenCreateNodes.java @@ -52,7 +52,7 @@ import org.jclouds.compute.strategy.ListNodesStrategy; import org.jclouds.compute.strategy.impl.CreateNodesWithGroupEncodedIntoNameThenAddToSet; import org.jclouds.domain.Location; import org.jclouds.logging.Logger; -import org.jclouds.util.Passwords; +import org.jclouds.util.PasswordGenerator; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Optional; @@ -84,6 +84,7 @@ public class CreateResourcesThenCreateNodes extends CreateNodesWithGroupEncodedI private final String defaultVnetAddressPrefix; private final String defaultSubnetAddressPrefix; private final TemplateToAvailabilitySet templateToAvailabilitySet; + private final PasswordGenerator.Config passwordGenerator; @Inject protected CreateResourcesThenCreateNodes( @@ -95,7 +96,8 @@ public class CreateResourcesThenCreateNodes extends CreateNodesWithGroupEncodedI AzureComputeApi api, @Named(DEFAULT_VNET_ADDRESS_SPACE_PREFIX) String defaultVnetAddressPrefix, @Named(DEFAULT_SUBNET_ADDRESS_PREFIX) String defaultSubnetAddressPrefix, LoadingCache<ResourceGroupAndNameAndIngressRules, String> securityGroupMap, - TemplateToAvailabilitySet templateToAvailabilitySet) { + TemplateToAvailabilitySet templateToAvailabilitySet, + PasswordGenerator.Config passwordGenerator) { super(addNodeWithGroupStrategy, listNodesStrategy, namingConvention, userExecutor, customizeNodeAndAddToGoodMapOrPutExceptionIntoBadMapFactory); this.api = api; @@ -103,6 +105,7 @@ public class CreateResourcesThenCreateNodes extends CreateNodesWithGroupEncodedI this.defaultVnetAddressPrefix = defaultVnetAddressPrefix; this.defaultSubnetAddressPrefix = defaultSubnetAddressPrefix; this.templateToAvailabilitySet = templateToAvailabilitySet; + this.passwordGenerator = passwordGenerator; } @Override @@ -141,7 +144,7 @@ public class CreateResourcesThenCreateNodes extends CreateNodesWithGroupEncodedI TemplateOptions options = template.getOptions(); if (options.getLoginPassword() == null) { Optional<String> passwordOptional = template.getImage().getDefaultCredentials().getOptionalPassword(); - options.overrideLoginPassword(passwordOptional.or(Passwords.generate())); + options.overrideLoginPassword(passwordOptional.or(passwordGenerator.generate())); } } http://git-wip-us.apache.org/repos/asf/jclouds/blob/eebcc001/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/compute/strategy/CreateResourcesThenCreateNodesTest.java ---------------------------------------------------------------------- diff --git a/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/compute/strategy/CreateResourcesThenCreateNodesTest.java b/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/compute/strategy/CreateResourcesThenCreateNodesTest.java index 51a45af..45c56a3 100644 --- a/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/compute/strategy/CreateResourcesThenCreateNodesTest.java +++ b/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/compute/strategy/CreateResourcesThenCreateNodesTest.java @@ -24,6 +24,7 @@ import org.jclouds.azurecompute.arm.domain.PublicIPAddressProperties; import org.jclouds.azurecompute.arm.domain.Subnet; import org.jclouds.azurecompute.arm.features.PublicIPAddressApi; import org.jclouds.azurecompute.arm.features.SubnetApi; +import org.jclouds.util.PasswordGenerator; import org.testng.annotations.Test; import com.google.common.collect.ImmutableList; @@ -101,7 +102,7 @@ public class CreateResourcesThenCreateNodesTest { } private static CreateResourcesThenCreateNodes strategy(AzureComputeApi api) { - return new CreateResourcesThenCreateNodes(null, null, null, null, null, api, null, null, null, null); + return new CreateResourcesThenCreateNodes(null, null, null, null, null, api, null, null, null, null, new PasswordGenerator().lower()); } private static String netResource(String resource) {
