Package com.openshift.client

Source Code of com.openshift.client.SSHKeyPair

/*******************************************************************************
* Copyright (c) 2012 Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is made available under the terms of the
* Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Red Hat, Inc. - initial API and implementation
******************************************************************************/
package com.openshift.client;

import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.KeyPair;
import com.openshift.client.utils.Base64Coder;
import com.openshift.internal.client.ssh.AbstractSSHKey;
import com.openshift.internal.client.utils.Assert;

/**
* @author André Dietisheim
*/
public class SSHKeyPair extends AbstractSSHKey {

  /**
   * the length of the key that is created when using #create. ssh-keygen uses
   * a default of 2048
   *
   * @see #create(String, String, String)
   * @see http://en.wikipedia.org/wiki/Ssh-keygen
   */
  private static final int KEYLENGTH = 2048;

  private static final String ID = "com.openshift.client.rest";

  private KeyPair keyPair;
  private String privateKeyPath;
  private String publicKeyPath;

  private SSHKeyPair(KeyPair keyPair, String privateKeyPath, String publicKeyPath, String keyTypeId)
      throws OpenShiftException {
    this(keyPair, privateKeyPath, publicKeyPath, SSHKeyType.getByTypeId(keyTypeId));
  }

  private SSHKeyPair(KeyPair keyPair, String privateKeyPath, String publicKeyPath, SSHKeyType sshKeyType)
      throws OpenShiftException {
    super(sshKeyType);
    this.keyPair = keyPair;
    this.privateKeyPath = privateKeyPath;
    this.publicKeyPath = publicKeyPath;
  }

  public static SSHKeyPair create(String passPhrase, String privateKeyPath, String publicKeyPath)
      throws OpenShiftException {
    Assert.notNull(privateKeyPath);
    Assert.notNull(publicKeyPath);

    return create(SSHKeyType.SSH_RSA, passPhrase, privateKeyPath, publicKeyPath);
  }

  /**
   * Creates private and public ssh-rsa keys and stores them to the given
   * paths. The key is created while using the given pass phrase.
   *
   * @param passPhrase
   *            the pass phrase to set to the new key
   * @param privateKeyPath
   *            the path where the new private key gets stored
   * @param publicKeyPath
   *            the path where the new public key gets stored
   * @return
   * @throws OpenShiftException
   *             if the key could not be created
   */
  public static SSHKeyPair create(SSHKeyType type, String passPhrase, String privateKeyPath, String publicKeyPath)
      throws OpenShiftException {
    try {
      KeyPair keyPair = KeyPair.genKeyPair(new JSch(), KeyPair.RSA, KEYLENGTH);
      keyPair.setPassphrase(passPhrase);
      keyPair.writePublicKey(publicKeyPath, "created by " + ID);
      keyPair.writePrivateKey(privateKeyPath);
      return new SSHKeyPair(keyPair, privateKeyPath, publicKeyPath, SSHKeyType.SSH_RSA);
    } catch (Exception e) {
      throw new OpenShiftException(e, "Could not create new rsa key", e);
    }
  }

  /**
   * Loads existing private and public ssh key from the given paths.
   *
   * @param privateKeyPath
   *            the path to the private key
   * @param publicKeyPath
   *            the path to the public key
   * @return
   * @throws OpenShiftException
   */
  public static SSHKeyPair load(String privateKeyPath, String publicKeyPath)
      throws OpenShiftException {
    try {
      KeyPair keyPair = KeyPair.load(new JSch(), privateKeyPath, publicKeyPath);
      return new SSHKeyPair(keyPair, privateKeyPath, publicKeyPath, SSHKeyType.getByJSchKeyType(keyPair));
    } catch (JSchException e) {
      throw new OpenShiftException(e, "Could not create new ssh key");
    }
  }

  public String getPublicKey() {
    return Base64Coder.encode(keyPair.getPublicKeyBlob());
  }

  public String getPrivateKeyPath() {
    return privateKeyPath;
  }

  public String getPublicKeyPath() {
    return publicKeyPath;
  }
}
TOP

Related Classes of com.openshift.client.SSHKeyPair

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.