/*
* ====================================================================
* Copyright (c) 2004-2012 TMate Software Ltd. All rights reserved.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
* are also available at http://svnkit.com/license.html
* If newer versions of this license are posted there, you may use a
* newer version instead, at your option.
* ====================================================================
*/
package org.tmatesoft.svn.core.auth;
import java.io.File;
import org.tmatesoft.svn.core.SVNURL;
import org.tmatesoft.svn.core.internal.util.SVNEncodingUtil;
import org.tmatesoft.svn.core.internal.wc.SVNFileType;
/**
* The <b>SVNSSLAuthentication</b> class represents user's credentials used
* to authenticate a user in secure connections. Used along with the
* {@link ISVNAuthenticationManager#SSL SSL} credential kind.
*
* @version 1.3
* @author TMate Software Ltd.
* @since 1.2
*/
public class SVNSSLAuthentication extends SVNAuthentication {
public static final String MSCAPI = "MSCAPI";
public static final String SSL = "SSL";
/**
* @param certFile user's certificate file
* @param password user's password
* @param storageAllowed to store or not this credential in a
* credentials cache
* @param url url these credentials are applied to
* @param isPartial
*
* @return authentication object
*/
public static SVNSSLAuthentication newInstance(File certFile, char[] password, boolean storageAllowed, SVNURL url, boolean isPartial) {
return new SVNSSLAuthentication(SSL, null, certFile, password, storageAllowed, url, isPartial);
}
/**
* @param cert user's certificate
* @param password user's password
* @param storageAllowed to store or not this credential in a
* credentials cache
* @param url url these credentials are applied to
* @param isPartial
*
* @return authentication object
*/
public static SVNSSLAuthentication newInstance(byte[] cert, char[] password, boolean storageAllowed, SVNURL url, boolean isPartial) {
return new SVNSSLAuthentication(SSL, null, cert, password, storageAllowed, url, isPartial);
}
/**
* @param kind authentication kind ({@link #MSCAPI} or {@link #SSL}
* @param alias alias
* @param storageAllowed to store or not this credential in a
* credentials cache
* @param url url these credentials are applied to
* @param isPartial
*
* @return authentication object
*/
public static SVNSSLAuthentication newInstance(String kind, String alias, boolean storageAllowed, SVNURL url, boolean isPartial) {
return new SVNSSLAuthentication(kind, alias, (File) null, null, storageAllowed, url, isPartial);
}
private File myCertificate;
private char[] myPassword;
private String mySSLKind;
private String myAlias;
private String myCertificatePath;
private byte[] myCertificateData;
/**
* @deprecated Use {@link #newInstance(File, char[], boolean, SVNURL, boolean) method
*/
public SVNSSLAuthentication(File certFile, String password, boolean storageAllowed) {
this(SSL, null, certFile, password != null ? password.toCharArray() : null, storageAllowed, null, false);
}
/**
* @deprecated Use {@link #newInstance(File, char[], boolean, SVNURL, boolean) method
*/
public SVNSSLAuthentication(File certFile, String password, boolean storageAllowed, SVNURL url, boolean isPartial) {
this(SSL, null, certFile, password != null ? password.toCharArray() : null, storageAllowed, url, isPartial);
}
/**
* @deprecated Use {@link #newInstance(String, String, boolean, SVNURL, boolean)} method
*/
public SVNSSLAuthentication(String sslKind, String alias, boolean storageAllowed, SVNURL url, boolean isPartial) {
this(sslKind, alias, (File) null, null, storageAllowed, url, isPartial);
}
private SVNSSLAuthentication(String sslKind, String alias, File certFile, char[] password, boolean storageAllowed, SVNURL url, boolean isPartial) {
super(ISVNAuthenticationManager.SSL, null, storageAllowed, url, isPartial);
mySSLKind = sslKind;
myAlias = alias;
myCertificate = certFile;
myPassword = password;
}
private SVNSSLAuthentication(String sslKind, String alias, byte[] cert, char[] password, boolean storageAllowed, SVNURL url, boolean isPartial) {
super(ISVNAuthenticationManager.SSL, null, storageAllowed, url, isPartial);
mySSLKind = sslKind;
myAlias = alias;
myCertificateData = cert;
myPassword = password;
}
/**
* Returns password.
*
* @deprecated Use {@link #getPasswordValue()} method
*
* @return password
*/
public String getPassword() {
return myPassword != null ? new String(myPassword) : null;
}
/**
* Returns certificate raw data
*
* @return certificate data
*/
public byte[] getCertificate() {
return myCertificateData;
}
/**
* Returns password.
*
* @since 1.8.9
* @return password
*/
public char[] getPasswordValue() {
return myPassword;
}
/**
* Returns a user's certificate file.
*
* @return certificate file
*/
public File getCertificateFile() {
return myCertificate;
}
public String getSSLKind() {
return mySSLKind;
}
/**
* Only used for MSCAPI
*/
public String getAlias() {
return myAlias;
}
public String getCertificatePath() {
if (myCertificatePath != null) {
return myCertificatePath;
}
return myCertificate.getAbsolutePath();
}
public void setCertificatePath(String path) {
myCertificatePath = path;
}
public static boolean isCertificatePath(String path) {
return SVNFileType.getType(new File(path)) == SVNFileType.FILE;
}
@Override
public void dismissSensitiveData() {
super.dismissSensitiveData();
SVNEncodingUtil.clearArray(myPassword);
}
@Override
public SVNAuthentication copy() {
return new SVNSSLAuthentication(mySSLKind, myAlias, myCertificate, copyOf(myPassword), isStorageAllowed(), getURL(), isPartial());
}
}