improved settings dialogs
authoraxelcl <axelcl>
Fri, 10 Dec 2004 16:52:40 +0000 (16:52 +0000)
committeraxelcl <axelcl>
Fri, 10 Dec 2004 16:52:40 +0000 (16:52 +0000)
archive/net.sourceforge.phpeclipse.wiki/plugin.properties
archive/net.sourceforge.phpeclipse.wiki/src/net/sourceforge/phpeclipse/wiki/internal/Configuration.java
archive/net.sourceforge.phpeclipse.wiki/src/net/sourceforge/phpeclipse/wiki/ui/internal/ConfigurationDialog.java

index 24ee64b..e26cbb2 100644 (file)
@@ -26,3 +26,4 @@ configGroup=Configuration
 url=URL:
 password=Password:
 parseType=Type:
+scrambledPassword=Saved passwords are stored on your computer in a file that's difficult, but not impossible, for an intruder to read.
index 85fd155..a8cf2e2 100644 (file)
@@ -19,7 +19,7 @@ public class Configuration implements IConfiguration, Comparable {
   private static final String MEMENTO_ID = "id";
 
   private static final String MEMENTO_NAME = "name";
-  
+
   private static final String MEMENTO_USER = "user";
 
   private static final String MEMENTO_URL = "url";
@@ -40,6 +40,24 @@ public class Configuration implements IConfiguration, Comparable {
 
   protected String fType = "";
 
+  private static final char[] SCRAMBLING_TABLE=new char[] {
+       0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,
+       16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,
+       114,120,53,79,96,109,72,108,70,64,76,67,116,74,68,87,
+       111,52,75,119,49,34,82,81,95,65,112,86,118,110,122,105,
+       41,57,83,43,46,102,40,89,38,103,45,50,42,123,91,35,
+       125,55,54,66,124,126,59,47,92,71,115,78,88,107,106,56,
+       36,121,117,104,101,100,69,73,99,63,94,93,39,37,61,48,
+       58,113,32,90,44,98,60,51,33,97,62,77,84,80,85,223,
+       225,216,187,166,229,189,222,188,141,249,148,200,184,136,248,190,
+       199,170,181,204,138,232,218,183,255,234,220,247,213,203,226,193,
+       174,172,228,252,217,201,131,230,197,211,145,238,161,179,160,212,
+       207,221,254,173,202,146,224,151,140,196,205,130,135,133,143,246,
+       192,159,244,239,185,168,215,144,139,165,180,157,147,186,214,176,
+       227,231,219,169,175,156,206,198,129,164,150,210,154,177,134,127,
+       182,128,158,208,162,132,167,209,149,241,153,251,237,236,171,195,
+       243,233,253,240,194,250,191,155,142,137,245,235,163,242,178,152
+       };
   public Configuration() {
     this(WikiEditorPlugin.HTTP_QUERY); // default type
   }
@@ -51,7 +69,7 @@ public class Configuration implements IConfiguration, Comparable {
   public String getId() {
     return fId;
   }
-  
+
   public String getName() {
     return fName;
   }
@@ -115,7 +133,8 @@ public class Configuration implements IConfiguration, Comparable {
     memento.putString(MEMENTO_TYPE_ID, fType);
     memento.putString(MEMENTO_USER, fUser);
     memento.putString(MEMENTO_URL, fUrl);
-    memento.putString(MEMENTO_PASSWORD, fPassword);
+    String result = 'A'+scramblePassword(fPassword);
+    memento.putString(MEMENTO_PASSWORD, result);
   }
 
   protected void load(IMemento memento) {
@@ -139,12 +158,18 @@ public class Configuration implements IConfiguration, Comparable {
     if (fUrl == null) {
       fUrl = "";
     }
-    fPassword = memento.getString(MEMENTO_PASSWORD);
-    if (fPassword == null) {
+    String result = memento.getString(MEMENTO_PASSWORD);
+    
+    if (result == null) {
       fPassword = "";
+    } else {
+      fPassword = scramblePassword(result.substring(1));
     }
   }
-  /* (non-Javadoc)
+
+  /*
+   * (non-Javadoc)
+   * 
    * @see java.lang.Object#toString()
    */
   public String toString() {
@@ -158,14 +183,27 @@ public class Configuration implements IConfiguration, Comparable {
     buffer.append(fType);
     return buffer.toString();
   }
-  
-  /* (non-Javadoc)
+
+  /*
+   * (non-Javadoc)
+   * 
    * @see java.lang.Comparable#compareTo(java.lang.Object)
    */
   public int compareTo(Object o) {
     if (o instanceof IConfiguration) {
-      return fName.compareTo(((IConfiguration)o).getName());
+      return fName.compareTo(((IConfiguration) o).getName());
     }
     return 1;
   }
+
+  private static String scramblePassword(String password)  {
+    int length = password.length();
+    char[] out = new char[length];
+    for (int i = 0; i < length; i++) {
+      char value = password.charAt(i);
+      out[i] = SCRAMBLING_TABLE[value];
+    }
+    return new String(out);
+  }
+
 }
\ No newline at end of file
index 150e4fc..363c427 100644 (file)
@@ -4,7 +4,7 @@
  * are made available under the terms of the Common Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/cpl-v10.html
- *
+  *
  * Contributors:
  *    IBM - Initial API and implementation
  **********************************************************************/
@@ -31,256 +31,282 @@ import org.eclipse.swt.widgets.Group;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.swt.widgets.Text;
+
 /**
- * 
+ *  
  */
 public class ConfigurationDialog extends Dialog {
-       protected IConfigurationWorkingCopy fConfiguration;
-       protected boolean isEdit;
-       
-       private Button okButton;
-       private Text fUserName;
-       private Text fUrl;
-       private Text fPassword;
-       
-       interface StringModifyListener {
-               public void valueChanged(String s);
-       }
-       
-       interface BooleanModifyListener {
-               public void valueChanged(boolean b);
-       }
-       
-       interface TypeModifyListener {
-               public void valueChanged(String fType);
-       }
-
-       /**
-        * @param parentShell
-        */
-       public ConfigurationDialog(Shell parentShell, IConfigurationWorkingCopy configuration) {
-               super(parentShell);
-               this.fConfiguration = configuration;
-               isEdit = true;
-       }
-       
-       public ConfigurationDialog(Shell parentShell) {
-               super(parentShell);
-               fConfiguration = WikiEditorPlugin.createConfiguration();
-               isEdit = false;
-       }
-       
-       protected void configureShell(Shell shell) {
-               super.configureShell(shell);
-               if (isEdit)
-                       shell.setText(WikiEditorPlugin.getResource("%editConfig"));
-               else
-                       shell.setText(WikiEditorPlugin.getResource("%newConfig"));
-       }
-       
-       protected Label createLabel(Composite comp, String txt) {
-               Label label = new Label(comp, SWT.NONE);
-               label.setText(txt);
-               label.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING | GridData.VERTICAL_ALIGN_BEGINNING));
-               return label;
-       }
-       
-       protected Text createPassword(Composite comp, String txt, final StringModifyListener listener) {
-           final Text text = new Text(comp, SWT.BORDER | SWT.PASSWORD);
-               if (txt != null)
-                       text.setText(txt);
-               GridData data = new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_BEGINNING);
-               data.widthHint = 150;
-               text.setLayoutData(data);
-               if (listener != null)
-                       text.addModifyListener(new ModifyListener() {
-                               public void modifyText(ModifyEvent e) { 
-                                       listener.valueChanged(text.getText());
-                               }
-                       });
-               return text;
-       }
-       
-       protected Text createText(Composite comp, String txt, final StringModifyListener listener) {
-               final Text text = new Text(comp, SWT.BORDER);
-               if (txt != null)
-                       text.setText(txt);
-               GridData data = new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_BEGINNING);
-               data.widthHint = 150;
-               text.setLayoutData(data);
-               if (listener != null)
-                       text.addModifyListener(new ModifyListener() {
-                               public void modifyText(ModifyEvent e) { 
-                                       listener.valueChanged(text.getText());
-                               }
-                       });
-               return text;
-       }
-       
-       protected Combo createTypeCombo(Composite comp, final String[] types, String sel, final TypeModifyListener listener) {
-               final Combo combo = new Combo(comp, SWT.DROP_DOWN | SWT.READ_ONLY);
-               int size = types.length;
-               String[] items = new String[size];
-               int index = -1;
-               for (int i = 0; i < size; i++) {
-                       items[i] = types[i];
-                       if (types[i].equals(sel))
-                               index = i;
-               }
-               combo.setItems(items);
-               if (index >= 0)
-                       combo.select(index);
-               GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_BEGINNING);
-               data.widthHint = 150;
-               combo.setLayoutData(data);
-               if (listener != null)
-                       combo.addSelectionListener(new SelectionListener() {
-                               public void widgetSelected(SelectionEvent e) {  
-                                       listener.valueChanged(types[combo.getSelectionIndex()]);
-                               }
-                               public void widgetDefaultSelected(SelectionEvent e) {
-                                       widgetSelected(e);
-                               }
-                       });
-               return combo;
-       }
-
-       /* (non-Javadoc)
-        * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
-        */
-       protected Control createDialogArea(Composite parent) {
-               Composite composite = (Composite) super.createDialogArea(parent);
-               ((GridLayout)composite.getLayout()).numColumns = 2;
-               
-//             WorkbenchHelp.setHelp(composite, ContextIds.PREF_DIALOG);
-                               
-               createLabel(composite, WikiEditorPlugin.getResource("%name"));          
-               fUserName = createText(composite, fConfiguration.getName() + "", new StringModifyListener() {
-                       public void valueChanged(String name) {
-                       fConfiguration.setName(name);
-                               validateFields();
-                       }
-               });
-               
-               Group group = new Group(composite, SWT.NONE);
-               GridLayout layout = new GridLayout(2, false);
-               group.setLayout(layout);
-               GridData data = new GridData(GridData.FILL_HORIZONTAL);
-               data.horizontalSpan = 2;
-               
-               group.setLayoutData(data);
-               group.setText(WikiEditorPlugin.getResource("%configGroup"));
-               
-                
-               createLabel(group, WikiEditorPlugin.getResource("%user"));              
-               fUserName = createText(group, fConfiguration.getUser() + "", new StringModifyListener() {
-                       public void valueChanged(String s) {
-                       fConfiguration.setUser(s);
-                               validateFields();
-                       }
-               });
-               
-               createLabel(group, WikiEditorPlugin.getResource("%password"));          
-               fPassword = createPassword(group, fConfiguration.getPassword() + "", new StringModifyListener() {
-                       public void valueChanged(String s) {
-                               fConfiguration.setPassword(s);
-                               validateFields();
-                       }
-               });
-               
-               createLabel(group, WikiEditorPlugin.getResource("%url"));               
-               fUrl = createText(group, fConfiguration.getURL(), new StringModifyListener() {
-                       public void valueChanged(String s) {
-                               fConfiguration.setURL(s);
-                               validateFields();
-                       }
-               });
-               
-               
-               createLabel(group, WikiEditorPlugin.getResource("%parseType"));         
-               createTypeCombo(group, WikiEditorPlugin.getTypes(), fConfiguration.getType(), new TypeModifyListener() {
-                       public void valueChanged(String fType) {
-                               fConfiguration.setType(fType);
-                       }
-               });
-               
-               return composite;
-       }
-
-       /* (non-Javadoc)
-        * @see org.eclipse.jface.dialogs.Dialog#okPressed()
-        */
-       protected void okPressed() {
-               fConfiguration.save();
-               super.okPressed();
-       }
-
-       protected Control createButtonBar(Composite parent) {
-               Control buttonControl = super.createButtonBar(parent);
-               validateFields();
-               return buttonControl;
-       }
-
-       private void setOKButtonEnabled(boolean curIsEnabled) {
-               if (okButton == null)
-                       okButton = getButton(IDialogConstants.OK_ID);
-               
-               if (okButton != null)
-                       okButton.setEnabled(curIsEnabled);
-       }
-
-       protected void validateFields() {
-               boolean result = true;
-
-               String currHostname = fUrl.getText();
-//             if (!isValidHostname(currHostname))
-//                     result = false;
-               
-               String currHostnamePort = fPassword.getText();
-//             try {
-//                     Integer.parseInt(currHostnamePort);
-//             } catch (Exception any) {
-//                     result = false;
-//             }
-               
-               String currMonitorPort = fUserName.getText();
-//             try {
-//                     Integer.parseInt(currMonitorPort);
-//             } catch (Exception any) {
-//                     result = false;
-//             }
-               
-//             if (result && isLocalhost(currHostname)) {
-//                     if (currHostnamePort.equals(currMonitorPort))
-//                             result = false;
-//             }
-               setOKButtonEnabled(result);
-       }
-       
-//     protected static boolean isValidHostname(String host) {
-//             if (host == null || host.trim().length() < 1)
-//                     return false;
-//             if (host.indexOf("/") >= 0)
-//                     return false;
-//             if (host.indexOf("\\") >= 0)
-//                     return false;
-//             if (host.indexOf(" ") >= 0)
-//                     return false;
-//             return true;
-//     }
-       
-//     protected static boolean isLocalhost(String host) {
-//             if (host == null)
-//                     return false;
-//             try {
-//                     if ("localhost".equals(host) || "127.0.0.1".equals(host))
-//                             return true;
-//                     InetAddress localHostaddr = InetAddress.getLocalHost();
-//                     if (localHostaddr.getHostName().equals(host))
-//                             return true;
-//             } catch (Exception e) {
-//                     Trace.trace(Trace.WARNING, "Error checking for localhost", e);
-//             }
-//             return false;
-//     }
+  protected IConfigurationWorkingCopy fConfiguration;
+
+  protected boolean isEdit;
+
+  private Button okButton;
+
+  private Text fUserName;
+
+  private Text fUrl;
+
+  private Text fPassword;
+
+  interface StringModifyListener {
+    public void valueChanged(String s);
+  }
+
+  interface BooleanModifyListener {
+    public void valueChanged(boolean b);
+  }
+
+  interface TypeModifyListener {
+    public void valueChanged(String fType);
+  }
+
+  /**
+   * @param parentShell
+   */
+  public ConfigurationDialog(Shell parentShell, IConfigurationWorkingCopy configuration) {
+    super(parentShell);
+    this.fConfiguration = configuration;
+    isEdit = true;
+  }
+
+  public ConfigurationDialog(Shell parentShell) {
+    super(parentShell);
+    fConfiguration = WikiEditorPlugin.createConfiguration();
+    isEdit = false;
+  }
+
+  protected void configureShell(Shell shell) {
+    super.configureShell(shell);
+    if (isEdit)
+      shell.setText(WikiEditorPlugin.getResource("%editConfig"));
+    else
+      shell.setText(WikiEditorPlugin.getResource("%newConfig"));
+  }
+
+  protected Label createLabel(Composite comp, String txt) {
+    Label label = new Label(comp, SWT.NONE);
+    label.setText(txt);
+    label.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING | GridData.VERTICAL_ALIGN_BEGINNING));
+    return label;
+  }
+
+  protected Text createPassword(Composite comp, String txt, final StringModifyListener listener) {
+    final Text text = new Text(comp, SWT.BORDER | SWT.PASSWORD);
+    if (txt != null)
+      text.setText(txt);
+    GridData data = new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_BEGINNING);
+    data.widthHint = 150;
+    text.setLayoutData(data);
+    if (listener != null)
+      text.addModifyListener(new ModifyListener() {
+        public void modifyText(ModifyEvent e) {
+          listener.valueChanged(text.getText());
+        }
+      });
+    return text;
+  }
+
+  protected Text createText(Composite comp, String txt, final StringModifyListener listener) {
+    final Text text = new Text(comp, SWT.BORDER);
+    if (txt != null)
+      text.setText(txt);
+    GridData data = new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_BEGINNING);
+    data.widthHint = 150;
+    text.setLayoutData(data);
+    if (listener != null)
+      text.addModifyListener(new ModifyListener() {
+        public void modifyText(ModifyEvent e) {
+          listener.valueChanged(text.getText());
+        }
+      });
+    return text;
+  }
+
+  protected Combo createTypeCombo(Composite comp, final String[] types, String sel, final TypeModifyListener listener) {
+    final Combo combo = new Combo(comp, SWT.DROP_DOWN | SWT.READ_ONLY);
+    int size = types.length;
+    String[] items = new String[size];
+    int index = -1;
+    for (int i = 0; i < size; i++) {
+      items[i] = types[i];
+      if (types[i].equals(sel))
+        index = i;
+    }
+    combo.setItems(items);
+    if (index >= 0)
+      combo.select(index);
+    GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_BEGINNING);
+    data.widthHint = 150;
+    combo.setLayoutData(data);
+    if (listener != null)
+      combo.addSelectionListener(new SelectionListener() {
+        public void widgetSelected(SelectionEvent e) {
+          listener.valueChanged(types[combo.getSelectionIndex()]);
+        }
+
+        public void widgetDefaultSelected(SelectionEvent e) {
+          widgetSelected(e);
+        }
+      });
+    return combo;
+  }
+
+  /*
+   * (non-Javadoc)
+   * 
+   * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
+   */
+  protected Control createDialogArea(Composite parent) {
+    Composite composite = (Composite) super.createDialogArea(parent);
+    ((GridLayout) composite.getLayout()).numColumns = 2;
+
+    //         WorkbenchHelp.setHelp(composite, ContextIds.PREF_DIALOG);
+
+    createLabel(composite, WikiEditorPlugin.getResource("%name"));
+    fUserName = createText(composite, fConfiguration.getName() + "", new StringModifyListener() {
+      public void valueChanged(String name) {
+        fConfiguration.setName(name);
+        validateFields();
+      }
+    });
+
+    Group group = new Group(composite, SWT.NONE);
+    GridLayout layout = new GridLayout(2, false);
+    group.setLayout(layout);
+    GridData data = new GridData(GridData.FILL_HORIZONTAL);
+    data.horizontalSpan = 2;
+
+    group.setLayoutData(data);
+    group.setText(WikiEditorPlugin.getResource("%configGroup"));
+
+    createLabel(group, WikiEditorPlugin.getResource("%user"));
+    fUserName = createText(group, fConfiguration.getUser() + "", new StringModifyListener() {
+      public void valueChanged(String s) {
+        fConfiguration.setUser(s);
+        validateFields();
+      }
+    });
+
+    Composite warningComposite = new Composite(group, SWT.NONE);
+    layout = new GridLayout();
+    layout.numColumns = 2;
+    layout.marginHeight = 0;
+    layout.marginHeight = 0;
+    warningComposite.setLayout(layout);
+    data = new GridData(GridData.FILL_HORIZONTAL);
+    data.horizontalSpan = 3;
+    warningComposite.setLayoutData(data);
+    Label warningLabel = new Label(warningComposite, SWT.NONE);
+    warningLabel.setImage(getImage(DLG_IMG_MESSAGE_WARNING));
+    warningLabel.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_BEGINNING | GridData.HORIZONTAL_ALIGN_BEGINNING));
+    Label warningText = new Label(warningComposite, SWT.WRAP);
+    warningText.setText(WikiEditorPlugin.getResource("%scrambledPassword")); //$NON-NLS-1$
+    data = new GridData(GridData.FILL_HORIZONTAL);
+    data.widthHint = 300;
+    warningText.setLayoutData(data);
+
+    createLabel(group, WikiEditorPlugin.getResource("%password"));
+    fPassword = createPassword(group, fConfiguration.getPassword() + "", new StringModifyListener() {
+      public void valueChanged(String s) {
+        fConfiguration.setPassword(s);
+        validateFields();
+      }
+    });
+
+    createLabel(group, WikiEditorPlugin.getResource("%url"));
+    fUrl = createText(group, fConfiguration.getURL(), new StringModifyListener() {
+      public void valueChanged(String s) {
+        fConfiguration.setURL(s);
+        validateFields();
+      }
+    });
+
+    createLabel(group, WikiEditorPlugin.getResource("%parseType"));
+    createTypeCombo(group, WikiEditorPlugin.getTypes(), fConfiguration.getType(), new TypeModifyListener() {
+      public void valueChanged(String fType) {
+        fConfiguration.setType(fType);
+      }
+    });
+
+    return composite;
+  }
+
+  /*
+   * (non-Javadoc)
+   * 
+   * @see org.eclipse.jface.dialogs.Dialog#okPressed()
+   */
+  protected void okPressed() {
+    fConfiguration.save();
+    super.okPressed();
+  }
+
+  protected Control createButtonBar(Composite parent) {
+    Control buttonControl = super.createButtonBar(parent);
+    validateFields();
+    return buttonControl;
+  }
+
+  private void setOKButtonEnabled(boolean curIsEnabled) {
+    if (okButton == null)
+      okButton = getButton(IDialogConstants.OK_ID);
+
+    if (okButton != null)
+      okButton.setEnabled(curIsEnabled);
+  }
+
+  protected void validateFields() {
+    boolean result = true;
+
+    String currHostname = fUrl.getText();
+    //         if (!isValidHostname(currHostname))
+    //                 result = false;
+
+    String currHostnamePort = fPassword.getText();
+    //         try {
+    //                 Integer.parseInt(currHostnamePort);
+    //         } catch (Exception any) {
+    //                 result = false;
+    //         }
+
+    String currMonitorPort = fUserName.getText();
+    //         try {
+    //                 Integer.parseInt(currMonitorPort);
+    //         } catch (Exception any) {
+    //                 result = false;
+    //         }
+
+    //         if (result && isLocalhost(currHostname)) {
+    //                 if (currHostnamePort.equals(currMonitorPort))
+    //                         result = false;
+    //         }
+    setOKButtonEnabled(result);
+  }
+
+  //   protected static boolean isValidHostname(String host) {
+  //           if (host == null || host.trim().length() < 1)
+  //                   return false;
+  //           if (host.indexOf("/") >= 0)
+  //                   return false;
+  //           if (host.indexOf("\\") >= 0)
+  //                   return false;
+  //           if (host.indexOf(" ") >= 0)
+  //                   return false;
+  //           return true;
+  //   }
+
+  //   protected static boolean isLocalhost(String host) {
+  //           if (host == null)
+  //                   return false;
+  //           try {
+  //                   if ("localhost".equals(host) || "127.0.0.1".equals(host))
+  //                           return true;
+  //                   InetAddress localHostaddr = InetAddress.getLocalHost();
+  //                   if (localHostaddr.getHostName().equals(host))
+  //                           return true;
+  //           } catch (Exception e) {
+  //                   Trace.trace(Trace.WARNING, "Error checking for localhost", e);
+  //           }
+  //           return false;
+  //   }
 }
\ No newline at end of file