Java tutorial
/* * 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.commons.vfs2.provider.ftps; import javax.net.ssl.KeyManager; import javax.net.ssl.TrustManager; import org.apache.commons.net.util.TrustManagerUtils; import org.apache.commons.vfs2.FileSystemOptions; import org.apache.commons.vfs2.provider.ftp.FtpFileSystemConfigBuilder; /** * The configuration builder for various FTPS configuration options. * * @since 2.0 */ public final class FtpsFileSystemConfigBuilder extends FtpFileSystemConfigBuilder { private static final String _PREFIX = FtpsFileSystemConfigBuilder.class.getName(); private static final FtpsFileSystemConfigBuilder BUILDER = new FtpsFileSystemConfigBuilder(); private static final String FTPS_MODE = _PREFIX + ".FTPS_MODE"; private static final String PROT = _PREFIX + ".PROT"; private static final String KEY_MANAGER = _PREFIX + ".KEY_MANAGER"; private static final String TRUST_MANAGER = _PREFIX + ".TRUST_MANAGER"; private FtpsFileSystemConfigBuilder() { super("ftps."); } /** * Gets the singleton builder. * * @return the singleton builder. */ public static FtpsFileSystemConfigBuilder getInstance() { return BUILDER; } /** * Set FTPS mode, either "implicit" or "explicit". * * <p>Note, that implicit mode is not standardized and considered as deprecated. Some unit tests for VFS fail with * implicit mode and it is not yet clear if its a problem with Commons VFS/Commons Net or our test server Apache * FTP/SSHD.</p> * * @param opts The FileSystemOptions. * @param ftpsMode The mode to establish a FTPS connection. * @see <a href="http://en.wikipedia.org/wiki/FTPS#Implicit">Wikipedia: FTPS/Implicit</a> * @since 2.1 */ public void setFtpsMode(final FileSystemOptions opts, final FtpsMode ftpsMode) { setParam(opts, FTPS_MODE, ftpsMode); } /** * Return the FTPS mode. Defaults to "explicit" if not defined. * * @param opts The FileSystemOptions. * @return The file type. * @see #setFtpsType */ public FtpsMode getFtpsMode(final FileSystemOptions opts) { return getEnum(FtpsMode.class, opts, FTPS_MODE, FtpsMode.EXPLICIT); } /** * Set FTPS type, either "implicit" or "explicit". * <p> * Note, that implicit mode is not standardized and considered as deprecated. Some unit tests for VFS fail with * implicit mode and it is not yet clear if its a problem with Commons VFS/Commons Net or our test server Apache * FTP/SSHD. * </p> * * @param opts The FileSystemOptions. * @param ftpsType The file type. * @see <a href="http://en.wikipedia.org/wiki/FTPS#Implicit">Wikipedia: FTPS/Implicit</a> * @deprecated As of 2.1, use {@link #setFtpsMode(FileSystemOptions, FtpsMode)} */ @Deprecated public void setFtpsType(final FileSystemOptions opts, final String ftpsType) { final FtpsMode mode; if (ftpsType != null) { mode = FtpsMode.valueOf(ftpsType.toUpperCase()); if (mode == null) { throw new IllegalArgumentException("Not a proper FTPS mode: " + ftpsType); } } else { mode = null; } setFtpsMode(opts, mode); } /** * Return the FTPS type. Defaults to "explicit" if not defined. * * @param opts The FileSystemOptions. * @return The file type. * @see #setFtpsType * @deprecated As of 2.1, use {@link #getFtpsType(FileSystemOptions)} */ @Deprecated public String getFtpsType(final FileSystemOptions opts) { return getFtpsMode(opts).name().toLowerCase(); } /** * Gets the data channel protection level (PROT). * * @param opts The FileSystemOptions. * @return The PROT value. * @see org.apache.commons.net.ftp.FTPSClient#execPROT(String) * @since 2.1 */ public FtpsDataChannelProtectionLevel getDataChannelProtectionLevel(final FileSystemOptions opts) { return getEnum(FtpsDataChannelProtectionLevel.class, opts, PROT); } /** * Sets the data channel protection level (PROT). * * @param opts The FileSystemOptions. * @param prot The PROT value, {@code null} has no effect. * @see org.apache.commons.net.ftp.FTPSClient#execPROT(String) * @since 2.1 */ public void setDataChannelProtectionLevel(final FileSystemOptions opts, final FtpsDataChannelProtectionLevel prot) { setParam(opts, PROT, prot); } /** * Gets the KeyManager used to provide a client-side certificate if the FTPS server requests it. * * @param opts The FileSystemOptions. * @return the key manager instance or {@code null} * @see org.apache.commons.net.ftp.FTPSClient#setKeyManager(KeyManager) * @since 2.1 */ public KeyManager getKeyManager(final FileSystemOptions opts) { return (KeyManager) getParam(opts, KEY_MANAGER); } /** * Sets the KeyManager used to provide a client-side certificate if the FTPS server requests it. * * @param opts The FileSystemOptions. * @param keyManager The key manager instance. * @see org.apache.commons.net.ftp.FTPSClient#setKeyManager(KeyManager) * @since 2.1 */ public void setKeyManager(final FileSystemOptions opts, final KeyManager keyManager) { setParam(opts, KEY_MANAGER, keyManager); } /** * Gets the TrustManager that validates the FTPS server's certificate. * <p> * If the params do not contain the key for the trust manager, it will return a trust manger that simply checks this * certificate for validity. * </p> * * @param opts The FileSystemOptions. * @return the trust manager instance or {@code null} * @see org.apache.commons.net.ftp.FTPSClient#setTrustManager(TrustManager) * @since 2.1 */ public TrustManager getTrustManager(final FileSystemOptions opts) { final TrustManager trustManager; if (hasParam(opts, TRUST_MANAGER)) { trustManager = (TrustManager) getParam(opts, TRUST_MANAGER); } else { trustManager = TrustManagerUtils.getValidateServerCertificateTrustManager(); } return trustManager; } /** * Sets the TrustManager that validates the FTPS server's certificate. * * @param opts The FileSystemOptions. * @param trustManager The trust manager instance. * @see org.apache.commons.net.ftp.FTPSClient#setTrustManager(TrustManager) * @since 2.1 */ public void setTrustManager(final FileSystemOptions opts, final TrustManager trustManager) { setParam(opts, TRUST_MANAGER, trustManager); } }