package org.eparapher.rcp.preferences; import org.eclipse.jface.preference.BooleanFieldEditor; import org.eclipse.jface.preference.FieldEditorPreferencePage; import org.eclipse.jface.preference.IntegerFieldEditor; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.util.PropertyChangeEvent; import org.eclipse.swt.SWT; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPreferencePage; import org.eparapher.core.crypto.tools.PasswordPolicyManager; import org.eparapher.rcp.Activator; public class SecretPolicyPreferencePage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage { public static final String ID = "org.eparapher.rcp.preferences.SecretPolicyPreferencePage"; BooleanFieldEditor forcePolicyUsage; BooleanFieldEditor force_secret_length; IntegerFieldEditor secret_length; BooleanFieldEditor forceupperchars; IntegerFieldEditor minupperchars; BooleanFieldEditor forcelowerchars; IntegerFieldEditor minlowerchars; BooleanFieldEditor forcenumberchars; IntegerFieldEditor minnumberchars; BooleanFieldEditor forcespecialchars; IntegerFieldEditor minspecialchars; public SecretPolicyPreferencePage() { super(GRID); setPreferenceStore(Activator.getDefault().getPreferenceStore()); setDescription("Secret Policy Configuration"); } public void init(IWorkbench workbench) { } @Override protected void createFieldEditors() { forcePolicyUsage = new BooleanFieldEditor(PreferenceConstants.P_SECRET_POL_CHECK,"&Force new user's secrets to check this policy.", SWT.NONE, getFieldEditorParent()); addField(forcePolicyUsage); force_secret_length = new BooleanFieldEditor(PreferenceConstants.P_SECRET_POL_FORCE_LENGTH,"&Secret must check a minimum char size.", SWT.NONE, getFieldEditorParent()); secret_length = new IntegerFieldEditor(PreferenceConstants.P_SECRET_POL_LENGTH_SIZE," Minimum character &length : ", getFieldEditorParent()); addField(force_secret_length); addField(secret_length); forceupperchars = new BooleanFieldEditor(PreferenceConstants.P_SECRET_POL_FORCE_UPPER,"&Secret must have upper character(s).", SWT.NONE, getFieldEditorParent()); minupperchars = new IntegerFieldEditor(PreferenceConstants.P_SECRET_POL_UPPER_MIN," Minimum &upper is : ", getFieldEditorParent()); addField(minupperchars); addField(forceupperchars); forcelowerchars = new BooleanFieldEditor(PreferenceConstants.P_SECRET_POL_FORCE_LOWER,"&Secret must have lower character(s).", SWT.NONE, getFieldEditorParent()); minlowerchars = new IntegerFieldEditor(PreferenceConstants.P_SECRET_POL_LOWER_MIN," Minimum &lower is : ", getFieldEditorParent()); addField(minlowerchars); addField(forcelowerchars); forcenumberchars = new BooleanFieldEditor(PreferenceConstants.P_SECRET_POL_FORCE_NUMB,"&Secret must have number character(s).", SWT.NONE, getFieldEditorParent()); minnumberchars = new IntegerFieldEditor(PreferenceConstants.P_SECRET_POL_NUMB_MIN," Minimum &number character is : ", getFieldEditorParent()); addField(minnumberchars); addField(forcenumberchars); forcespecialchars = new BooleanFieldEditor(PreferenceConstants.P_SECRET_POL_FORCE_SPEC,"&Secret must have special character(s).", SWT.NONE, getFieldEditorParent()); minspecialchars = new IntegerFieldEditor(PreferenceConstants.P_SECRET_POL_SPEC_MIN," Minimum &special is : ", getFieldEditorParent()); addField(minspecialchars); addField(forcespecialchars); } public SecretPolicyPreferencePage(int style) { super(style); } public SecretPolicyPreferencePage(String title, int style) { super(title, style); } public SecretPolicyPreferencePage(String title, ImageDescriptor image, int style) { super(title, image, style); } public void propertyChange(PropertyChangeEvent event) { super.propertyChange(event); String selectedvalue = (String) event.getNewValue().toString(); String oldselectedvalue = (String) event.getOldValue().toString(); if (!selectedvalue.equals(oldselectedvalue)) { if (event.getSource() instanceof BooleanFieldEditor) { BooleanFieldEditor changedbfe = (BooleanFieldEditor) event.getSource(); String prefname = changedbfe.getPreferenceName(); boolean state = Boolean.parseBoolean(selectedvalue); if (prefname.equals(PreferenceConstants.P_SECRET_POL_FORCE_UPPER)) minupperchars.setEnabled(state, getFieldEditorParent()); if (prefname.equals(PreferenceConstants.P_SECRET_POL_FORCE_LOWER)) minlowerchars.setEnabled(state, getFieldEditorParent()); if (prefname.equals(PreferenceConstants.P_SECRET_POL_FORCE_NUMB)) minnumberchars.setEnabled(state, getFieldEditorParent()); if (prefname.equals(PreferenceConstants.P_SECRET_POL_FORCE_SPEC)) minspecialchars.setEnabled(state, getFieldEditorParent()); if (prefname.equals(PreferenceConstants.P_SECRET_POL_FORCE_LENGTH)) secret_length.setEnabled(state, getFieldEditorParent()); } if (event.getSource() instanceof IntegerFieldEditor) { IntegerFieldEditor changedbfe = (IntegerFieldEditor) event.getSource(); String prefname = changedbfe.getPreferenceName(); if (prefname.equals(PreferenceConstants.P_SECRET_POL_LENGTH_SIZE)) { int sel = Integer.parseInt(selectedvalue); minupperchars.setValidRange(1, sel); minlowerchars.setValidRange(1, sel); minnumberchars.setValidRange(1, sel); minspecialchars.setValidRange(1, sel); } } } } public boolean performOk() { //TODO : Validate user entries //First, save properties boolean save = super.performOk(); //Then recompile regexp PasswordPolicyManager.getIstance().compileregexp(); return save; } }