Przeglądaj źródła

fix issue with random pwd generation in config editor pw dialogs

Jason Rivard 7 lat temu
rodzic
commit
38607ce68b

+ 19 - 0
server/src/main/java/password/pwm/http/servlet/configeditor/ConfigEditorServlet.java

@@ -36,6 +36,7 @@ import password.pwm.config.PwmSettingTemplate;
 import password.pwm.config.PwmSettingTemplateSet;
 import password.pwm.config.PwmSettingTemplateSet;
 import password.pwm.config.SettingUIFunction;
 import password.pwm.config.SettingUIFunction;
 import password.pwm.config.StoredValue;
 import password.pwm.config.StoredValue;
+import password.pwm.config.profile.PwmPasswordPolicy;
 import password.pwm.config.stored.ConfigurationProperty;
 import password.pwm.config.stored.ConfigurationProperty;
 import password.pwm.config.stored.StoredConfigurationImpl;
 import password.pwm.config.stored.StoredConfigurationImpl;
 import password.pwm.config.stored.ValueMetaData;
 import password.pwm.config.stored.ValueMetaData;
@@ -71,6 +72,7 @@ import password.pwm.i18n.Message;
 import password.pwm.i18n.PwmLocaleBundle;
 import password.pwm.i18n.PwmLocaleBundle;
 import password.pwm.ldap.LdapBrowser;
 import password.pwm.ldap.LdapBrowser;
 import password.pwm.util.PasswordData;
 import password.pwm.util.PasswordData;
+import password.pwm.util.RandomPasswordGenerator;
 import password.pwm.util.java.JsonUtil;
 import password.pwm.util.java.JsonUtil;
 import password.pwm.util.java.StringUtil;
 import password.pwm.util.java.StringUtil;
 import password.pwm.util.java.TimeDuration;
 import password.pwm.util.java.TimeDuration;
@@ -79,6 +81,7 @@ import password.pwm.util.macro.MacroMachine;
 import password.pwm.util.queue.SmsQueueManager;
 import password.pwm.util.queue.SmsQueueManager;
 import password.pwm.util.secure.HttpsServerCertificateManager;
 import password.pwm.util.secure.HttpsServerCertificateManager;
 import password.pwm.ws.server.RestResultBean;
 import password.pwm.ws.server.RestResultBean;
+import password.pwm.ws.server.rest.RestRandomPasswordServer;
 import password.pwm.ws.server.rest.bean.HealthData;
 import password.pwm.ws.server.rest.bean.HealthData;
 
 
 import javax.servlet.ServletException;
 import javax.servlet.ServletException;
@@ -137,6 +140,7 @@ public class ConfigEditorServlet extends ControlledPwmServlet {
         testMacro(HttpMethod.POST),
         testMacro(HttpMethod.POST),
         browseLdap(HttpMethod.POST),
         browseLdap(HttpMethod.POST),
         copyProfile(HttpMethod.POST),
         copyProfile(HttpMethod.POST),
+        randomPassword(HttpMethod.POST),
 
 
         ;
         ;
 
 
@@ -932,4 +936,19 @@ public class ConfigEditorServlet extends ControlledPwmServlet {
         }
         }
         return ProcessStatus.Halt;
         return ProcessStatus.Halt;
     }
     }
+
+    @ActionHandler( action = "randomPassword")
+    private ProcessStatus restRandomPassword(final PwmRequest pwmRequest)
+            throws IOException, PwmUnrecoverableException
+    {
+        final RestRandomPasswordServer.JsonInput jsonInput = JsonUtil.deserialize( pwmRequest.readRequestBodyAsString(), RestRandomPasswordServer.JsonInput.class );
+        final RandomPasswordGenerator.RandomGeneratorConfig randomConfig = RestRandomPasswordServer.jsonInputToRandomConfig( jsonInput, PwmPasswordPolicy.defaultPolicy() );
+        final PasswordData randomPassword = RandomPasswordGenerator.createRandomPassword(pwmRequest.getSessionLabel(), randomConfig, pwmRequest.getPwmApplication());
+        final RestRandomPasswordServer.JsonOutput outputMap = new RestRandomPasswordServer.JsonOutput();
+        outputMap.setPassword( randomPassword.getStringValue() );
+
+        pwmRequest.outputJsonResult( RestResultBean.withData( outputMap ) );
+
+        return ProcessStatus.Halt;
+    }
 }
 }

+ 3 - 3
server/src/main/java/password/pwm/util/RandomPasswordGenerator.java

