Author: kwright
Date: Fri Jun  7 12:55:04 2013
New Revision: 1490621

URL: http://svn.apache.org/r1490621
Log:
Fix for CONNECTORS-701.

Added:
    
manifoldcf/trunk/connectors/dropbox/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/dropbox/editSpecification_Security.html
   (with props)
Modified:
    manifoldcf/trunk/CHANGES.txt
    
manifoldcf/trunk/connectors/dropbox/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/dropbox/DropboxRepositoryConnector.java
    
manifoldcf/trunk/connectors/dropbox/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/dropbox/DropboxSession.java
    
manifoldcf/trunk/connectors/dropbox/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/connectors/dropbox/common_en_US.properties
    
manifoldcf/trunk/connectors/dropbox/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/dropbox/editConfiguration_Server.html
    
manifoldcf/trunk/connectors/dropbox/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/dropbox/editSpecification.js
    
manifoldcf/trunk/connectors/dropbox/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/dropbox/editSpecification_DropboxPath.html
    
manifoldcf/trunk/connectors/dropbox/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/dropbox/viewConfiguration.html
    
manifoldcf/trunk/connectors/dropbox/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/dropbox/viewSpecification.html

Modified: manifoldcf/trunk/CHANGES.txt
URL: 
http://svn.apache.org/viewvc/manifoldcf/trunk/CHANGES.txt?rev=1490621&r1=1490620&r2=1490621&view=diff
==============================================================================
--- manifoldcf/trunk/CHANGES.txt (original)
+++ manifoldcf/trunk/CHANGES.txt Fri Jun  7 12:55:04 2013
@@ -3,6 +3,11 @@ $Id$
 
 ======================= 1.3-dev =====================
 
+CONNECTORS-701: Add forced ACLs to DropBox connector.  Fixed a
+few UI-related other problems as well.
+WARNING: This is a non-backwards-compatible change!!
+(Karl Wright)
+
 CONNECTORS-702: Add forced ACLs to GoogleDrive connector.  Also
 fixed a number of UI-related issues.
 (Karl Wright)

Modified: 
manifoldcf/trunk/connectors/dropbox/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/dropbox/DropboxRepositoryConnector.java
URL: 
http://svn.apache.org/viewvc/manifoldcf/trunk/connectors/dropbox/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/dropbox/DropboxRepositoryConnector.java?rev=1490621&r1=1490620&r2=1490621&view=diff
==============================================================================
--- 
manifoldcf/trunk/connectors/dropbox/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/dropbox/DropboxRepositoryConnector.java
 (original)
+++ 
manifoldcf/trunk/connectors/dropbox/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/dropbox/DropboxRepositoryConnector.java
 Fri Jun  7 12:55:04 2013
@@ -28,9 +28,12 @@ import java.io.InputStream;
 import java.io.InterruptedIOException;
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
+import java.util.Set;
+import java.util.Iterator;
 import org.apache.manifoldcf.crawler.system.Logging;
 import org.apache.manifoldcf.crawler.connectors.BaseRepositoryConnector;
 import org.apache.manifoldcf.agents.interfaces.ServiceInterruption;
@@ -57,10 +60,23 @@ public class DropboxRepositoryConnector 
   protected final static String ACTIVITY_READ = "read document";
   public final static String ACTIVITY_FETCH = "fetch";
   protected static final String RELATIONSHIP_CHILD = "child";
+  
+  /** Deny access token for default authority */
+  private final static String defaultAuthorityDenyToken = "DEAD_AUTHORITY";
+
+  // Nodes and attributes
   private static final String JOB_STARTPOINT_NODE_TYPE = "startpoint";
+  private static final String JOB_PATH_ATTRIBUTE = "path";
+  private static final String JOB_ACCESS_NODE_TYPE = "access";
+  private static final String JOB_TOKEN_ATTRIBUTE = "token";
+
+  // Tab properties
   private static final String DROPBOX_SERVER_TAB_PROPERTY = 
"DropboxRepositoryConnector.Server";
   private static final String DROPBOX_PATH_TAB_PROPERTY = 
"DropboxRepositoryConnector.DropboxPath";
+  private static final String DROPBOX_SECURITY_TAB_PROPERTY = 
"DropboxRepositoryConnector.Security";
+
   // Template names
+  
   /**
    * Forward to the javascript to check the configuration parameters
    */
@@ -70,6 +86,11 @@ public class DropboxRepositoryConnector 
    */
   private static final String EDIT_CONFIG_FORWARD_SERVER = 
"editConfiguration_Server.html";
   /**
+   * Forward to the HTML template to view the configuration parameters
+   */
+  private static final String VIEW_CONFIG_FORWARD = "viewConfiguration.html";
+  
+  /**
    * Forward to the javascript to check the specification parameters for the
    * job
    */
@@ -79,13 +100,14 @@ public class DropboxRepositoryConnector 
    */
   private static final String EDIT_SPEC_FORWARD_DROPBOXPATH = 
"editSpecification_DropboxPath.html";
   /**
-   * Forward to the HTML template to view the configuration parameters
+   * Forward to the template to edit the configuration parameters for the job
    */
-  private static final String VIEW_CONFIG_FORWARD = "viewConfiguration.html";
+  private static final String EDIT_SPEC_FORWARD_SECURITY = 
"editSpecification_Security.html";
   /**
    * Forward to the template to view the specification parameters for the job
    */
-    private static final String VIEW_SPEC_FORWARD = "viewSpecification.html";
+  private static final String VIEW_SPEC_FORWARD = "viewSpecification.html";
+
   /**
    * Endpoint server name
    */
