Package com.sshtools.common.authentication

Source Code of com.sshtools.common.authentication.PublicKeyAuthenticationPrompt

/*
*  SSHTools - Java SSH2 API
*
*  Copyright (C) 2002-2003 Lee David Painter and Contributors.
*
*  Contributions made by:
*
*  Brett Smith
*  Richard Pernavas
*  Erwin Bolwidt
*
*  This program is free software; you can redistribute it and/or
*  modify it under the terms of the GNU General Public License
*  as published by the Free Software Foundation; either version 2
*  of the License, or (at your option) any later version.
*
*  This program is distributed in the hope that it will be useful,
*  but WITHOUT ANY WARRANTY; without even the implied warranty of
*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
*  GNU General Public License for more details.
*
*  You should have received a copy of the GNU General Public License
*  along with this program; if not, write to the Free Software
*  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
*/
package com.sshtools.common.authentication;

import com.sshtools.j2ssh.authentication.AuthenticationProtocolException;
import com.sshtools.j2ssh.authentication.PublicKeyAuthenticationClient;
import com.sshtools.j2ssh.authentication.SshAuthenticationClient;
import com.sshtools.j2ssh.authentication.SshAuthenticationPrompt;
import com.sshtools.j2ssh.transport.publickey.InvalidSshKeyException;
import com.sshtools.j2ssh.transport.publickey.SshPrivateKey;
import com.sshtools.j2ssh.transport.publickey.SshPrivateKeyFile;

import java.awt.Color;
import java.awt.Component;
import java.awt.Dialog;
import java.awt.Frame;
import java.awt.Window;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;


/**
*
*
* @author $author$
* @version $Revision: 1.14 $
*/
public class PublicKeyAuthenticationPrompt implements SshAuthenticationPrompt {
    private Component parent;
    private PublicKeyAuthenticationClient instance;

    /**
* Creates a new PublicKeyAuthenticationPrompt object.
*
* @param parent
*/
    public PublicKeyAuthenticationPrompt(Component parent) {
        this.parent = parent;
    }

    /**
*
*
* @param instance
*
* @throws AuthenticationProtocolException
*/
    public void setInstance(SshAuthenticationClient instance)
        throws AuthenticationProtocolException {
        if (instance instanceof PublicKeyAuthenticationClient) {
            this.instance = (PublicKeyAuthenticationClient) instance;
        } else {
            throw new AuthenticationProtocolException(
                "PublicKeyAuthenticationClient instance required");
        }
    }

    /**
*
*
* @return
*/
    public boolean showPrompt(SshAuthenticationClient inst)
        throws AuthenticationProtocolException {
        if (inst instanceof PublicKeyAuthenticationClient) {
            instance = (PublicKeyAuthenticationClient) inst;
        } else {
            throw new AuthenticationProtocolException(
                "PublicKeyAuthenticationClient instance required");
        }

        File keyfile = (instance.getKeyfile() == null) ? null
                                                       : new File(instance.getKeyfile());
        String passphrase = null;
        SshPrivateKeyFile pkf = null;
        SshPrivateKey key;

        if ((keyfile == null) || !keyfile.exists()) {
            JFileChooser chooser = new JFileChooser();
            chooser.setFileHidingEnabled(false);
            chooser.setDialogTitle("Select Private Key File For Authentication");

            if (chooser.showOpenDialog(parent) == JFileChooser.APPROVE_OPTION) {
                keyfile = chooser.getSelectedFile();
            } else {
                return false;
            }
        }

        FileInputStream in = null;

        try {
            pkf = SshPrivateKeyFile.parse(keyfile);
        } catch (InvalidSshKeyException iske) {
            JOptionPane.showMessageDialog(parent, iske.getMessage());

            return false;
        } catch (IOException ioe) {
            JOptionPane.showMessageDialog(parent, ioe.getMessage());
        }

        // Now see if its passphrase protected
        if (pkf.isPassphraseProtected()) {
            // Show the passphrase dialog
            Window w = (Window) SwingUtilities.getAncestorOfClass(Window.class,
                    parent);
            PassphraseDialog dialog = null;

            if (w instanceof Frame) {
                dialog = new PassphraseDialog((Frame) w);
            } else if (w instanceof Dialog) {
                dialog = new PassphraseDialog((Dialog) w);
            } else {
                dialog = new PassphraseDialog();
            }

            do {
                dialog.setVisible(true);

                if (dialog.isCancelled()) {
                    return false;
                }

                passphrase = new String(dialog.getPassphrase());

                try {
                    key = pkf.toPrivateKey(passphrase);

                    break;
                } catch (InvalidSshKeyException ihke) {
                    dialog.setMessage("Passphrase Invalid! Try again");
                    dialog.setMessageForeground(Color.red);
                }
            } while (true);
        } else {
            try {
                key = pkf.toPrivateKey(passphrase);
            } catch (InvalidSshKeyException ihke) {
                return false;
            }
        }

        instance.setKey(key);
        instance.setKeyfile(keyfile.getAbsolutePath());

        return true;
    }
}
TOP

Related Classes of com.sshtools.common.authentication.PublicKeyAuthenticationPrompt

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.