@@ -591,11 +591,11 @@ public class RandomPasswordGenerator {
         }
         }
 
 
         public int getMinimumStrength() {
         public int getMinimumStrength() {
-            int policyMin = this.minimumLength;
+            int policyMin = this.minimumStrength;
             if (this.getPasswordPolicy() != null) {
             if (this.getPasswordPolicy() != null) {
-                policyMin = this.getPasswordPolicy().getRuleHelper().readIntValue(PwmPasswordRule.MinimumLength);
+                policyMin = this.getPasswordPolicy().getRuleHelper().readIntValue(PwmPasswordRule.MinimumStrength);
             }
             }
-            return Math.max(this.minimumLength, policyMin);
+            return Math.max(this.minimumStrength, policyMin);
         }
         }
 
 
         void validateSettings(final PwmApplication pwmApplication)
         void validateSettings(final PwmApplication pwmApplication)

+ 37 - 25
server/src/main/java/password/pwm/ws/server/rest/RestRandomPasswordServer.java

@@ -22,7 +22,6 @@
 
 
 package password.pwm.ws.server.rest;
 package password.pwm.ws.server.rest;
 
 
-import com.novell.ldapchai.exception.ChaiUnavailableException;
 import lombok.Data;
 import lombok.Data;
 import password.pwm.PwmConstants;
 import password.pwm.PwmConstants;
 import password.pwm.config.option.WebServiceUsage;
 import password.pwm.config.option.WebServiceUsage;
@@ -40,9 +39,9 @@ import password.pwm.util.PasswordData;
 import password.pwm.util.RandomPasswordGenerator;
 import password.pwm.util.RandomPasswordGenerator;
 import password.pwm.util.logging.PwmLogger;
 import password.pwm.util.logging.PwmLogger;
 import password.pwm.util.operations.PasswordUtility;
 import password.pwm.util.operations.PasswordUtility;
-import password.pwm.ws.server.RestResultBean;
 import password.pwm.ws.server.RestMethodHandler;
 import password.pwm.ws.server.RestMethodHandler;
 import password.pwm.ws.server.RestRequest;
 import password.pwm.ws.server.RestRequest;
+import password.pwm.ws.server.RestResultBean;
 import password.pwm.ws.server.RestServlet;
 import password.pwm.ws.server.RestServlet;
 import password.pwm.ws.server.RestWebServer;
 import password.pwm.ws.server.RestWebServer;
 
 
@@ -76,6 +75,7 @@ public class RestRandomPasswordServer extends RestServlet {
         private int maxLength;
         private int maxLength;
         private String chars;
         private String chars;
         private boolean noUser;
         private boolean noUser;
+
     }
     }
 
 
     @Override
     @Override
@@ -156,42 +156,24 @@ public class RestRandomPasswordServer extends RestServlet {
             final RestRequest restRequest,
             final RestRequest restRequest,
             final JsonInput jsonInput
             final JsonInput jsonInput
     )
     )
-            throws ChaiUnavailableException, PwmUnrecoverableException
+            throws PwmUnrecoverableException
     {
     {
-        final RandomPasswordGenerator.RandomGeneratorConfig.RandomGeneratorConfigBuilder randomConfigBuilder
-                = RandomPasswordGenerator.RandomGeneratorConfig.builder();
-        if (jsonInput.strength > 0 && jsonInput.strength <= 100) {
-            randomConfigBuilder.minimumStrength(jsonInput.strength);
-        }
-        if (jsonInput.minLength > 0 && jsonInput.minLength <= 100 * 1024) {
-            randomConfigBuilder.minimumLength(jsonInput.minLength);
-        }
-        if (jsonInput.maxLength > 0 && jsonInput.maxLength <= 100 * 1024) {
-            randomConfigBuilder.maximumLength(jsonInput.maxLength);
-        }
-        if (jsonInput.chars != null) {
-            final List<String> charValues = new ArrayList<>();
-            for (int i = 0; i < jsonInput.chars.length(); i++) {
-                charValues.add(String.valueOf(jsonInput.chars.charAt(i)));
-            }
-            randomConfigBuilder.seedlistPhrases(charValues);
-        }
+        final PwmPasswordPolicy pwmPasswordPolicy;
 
 
         if (jsonInput.isNoUser()) {
         if (jsonInput.isNoUser()) {
-            randomConfigBuilder.passwordPolicy(PwmPasswordPolicy.defaultPolicy());
+            pwmPasswordPolicy = PwmPasswordPolicy.defaultPolicy();
         } else {
         } else {
             final TargetUserIdentity targetUserIdentity = resolveRequestedUsername(restRequest, jsonInput.getUsername());
             final TargetUserIdentity targetUserIdentity = resolveRequestedUsername(restRequest, jsonInput.getUsername());
-            final PwmPasswordPolicy pwmPasswordPolicy = PasswordUtility.readPasswordPolicyForUser(
+            pwmPasswordPolicy = PasswordUtility.readPasswordPolicyForUser(
                     restRequest.getPwmApplication(),
                     restRequest.getPwmApplication(),
                     restRequest.getSessionLabel(),
                     restRequest.getSessionLabel(),
                     targetUserIdentity.getUserIdentity(),
                     targetUserIdentity.getUserIdentity(),
                     targetUserIdentity.getChaiUser(),
                     targetUserIdentity.getChaiUser(),
                     restRequest.getLocale()
                     restRequest.getLocale()
             );
             );
-            randomConfigBuilder.passwordPolicy(pwmPasswordPolicy);
         }
         }
 
 
-        final RandomPasswordGenerator.RandomGeneratorConfig randomConfig = randomConfigBuilder.build();
+        final RandomPasswordGenerator.RandomGeneratorConfig randomConfig = jsonInputToRandomConfig( jsonInput, pwmPasswordPolicy );
         final PasswordData randomPassword = RandomPasswordGenerator.createRandomPassword(restRequest.getSessionLabel(), randomConfig, restRequest.getPwmApplication());
         final PasswordData randomPassword = RandomPasswordGenerator.createRandomPassword(restRequest.getSessionLabel(), randomConfig, restRequest.getPwmApplication());
         final JsonOutput outputMap = new JsonOutput();
         final JsonOutput outputMap = new JsonOutput();
         outputMap.password = randomPassword.getStringValue();
         outputMap.password = randomPassword.getStringValue();
@@ -200,5 +182,35 @@ public class RestRandomPasswordServer extends RestServlet {
 
 
         return outputMap;
         return outputMap;
     }
     }
+
+    public static RandomPasswordGenerator.RandomGeneratorConfig jsonInputToRandomConfig(
+            final JsonInput jsonInput,
+            final PwmPasswordPolicy pwmPasswordPolicy
+    )
+    {
+        final RandomPasswordGenerator.RandomGeneratorConfig.RandomGeneratorConfigBuilder randomConfigBuilder
+                = RandomPasswordGenerator.RandomGeneratorConfig.builder();
+
+        if (jsonInput.getStrength() > 0 && jsonInput.getStrength() <= 100) {
+            randomConfigBuilder.minimumStrength(jsonInput.getStrength());
+        }
+        if (jsonInput.getMinLength() > 0 && jsonInput.getMinLength() <= 100 * 1024) {
+            randomConfigBuilder.minimumLength(jsonInput.getMinLength());
+        }
+        if (jsonInput.getMaxLength() > 0 && jsonInput.getMaxLength() <= 100 * 1024) {
+            randomConfigBuilder.maximumLength(jsonInput.getMaxLength());
+        }
+        if (jsonInput.getChars() != null) {
+            final List<String> charValues = new ArrayList<>();
+            for (int i = 0; i < jsonInput.getChars().length(); i++) {
+                charValues.add(String.valueOf(jsonInput.getChars().charAt(i)));
+            }
+            randomConfigBuilder.seedlistPhrases(charValues);
+        }
+
+        randomConfigBuilder.passwordPolicy( pwmPasswordPolicy );
+
+        return randomConfigBuilder.build();
+    }
 }
 }
 
 

+ 1 - 1
server/src/main/webapp/public/resources/js/configeditor-settings.js

@@ -1275,7 +1275,7 @@ ChangePasswordHandler.generateRandom = function(settingKey) {
     postData.noUser = true;
     postData.noUser = true;
     PWM_MAIN.getObject('button-storePassword').disabled = true;
     PWM_MAIN.getObject('button-storePassword').disabled = true;
 
 
-    var url = PWM_GLOBAL['url-restservice'] + "/randompassword";
+    var url = PWM_MAIN.addParamToUrl(window.location.href,'processAction','randomPassword');
     var loadFunction = function(data) {
     var loadFunction = function(data) {
         ChangePasswordHandler.changePasswordPopup(settingKey);
         ChangePasswordHandler.changePasswordPopup(settingKey);
         PWM_MAIN.getObject('password1').value = data['data']['password'];
         PWM_MAIN.getObject('password1').value = data['data']['password'];