001package org.apache.maven.wagon.providers.ssh.jsch.interactive;
002
003/*
004 * Licensed to the Apache Software Foundation (ASF) under one
005 * or more contributor license agreements.  See the NOTICE file
006 * distributed with this work for additional information
007 * regarding copyright ownership.  The ASF licenses this file
008 * to you under the Apache License, Version 2.0 (the
009 * "License"); you may not use this file except in compliance
010 * with the License.  You may obtain a copy of the License at
011 *
012 *   http://www.apache.org/licenses/LICENSE-2.0
013 *
014 * Unless required by applicable law or agreed to in writing,
015 * software distributed under the License is distributed on an
016 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
017 * KIND, either express or implied.  See the License for the
018 * specific language governing permissions and limitations
019 * under the License.
020 */
021
022import com.jcraft.jsch.UIKeyboardInteractive;
023import com.jcraft.jsch.UserInfo;
024
025/**
026 * A proxy that let you merge a <code>UserInfo</code> and a
027 * <code>UIKeyboardInteractive</code>
028 *
029 * @author Juan F. Codagnone
030 * @since Sep 22, 2005
031 */
032public class UserInfoUIKeyboardInteractiveProxy
033    implements UserInfo, UIKeyboardInteractive
034{
035    private final UIKeyboardInteractive interactive;
036
037    private final UserInfo userInfo;
038
039    public UserInfoUIKeyboardInteractiveProxy( UserInfo userInfo, UIKeyboardInteractive interactive )
040    {
041        this.userInfo = userInfo;
042        this.interactive = interactive;
043    }
044
045    /**
046     * @see com.jcraft.jsch.UIKeyboardInteractive#promptKeyboardInteractive(String,String,String,String[],boolean[])
047     */
048    public String[] promptKeyboardInteractive( String destination, String name, String instruction, String[] prompt,
049                                               boolean[] echo )
050    {
051        if ( userInfo.getPassword() != null && prompt != null && prompt.length != 0 )
052        {
053            prompt[0] = "Keyboard interactive required, supplied password is ignored\n" + prompt[0];
054        }
055        return interactive.promptKeyboardInteractive( destination, name, instruction, prompt, echo );
056    }
057
058    /**
059     * @see com.jcraft.jsch.UserInfo#getPassphrase()
060     */
061    public String getPassphrase()
062    {
063        return userInfo.getPassphrase();
064    }
065
066    /**
067     * @see com.jcraft.jsch.UserInfo#getPassword()
068     */
069    public String getPassword()
070    {
071        return userInfo.getPassword();
072    }
073
074    /**
075     * @see com.jcraft.jsch.UserInfo#promptPassword(String)
076     */
077    public boolean promptPassword( String arg0 )
078    {
079        return userInfo.promptPassword( arg0 );
080    }
081
082    /**
083     * @see com.jcraft.jsch.UserInfo#promptPassphrase(String)
084     */
085    public boolean promptPassphrase( String arg0 )
086    {
087        return userInfo.promptPassphrase( arg0 );
088    }
089
090    /**
091     * @see com.jcraft.jsch.UserInfo#promptYesNo(String)
092     */
093    public boolean promptYesNo( String arg0 )
094    {
095        return userInfo.promptYesNo( arg0 );
096    }
097
098    /**
099     * @see com.jcraft.jsch.UserInfo#showMessage(String)
100     */
101    public void showMessage( String arg0 )
102    {
103        userInfo.showMessage( arg0 );
104    }
105
106}