blob: 3d313e7472bd726aba917ad8ac54916bb23aeb66 [file] [log] [blame]
/*
* Copyright 2000-2013 JetBrains s.r.o.
*
* Licensed 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 com.intellij.remote;
import com.intellij.openapi.util.PasswordUtil;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.util.xmlb.annotations.Transient;
import org.jdom.Element;
import org.jetbrains.annotations.NotNull;
/**
* @author michael.golubev
*/
public class RemoteCredentialsHolder implements MutableRemoteCredentials {
public static final String HOST = "HOST";
public static final String PORT = "PORT";
public static final String ANONYMOUS = "ANONYMOUS";
public static final String USERNAME = "USERNAME";
public static final String PASSWORD = "PASSWORD";
public static final String USE_KEY_PAIR = "USE_KEY_PAIR";
public static final String PRIVATE_KEY_FILE = "PRIVATE_KEY_FILE";
public static final String KNOWN_HOSTS_FILE = "MY_KNOWN_HOSTS_FILE";
public static final String PASSPHRASE = "PASSPHRASE";
public static final String SSH_PREFIX = "ssh://";
private String myHost;
private int myPort;
private boolean myAnonymous;
private String myUserName;
private String myPassword;
private boolean myUseKeyPair;
private String myPrivateKeyFile;
private String myKnownHostsFile;
private String myPassphrase;
private boolean myStorePassword;
private boolean myStorePassphrase;
public static String getCredentialsString(@NotNull RemoteCredentials cred) {
return SSH_PREFIX + cred.getUserName() + "@" + cred.getHost() + ":" + cred.getPort();
}
@Override
public String getHost() {
return myHost;
}
public void setHost(String host) {
myHost = host;
}
@Override
public int getPort() {
return myPort;
}
public void setPort(int port) {
myPort = port;
}
@Override
@Transient
public String getUserName() {
return myUserName;
}
public void setUserName(String userName) {
myUserName = userName;
}
@Override
public String getPassword() {
return myPassword;
}
public void setPassword(String password) {
myPassword = password;
}
public void setStorePassword(boolean storePassword) {
myStorePassword = storePassword;
}
public void setStorePassphrase(boolean storePassphrase) {
myStorePassphrase = storePassphrase;
}
@Override
public boolean isStorePassword() {
return myStorePassword;
}
@Override
public boolean isStorePassphrase() {
return myStorePassphrase;
}
@Override
public boolean isAnonymous() {
return myAnonymous;
}
public void setAnonymous(boolean anonymous) {
myAnonymous = anonymous;
}
@Override
public String getPrivateKeyFile() {
return myPrivateKeyFile;
}
public void setPrivateKeyFile(String privateKeyFile) {
myPrivateKeyFile = privateKeyFile;
}
@Override
public String getKnownHostsFile() {
return myKnownHostsFile;
}
public void setKnownHostsFile(String knownHostsFile) {
myKnownHostsFile = knownHostsFile;
}
@Override
@Transient
public String getPassphrase() {
return myPassphrase;
}
public void setPassphrase(String passphrase) {
myPassphrase = passphrase;
}
@Override
public boolean isUseKeyPair() {
return myUseKeyPair;
}
public void setUseKeyPair(boolean useKeyPair) {
myUseKeyPair = useKeyPair;
}
public String getSerializedUserName() {
if (myAnonymous || myUserName == null) return "";
return myUserName;
}
public void setSerializedUserName(String userName) {
if (StringUtil.isEmpty(userName)) {
myUserName = null;
}
else {
myUserName = userName;
}
}
@NotNull
public String getSerializedPassword() {
if (myAnonymous) return "";
if (myStorePassword) {
return PasswordUtil.encodePassword(myPassword);
}
else {
return "";
}
}
public void setSerializedPassword(String serializedPassword) {
if (!StringUtil.isEmpty(serializedPassword)) {
myPassword = PasswordUtil.decodePassword(serializedPassword);
myStorePassword = true;
}
else {
myPassword = null;
}
}
@NotNull
public String getSerializedPassphrase() {
if (myStorePassphrase) {
return PasswordUtil.encodePassword(myPassphrase);
}
else {
return "";
}
}
public void setSerializedPassphrase(String serializedPassphrase) {
if (!StringUtil.isEmpty(serializedPassphrase)) {
myPassphrase = PasswordUtil.decodePassword(serializedPassphrase);
myStorePassphrase = true;
}
else {
myPassphrase = null;
myStorePassphrase = false;
}
}
public void copyRemoteCredentialsTo(@NotNull MutableRemoteCredentials to) {
copyRemoteCredentials(this, to);
}
public void copyFrom(RemoteCredentials from) {
copyRemoteCredentials(from, this);
}
public static void copyRemoteCredentials(@NotNull RemoteCredentials from, @NotNull MutableRemoteCredentials to) {
to.setHost(from.getHost());
to.setPort(from.getPort());
to.setAnonymous(from.isAnonymous());
to.setUserName(from.getUserName());
to.setPassword(from.getPassword());
to.setUseKeyPair(from.isUseKeyPair());
to.setPrivateKeyFile(from.getPrivateKeyFile());
to.setKnownHostsFile(from.getKnownHostsFile());
to.setStorePassword(from.isStorePassword());
to.setStorePassphrase(from.isStorePassphrase());
}
public void load(Element element) {
setHost(element.getAttributeValue(HOST));
setPort(StringUtil.parseInt(element.getAttributeValue(PORT), 22));
setAnonymous(StringUtil.parseBoolean(element.getAttributeValue(ANONYMOUS), false));
setSerializedUserName(element.getAttributeValue(USERNAME));
setSerializedPassword(element.getAttributeValue(PASSWORD));
setPrivateKeyFile(StringUtil.nullize(element.getAttributeValue(PRIVATE_KEY_FILE)));
setKnownHostsFile(StringUtil.nullize(element.getAttributeValue(KNOWN_HOSTS_FILE)));
setSerializedPassphrase(element.getAttributeValue(PASSPHRASE));
setUseKeyPair(StringUtil.parseBoolean(element.getAttributeValue(USE_KEY_PAIR), false));
}
public void save(Element rootElement) {
rootElement.setAttribute(HOST, StringUtil.notNullize(getHost()));
rootElement.setAttribute(PORT, Integer.toString(getPort()));
rootElement.setAttribute(ANONYMOUS, Boolean.toString(isAnonymous()));
rootElement.setAttribute(USERNAME, getSerializedUserName());
rootElement.setAttribute(PASSWORD, getSerializedPassword());
rootElement.setAttribute(PRIVATE_KEY_FILE, StringUtil.notNullize(getPrivateKeyFile()));
rootElement.setAttribute(KNOWN_HOSTS_FILE, StringUtil.notNullize(getKnownHostsFile()));
rootElement.setAttribute(PASSPHRASE, getSerializedPassphrase());
rootElement.setAttribute(USE_KEY_PAIR, Boolean.toString(isUseKeyPair()));
}
}