@@ -167,9 +189,9 @@ public class DropboxRepositoryConnector 
     super.connect(configParams);
 
     app_key=params.getParameter(DropboxConfig.APP_KEY_PARAM);
-    app_secret=params.getParameter(DropboxConfig.APP_SECRET_PARAM);
+    app_secret=params.getObfuscatedParameter(DropboxConfig.APP_SECRET_PARAM);
     key = params.getParameter(DropboxConfig.KEY_PARAM);
-    secret = params.getParameter(DropboxConfig.SECRET_PARAM);
+    secret = params.getObfuscatedParameter(DropboxConfig.SECRET_PARAM);
     
   }
 
@@ -277,16 +299,7 @@ public class DropboxRepositoryConnector 
 
       
       // Create a session
-      Map<String, String> parameters = new HashMap<String, String>();
-
-      // user credentials
-      parameters.put(DropboxConfig.APP_KEY_PARAM, app_key);
-      parameters.put(DropboxConfig.APP_SECRET_PARAM, app_secret);
-
-      parameters.put(DropboxConfig.KEY_PARAM, key);
-      parameters.put(DropboxConfig.SECRET_PARAM, secret);
-
-      session = new DropboxSession(parameters);
+      session = new DropboxSession(app_key, app_secret, key, secret);
       lastSessionFetch = System.currentTimeMillis();
     }
   }
@@ -334,13 +347,13 @@ public class DropboxRepositoryConnector 
    * @param newMap is the map to fill in
    * @param parameters is the current set of configuration parameters
    */
-  private static void fillInServerConfigurationMap(Map<String, String> newMap, 
ConfigParams parameters) {
+  private static void fillInServerConfigurationMap(Map<String, Object> newMap, 
ConfigParams parameters) {
     
     String app_key = parameters.getParameter(DropboxConfig.APP_KEY_PARAM);
-    String app_secret = 
parameters.getParameter(DropboxConfig.APP_SECRET_PARAM);
+    String app_secret = 
parameters.getObfuscatedParameter(DropboxConfig.APP_SECRET_PARAM);
     
     String username = parameters.getParameter(DropboxConfig.KEY_PARAM);
-    String password = parameters.getParameter(DropboxConfig.SECRET_PARAM);
+    String password = 
parameters.getObfuscatedParameter(DropboxConfig.SECRET_PARAM);
     
     if (app_key == null) {
       app_key = StringUtils.EMPTY;
@@ -357,10 +370,10 @@ public class DropboxRepositoryConnector 
       password = StringUtils.EMPTY;
     }
     
-    newMap.put(DropboxConfig.APP_KEY_PARAM, app_key);
-    newMap.put(DropboxConfig.APP_SECRET_PARAM, app_secret);
-    newMap.put(DropboxConfig.KEY_PARAM, username);
-    newMap.put(DropboxConfig.SECRET_PARAM, password);
+    newMap.put("APP_KEY", app_key);
+    newMap.put("APP_SECRET", app_secret);
+    newMap.put("KEY", username);
+    newMap.put("SECRET", password);
     
   }
 
@@ -379,25 +392,12 @@ public class DropboxRepositoryConnector 
   @Override
   public void viewConfiguration(IThreadContext threadContext, IHTTPOutput out,
     Locale locale, ConfigParams parameters) throws ManifoldCFException, 
IOException {
-    Map<String, String> paramMap = new HashMap<String, String>();
+    Map<String, Object> paramMap = new HashMap<String, Object>();
 
     // Fill in map from each tab
     fillInServerConfigurationMap(paramMap, parameters);
 
-    outputResource(VIEW_CONFIG_FORWARD, out, locale, paramMap);
-  }
-
-  /**
-   * Read the content of a resource, replace the variable ${PARAMNAME} with
-   * the value and copy it to the out.
-   *
-   * @param resName
-   * @param out
-   * @throws ManifoldCFException
-   */
-  private static void outputResource(String resName, IHTTPOutput out,
-    Locale locale, Map<String, String> paramMap) throws ManifoldCFException {
-    Messages.outputResourceWithVelocity(out, locale, resName, paramMap, true);
+    
Messages.outputResourceWithVelocity(out,locale,VIEW_CONFIG_FORWARD,paramMap);
   }
 
   /**
@@ -420,14 +420,15 @@ public class DropboxRepositoryConnector 
     throws ManifoldCFException, IOException {
     // Add the Server tab
     tabsArray.add(Messages.getString(locale, DROPBOX_SERVER_TAB_PROPERTY));
+
     // Map the parameters
-    Map<String, String> paramMap = new HashMap<String, String>();
+    Map<String, Object> paramMap = new HashMap<String, Object>();
 
     // Fill in the parameters from each tab
     fillInServerConfigurationMap(paramMap, parameters);
 
     // Output the Javascript - only one Velocity template for all tabs
-    outputResource(EDIT_CONFIG_HEADER_FORWARD, out, locale, paramMap);
+    
Messages.outputResourceWithVelocity(out,locale,EDIT_CONFIG_HEADER_FORWARD,paramMap);
   }
 
   @Override
@@ -438,12 +439,12 @@ public class DropboxRepositoryConnector 
     // Call the Velocity templates for each tab
 
     // Server tab
-    Map<String, String> paramMap = new HashMap<String, String>();
+    Map<String, Object> paramMap = new HashMap<String, Object>();
     // Set the tab name
     paramMap.put("TabName", tabName);
     // Fill in the parameters
     fillInServerConfigurationMap(paramMap, parameters);
-    outputResource(EDIT_CONFIG_FORWARD_SERVER, out, locale, paramMap);
+    
Messages.outputResourceWithVelocity(out,locale,EDIT_CONFIG_FORWARD_SERVER,paramMap);
 
   }
 
@@ -470,24 +471,24 @@ public class DropboxRepositoryConnector 
     throws ManifoldCFException {
 
     
-    String app_key = variableContext.getParameter(DropboxConfig.APP_KEY_PARAM);
+    String app_key = variableContext.getParameter("app_key");
     if (app_key != null) {
       parameters.setParameter(DropboxConfig.APP_KEY_PARAM, app_key);
     }
     
-    String app_secret = 
variableContext.getParameter(DropboxConfig.APP_SECRET_PARAM);
+    String app_secret = variableContext.getParameter("app_secret");
     if (app_secret != null) {
-      parameters.setParameter(DropboxConfig.APP_SECRET_PARAM, app_secret);
+      parameters.setObfuscatedParameter(DropboxConfig.APP_SECRET_PARAM, 
app_secret);
     }
     
-    String key = variableContext.getParameter(DropboxConfig.KEY_PARAM);
+    String key = variableContext.getParameter("key");
     if (key != null) {
       parameters.setParameter(DropboxConfig.KEY_PARAM, key);
     }
 
-    String secret = variableContext.getParameter(DropboxConfig.SECRET_PARAM);
+    String secret = variableContext.getParameter("secret");
     if (secret != null) {
-      parameters.setParameter(DropboxConfig.SECRET_PARAM, secret);
+      parameters.setObfuscatedParameter(DropboxConfig.SECRET_PARAM, secret);
     }
 
     return null;
@@ -496,17 +497,34 @@ public class DropboxRepositoryConnector 
   /**
    * Fill in specification Velocity parameter map for DROPBOXPath tab.
    */
-  private static void fillInDropboxPathSpecificationMap(Map<String, String> 
newMap, DocumentSpecification ds) {
+  private static void fillInDropboxPathSpecificationMap(Map<String, Object> 
newMap, DocumentSpecification ds) {
     int i = 0;
     String DropboxPath = DropboxConfig.DROPBOX_PATH_PARAM_DEFAULT_VALUE;
     while (i < ds.getChildCount()) {
       SpecificationNode sn = ds.getChild(i);
       if (sn.getType().equals(JOB_STARTPOINT_NODE_TYPE)) {
-        DropboxPath = sn.getAttributeValue(DropboxConfig.DROPBOX_PATH_PARAM);
+        DropboxPath = sn.getAttributeValue(JOB_PATH_ATTRIBUTE);
       }
       i++;
     }
-    newMap.put(DropboxConfig.DROPBOX_PATH_PARAM, DropboxPath);
+    newMap.put("DROPBOXPATH", DropboxPath);
+  }
+
+  /**
+   * Fill in specification Velocity parameter map for Dropbox Security tab.
+   */
+  private static void fillInDropboxSecuritySpecificationMap(Map<String, 
Object> newMap, DocumentSpecification ds) {
+    List<Map<String,String>> accessTokenList = new 
ArrayList<Map<String,String>>();
+    for (int i = 0; i < ds.getChildCount(); i++) {
+      SpecificationNode sn = ds.getChild(i);
+      if (sn.getType().equals(JOB_ACCESS_NODE_TYPE)) {
+        String token = sn.getAttributeValue(JOB_TOKEN_ATTRIBUTE);
+        Map<String,String> accessMap = new HashMap<String,String>();
+        accessMap.put("TOKEN",token);
+        accessTokenList.add(accessMap);
+      }
+    }
+    newMap.put("ACCESSTOKENS", accessTokenList);
   }
 
   /**
@@ -523,12 +541,13 @@ public class DropboxRepositoryConnector 
   public void viewSpecification(IHTTPOutput out, Locale locale, 
DocumentSpecification ds)
     throws ManifoldCFException, IOException {
 
-    Map<String, String> paramMap = new HashMap<String, String>();
+    Map<String, Object> paramMap = new HashMap<String, Object>();
 
     // Fill in the map with data from all tabs
     fillInDropboxPathSpecificationMap(paramMap, ds);
-
-    outputResource(VIEW_SPEC_FORWARD, out, locale, paramMap);
+    fillInDropboxSecuritySpecificationMap(paramMap, ds);
+      
+    Messages.outputResourceWithVelocity(out,locale,VIEW_SPEC_FORWARD,paramMap);
   }
 
   /**
@@ -548,7 +567,7 @@ public class DropboxRepositoryConnector 
   @Override
   public String processSpecificationPost(IPostParameters variableContext,
     DocumentSpecification ds) throws ManifoldCFException {
-    String dropboxPath = 
variableContext.getParameter(DropboxConfig.DROPBOX_PATH_PARAM);
+    String dropboxPath = variableContext.getParameter("dropboxpath");
     if (dropboxPath != null) {
       int i = 0;
       while (i < ds.getChildCount()) {
@@ -560,10 +579,50 @@ public class DropboxRepositoryConnector 
         i++;
       }
       SpecificationNode node = new SpecificationNode(JOB_STARTPOINT_NODE_TYPE);
-      node.setAttribute(DropboxConfig.DROPBOX_PATH_PARAM, dropboxPath);
-      variableContext.setParameter(DropboxConfig.DROPBOX_PATH_PARAM, 
dropboxPath);
+      node.setAttribute(JOB_PATH_ATTRIBUTE, dropboxPath);
       ds.addChild(ds.getChildCount(), node);
     }
+    String xc = variableContext.getParameter("tokencount");
+    if (xc != null) {
+      // Delete all tokens first
+      int i = 0;
+      while (i < ds.getChildCount()) {
+        SpecificationNode sn = ds.getChild(i);
+        if (sn.getType().equals(JOB_ACCESS_NODE_TYPE))
+          ds.removeChild(i);
+        else
+          i++;
+      }
+
+      int accessCount = Integer.parseInt(xc);
+      i = 0;
+      while (i < accessCount) {
+        String accessDescription = "_"+Integer.toString(i);
+        String accessOpName = "accessop"+accessDescription;
+        xc = variableContext.getParameter(accessOpName);
+        if (xc != null && xc.equals("Delete")) {
+          // Next row
+          i++;
+          continue;
+        }
+        // Get the stuff we need
+        String accessSpec = 
variableContext.getParameter("spectoken"+accessDescription);
+        SpecificationNode node = new SpecificationNode(JOB_ACCESS_NODE_TYPE);
+        node.setAttribute(JOB_TOKEN_ATTRIBUTE,accessSpec);
+        ds.addChild(ds.getChildCount(),node);
+        i++;
+      }
+
+      String op = variableContext.getParameter("accessop");
+      if (op != null && op.equals("Add"))
+      {
+        String accessspec = variableContext.getParameter("spectoken");
+        SpecificationNode node = new SpecificationNode(JOB_ACCESS_NODE_TYPE);
+        node.setAttribute(JOB_TOKEN_ATTRIBUTE,accessspec);
+        ds.addChild(ds.getChildCount(),node);
+      }
+    }
+
     return null;
   }
 
@@ -585,10 +644,13 @@ public class DropboxRepositoryConnector 
     IOException {
 
     // Output DROPBOXPath tab
-    Map<String, String> paramMap = new HashMap<String, String>();
+    Map<String, Object> paramMap = new HashMap<String, Object>();
     paramMap.put("TabName", tabName);
     fillInDropboxPathSpecificationMap(paramMap, ds);
-    outputResource(EDIT_SPEC_FORWARD_DROPBOXPATH, out, locale, paramMap);
+    fillInDropboxSecuritySpecificationMap(paramMap, ds);
+
+    
Messages.outputResourceWithVelocity(out,locale,EDIT_SPEC_FORWARD_DROPBOXPATH,paramMap);
+    
Messages.outputResourceWithVelocity(out,locale,EDIT_SPEC_FORWARD_SECURITY,paramMap);
   }
 
   /**
@@ -608,13 +670,15 @@ public class DropboxRepositoryConnector 
     Locale locale, DocumentSpecification ds, List<String> tabsArray)
     throws ManifoldCFException, IOException {
     tabsArray.add(Messages.getString(locale, DROPBOX_PATH_TAB_PROPERTY));
+    tabsArray.add(Messages.getString(locale, DROPBOX_SECURITY_TAB_PROPERTY));
 
-    Map<String, String> paramMap = new HashMap<String, String>();
+    Map<String, Object> paramMap = new HashMap<String, Object>();
 
     // Fill in the specification header map, using data from all tabs.
     fillInDropboxPathSpecificationMap(paramMap, ds);
+    fillInDropboxSecuritySpecificationMap(paramMap, ds);
 
-    outputResource(EDIT_SPEC_HEADER_FORWARD, out, locale, paramMap);
+    
Messages.outputResourceWithVelocity(out,locale,EDIT_SPEC_HEADER_FORWARD,paramMap);
   }
 
   /**
@@ -833,9 +897,28 @@ public class DropboxRepositoryConnector 
           if (!scanOnly[i]) {
             doLog = true;
             
+            // Unpack the version string
+            ArrayList acls = new ArrayList();
+            StringBuilder denyAclBuffer = new StringBuilder();
+            int index = unpackList(acls,version,0,'+');
+            if (index < version.length() && version.charAt(index++) == '+') {
+              index = unpack(denyAclBuffer,version,index,'+');
+            }
+
             // content ingestion
             RepositoryDocument rd = new RepositoryDocument();
 
+            // Turn into acls and add into description
+            String[] aclArray = new String[acls.size()];
+            for (int j = 0; j < aclArray.length; j++) {
+              aclArray[j] = (String)acls.get(j);
+            }
+            rd.setACL(aclArray);
+            if (denyAclBuffer.length() > 0) {
+              String[] denyAclArray = new String[]{denyAclBuffer.toString()};
+              rd.setDenyACL(denyAclArray);
+            }
+
             // Length in bytes
             long fileLength = dropboxObject.bytes;
             //documentURI
@@ -1088,6 +1171,12 @@ public class DropboxRepositoryConnector 
   @Override
   public String[] getDocumentVersions(String[] documentIdentifiers,
     DocumentSpecification spec) throws ManifoldCFException, 
ServiceInterruption {
+
+    // Forced acls
+    String[] acls = getAcls(spec);
+    // Sort it,
+    java.util.Arrays.sort(acls);
+
     String[] rval = new String[documentIdentifiers.length];
     for (int i = 0; i < rval.length; i++) {
       getSession();
@@ -1110,10 +1199,22 @@ public class DropboxRepositoryConnector 
         if (dropboxObject.isDeleted) {
           rval[i] = null;
         } else if (StringUtils.isNotEmpty(dropboxObject.rev)) {
-          rval[i] = dropboxObject.rev;
+          StringBuilder sb = new StringBuilder();
+
+          // Acls
+          packList(sb,acls,'+');
+          if (acls.length > 0) {
+            sb.append('+');
+            pack(sb,defaultAuthorityDenyToken,'+');
+          }
+          else
+            sb.append('-');
+
+          sb.append(dropboxObject.rev);
+          rval[i] = sb.toString();
         } else {
-          //a document that doesn't contain versioning information will always 
be processed
-          rval[i] = StringUtils.EMPTY;
+          //a document that doesn't contain versioning information will never 
be processed
+          rval[i] = null;
         }
       } else {
         //a folder will always be processed
@@ -1123,6 +1224,29 @@ public class DropboxRepositoryConnector 
     return rval;
   }
   
+  /** Grab forced acl out of document specification.
+  *@param spec is the document specification.
+  *@return the acls.
+  */
+  protected static String[] getAcls(DocumentSpecification spec) {
+    Set<String> map = new HashSet<String>();
+    for (int i = 0; i < spec.getChildCount(); i++) {
+      SpecificationNode sn = spec.getChild(i);
+      if (sn.getType().equals(JOB_ACCESS_NODE_TYPE)) {
+        String token = sn.getAttributeValue(JOB_TOKEN_ATTRIBUTE);
+        map.add(token);
+      }
+    }
+
+    String[] rval = new String[map.size()];
+    Iterator<String> iter = map.iterator();
+    int i = 0;
+    while (iter.hasNext()) {
+      rval[i++] = (String)iter.next();
+    }
+    return rval;
+  }
+
   /** Handle a dropbox exception. */
   protected static void handleDropboxException(DropboxException e)
     throws ManifoldCFException, ServiceInterruption {

Modified: 
manifoldcf/trunk/connectors/dropbox/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/dropbox/DropboxSession.java
URL: 
http://svn.apache.org/viewvc/manifoldcf/trunk/connectors/dropbox/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/dropbox/DropboxSession.java?rev=1490621&r1=1490620&r2=1490621&view=diff
==============================================================================
--- 
manifoldcf/trunk/connectors/dropbox/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/dropbox/DropboxSession.java
 (original)
+++ 
manifoldcf/trunk/connectors/dropbox/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/dropbox/DropboxSession.java
 Fri Jun  7 12:55:04 2013
@@ -54,10 +54,10 @@ public class DropboxSession {
 
   private DropboxAPI<?> client;
   
-  public DropboxSession(Map<String, String> parameters) {
-    AppKeyPair appKeyPair = new 
AppKeyPair(parameters.get(DropboxConfig.APP_KEY_PARAM), 
parameters.get(DropboxConfig.APP_SECRET_PARAM));
+  public DropboxSession(String app_key, String app_secret, String key, String 
secret) {
+    AppKeyPair appKeyPair = new AppKeyPair(app_key, app_secret);
     WebAuthSession session = new WebAuthSession(appKeyPair, 
WebAuthSession.AccessType.DROPBOX);
-    AccessTokenPair ac = new 
AccessTokenPair(parameters.get(DropboxConfig.KEY_PARAM), 
parameters.get(DropboxConfig.SECRET_PARAM));
+    AccessTokenPair ac = new AccessTokenPair(key, secret);
     session.setAccessTokenPair(ac);
     client = new DropboxAPI<WebAuthSession>(session);
   }

Modified: 
manifoldcf/trunk/connectors/dropbox/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/connectors/dropbox/common_en_US.properties
URL: 
http://svn.apache.org/viewvc/manifoldcf/trunk/connectors/dropbox/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/connectors/dropbox/common_en_US.properties?rev=1490621&r1=1490620&r2=1490621&view=diff
==============================================================================
--- 
manifoldcf/trunk/connectors/dropbox/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/connectors/dropbox/common_en_US.properties
 (original)
+++ 
manifoldcf/trunk/connectors/dropbox/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/connectors/dropbox/common_en_US.properties
 Fri Jun  7 12:55:04 2013
@@ -14,40 +14,26 @@
 # limitations under the License.
 
 DropboxRepositoryConnector.Server=Server
-
+DropboxRepositoryConnector.Security=Security
+DropboxRepositoryConnector.DropboxPath=Folder
 
 DropboxRepositoryConnector.AppKeyColon=Application Key:
 DropboxRepositoryConnector.AppSecretColon=Application Secret:
-
 DropboxRepositoryConnector.KeyColon=Key:
 DropboxRepositoryConnector.SecretColon=Secret:
-DropboxRepositoryConnector.RepositoryIDColon=Repository ID:
-DropboxRepositoryConnector.Optional=(optional)
-
 
 DropboxRepositoryConnector.TheAppKeyMustNotBeNull=The Application Key must not 
be null
 DropboxRepositoryConnector.TheAppSecretMustNotBeNull=The Application Secret 
must not be null
-
-
 DropboxRepositoryConnector.TheKeyMustNotBeNull=The Key must not be null
 DropboxRepositoryConnector.TheSecretMustNotBeNull=The Secret must not be null
 DropboxRepositoryConnector.PathMustNotBeNull=Path must be not null
+DropboxRepositoryConnector.TypeInAnAccessToken=Type in an access token
 
-DropboxRepositoryConnector.DropboxPath=Dropbox Folder to Index
-
-DropboxRepositoryConnector.DropboxPathColon=Dropbox Folder to Index:
-
-DropboxRepositoryConnector.ParametersColon=Parameters:
-DropboxRepositoryConnector.KeyEquals=key=
-DropboxRepositoryConnector.SecretEquals=secret=
-DropboxRepositoryConnector.AppKeyEquals=app_key=
-DropboxRepositoryConnector.AppSecretEquals=app_secret=
-DropboxRepositoryConnector.BindingEquals=binding=
-DropboxRepositoryConnector.ProtocolEquals=protocol=
-DropboxRepositoryConnector.ServerEquals=server=
-DropboxRepositoryConnector.PortEquals=port=
-DropboxRepositoryConnector.RepositoryIdEquals=repositoryId=
-
-DropboxRepositoryConnector.Repository=Repository
-DropboxRepositoryConnector.UserMapping=User Mapping
+DropboxRepositoryConnector.DropboxPathColon=Dropbox folder to index:
 
+DropboxRepositoryConnector.NoAccessTokensPresent=No access tokens present
+DropboxRepositoryConnector.Add=Add
+DropboxRepositoryConnector.AddAccessToken=Add access token
+DropboxRepositoryConnector.Delete=Delete
+DropboxRepositoryConnector.DeleteToken=Delete token #
+DropboxRepositoryConnector.AccessTokensColon=Access tokens:

Modified: 
manifoldcf/trunk/connectors/dropbox/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/dropbox/editConfiguration_Server.html
URL: 
http://svn.apache.org/viewvc/manifoldcf/trunk/connectors/dropbox/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/dropbox/editConfiguration_Server.html?rev=1490621&r1=1490620&r2=1490621&view=diff
==============================================================================
--- 
manifoldcf/trunk/connectors/dropbox/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/dropbox/editConfiguration_Server.html
 (original)
+++ 
manifoldcf/trunk/connectors/dropbox/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/dropbox/editConfiguration_Server.html
 Fri Jun  7 12:55:04 2013
@@ -15,60 +15,50 @@
  limitations under the License.
 -->
 
-#if($TABNAME == $ResourceBundle.getString('DropboxRepositoryConnector.Server'))
+#if($TabName == $ResourceBundle.getString('DropboxRepositoryConnector.Server'))
 
 <table class="displaytable">
   <tr><td class="separator" colspan="2"><hr/></td></tr>
   
   <tr>
     <td class="description">
-      <nobr>
-        
$Encoder.bodyEscape($ResourceBundle.getString('DropboxRepositoryConnector.AppKeyColon'))
-      </nobr>
+      
<nobr>$Encoder.bodyEscape($ResourceBundle.getString('DropboxRepositoryConnector.AppKeyColon'))</nobr>
     </td>
     <td class="value">
       <input type="text" id="app_key" name="app_key" 
value="$Encoder.attributeEscape($APP_KEY)" />
     </td>
   </tr>
   
-  
-    <tr>
+  <tr>
     <td class="description">
-      <nobr>
-        
$Encoder.bodyEscape($ResourceBundle.getString('DropboxRepositoryConnector.AppSecretColon'))
-      </nobr>
+      
<nobr>$Encoder.bodyEscape($ResourceBundle.getString('DropboxRepositoryConnector.AppSecretColon'))</nobr>
     </td>
     <td class="value">
-      <input type="text" id="app_secret" name="app_secret" 
value="$Encoder.attributeEscape($APP_SECRET)" />
+      <input type="password" id="app_secret" name="app_secret" 
value="$Encoder.attributeEscape($APP_SECRET)" />
     </td>
   </tr>
   
-  
   <tr>
     <td class="description">
-      <nobr>
-        
$Encoder.bodyEscape($ResourceBundle.getString('DropboxRepositoryConnector.KeyColon'))
-      </nobr>
+      
<nobr>$Encoder.bodyEscape($ResourceBundle.getString('DropboxRepositoryConnector.KeyColon'))</nobr>
     </td>
     <td class="value">
       <input type="text" id="key" name="key" 
value="$Encoder.attributeEscape($KEY)" />
     </td>
   </tr>
+
   <tr>
     <td class="description">
-      <nobr>
-        
$Encoder.bodyEscape($ResourceBundle.getString('DropboxRepositoryConnector.SecretColon'))
-      </nobr>
+      
<nobr>$Encoder.bodyEscape($ResourceBundle.getString('DropboxRepositoryConnector.SecretColon'))</nobr>
     </td>
     <td class="value">
-      <input type="text" id="secret" name="secret" 
value="$Encoder.attributeEscape($SECRET)" />
+      <input type="password" id="secret" name="secret" 
value="$Encoder.attributeEscape($SECRET)" />
     </td>
   </tr>
 </table>
 
 #else
 
-
 <input type="hidden" name="app_key" value="$Encoder.attributeEscape($APP_KEY)" 
/>
 <input type="hidden" name="app_secret" 
value="$Encoder.attributeEscape($APP_SECRET)" />
 <input type="hidden" name="key" value="$Encoder.attributeEscape($KEY)" />

Modified: 
manifoldcf/trunk/connectors/dropbox/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/dropbox/editSpecification.js
URL: 
http://svn.apache.org/viewvc/manifoldcf/trunk/connectors/dropbox/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/dropbox/editSpecification.js?rev=1490621&r1=1490620&r2=1490621&view=diff
==============================================================================
--- 
manifoldcf/trunk/connectors/dropbox/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/dropbox/editSpecification.js
 (original)
+++ 
manifoldcf/trunk/connectors/dropbox/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/dropbox/editSpecification.js
 Fri Jun  7 12:55:04 2013
@@ -19,25 +19,41 @@
 <!--
 function checkSpecification()
 {
-    return true;
+  return true;
 }
  
- 
- function checkSpecificationForSave
- {
- if(editconnection.path.value == ""){
+function checkSpecificationForSave()
+{
+  if(editjob.dropboxpath.value == "") {
     
alert("$Encoder.bodyJavascriptEscape($ResourceBundle.getString('DropboxRepositoryConnector.PathMustNotBeNull'))");
     
SelectTab("$Encoder.bodyJavascriptEscape($ResourceBundle.getString('DropboxRepositoryConnector.Server'))");
-    editconnection.path.focus();
+    editjob.dropboxpath.focus();
     return false;
   }
   return true;
- }
+}
  
 function SpecOp(n, opValue, anchorvalue)
 {
   eval("editjob."+n+".value = \""+opValue+"\"");
   postFormSetAnchor(anchorvalue);
 }
+
+function SpecDeleteToken(i)
+{
+  SpecOp("accessop_"+i,"Delete","token_"+i);
+}
+
+function SpecAddToken(i)
+{
+  if (editjob.spectoken.value == "")
+  {
+    
alert("$Encoder.bodyJavascriptEscape($ResourceBundle.getString('DropboxRepositoryConnector.TypeInAnAccessToken'))");
+    editjob.spectoken.focus();
+    return;
+  }
+  SpecOp("accessop","Add","token_"+i);
+}
+
 //-->
 </script>
\ No newline at end of file

Modified: 
manifoldcf/trunk/connectors/dropbox/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/dropbox/editSpecification_DropboxPath.html
URL: 
http://svn.apache.org/viewvc/manifoldcf/trunk/connectors/dropbox/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/dropbox/editSpecification_DropboxPath.html?rev=1490621&r1=1490620&r2=1490621&view=diff
==============================================================================
--- 
manifoldcf/trunk/connectors/dropbox/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/dropbox/editSpecification_DropboxPath.html
 (original)
+++ 
manifoldcf/trunk/connectors/dropbox/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/dropbox/editSpecification_DropboxPath.html
 Fri Jun  7 12:55:04 2013
@@ -14,20 +14,16 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
-#if($TABNAME == 
$ResourceBundle.getString('DropboxRepositoryConnector.DropboxPath'))
+#if($TabName == 
$ResourceBundle.getString('DropboxRepositoryConnector.DropboxPath'))
 
 <table class="displaytable">
   <tr><td class="separator" colspan="2"><hr/></td></tr>
   <tr>
     <td class="description">
-      <nobr>
-        
$Encoder.bodyEscape($ResourceBundle.getString('DropboxRepositoryConnector.DropboxPathColon'))
-      </nobr>
+      
<nobr>$Encoder.bodyEscape($ResourceBundle.getString('DropboxRepositoryConnector.DropboxPathColon'))</nobr>
     </td>
     <td class="value">
-      <nobr>
-        <input type="text" size="120" name="dropboxpath" 
value="$Encoder.attributeEscape($DROPBOXPATH)" />
-      </nobr>
+      <nobr><input type="text" size="80" name="dropboxpath" 
value="$Encoder.attributeEscape($DROPBOXPATH)" /></nobr>
     </td>
   </tr>
 </table>

Added: 
manifoldcf/trunk/connectors/dropbox/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/dropbox/editSpecification_Security.html
URL: 
http://svn.apache.org/viewvc/manifoldcf/trunk/connectors/dropbox/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/dropbox/editSpecification_Security.html?rev=1490621&view=auto
==============================================================================
--- 
manifoldcf/trunk/connectors/dropbox/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/dropbox/editSpecification_Security.html
 (added)
+++ 
manifoldcf/trunk/connectors/dropbox/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/dropbox/editSpecification_Security.html
 Fri Jun  7 12:55:04 2013
@@ -0,0 +1,73 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements.  See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License.  You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+#if($TabName == 
$ResourceBundle.getString('DropboxRepositoryConnector.Security'))
+
+<table class="displaytable">
+  <tr><td class="separator" colspan="2"><hr/></td></tr>
+  
+  #set($atcounter = 0)
+  #foreach($atoken in $ACCESSTOKENS)
+
+  <tr>
+    <td class="description">
+      <input type="hidden" name="accessop_$atcounter" value=""/>
+      <input type="hidden" name="spectoken_$atcounter" 
value="$Encoder.attributeEscape($atoken.get('TOKEN'))"/>
+      <a name="token_$atcounter">
+        <input type="button" 
value="$Encoder.attributeEscape($ResourceBundle.getString('DropboxRepositoryConnector.Delete'))"
 onClick='Javascript:SpecDeleteToken($atcounter)' 
alt="$Encoder.attributeEscape($ResourceBundle.getString('DropboxRepositoryConnector.DeleteToken'))$atcounter"/>
+      </a>
+    </td>
+    <td class="value">$Encoder.bodyEscape($atoken.get('TOKEN'))</td>
+  </tr>
+
+    #set($atcounter = $atcounter + 1)
+  #end
+
+  #set($nexttoken = $atcounter + 1)
+
+  #if($atcounter == 0)
+  <tr>
+    <td class="message" 
colspan="2">$Encoder.bodyEscape($ResourceBundle.getString('DropboxRepositoryConnector.NoAccessTokensPresent'))</td>
+  </tr>
+  #end
+
+  <tr><td class="lightseparator" colspan="2"><hr/></td></tr>
+  
+  <tr>
+    <td class="description">
+      <input type="hidden" name="tokencount" value="$atcounter"/>
+      <input type="hidden" name="accessop" value=""/>
+      <a name="token_$atcounter">
+        <input type="button" 
value="$Encoder.attributeEscape($ResourceBundle.getString('DropboxRepositoryConnector.Add'))"
 onClick='Javascript:SpecAddToken($nexttoken)' 
alt="$Encoder.attributeEscape($ResourceBundle.getString('DropboxRepositoryConnector.AddAccessToken'))"/>
+      </a>
+    </td>
+    <td class="value">
+      <input type="text" size="30" name="spectoken" value=""/>
+    </td>
+  </tr>
+</table>
+
+#else
+
+  #set($atcounter = 0)
+  #foreach($atoken in $ACCESSTOKENS)
+<input type="hidden" name="spectoken_$atcounter" 
value="$Encoder.attributeEscape($atoken.get('TOKEN'))"/>
+    #set($atcounter = $atcounter + 1)
+  #end
+<input type="hidden" name="tokencount" value="$atcounter"/>
+
+#end

Propchange: 
manifoldcf/trunk/connectors/dropbox/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/dropbox/editSpecification_Security.html
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
manifoldcf/trunk/connectors/dropbox/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/dropbox/editSpecification_Security.html
------------------------------------------------------------------------------
    svn:keywords = Id

Modified: 
manifoldcf/trunk/connectors/dropbox/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/dropbox/viewConfiguration.html
URL: 
http://svn.apache.org/viewvc/manifoldcf/trunk/connectors/dropbox/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/dropbox/viewConfiguration.html?rev=1490621&r1=1490620&r2=1490621&view=diff
==============================================================================
--- 
manifoldcf/trunk/connectors/dropbox/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/dropbox/viewConfiguration.html
 (original)
+++ 
manifoldcf/trunk/connectors/dropbox/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/dropbox/viewConfiguration.html
 Fri Jun  7 12:55:04 2013
@@ -17,27 +17,35 @@
 
 <table class="displaytable">
   <tr>
-    <td class="description" colspan="1">
-      <nobr>
-        
$Encoder.bodyEscape($ResourceBundle.getString('DropboxRepositoryConnector.ParametersColon'))
-      </nobr>
-    </td>
-    <td class="value" colspan="3">
-    <nobr>
-        
$Encoder.bodyEscape($ResourceBundle.getString('DropboxRepositoryConnector.AppKeyEquals'))$Encoder.bodyEscape($APP_KEY)
-      </nobr>
-      <br />
-      <nobr>
-        
$Encoder.bodyEscape($ResourceBundle.getString('DropboxRepositoryConnector.AppSecretEquals'))$Encoder.bodyEscape($APP_SECRET)
-      </nobr>
-      <br />
-    <nobr>
-        
$Encoder.bodyEscape($ResourceBundle.getString('DropboxRepositoryConnector.KeyEquals'))$Encoder.bodyEscape($KEY)
-      </nobr>
-      <br />
-      <nobr>
-        
$Encoder.bodyEscape($ResourceBundle.getString('DropboxRepositoryConnector.SecretEquals'))$Encoder.bodyEscape($SECRET)
-      </nobr>
+    <td class="description">
+      
<nobr>$Encoder.bodyEscape($ResourceBundle.getString('DropboxRepositoryConnector.AppKeyColon'))</nobr>
+    </td>
+    <td class="value">
+      <nobr>$Encoder.bodyEscape($APP_KEY)</nobr>
+    </td>
+  </tr>
+  <tr>
+    <td class="description">
+      
<nobr>$Encoder.bodyEscape($ResourceBundle.getString('DropboxRepositoryConnector.AppSecretColon'))</nobr>
+    </td>
+    <td class="value">
+      <nobr>********</nobr>
+    </td>
+  </tr>
+  <tr>
+    <td class="description">
+      
<nobr>$Encoder.bodyEscape($ResourceBundle.getString('DropboxRepositoryConnector.KeyColon'))</nobr>
+    </td>
+    <td class="value">
+      <nobr>$Encoder.bodyEscape($KEY)</nobr>
+    </td>
+  </tr>
+  <tr>
+    <td class="description">
+      
<nobr>$Encoder.bodyEscape($ResourceBundle.getString('DropboxRepositoryConnector.SecretColon'))</nobr>
+    </td>
+    <td class="value">
+      <nobr>********</nobr>
     </td>
   </tr>
 </table>

Modified: 
manifoldcf/trunk/connectors/dropbox/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/dropbox/viewSpecification.html
URL: 
http://svn.apache.org/viewvc/manifoldcf/trunk/connectors/dropbox/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/dropbox/viewSpecification.html?rev=1490621&r1=1490620&r2=1490621&view=diff
==============================================================================
--- 
manifoldcf/trunk/connectors/dropbox/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/dropbox/viewSpecification.html
 (original)
+++ 
manifoldcf/trunk/connectors/dropbox/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/dropbox/viewSpecification.html
 Fri Jun  7 12:55:04 2013
@@ -18,10 +18,29 @@
 <table class="displaytable">
   <tr>
     <td class="description">
-      
$Encoder.bodyEscape($ResourceBundle.getString('DropboxRepositoryConnector.DropboxPathColon'))
+      
<nobr>$Encoder.bodyEscape($ResourceBundle.getString('DropboxRepositoryConnector.DropboxPathColon'))</nobr>
     </td>
     <td class="value">
-      $Encoder.bodyEscape($DROPBOXPATH)
+      <nobr>$Encoder.bodyEscape($DROPBOXPATH)</nobr>
     </td>
   </tr>
+  <tr><td class="separator" colspan="2"><hr/></td></tr>
+  <tr>
+#if($ACCESSTOKENS.size() == 0)
+    <td class="message" colspan="2">
+      
$Encoder.bodyEscape($ResourceBundle.getString('DropboxRepositoryConnector.NoAccessTokensPresent'))
+    </td>
+#else
+    <td class="description">
+      
<nobr>$Encoder.bodyEscape($ResourceBundle.getString('DropboxRepositoryConnector.AccessTokensColon'))</nobr>
+    </td>
+    <td class="value">
+  #set($atcounter = 0)
+  #foreach($atoken in $ACCESSTOKENS)
+    <nobr>$Encoder.bodyEscape($atoken.get('TOKEN'))</nobr><br/>
+    #set($atcounter = $atcounter + 1)
+  #end
+    </td>
+#end
+  </tr>
 </table>


Reply via email to