/* * Copyright 2006-2014 smartics, Kronseder & Reiner GmbH * * Licensed 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 com.redhat.rcm.maven.plugin.buildmetadata.common; import org.apache.maven.settings.Server; import org.apache.maven.settings.Settings; import org.sonatype.plexus.components.sec.dispatcher.SecDispatcherException; import com.redhat.rcm.maven.plugin.buildmetadata.util.SettingsDecrypter; /** * The SCM connection information for authentication. * * @author <a href="mailto:robert.reiner@smartics.de">Robert Reiner</a> * @version $Revision:591 $ */ public final class ScmCredentials { // ********************************* Fields ********************************* // --- constants ------------------------------------------------------------ // --- members -------------------------------------------------------------- /** * Helper to decrypt encrypted passwords. */ private final SettingsDecrypter settingsDecrypter; /** * The user's settings. */ private final Settings settings; /** * The user name (used by svn and starteam protocol). */ private String userName; /** * The user password (used by svn and starteam protocol). */ private String password; /** * The private key (used by java svn). */ private String privateKey; /** * The pass phrase (used by java svn). */ private String passPhrase; // ****************************** Initializer ******************************* // ****************************** Constructors ****************************** /** * Default constructor. * * @param settingsDecrypter a Helper to decrypt encrypted passwords. May be * <code>null</code> if no decryption is required. * @param settings the settings to fetch SCM information. * @param userName the user name (used by svn and starteam protocol). * @param password the user password (used by svn and starteam protocol). * @param privateKey the private key (used by java svn). * @param passphrase the passphrase (used by java svn). */ public ScmCredentials(final SettingsDecrypter settingsDecrypter, final Settings settings, final String userName, // NOPMD final String password, final String privateKey, final String passphrase) { this.settingsDecrypter = settingsDecrypter; this.settings = settings; this.userName = userName; this.password = decrypt(settingsDecrypter, password); this.privateKey = privateKey; this.passPhrase = passphrase; } // ****************************** Inner Classes ***************************** // ********************************* Methods ******************************** // --- init ----------------------------------------------------------------- private static String decrypt(final SettingsDecrypter settingsDecrypter, final String possiblyEncrypted) { if (settingsDecrypter != null) { try { final String decrypted = settingsDecrypter.decrypt(possiblyEncrypted); return decrypted; } catch (final SecDispatcherException e) { // ok, continue with the unencrypted... } } return possiblyEncrypted; } // --- get&set -------------------------------------------------------------- /** * Returns the user name (used by svn and starteam protocol). * * @return the user name (used by svn and starteam protocol). */ public String getUserName() { return userName; } /** * Returns the user password (used by svn and starteam protocol). * * @return the user password (used by svn and starteam protocol). */ public String getPassword() { return password; } /** * Returns the private key (used by java svn). * * @return the private key (used by java svn). */ public String getPrivateKey() { return privateKey; } /** * Returns the pass phrase (used by java svn). * * @return the pass phrase (used by java svn). */ public String getPassPhrase() { return passPhrase; } // --- business ------------------------------------------------------------- /** * Fetches the server information from the settings for the specified host. * * @param host the host whose access information is fetched from the settings * file. */ public void configureByServer(final String host) { final Server server = settings.getServer(host); if (server != null) { if (userName == null) { userName = settings.getServer(host).getUsername(); } if (password == null) { password = decrypt(settingsDecrypter, settings.getServer(host).getPassword()); } if (privateKey == null) { privateKey = settings.getServer(host).getPrivateKey(); } if (passPhrase == null) { passPhrase = settings.getServer(host).getPassphrase(); } } } // --- object basics -------------------------------------------------------- }