Upload/Download of multiple files now possible
[phpeclipse.git] / archive / net.sourceforge.phpeclipse.wiki / src / net / sourceforge / phpeclipse / wiki / internal / Configuration.java
index 85fd155..c961a81 100644 (file)
@@ -4,13 +4,17 @@
  * 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
  **********************************************************************/
 package net.sourceforge.phpeclipse.wiki.internal;
 
 import net.sourceforge.phpeclipse.wiki.editor.WikiEditorPlugin;
+import net.sourceforge.phpeclipse.wiki.preferences.UserValidationDialog;
+import net.sourceforge.phpeclipse.wiki.preferences.Util;
+
+import org.eclipse.swt.widgets.Shell;
 
 /**
  *  
@@ -19,7 +23,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 +44,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 +73,7 @@ public class Configuration implements IConfiguration, Comparable {
   public String getId() {
     return fId;
   }
-  
+
   public String getName() {
     return fName;
   }
@@ -115,7 +137,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 +162,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 +187,76 @@ 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);
+  }
+
+  public boolean isUserComplete() {
+    if (fUser==null || fUser.equals("")) {
+      return false;
+    }
+    if (fPassword==null || fPassword.equals("")) {
+      return false;
+    }
+    return true;
+  }
+  /**
+   * Asks the user to enter a password. Places the results in the supplied string[]. 
+   * result[0] must contain the username, 
+   * result[1] must contain the fPassword. 
+   * If the user canceled, both values must be zero.
+   * 
+   * @param location
+   *          the location to obtain the fPassword for
+   * @param username
+   *          the username
+   * @param message
+   *          a message to display to the fUser
+   * @param userMutable
+   *          whether the fUser can be changed in the dialog
+   * @param result
+   *          a String array of length two in which to put the result
+   */
+  public boolean promptForPassword(final String username, final String message, final boolean userMutable, final String[] result) {
+    if (isUserComplete()) {
+      result[0] = fUser; 
+      result[1] = fPassword;
+      return true;
+    }
+    result[0] = null;
+    result[1] = null;
+    Shell shell = Util.findShell();
+    if (shell == null) {
+      return false;
+    }
+    UserValidationDialog dialog = new UserValidationDialog(shell, fUrl, (username == null) ? "" : username, message);//$NON-NLS-1$
+    dialog.setUsernameMutable(userMutable);
+    dialog.open(); 
+    result[0] = dialog.getUsername();
+    result[1] = dialog.getPassword();
+    if (dialog.getAllowCaching()) {
+      fUser = result[0];
+      fPassword = result[1];
+    }
+    return dialog.getAllowCaching();
+  }
 }
\ No newline at end of file