All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.commons.vfs2.provider.ftps.FtpsFileSystemConfigBuilder Maven / Gradle / Ivy

There is a newer version: 2.9.0
Show newest version
/*
 * 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;
    }

    /**
     * Sets FTPS mode, either "implicit" or "explicit".
     *
     * 

* 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. *

* * @param opts The FileSystemOptions. * @param ftpsMode The mode to establish a FTPS connection. * @see Wikipedia: FTPS/Implicit * @since 2.1 */ public void setFtpsMode(final FileSystemOptions opts, final FtpsMode ftpsMode) { setParam(opts, FTPS_MODE, ftpsMode); } /** * Returns 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); } /** * Sets FTPS type, either "implicit" or "explicit". *

* 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. *

* * @param opts The FileSystemOptions. * @param ftpsType The file type. * @see Wikipedia: FTPS/Implicit * @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); } /** * Returns 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 #getFtpsMode(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. *

* 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. *

* * @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); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy