Skip to content

Commit 5df623c

Browse files
committed
issue #701 - address bugs and limitations of random pw generator, improve performance and rule compatability
1 parent adb5fec commit 5df623c

26 files changed

+1282
-722
lines changed

server/src/main/java/password/pwm/AppProperty.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -290,7 +290,6 @@ public enum AppProperty
290290
PASSWORD_RANDOMGEN_MAX_LENGTH ( "password.randomGenerator.maxLength" ),
291291
PASSWORD_RANDOMGEN_MIN_LENGTH ( "password.randomGenerator.minLength" ),
292292
PASSWORD_RANDOMGEN_DEFAULT_STRENGTH ( "password.randomGenerator.defaultStrength" ),
293-
PASSWORD_RANDOMGEN_JITTER_COUNT ( "password.randomGenerator.jitter.count" ),
294293

295294
/* Strength thresholds, introduced by the addition of the zxcvbn strength meter library (since it has 5 levels) */
296295
PASSWORD_STRENGTH_THRESHOLD_VERY_STRONG ( "password.strength.threshold.veryStrong" ),

server/src/main/java/password/pwm/health/LDAPHealthChecker.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,6 @@
6666
import password.pwm.util.logging.PwmLogger;
6767
import password.pwm.util.macro.MacroRequest;
6868
import password.pwm.util.password.PasswordUtility;
69-
import password.pwm.util.password.RandomPasswordGenerator;
7069
import password.pwm.ws.server.rest.bean.PublicHealthData;
7170

