/**
* 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.camel.component.scp;
import java.net.URI;
import org.apache.camel.component.file.remote.RemoteFileConfiguration;
import org.apache.camel.spi.UriParam;
import org.apache.camel.spi.UriParams;
/**
* SCP configuration
*/
@UriParams
public class ScpConfiguration extends RemoteFileConfiguration {
public static final int DEFAULT_SFTP_PORT = 22;
public static final String DEFAULT_MOD = "664";
@UriParam(label = "security", defaultValue = "true")
private boolean useUserKnownHostsFile = true;
@UriParam(label = "security", secret = true)
private String knownHostsFile;
@UriParam(label = "security", secret = true)
private String privateKeyFile;
@UriParam(label = "security", secret = true)
private String privateKeyFilePassphrase;
@UriParam(enums = "no,yes", defaultValue = "no")
private String strictHostKeyChecking;
@UriParam(defaultValue = DEFAULT_MOD)
private String chmod = DEFAULT_MOD;
// comma separated list of ciphers.
// null means default jsch list will be used
@UriParam(label = "security,advanced")
private String ciphers;
@UriParam(label = "security", secret = true)
private String preferredAuthentications;
public ScpConfiguration() {
setProtocol("scp");
}
public ScpConfiguration(URI uri) {
super(uri);
}
@Override
protected void setDefaultPort() {
setPort(DEFAULT_SFTP_PORT);
}
public String getKnownHostsFile() {
return knownHostsFile;
}
/**
* Sets the known_hosts file, so that the jsch endpoint can do host key verification.
*/
public void setKnownHostsFile(String knownHostsFile) {
this.knownHostsFile = knownHostsFile;
}
public boolean isUseUserKnownHostsFile() {
return useUserKnownHostsFile;
}
/**
* If knownHostFile has not been explicit configured, then use the host file from System.getProperty("user.home") + "/.ssh/known_hosts"
*/
public void setUseUserKnownHostsFile(boolean useUserKnownHostsFile) {
this.useUserKnownHostsFile = useUserKnownHostsFile;
}
public String getPrivateKeyFile() {
return privateKeyFile;
}
/**
* Set the private key file to that the SFTP endpoint can do private key verification.
*/
public void setPrivateKeyFile(String privateKeyFile) {
this.privateKeyFile = privateKeyFile;
}
public String getPrivateKeyFilePassphrase() {
return privateKeyFilePassphrase;
}
/**
* Set the private key file passphrase to that the SFTP endpoint can do private key verification.
*/
public void setPrivateKeyFilePassphrase(String privateKeyFilePassphrase) {
this.privateKeyFilePassphrase = privateKeyFilePassphrase;
}
public String getStrictHostKeyChecking() {
return strictHostKeyChecking;
}
/**
* Sets whether to use strict host key checking. Possible values are: no, yes
*/
public void setStrictHostKeyChecking(String strictHostKeyChecking) {
this.strictHostKeyChecking = strictHostKeyChecking;
}
/**
* Allows you to set chmod on the stored file. For example chmod=664.
*/
public void setChmod(String chmod) {
if (chmod.length() == 3) {
for (byte c : chmod.getBytes()) {
if (c < '0' || c > '7') {
chmod = DEFAULT_MOD;
break;
}
}
} else {
chmod = DEFAULT_MOD;
}
// May be interesting to log the fallback to DEFAULT_MOD for invalid configuration
this.chmod = chmod;
}
public String getChmod() {
return chmod;
}
/**
* Set a comma separated list of ciphers that will be used in order of preference.
* Possible cipher names are defined by JCraft JSCH. Some examples include: aes128-ctr,aes128-cbc,3des-ctr,3des-cbc,blowfish-cbc,aes192-cbc,aes256-cbc.
* If not specified the default list from JSCH will be used.
*/
public void setCiphers(String ciphers) {
this.ciphers = ciphers;
}
public String getCiphers() {
return ciphers;
}
/**
* Set a comma separated list of authentications that will be used in order of preference.
* Possible authentication methods are defined by JCraft JSCH. Some examples include: gssapi-with-mic,publickey,keyboard-interactive,password
* If not specified the JSCH and/or system defaults will be used.
*/
public void setPreferredAuthentications(final String preferredAuthentications) {
this.preferredAuthentications = preferredAuthentications;
}
public String getPreferredAuthentications() {
return preferredAuthentications;
}
}