All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.technologybrewery.habushu.util.MavenPasswordDecoder Maven / Gradle / Ivy

Go to download

Leverages Poetry and Pyenv to provide an automated, predictable order of execution of build commands that apply DevOps and configuration management best practices

The newest version!
package org.technologybrewery.habushu.util;

import java.io.File;
import java.util.List;

import org.apache.maven.settings.Server;
import org.apache.maven.settings.Settings;
import org.sonatype.plexus.components.cipher.DefaultPlexusCipher;
import org.sonatype.plexus.components.cipher.PlexusCipherException;
import org.sonatype.plexus.components.sec.dispatcher.DefaultSecDispatcher;
import org.sonatype.plexus.components.sec.dispatcher.SecDispatcherException;
import org.sonatype.plexus.components.sec.dispatcher.SecUtil;
import org.sonatype.plexus.components.sec.dispatcher.model.SettingsSecurity;

/**
 * A simple Maven password decoding tool adapted from open-source code.
 */
public class MavenPasswordDecoder {

    private MavenPasswordDecoder() {
    }

    /**
     * The settings-security.xml file for the current Maven user.
     */
    private static final File ORIGINAL_SETTINGS_SECURITY_FILE = new File(System.getProperty("user.home"),
	    ".m2/settings-security.xml");

    private static String decodePassword(String encodedPassword, String key) throws PlexusCipherException {
	DefaultPlexusCipher cipher = new DefaultPlexusCipher();
	return cipher.decryptDecorated(encodedPassword, key);
    }

    private static String decodeMasterPassword(String encodedMasterPassword) throws PlexusCipherException {
	return decodePassword(encodedMasterPassword, DefaultSecDispatcher.SYSTEM_PROPERTY_SEC_LOCATION);
    }

    private static SettingsSecurity readSettingsSecurity(File file) throws SecDispatcherException {
	return SecUtil.read(file.getAbsolutePath(), true);
    }

    public static String decryptPasswordForServer(Settings settings, String serverId)
	    throws SecDispatcherException, PlexusCipherException {

	SettingsSecurity settingsSecurity = null;

	if (System.getProperty("settings.security") != null) {
	    File movedSettingsSecurityFile = new File(System.getProperty("settings.security"));
	    settingsSecurity = readSettingsSecurity(movedSettingsSecurityFile);
	} else if (ORIGINAL_SETTINGS_SECURITY_FILE.exists()) {
	    settingsSecurity = readSettingsSecurity(ORIGINAL_SETTINGS_SECURITY_FILE);
	}

	if (settingsSecurity != null) {
	    String encodedMasterPassword = settingsSecurity.getMaster();
	    String plainTextMasterPassword = decodeMasterPassword(encodedMasterPassword);

	    List servers = settings.getServers();

	    for (Server server : servers) {
		if (serverId.equals(server.getId())) {
		    String encodedServerPassword = server.getPassword();
		    String plainTextServerPassword = decodePassword(encodedServerPassword, plainTextMasterPassword);

		    return plainTextServerPassword;
		}
	    }
	}

	return null;
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy