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()) {