public PasswordPolicyConfig(PasswordPolicyConfig other) { super(other); uppercaseRequired = other.isUppercaseRequired(); lowercaseRequired = other.isLowercaseRequired(); digitRequired = other.isDigitRequired(); minLength = other.getMinLength(); maxLength = other.getMaxLength(); }
/** Saves/persists a password policy configuration. */ public void savePasswordPolicy(PasswordPolicyConfig config) throws IOException, SecurityConfigException { SecurityConfigValidator validator = SecurityConfigValidator.getConfigurationValiator( PasswordValidator.class, config.getClassName()); if (config.getId() == null) { config.initBeforeSave(); validator.validateAddPasswordPolicy(config); } else { validator.validateModifiedPasswordPolicy( config, passwordValidatorHelper.loadConfig(config.getName())); } passwordValidatorHelper.saveConfig(config); }
public void validate(PasswordPolicyConfig config) throws SecurityConfigException { if (config.getMinLength() < 0) throw createSecurityException(INVALID_MIN_LENGTH); if (config.getMaxLength() != -1) { if (config.getMinLength() > config.getMaxLength()) throw createSecurityException(INVALID_MAX_LENGTH); } }
/** * Removes a password validator configuration. * * @param config The password validator configuration. */ public void removePasswordValidator(PasswordPolicyConfig config) throws IOException, SecurityConfigException { SecurityConfigValidator validator = SecurityConfigValidator.getConfigurationValiator( PasswordValidator.class, config.getClassName()); validator.validateRemovePasswordPolicy(config); passwordValidators.remove(config.getName()); passwordValidatorHelper.removeConfig(config.getName()); }
PasswordPolicyConfig pwpconfig = new PasswordPolicyConfig(); pwpconfig.setName(PasswordValidator.DEFAULT_NAME); pwpconfig.setClassName(PasswordValidatorImpl.class.getName()); pwpconfig.setMinLength(0); savePasswordPolicy(pwpconfig); validator = loadPasswordValidator(PasswordValidator.DEFAULT_NAME); if (validator == null) { PasswordPolicyConfig pwpconfig = new PasswordPolicyConfig(); pwpconfig.setName(PasswordValidator.MASTERPASSWORD_NAME); pwpconfig.setClassName(PasswordValidatorImpl.class.getName()); pwpconfig.setMinLength(8); savePasswordPolicy(pwpconfig); validator = loadPasswordValidator(PasswordValidator.MASTERPASSWORD_NAME);
public PasswordPolicyPanel(String id, IModel<PasswordPolicyConfig> model) { super(id, model); PasswordPolicyConfig pwPolicy = model.getObject(); //add(new TextField("name").setRequired(true)); add(new CheckBox("digitRequired")); add(new CheckBox("uppercaseRequired")); add(new CheckBox("lowercaseRequired")); add(new TextField<Integer>("minLength")); boolean unlimited = pwPolicy.getMaxLength() == -1; add(new AjaxCheckBox("unlimitedMaxLength", new Model(unlimited)) { @Override protected void onUpdate(AjaxRequestTarget target) { Boolean value = getModelObject(); maxLengthPanel.setVisible(!value); if (value) { maxLengthPanel.setUnlimited(); } target.addComponent(maxLengthPanel.getParent()); } }); add(maxLengthPanel = (MaxLengthPanel) new MaxLengthPanel("maxLength").setVisible(!unlimited)); }
public void validateRemovePasswordPolicy(PasswordPolicyConfig config) throws SecurityConfigException { validateRemoveNamedService(PasswordValidator.class, config); if (PasswordValidator.MASTERPASSWORD_NAME.equals(config.getName())) throw createSecurityException(PASSWD_POLICY_MASTER_DELETE); try { for (String name : manager.listUserGroupServices()) { SecurityUserGroupServiceConfig ugConfig = manager.loadUserGroupServiceConfig(name); if (ugConfig.getPasswordPolicyName().equals(config.getName())) throw createSecurityException( PASSWD_POLICY_ACTIVE_$2, config.getName(), ugConfig.getName()); } } catch (IOException ex) { throw new RuntimeException(ex); } }
/** Loads the password policy for the named config from persistence. */ public PasswordValidator load(String name) throws IOException { PasswordPolicyConfig config = loadConfig(name); if (config == null) { // no such config return null; } // look up the validator for this config PasswordValidator validator = null; for (GeoServerSecurityProvider p : lookupSecurityProviders()) { if (p.getPasswordValidatorClass() == null) { continue; } if (p.getPasswordValidatorClass().getName().equals(config.getClassName())) { validator = p.createPasswordValidator(config, GeoServerSecurityManager.this); break; } } if (validator == null) { throw new IOException("No password policy matching config: " + config); } validator.setConfig(config); return validator; }
@Test public void testPasswords() throws PasswordPolicyException { checkForException(null, IS_NULL); validator.validatePassword("".toCharArray()); validator.validatePassword("a".toCharArray()); checkForException("plain:a", RESERVED_PREFIX_$1, "plain:"); checkForException("crypt1:a", RESERVED_PREFIX_$1, "crypt1:"); checkForException("digest1:a", RESERVED_PREFIX_$1, "digest1:"); validator.validatePassword("plain".toCharArray()); validator.validatePassword("plaina".toCharArray()); config.setMinLength(2); checkForException("a", MIN_LENGTH_$1, 2); validator.validatePassword("aa".toCharArray()); config.setMaxLength(10); checkForException("01234567890", MAX_LENGTH_$1, 10); validator.validatePassword("0123456789".toCharArray()); config.setDigitRequired(true); checkForException("abcdef", NO_DIGIT); validator.validatePassword("abcde4".toCharArray()); config.setUppercaseRequired(true); checkForException("abcdef4", NO_UPPERCASE); validator.validatePassword("abcde4F".toCharArray()); config.setLowercaseRequired(true); checkForException("ABCDE4F", NO_LOWERCASE); validator.validatePassword("abcde4F".toCharArray()); }
config.setName("default2"); validator.validateAddPasswordPolicy(config); fail("invalid min length should fail"); config.setMinLength(1); config.setMaxLength(0); config.setMaxLength(-1); config.setName(""); validator.validateRemovePasswordPolicy(config); fail("no name should fail"); config.setName(PasswordValidator.DEFAULT_NAME); validator.validateRemovePasswordPolicy(config); fail("remove active should fail"); config.setName(PasswordValidator.MASTERPASSWORD_NAME); validator.validateRemovePasswordPolicy(config); fail("remove master should fail");
@Before public void init() throws Exception { config = new PasswordPolicyConfig(); validator = new PasswordValidatorImpl(getSecurityManager()); validator.setConfig(config); }
protected PasswordPolicyConfig createPolicyConfig( String name, Class<?> aClass, int min, int max) { PasswordPolicyConfig config = new PasswordPolicyConfig(); config.setName(name); config.setClassName(aClass.getName()); config.setMinLength(min); config.setMaxLength(max); return config; }
expect(masterPasswdPolicyConfig.getMinLength()).andReturn(8).anyTimes(); expect(masterPasswdPolicyConfig.getMaxLength()).andReturn(-1).anyTimes();
public PasswordPolicyPanel(String id, IModel<PasswordPolicyConfig> model) { super(id, model); PasswordPolicyConfig pwPolicy = model.getObject(); //add(new TextField("name").setRequired(true)); add(new CheckBox("digitRequired")); add(new CheckBox("uppercaseRequired")); add(new CheckBox("lowercaseRequired")); add(new TextField<Integer>("minLength")); boolean unlimited = pwPolicy.getMaxLength() == -1; add(new AjaxCheckBox("unlimitedMaxLength", new Model(unlimited)) { @Override protected void onUpdate(AjaxRequestTarget target) { Boolean value = getModelObject(); maxLengthPanel.setVisible(!value); if (value) { maxLengthPanel.setUnlimited(); } target.addComponent(maxLengthPanel.getParent()); } }); add(maxLengthPanel = (MaxLengthPanel) new MaxLengthPanel("maxLength").setVisible(!unlimited)); }
@Override public void doLoad(PasswordPolicyConfig config) throws Exception { getSecurityManager().loadPasswordPolicyConfig(config.getName()); }
@Override public void validateRemoveConfig(PasswordPolicyConfig config) throws SecurityConfigException { SecurityConfigValidator.getConfigurationValiator(PasswordValidator.class, config.getClassName()) .validateRemovePasswordPolicy(config); }
@Override public void validatePassword(char[] password) throws PasswordPolicyException { // if (password==null) // throw createSecurityException(PW_IS_NULL); if (password == null) { // treat as "empty" password = new char[] {}; } if (password.length < config.getMinLength()) throw createSecurityException(MIN_LENGTH_$1, config.getMinLength()); if (config.getMaxLength() >= 0 && password.length > config.getMaxLength()) throw createSecurityException(MAX_LENGTH_$1, config.getMaxLength()); if (config.isDigitRequired()) { if (checkUsingMethod("isDigit", password) == false) throw createSecurityException(NO_DIGIT); } if (config.isUppercaseRequired()) { if (checkUsingMethod("isUpperCase", password) == false) throw createSecurityException(NO_UPPERCASE); } if (config.isLowercaseRequired()) { if (checkUsingMethod("isLowerCase", password) == false) throw createSecurityException(NO_LOWERCASE); } String prefix = passwordStartsWithEncoderPrefix(password); if (prefix != null) throw createSecurityException(RESERVED_PREFIX_$1, prefix); }
public PasswordPolicyPanel(String id, IModel<PasswordPolicyConfig> model) { super(id, model); PasswordPolicyConfig pwPolicy = model.getObject(); // add(new TextField("name").setRequired(true)); add(new CheckBox("digitRequired")); add(new CheckBox("uppercaseRequired")); add(new CheckBox("lowercaseRequired")); add(new TextField<Integer>("minLength")); boolean unlimited = pwPolicy.getMaxLength() == -1; add( new AjaxCheckBox("unlimitedMaxLength", new Model(unlimited)) { @Override protected void onUpdate(AjaxRequestTarget target) { Boolean value = getModelObject(); maxLengthPanel.setVisible(!value); if (value) { maxLengthPanel.setUnlimited(); } target.add(maxLengthPanel.getParent()); } }); add( maxLengthPanel = (MaxLengthPanel) new MaxLengthPanel("maxLength").setVisible(!unlimited)); }
@Override public void doLoad(PasswordPolicyConfig config) throws Exception { getSecurityManager().loadPasswordPolicyConfig(config.getName()); }
@Override public void validateRemoveConfig(PasswordPolicyConfig config) throws SecurityConfigException { SecurityConfigValidator.getConfigurationValiator(PasswordValidator.class, config.getClassName()) .validateRemovePasswordPolicy(config); }