7271
import java.net.InetAddress;
@@ -357,7 +356,7 @@ public List<HealthRecord> doLdapTestUserCheck(
357356
}
358357
if ( doPasswordChange )
359358
{
360-
final PasswordData newPassword = RandomPasswordGenerator.createRandomPassword( null, passwordPolicy, pwmDomain );
359+
final PasswordData newPassword = PasswordUtility.generateRandom( sessionLabel, passwordPolicy, pwmDomain );
361360
try
362361
{
363362
theUser.setPassword( newPassword.getStringValue() );

server/src/main/java/password/pwm/http/servlet/GuestRegistrationServlet.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,22 +48,21 @@
4848
import password.pwm.http.bean.GuestRegistrationBean;
4949
import password.pwm.i18n.Message;
5050
import password.pwm.ldap.LdapOperationsHelper;
51-
import password.pwm.user.UserInfo;
5251
import password.pwm.ldap.UserInfoFactory;
5352
import password.pwm.ldap.search.SearchConfiguration;
5453
import password.pwm.ldap.search.UserSearchService;
5554
import password.pwm.svc.stats.Statistic;
5655
import password.pwm.svc.stats.StatisticsClient;
56+
import password.pwm.user.UserInfo;
5757
import password.pwm.util.FormMap;
5858
import password.pwm.util.PasswordData;
5959
import password.pwm.util.form.FormUtility;
60-
import password.pwm.util.java.PwmUtil;
6160
import password.pwm.util.java.PwmDateFormat;
61+
import password.pwm.util.java.PwmUtil;
6262
import password.pwm.util.logging.PwmLogger;
6363
import password.pwm.util.macro.MacroRequest;
6464
import password.pwm.util.operations.ActionExecutor;
6565
import password.pwm.util.password.PasswordUtility;
66-
import password.pwm.util.password.RandomPasswordGenerator;
6766

6867
import javax.servlet.ServletException;
6968
import javax.servlet.annotation.WebServlet;
@@ -478,7 +477,7 @@ public ProcessStatus handleCreateRequest(
478477
userIdentity,
479478
theUser );
480479

481-
final PasswordData newPassword = RandomPasswordGenerator.createRandomPassword( pwmRequest.getLabel(), passwordPolicy, pwmDomain );
480+
final PasswordData newPassword = PasswordUtility.generateRandom( pwmRequest.getLabel(), passwordPolicy, pwmDomain );
482481
theUser.setPassword( newPassword.getStringValue() );
483482

484483

server/src/main/java/password/pwm/http/servlet/changepw/ChangePasswordServlet.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,6 @@
6464
import password.pwm.util.macro.MacroRequest;
6565
import password.pwm.util.password.PasswordUtility;
6666
import password.pwm.util.password.PwmPasswordRuleValidator;
67-
import password.pwm.util.password.RandomPasswordGenerator;
6867
import password.pwm.ws.server.RestResultBean;
6968
import password.pwm.ws.server.rest.RestCheckPasswordServer;
7069
import password.pwm.ws.server.rest.RestRandomPasswordServer;
@@ -458,7 +457,7 @@ public ProcessStatus processCheckPasswordAction( final PwmRequest pwmRequest )
458457
@ActionHandler( action = "randomPassword" )
459458
public ProcessStatus processRandomPasswordAction( final PwmRequest pwmRequest ) throws IOException, PwmUnrecoverableException, ChaiUnavailableException
460459
{
461-
final PasswordData passwordData = RandomPasswordGenerator.createRandomPassword(
460+
final PasswordData passwordData = PasswordUtility.generateRandom(
462461
pwmRequest.getLabel(),
463462
pwmRequest.getPwmSession().getUserInfo().getPasswordPolicy(),
464463
pwmRequest.getPwmDomain() );

server/src/main/java/password/pwm/http/servlet/configeditor/ConfigEditorServlet.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,12 +62,12 @@
6262
import password.pwm.http.servlet.AbstractPwmServlet;
6363
import password.pwm.http.servlet.ControlledPwmServlet;
6464
import password.pwm.http.servlet.PwmServletDefinition;
65+
import password.pwm.http.servlet.admin.system.ConfigManagerServlet;
6566
import password.pwm.http.servlet.configeditor.data.NavTreeDataMaker;
6667
import password.pwm.http.servlet.configeditor.data.NavTreeItem;
6768
import password.pwm.http.servlet.configeditor.data.NavTreeSettings;
6869
import password.pwm.http.servlet.configeditor.data.SettingData;
6970
import password.pwm.http.servlet.configeditor.data.SettingDataMaker;
70-
import password.pwm.http.servlet.admin.system.ConfigManagerServlet;
7171
import password.pwm.i18n.Config;
7272
import password.pwm.i18n.Message;
7373
import password.pwm.i18n.PwmLocaleBundle;
@@ -85,8 +85,8 @@
8585
import password.pwm.util.json.JsonFactory;
8686
import password.pwm.util.logging.PwmLogger;
8787
import password.pwm.util.macro.MacroRequest;
88+
import password.pwm.util.password.PasswordUtility;
8889
import password.pwm.util.password.RandomGeneratorConfig;
89-
import password.pwm.util.password.RandomPasswordGenerator;
9090
import password.pwm.ws.server.RestResultBean;
9191
import password.pwm.ws.server.rest.RestRandomPasswordServer;
9292
import password.pwm.ws.server.rest.bean.PublicHealthData;
@@ -934,7 +934,10 @@ public ProcessStatus restRandomPassword( final PwmRequest pwmRequest )
934934
{
935935
final RestRandomPasswordServer.JsonInput jsonInput = pwmRequest.readBodyAsJsonObject( RestRandomPasswordServer.JsonInput.class );
936936
final RandomGeneratorConfig randomConfig = RestRandomPasswordServer.jsonInputToRandomConfig( jsonInput, pwmRequest.getPwmDomain(), PwmPasswordPolicy.defaultPolicy() );
937-
final PasswordData randomPassword = RandomPasswordGenerator.createRandomPassword( pwmRequest.getLabel(), randomConfig, pwmRequest.getPwmDomain() );
937+
final PasswordData randomPassword = PasswordUtility.generateRandom(
938+
pwmRequest.getLabel(),
939+
randomConfig,
940+
pwmRequest.getPwmDomain() );
938941
final RestRandomPasswordServer.JsonOutput outputMap = new RestRandomPasswordServer.JsonOutput();
939942
outputMap.setPassword( randomPassword.getStringValue() );
940943

server/src/main/java/password/pwm/http/servlet/forgottenpw/ForgottenPasswordUtil.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,6 @@
7676
import password.pwm.util.logging.PwmLogger;
7777
import password.pwm.util.macro.MacroRequest;
7878
import password.pwm.util.password.PasswordUtility;
79-
import password.pwm.util.password.RandomPasswordGenerator;
8079

8180
import javax.servlet.ServletException;
8281
import java.io.IOException;
@@ -465,11 +464,10 @@ static void doActionSendNewPassword( final PwmRequest pwmRequest )
465464
+ theUser.getEntryDN() );
466465

467466
// create new password
468-
final PasswordData newPassword = RandomPasswordGenerator.createRandomPassword(
467+
final PasswordData newPassword = PasswordUtility.generateRandom(
469468
pwmRequest.getLabel(),
470469
userInfo.getPasswordPolicy(),
471-
pwmDomain
472-
);
470+
pwmDomain );
473471
LOGGER.trace( pwmRequest, () -> "generated random password value based on password policy for "
474472
+ userIdentity.toDisplayString() );
475473

server/src/main/java/password/pwm/http/servlet/helpdesk/HelpdeskServlet.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,6 @@
9292
import password.pwm.util.operations.ActionExecutor;
9393
import password.pwm.util.password.PasswordUtility;
9494
import password.pwm.util.password.RandomGeneratorConfig;
95-
import password.pwm.util.password.RandomPasswordGenerator;
9695
import password.pwm.ws.server.RestResultBean;
9796
import password.pwm.ws.server.rest.RestCheckPasswordServer;
9897
import password.pwm.ws.server.rest.RestRandomPasswordServer;
@@ -1276,7 +1275,7 @@ public ProcessStatus processSetPasswordAction( final PwmRequest pwmRequest ) thr
12761275
pwmRequest.getLabel(),
12771276
userIdentity,
12781277
chaiUser );
1279-
newPassword = RandomPasswordGenerator.createRandomPassword(
1278+
newPassword = PasswordUtility.generateRandom(
12801279
pwmRequest.getLabel(),
12811280
passwordPolicy,
12821281
pwmRequest.getPwmDomain()
@@ -1336,7 +1335,7 @@ public ProcessStatus processRandomPasswordAction( final PwmRequest pwmRequest )
13361335
);
13371336

13381337
final RandomGeneratorConfig randomConfig = RandomGeneratorConfig.make( pwmRequest.getPwmDomain(), userInfo.getPasswordPolicy() );
1339-
final PasswordData randomPassword = RandomPasswordGenerator.createRandomPassword( pwmRequest.getLabel(), randomConfig, pwmRequest.getPwmDomain() );
1338+
final PasswordData randomPassword = PasswordUtility.generateRandom( pwmRequest.getLabel(), randomConfig, pwmRequest.getPwmDomain() );
13401339
final RestRandomPasswordServer.JsonOutput jsonOutput = new RestRandomPasswordServer.JsonOutput();
13411340
jsonOutput.setPassword( randomPassword.getStringValue() );
13421341

server/src/main/java/password/pwm/http/servlet/newuser/NewUserUtils.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,6 @@
5555
import password.pwm.http.PwmSession;
5656
import password.pwm.http.bean.NewUserBean;
5757
import password.pwm.http.servlet.forgottenpw.RemoteVerificationMethod;
58-
import password.pwm.user.UserInfo;
59-
import password.pwm.user.UserInfoBean;
6058
import password.pwm.ldap.auth.PwmAuthenticationSource;
6159
import password.pwm.ldap.auth.SessionAuthenticator;
6260
import password.pwm.ldap.search.SearchConfiguration;
@@ -67,20 +65,21 @@
6765
import password.pwm.svc.stats.StatisticsClient;
6866
import password.pwm.svc.token.TokenType;
6967
import password.pwm.svc.token.TokenUtil;
68+
import password.pwm.user.UserInfo;
69+
import password.pwm.user.UserInfoBean;
7070
import password.pwm.util.PasswordData;
7171
import password.pwm.util.form.FormUtility;
7272
import password.pwm.util.java.CollectionUtil;
7373
import password.pwm.util.java.PwmUtil;
74-
import password.pwm.util.json.JsonFactory;
7574
import password.pwm.util.java.StringUtil;
7675
import password.pwm.util.java.TimeDuration;
76+
import password.pwm.util.json.JsonFactory;
7777
import password.pwm.util.logging.PwmLogger;
7878
import password.pwm.util.macro.MacroReplacer;
7979
import password.pwm.util.macro.MacroRequest;
8080
import password.pwm.util.operations.ActionExecutor;
8181
import password.pwm.util.password.PasswordUtility;
8282
import password.pwm.util.password.RandomGeneratorConfig;
83-
import password.pwm.util.password.RandomPasswordGenerator;
8483
import password.pwm.ws.client.rest.form.FormDataRequestBean;
8584
import password.pwm.ws.client.rest.form.FormDataResponseBean;
8685
import password.pwm.ws.client.rest.form.RestFormDataClient;
@@ -161,7 +160,7 @@ static void createUser(
161160
else
162161
{
163162
final PwmPasswordPolicy pwmPasswordPolicy = newUserProfile.getNewUserPasswordPolicy( pwmRequest.getPwmRequestContext() );
164-
userPassword = RandomPasswordGenerator.createRandomPassword( pwmRequest.getLabel(), pwmPasswordPolicy, pwmRequest.getPwmDomain() );
163+
userPassword = PasswordUtility.generateRandom( pwmRequest.getLabel(), pwmPasswordPolicy, pwmRequest.getPwmDomain() );
165164
}
166165

167166
// set up the user creation attributes
@@ -216,7 +215,7 @@ static void createUser(
216215
final RandomGeneratorConfig randomGeneratorConfig = RandomGeneratorConfig.make( pwmRequest.getPwmDomain(),
217216
newUserProfile.getNewUserPasswordPolicy( pwmRequest.getPwmRequestContext() ) );
218217

219-
temporaryPassword = RandomPasswordGenerator.createRandomPassword( pwmRequest.getLabel(), randomGeneratorConfig, pwmDomain );
218+
temporaryPassword = PasswordUtility.generateRandom( pwmRequest.getLabel(), randomGeneratorConfig, pwmDomain );
220219
}
221220
final ChaiUser proxiedUser = chaiProvider.getEntryFactory().newChaiUser( newUserDN );
222221
try

server/src/main/java/password/pwm/ldap/LdapDebugDataGenerator.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,10 @@ public static List<LdapDebugInfo> makeLdapDebugInfos(
6666

6767
try
6868
{
69-
final ChaiConfiguration profileChaiConf = LdapOperationsHelper.createChaiConfiguration( domainConfig, ldapProfile );
69+
final DomainConfig nonObfuscatedDomainConf = pwmDomain.getConfig();
70+
final ChaiConfiguration profileChaiConf = LdapOperationsHelper.createChaiConfiguration(
71+
nonObfuscatedDomainConf,
72+
ldapProfile );
7073
final Collection<ChaiConfiguration> chaiConfigurations = ChaiUtility.splitConfigurationPerReplica( profileChaiConf, null );
7174

7275
for ( final ChaiConfiguration chaiConfiguration : chaiConfigurations )
@@ -120,6 +123,7 @@ private static LdapDebugDataGenerator.LdapDebugServerInfo makeLdapDebugServerInf
120123
final LdapDebugServerInfo.LdapDebugServerInfoBuilder builder = LdapDebugServerInfo.builder();
121124

122125
builder.ldapServerlUrl( chaiConfiguration.getSetting( ChaiSetting.BIND_URLS ) );
126+
builder.vendorName( chaiProvider.getDirectoryVendor().name() );
123127
final ChaiProvider loopProvider = chaiProvider.getProviderFactory().newProvider( chaiConfiguration );
124128

125129
{
@@ -188,6 +192,7 @@ public static class LdapDebugInfo
188192
public static class LdapDebugServerInfo
189193
{
190194
private String ldapServerlUrl;
195+
private String vendorName;
191196
private String testUserDN;
192197
private Map<String, List<String>> testUserAttributes;
193198
private String proxyDN;

server/src/main/java/password/pwm/ldap/auth/LDAPAuthenticationRequest.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,6 @@
6060
import password.pwm.util.logging.PwmLogger;
6161
import password.pwm.util.password.PasswordUtility;
6262
import password.pwm.util.password.RandomGeneratorConfig;
63-
import password.pwm.util.password.RandomPasswordGenerator;
6463

6564
import java.time.Instant;
6665
import java.util.Collections;
@@ -485,7 +484,7 @@ private Optional<PasswordData> setTempUserPassword(
485484
// create random password for user
486485
final RandomGeneratorConfig randomGeneratorConfig = RandomGeneratorConfig.make( pwmDomain, passwordPolicy );
487486

488-
final PasswordData currentPass = RandomPasswordGenerator.createRandomPassword( sessionLabel, randomGeneratorConfig, pwmDomain );
487+
final PasswordData currentPass = PasswordUtility.generateRandom( sessionLabel, randomGeneratorConfig, pwmDomain );
489488

490489
try
491490
{

0 commit comments

Comments
 (0)