/* * Copyright (c) 2017, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. * * WSO2 Inc. 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.wso2.carbon.transport.file.connector.server.util; import org.apache.commons.vfs2.FileSystemException; import org.apache.commons.vfs2.FileSystemManager; import org.apache.commons.vfs2.FileSystemOptions; import org.apache.commons.vfs2.util.DelegatingFileSystemOptionsBuilder; import org.wso2.carbon.transport.file.connector.server.exception.FileServerConnectorException; import java.util.Iterator; import java.util.Locale; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * Utility class for File Transport. */ public class FileTransportUtils { private static final Pattern URL_PATTERN = Pattern.compile("[a-z]+://.*"); private static final Pattern PASSWORD_PATTERN = Pattern.compile(":(?:[^/]+)@"); public static FileSystemOptions attachFileSystemOptions( Map<String, String> options, FileSystemManager fsManager) throws FileServerConnectorException { if (options == null) { return null; //returning null as this is not an errorneous case. } FileSystemOptions opts = new FileSystemOptions(); DelegatingFileSystemOptionsBuilder delegate = new DelegatingFileSystemOptionsBuilder(fsManager); if (Constants.SCHEME_SFTP.equals(options.get(Constants.SCHEME))) { Iterator itr = options.entrySet().iterator(); while (itr.hasNext()) { Map.Entry<String, String> entry = (Map.Entry<String, String>) itr.next(); Constants.SftpFileOption[] array = Constants.SftpFileOption.values(); int length = array.length; for (int i = 0; i < length; ++i) { Constants.SftpFileOption option = array[i]; if (entry.getKey().equals(option.toString()) && null != entry.getValue()) { try { delegate.setConfigString(opts, Constants.SCHEME_SFTP, entry.getKey().toLowerCase(Locale.US), entry.getValue()); } catch (FileSystemException e) { throw new FileServerConnectorException( "Failed to set file transport configuration for scheme: " + Constants.SCHEME_SFTP + " and option: " + option.toString(), e); } } } } } if (options.get(Constants.FILE_TYPE) != null) { try { delegate.setConfigString(opts, options.get(Constants.SCHEME), Constants.FILE_TYPE, String.valueOf(getFileType( options.get(Constants.FILE_TYPE)))); } catch (FileSystemException e) { throw new FileServerConnectorException( "Failed to set file transport configuration for scheme: " + options.get(Constants.SCHEME) + " and option: " + Constants.FILE_TYPE, e); } } return opts; } public static String maskURLPassword(String url) { Matcher urlMatcher = URL_PATTERN.matcher(url); if (urlMatcher.find()) { Matcher pwdMatcher = PASSWORD_PATTERN.matcher(url); String maskUrl = pwdMatcher.replaceFirst("\":***@\""); return maskUrl; } else { return url; } } private static Integer getFileType(String fileType) { fileType = fileType.toUpperCase(Locale.US); return Constants.ASCII_TYPE.equals(fileType) ? Integer.valueOf(0) : ( Constants.BINARY_TYPE.equals(fileType) ? Integer.valueOf(2) : ( Constants.EBCDIC_TYPE.equals(fileType) ? Integer.valueOf(1) : ( Constants.LOCAL_TYPE.equals(fileType) ? Integer.valueOf(3) : Integer.valueOf(2)))); } }