You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by tr...@apache.org on 2014/01/24 00:24:32 UTC

svn commit: r1560849 - in /jackrabbit/commons/filevault/trunk: vault-cli/src/main/java/org/apache/jackrabbit/vault/cli/ vault-core/src/main/java/org/apache/jackrabbit/vault/util/ vault-vlt/src/main/java/org/apache/jackrabbit/vault/vlt/

Author: tripod
Date: Thu Jan 23 23:24:32 2014
New Revision: 1560849

URL: http://svn.apache.org/r1560849
Log:
JCRVLT-27 "vlt rcp" requires credentials as URL parameters

- use credentials store also for 'rcp' URIs. this will automatically prompt for passwords in the CLI use case

Added:
    jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/util/CredentialsProvider.java
    jackrabbit/commons/filevault/trunk/vault-vlt/src/main/java/org/apache/jackrabbit/vault/vlt/ConfigCredentialsStore.java
    jackrabbit/commons/filevault/trunk/vault-vlt/src/main/java/org/apache/jackrabbit/vault/vlt/CredentialsStore.java
Removed:
    jackrabbit/commons/filevault/trunk/vault-vlt/src/main/java/org/apache/jackrabbit/vault/vlt/ConfigCredentialsProvider.java
    jackrabbit/commons/filevault/trunk/vault-vlt/src/main/java/org/apache/jackrabbit/vault/vlt/CredentialsProvider.java
Modified:
    jackrabbit/commons/filevault/trunk/vault-cli/src/main/java/org/apache/jackrabbit/vault/cli/CmdRcp.java
    jackrabbit/commons/filevault/trunk/vault-cli/src/main/java/org/apache/jackrabbit/vault/cli/VaultFsApp.java
    jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/util/RepositoryCopier.java
    jackrabbit/commons/filevault/trunk/vault-vlt/src/main/java/org/apache/jackrabbit/vault/vlt/VltContext.java

Modified: jackrabbit/commons/filevault/trunk/vault-cli/src/main/java/org/apache/jackrabbit/vault/cli/CmdRcp.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-cli/src/main/java/org/apache/jackrabbit/vault/cli/CmdRcp.java?rev=1560849&r1=1560848&r2=1560849&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-cli/src/main/java/org/apache/jackrabbit/vault/cli/CmdRcp.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-cli/src/main/java/org/apache/jackrabbit/vault/cli/CmdRcp.java Thu Jan 23 23:24:32 2014
@@ -59,6 +59,7 @@ public class CmdRcp extends AbstractVaul
         rcp.setUpdate(cl.hasOption(optUpdate));
         rcp.setOnlyNewer(cl.hasOption(optNewer));
         rcp.setNoOrdering(cl.hasOption(optNoOrdering));
+        rcp.setCredentialsProvider(app.getCredentialsStore());
         DefaultWorkspaceFilter srcFilter = new DefaultWorkspaceFilter();
         PathFilterSet excludes = new PathFilterSet("/");
         for (Object e: cl.getValues(optExclude)) {

Modified: jackrabbit/commons/filevault/trunk/vault-cli/src/main/java/org/apache/jackrabbit/vault/cli/VaultFsApp.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-cli/src/main/java/org/apache/jackrabbit/vault/cli/VaultFsApp.java?rev=1560849&r1=1560848&r2=1560849&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-cli/src/main/java/org/apache/jackrabbit/vault/cli/VaultFsApp.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-cli/src/main/java/org/apache/jackrabbit/vault/cli/VaultFsApp.java Thu Jan 23 23:24:32 2014
@@ -57,8 +57,8 @@ import org.apache.jackrabbit.vault.util.
 import org.apache.jackrabbit.vault.util.console.util.CliHelpFormatter;
 import org.apache.jackrabbit.vault.util.console.util.Log4JConfig;
 import org.apache.jackrabbit.vault.util.console.util.PomProperties;
-import org.apache.jackrabbit.vault.vlt.ConfigCredentialsProvider;
-import org.apache.jackrabbit.vault.vlt.CredentialsProvider;
+import org.apache.jackrabbit.vault.vlt.ConfigCredentialsStore;
+import org.apache.jackrabbit.vault.vlt.CredentialsStore;
 import org.apache.jackrabbit.vault.vlt.VltContext;
 import org.apache.jackrabbit.vault.vlt.VltDirectory;
 import org.apache.jackrabbit.vault.vlt.meta.MetaDirectory;
@@ -92,8 +92,8 @@ public class VaultFsApp extends Abstract
 
     private RepositoryProvider repProvider;
 
-    private CredentialsProvider credentialsProvider;
-    private ConfigCredentialsProvider confCredsProvider;
+    private CredentialsStore credentialsStore;
+    private ConfigCredentialsStore confCredsProvider;
 
     private Repository rep;
 
@@ -137,7 +137,7 @@ public class VaultFsApp extends Abstract
                 confCredsProvider.setDefaultCredentials(getProperty(KEY_DEFAULT_CREDS));
             }
             File cwd = getPlatformFile("", true).getCanonicalFile();
