content: /*
   *  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
   *
   *      https://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 };
      }
  
  }
  