/* * 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.tools.ant.taskdefs.optional.ssh; import com.jcraft.jsch.UIKeyboardInteractive; import com.jcraft.jsch.UserInfo; /** * Class containing information on an SSH user. */ public class SSHUserInfo implements UserInfo, UIKeyboardInteractive { private String name; private String password = null; private String keyfile; private String passphrase = null; private boolean trustAllCertificates; /** Constructor for SSHUserInfo. */ public SSHUserInfo() { this(null, false); } /** * Constructor for SSHUserInfo. * @param password the user's password * @param trustAllCertificates if true trust hosts whose identity is unknown */ public SSHUserInfo(String password, boolean trustAllCertificates) { super(); this.password = password; this.trustAllCertificates = trustAllCertificates; } /** * Gets the user name. * @return the user name */ public String getName() { return name; } /** * Gets the pass phrase of the user. * @param message a message * @return the passphrase */ public String getPassphrase(String message) { return passphrase; } /** * Gets the user's password. * @return the user's password */ @Override public String getPassword() { return password; } /** * Prompts a string. * @param str the string * @return whether the string was prompted */ public boolean prompt(String str) { return false; } /** * Indicates whether a retry was done. * @return whether a retry was done */ public boolean retry() { return false; } /** * Sets the name. * @param name The name to set */ public void setName(String name) { this.name = name; } /** * Sets the passphrase. * @param passphrase The passphrase to set */ public void setPassphrase(String passphrase) { this.passphrase = passphrase; } /** * Sets the password. * @param password The password to set */ public void setPassword(String password) { this.password = password; } /** * Sets the trust. * @param trust whether to trust or not. */ public void setTrust(boolean trust) { this.trustAllCertificates = trust; } /** * @return whether to trust or not. */ public boolean getTrust() { return this.trustAllCertificates; } /** * Returns the passphrase. * @return String */ @Override public String getPassphrase() { return passphrase; } /** * Returns the keyfile. * @return String */ public String getKeyfile() { return keyfile; } /** * Sets the keyfile. * @param keyfile The keyfile to set */ public void setKeyfile(String keyfile) { this.keyfile = keyfile; } /** * Implement the UserInfo interface. * @param message ignored * @return true always */ @Override public boolean promptPassphrase(String message) { return true; } /** * Implement the UserInfo interface. * @param passwordPrompt ignored * @return true the first time this is called, false otherwise */ @Override public boolean promptPassword(String passwordPrompt) { return true; } /** * Implement the UserInfo interface. * @param message ignored * @return the value of trustAllCertificates */ @Override public boolean promptYesNo(String message) { return trustAllCertificates; } //why do we do nothing? /** * Implement the UserInfo interface (noop). * @param message ignored */ @Override public void showMessage(String message) { //log(message, Project.MSG_DEBUG); } /** * Implementation of UIKeyboardInteractive#promptKeyboardInteractive. * @param destination not used. * @param name not used. * @param instruction not used. * @param prompt the method checks if this is one in length. * @param echo the method checks if the first element is false. * @return the password in an size one array if there is a password * and if the prompt and echo checks pass. */ @Override public String[] promptKeyboardInteractive(String destination, String name, String instruction, String[] prompt, boolean[] echo) { if (prompt.length != 1 || echo[0] || this.password == null) { return null; } return new String[] { this.password }; } }