-            return new VltContext(cwd, localFile, repProvider, credentialsProvider);
+            return new VltContext(cwd, localFile, repProvider, credentialsStore);
         } catch (IOException e) {
             throw new ExecutionException(e);
         } catch (ConfigurationException e) {
@@ -463,8 +463,8 @@ public class VaultFsApp extends Abstract
 
         // init providers
         repProvider = new RepositoryProvider();
-        confCredsProvider = new ConfigCredentialsProvider();
-        credentialsProvider = new PasswordPromptingCredentialProvider(confCredsProvider);
+        confCredsProvider = new ConfigCredentialsStore();
+        credentialsStore = new PasswordPromptingCredentialsStore(confCredsProvider);
 
         // setup default config
         setProperty(KEY_DEFAULT_CREDS, null);
@@ -504,6 +504,10 @@ public class VaultFsApp extends Abstract
         console.addContext(ctxPlatform);
     }
 
+    public CredentialsStore getCredentialsStore() {
+        return credentialsStore;
+    }
+
     /**
      * {@inheritDoc}
      */
@@ -634,11 +638,11 @@ public class VaultFsApp extends Abstract
         }
     }
 
-    private static class PasswordPromptingCredentialProvider implements CredentialsProvider {
+    private static class PasswordPromptingCredentialsStore implements CredentialsStore {
 
-        private CredentialsProvider base;
+        private CredentialsStore base;
 
-        private PasswordPromptingCredentialProvider(CredentialsProvider base) {
+        private PasswordPromptingCredentialsStore(CredentialsStore base) {
             this.base = base;
         }
 

Added: jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/util/CredentialsProvider.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/util/CredentialsProvider.java?rev=1560849&view=auto
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/util/CredentialsProvider.java (added)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/util/CredentialsProvider.java Thu Jan 23 23:24:32 2014
@@ -0,0 +1,30 @@
+/*
+ * 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.
+ */
+package org.apache.jackrabbit.vault.util;
+
+import javax.jcr.Credentials;
+
+import org.apache.jackrabbit.vault.fs.api.RepositoryAddress;
+
+/**
+ * <code>CredentialsProvider</code>...
+ */
+public interface CredentialsProvider {
+
+    Credentials getCredentials(RepositoryAddress mountpoint);
+
+}
\ No newline at end of file

Modified: jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/util/RepositoryCopier.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/util/RepositoryCopier.java?rev=1560849&r1=1560848&r2=1560849&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/util/RepositoryCopier.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/util/RepositoryCopier.java Thu Jan 23 23:24:32 2014
@@ -92,6 +92,8 @@ public class RepositoryCopier {
 
     private String  cqLastModified;
 
+    private CredentialsProvider credentialsProvider;
+
     private volatile boolean abort;
 
     public void setTracker(ProgressTrackerListener tracker) {
@@ -206,6 +208,9 @@ public class RepositoryCopier {
 
             try {
                 Credentials srcCreds = src.getCredentials();
+                if (srcCreds == null && credentialsProvider != null) {
+                    srcCreds = credentialsProvider.getCredentials(src);
+                }
                 srcSession = srcRepo.login(srcCreds, src.getWorkspace());
             } catch (RepositoryException e) {
                 log.error("Error while logging in src repository {}: {}", src, e.toString());
@@ -214,6 +219,9 @@ public class RepositoryCopier {
 
             try {
                 Credentials dstCreds = dst.getCredentials();
+                if (dstCreds == null && credentialsProvider != null) {
+                    dstCreds = credentialsProvider.getCredentials(src);
+                }
                 dstSession = dstRepo.login(dstCreds, dst.getWorkspace());
             } catch (RepositoryException e) {
                 log.error("Error while logging in dst repository {}: {}", dst, e.toString());
@@ -585,4 +593,12 @@ public class RepositoryCopier {
             tracker.onMessage(ProgressTrackerListener.Mode.TEXT, String.format(fmt, args), path);
         }
     }
+
+    public void setCredentialsProvider(CredentialsProvider credentialsProvider) {
+        this.credentialsProvider = credentialsProvider;
+    }
+
+    public CredentialsProvider getCredentialsProvider() {
+        return credentialsProvider;
+    }
 }
\ No newline at end of file

Added: jackrabbit/commons/filevault/trunk/vault-vlt/src/main/java/org/apache/jackrabbit/vault/vlt/ConfigCredentialsStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-vlt/src/main/java/org/apache/jackrabbit/vault/vlt/ConfigCredentialsStore.java?rev=1560849&view=auto
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-vlt/src/main/java/org/apache/jackrabbit/vault/vlt/ConfigCredentialsStore.java (added)
+++ jackrabbit/commons/filevault/trunk/vault-vlt/src/main/java/org/apache/jackrabbit/vault/vlt/ConfigCredentialsStore.java Thu Jan 23 23:24:32 2014
@@ -0,0 +1,131 @@
+/*
+ * 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.
+ */
+package org.apache.jackrabbit.vault.vlt;
+
+import java.io.IOException;
+
+import javax.jcr.Credentials;
+import javax.jcr.SimpleCredentials;
+
+import org.apache.jackrabbit.vault.fs.api.RepositoryAddress;
+import org.apache.jackrabbit.vault.fs.config.ConfigurationException;
+import org.apache.jackrabbit.vault.fs.config.SimpleCredentialsConfig;
+import org.apache.jackrabbit.vault.fs.config.VaultAuthConfig;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * <code>CredentialsProvider</code>...
+ *
+ */
+public class ConfigCredentialsStore implements CredentialsStore {
+
+    protected static Logger log = LoggerFactory.getLogger(ConfigCredentialsStore.class);
+
+    private VaultAuthConfig config;
+
+    private Credentials defaultCreds;
+
+    private Credentials credentials;
+
+    private boolean storeEnabled;
+
+    public ConfigCredentialsStore() {
+        config = new VaultAuthConfig();
+        try {
+            config.load();
+        } catch (IOException e) {
+            log.error("Error while loading auth configuration: {} ", e.toString());
+        } catch (ConfigurationException e) {
+            log.error("Error while loading auth configuration: {} ", e.toString());
+        }
+    }
+
+    public void setDefaultCredentials(String userPass) {
+        this.defaultCreds = fromUserPass(userPass);
+    }
+
+    public void setCredentials(String userPass) {
+        this.credentials = fromUserPass(userPass);
+    }
+
+    private static Credentials fromUserPass(String userPass) {
+        if (userPass != null) {
+            int idx = userPass.indexOf(':');
+            if (idx > 0) {
+                return new SimpleCredentials(userPass.substring(0, idx), userPass.substring(idx + 1).toCharArray());
+            } else {
+                return new SimpleCredentials(userPass, new char[0]);
+            }
+        }
+        return null;
+    }
+
+    public Credentials getCredentials(RepositoryAddress mountpoint) {
+        if (credentials != null) {
+            return credentials;
+        }
+        Credentials creds = fetchCredentials(mountpoint);
+        return creds == null
+                ? defaultCreds
+                : creds;
+    }
+
+    private Credentials fetchCredentials(RepositoryAddress mountpoint) {
+        VaultAuthConfig.RepositoryConfig cfg = config.getRepoConfig(getLookupId(mountpoint));
+        if (cfg == null) {
+            return null;
+        }
+        return cfg.getCredsConfig().getCredentials();
+    }
+
+    private String getLookupId(RepositoryAddress mountpoint) {
+        return mountpoint.getSpecificURI() + "/" + mountpoint.getWorkspace();
+    }
+    
+    public void storeCredentials(RepositoryAddress mountpoint, Credentials creds) {
+        if (!(creds instanceof SimpleCredentials)) {
+            if (creds != null) {
+                log.error("Unable to store non-simple credentials of type " + creds.getClass().getName());
+            }
+            return;
+        }
+        Credentials currentCreds = fetchCredentials(mountpoint);
+        if (creds.equals(currentCreds)) {
+            // don't update if already stored
+            return;
+        }
+
+        SimpleCredentials simpleCredentials = (SimpleCredentials) creds;
+        if (storeEnabled ||
+                "admin".equals(simpleCredentials.getUserID()) && "admin".equals(new String(simpleCredentials.getPassword()))) {
+            VaultAuthConfig.RepositoryConfig cfg  = new VaultAuthConfig.RepositoryConfig(getLookupId(mountpoint));
+            cfg.addCredsConfig(new SimpleCredentialsConfig(simpleCredentials));
+            config.addRepositoryConfig(cfg);
+            try {
+                config.save();
+                log.warn("Credentials for {} updated in {}.", mountpoint, config.getConfigFile().getPath());
+            } catch (IOException e) {
+                log.error("Error while saving auth configuration: {} ", e.toString());
+            }
+        }
+    }
+
+    public void setStoreEnabled(boolean storeEnabled) {
+        this.storeEnabled = storeEnabled;
+    }
+}
\ No newline at end of file

Added: jackrabbit/commons/filevault/trunk/vault-vlt/src/main/java/org/apache/jackrabbit/vault/vlt/CredentialsStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-vlt/src/main/java/org/apache/jackrabbit/vault/vlt/CredentialsStore.java?rev=1560849&view=auto
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-vlt/src/main/java/org/apache/jackrabbit/vault/vlt/CredentialsStore.java (added)
+++ jackrabbit/commons/filevault/trunk/vault-vlt/src/main/java/org/apache/jackrabbit/vault/vlt/CredentialsStore.java Thu Jan 23 23:24:32 2014
@@ -0,0 +1,32 @@
+/*
+ * 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.
+ */
+package org.apache.jackrabbit.vault.vlt;
+
+import javax.jcr.Credentials;
+
+import org.apache.jackrabbit.vault.fs.api.RepositoryAddress;
+import org.apache.jackrabbit.vault.util.CredentialsProvider;
+
+/**
+ * <code>CredentialsProvider</code>...
+ *
+ */
+public interface CredentialsStore extends CredentialsProvider {
+
+    void storeCredentials(RepositoryAddress mountpoint, Credentials creds);
+
+}
\ No newline at end of file

Modified: jackrabbit/commons/filevault/trunk/vault-vlt/src/main/java/org/apache/jackrabbit/vault/vlt/VltContext.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-vlt/src/main/java/org/apache/jackrabbit/vault/vlt/VltContext.java?rev=1560849&r1=1560848&r2=1560849&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-vlt/src/main/java/org/apache/jackrabbit/vault/vlt/VltContext.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-vlt/src/main/java/org/apache/jackrabbit/vault/vlt/VltContext.java Thu Jan 23 23:24:32 2014
@@ -62,7 +62,7 @@ public class VltContext {
 
     private final RepositoryProvider repProvider;
 
-    private final CredentialsProvider credsProvider;
+    private final CredentialsStore credsProvider;
 
     private final ExportRoot exportRoot;
 
@@ -89,14 +89,14 @@ public class VltContext {
 
     public VltContext(File cwd, File localFile,
             RepositoryProvider repProvider,
-            CredentialsProvider credsProvider)
+            CredentialsStore credsProvider)
                     throws ConfigurationException, IOException {
         this(cwd, localFile, repProvider, credsProvider, System.out);
     }
 
     public VltContext(File cwd, File localFile,
                         RepositoryProvider repProvider,
-                        CredentialsProvider credsProvider,
+                        CredentialsStore credsProvider,
                         PrintStream out)
             throws ConfigurationException, IOException {
         if (!cwd.exists()) {