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

es.gob.afirma.standalone.configurator.ConfiguratorLinux Maven / Gradle / Ivy

There is a newer version: 1.8.2
Show newest version
/* Copyright (C) 2011 [Gobierno de Espana]
 * This file is part of "Cliente @Firma".
 * "Cliente @Firma" 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.
 *   - or The European Software License; either version 1.1 or (at your option) any later version.
 * You may contact the copyright holder at: [email protected]
 */

package es.gob.afirma.standalone.configurator;

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.security.GeneralSecurityException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.logging.Logger;

import es.gob.afirma.core.misc.BoundedBufferedReader;
import es.gob.afirma.standalone.configurator.CertUtil.CertPack;

/** Configura la instalación en Linux para la correcta ejecución de AutoFirma. */
final class ConfiguratorLinux implements Configurator {

	private static final Logger LOGGER = Logger.getLogger("es.gob.afirma"); //$NON-NLS-1$

    private static final String LINUX_CHROMIUM_V56_OR_LOWER_PREFS_PATH = "/.config/chromium/Local State";//$NON-NLS-1$
	private static final String LINUX_CHROME_V56_OR_LOWER_PREFS_PATH = "/.config/google-chrome/Local State";//$NON-NLS-1$

	private static final String LINUX_CHROMIUM_V57_OR_HIGHER_PREFS_PATH = "/.config/chromium/Default/Preferences";//$NON-NLS-1$
	private static final String LINUX_CHROME_V57_OR_HIGHER_PREFS_PATH = "/.config/google-chrome/Default/Preferences";//$NON-NLS-1$

	private static final String ALTERNATIVE_APP_SUBDIR = ".afirma/AutoFirma"; //$NON-NLS-1$

	private static final String UNINSTALL_SCRIPT_NAME = "uninstall.sh"; //$NON-NLS-1$
	private static final String INSTALL_SCRIPT_NAME = "script.sh"; //$NON-NLS-1$

    private static final String KS_FILENAME = "autofirma.pfx"; //$NON-NLS-1$
    private static final String FILE_AUTOFIRMA_CERTIFICATE = "AutoFirma_ROOT.cer"; //$NON-NLS-1$
    private static final String KS_PASSWORD = "654321"; //$NON-NLS-1$

	private final boolean jnlpInstance;

    public ConfiguratorLinux(final boolean jnlpInstance) {
		this.jnlpInstance = jnlpInstance;
	}

    @Override
    public void configure(final Console window) throws IOException, GeneralSecurityException {

        LOGGER.info(Messages.getString("ConfiguratorLinux.2")); //$NON-NLS-1$

        final File appDir = getApplicationDirectory(this.jnlpInstance);

        LOGGER.info(Messages.getString("ConfiguratorLinux.3") + appDir.getAbsolutePath()); //$NON-NLS-1$

        // Obtenemos los directorios de los usuarios
		final String[] usersDirs = getSystemUsersHomes();

        if (!checkSSLKeyStoreGenerated(appDir)) {
            LOGGER.info(Messages.getString("ConfiguratorLinux.5")); //$NON-NLS-1$

            final CertPack certPack = CertUtil.getCertPackForLocalhostSsl(
                ConfiguratorUtil.CERT_ALIAS,
                KS_PASSWORD
            );

            LOGGER.info(Messages.getString("ConfiguratorLinux.11")); //$NON-NLS-1$

           //Generacion del certificado pfx
            ConfiguratorUtil.installFile(
            		certPack.getPkcs12(),
            		new File(appDir, KS_FILENAME));

          //Generacion del certificado raiz .cer
            ConfiguratorUtil.installFile(
            		certPack.getCaCertificate().getEncoded(),
            		new File(appDir, FILE_AUTOFIRMA_CERTIFICATE));

            try {
                LOGGER.info(Messages.getString("ConfiguratorLinux.13")); //$NON-NLS-1$
                ConfiguratorFirefoxLinux.createScriptsToSystemKeyStore(appDir, usersDirs,
                		new File(appDir, ConfiguratorLinux.INSTALL_SCRIPT_NAME),
                		new File(appDir, ConfiguratorLinux.UNINSTALL_SCRIPT_NAME));
                ConfiguratorFirefoxLinux.createScriptsToMozillaKeyStore(appDir, usersDirs,
                		new File(appDir, ConfiguratorLinux.INSTALL_SCRIPT_NAME),
                		new File(appDir, ConfiguratorLinux.UNINSTALL_SCRIPT_NAME));
              }
            catch(final MozillaProfileNotFoundException e) {
                LOGGER.warning(Messages.getString("ConfiguratorLinux.12")); //$NON-NLS-1$
            }
        }
        else {
            LOGGER.info(Messages.getString("ConfiguratorLinux.14")); //$NON-NLS-1$
        }

        createScriptsRemoveChromeWarnings(appDir, usersDirs);

        LOGGER.info(Messages.getString("ConfiguratorLinux.8")); //$NON-NLS-1$
    }

    /** Comprueba si ya existe un almacén de certificados generado.
     * @param appConfigDir Directorio de configuración de la aplicación.
     * @return {@code true} si ya existe un almacen de certificados SSL, {@code false} en caso contrario. */
    private static boolean checkSSLKeyStoreGenerated(final File appConfigDir) {
        return new File(appConfigDir, KS_FILENAME).exists();
    }

	private static File getApplicationDirectory(final boolean jnlpDeployment) {

		// Devolver un directorio que utilizar como directorio de instalacion cuando
		// se realice un despliegue JNLP
		if (jnlpDeployment) {
			try {
				return getIntApplicationDirectory();
			} catch (final IOException e) {
				LOGGER.severe("No se encuentra ni ha podido generarse el directorio de aplicacion: " + e); //$NON-NLS-1$
			}
		}

		return ConfiguratorUtil.getApplicationDirectory();
	}

	/**
	 * Obtiene un directorio en el que almacenar los ficheros de la aplicación.
	 * @return Directorio de aplicación.
	 * @throws IOException
	 */
	private static File getIntApplicationDirectory() throws IOException {
		String userHome = null;
		try {
			userHome = System.getProperty("user.home"); //$NON-NLS-1$
		}
		catch (final Exception e) {
			throw new IOException("No se ha podido identificar el directorio del usuario para almacenar los ficheros de instalacion", e); //$NON-NLS-1$
		}
		if (userHome == null) {
			throw new IOException("No se encuentra definido el directorio del usuario"); //$NON-NLS-1$
		}

		final File appDir = new File(userHome, ALTERNATIVE_APP_SUBDIR);
		if (!appDir.isDirectory() && !appDir.mkdirs()) {
			throw new IOException("No ha podido crearse el directorio para los ficheros de aplicacion"); //$NON-NLS-1$
		}
		return appDir;
	}

    /** Obtiene los directorios de usuarios del sistema.
	 * @return Listado con todos directorios de los usuarios del sistema.
     * @throws IOException Cuando no se puede obtener el listado de directorios. */
	private static String[] getSystemUsersHomes() throws IOException {

        // Comando para sacar los usuarios del sistema
        final String[] command = new String[] {
				"cut", //$NON-NLS-1$
				"-d:", //$NON-NLS-1$
				"-f6", //$NON-NLS-1$
				"/etc/passwd" //$NON-NLS-1$
				};

		try {
			final Process process = new ProcessBuilder(command).start();

			String line;
			// arraylist con todos los directorios de usuario
			final List usersDir = new ArrayList<>();
			try (
					final InputStream resIs = process.getInputStream();
					final BufferedReader resReader = new BoundedBufferedReader(
							new InputStreamReader(resIs),
							2048, // Maximo 256 lineas de salida (256 perfiles)
							2048 // Maximo 2048 caracteres por linea
							);
					) {
				while ((line = resReader.readLine()) != null) {
					if(line.toLowerCase().contains("home/") && !usersDir.contains(line)) { //$NON-NLS-1$
						usersDir.add(line);
					}
				}
			}
			return usersDir.toArray(new String[usersDir.size()]);
		}
		catch (final Exception e) {
			LOGGER.severe("Error al obtener el listado de directorios de usuarios del sistema: " + e); //$NON-NLS-1$
			throw new IOException("No se pudo obtener el listado de directorios de usuarios del sistema", e); //$NON-NLS-1$
		}
	}

    /** Genera el script que elimina el warning al ejecutar AutoFirma desde Chrome.
	 * En linux genera el script que hay que ejecutar para realizar la instalación pero no lo ejecuta, de eso se encarga el instalador Debian.
	 * @param targetDir Directorio de instalación del sistema
	 *  
    *
  • En LINUX contiene el contenido del script a ejecutar.
  • *
*/ private static void createScriptsRemoveChromeWarnings(final File targetDir, final String[] usersDirs) { for (final String userDir : usersDirs) { // Generamos el script de instalacion final StringBuilder installationScript = new StringBuilder(); // Generamos el script de desistalacion final StringBuilder uninstallationScript = new StringBuilder(); // Montamos el script de instalacion y desinstalacion que // incluya el protocolo "afirma" en el fichero Local State o Preferences (segun la version) // para Google Chrome o Chromium try { // Se escriben los comandos en el script de instalacion final ArrayList installCommands = getCommandsToRemoveChromeAndChromiumWarningsOnInstall(targetDir, userDir); final Iterator list = installCommands.iterator(); while(list.hasNext()) { ConfiguratorUtil.printScript(list.next(), installationScript); } // Se almacenan los script de instalación try { ConfiguratorUtil.writeScript(installationScript, new File(targetDir, INSTALL_SCRIPT_NAME)); } catch (final Exception e) { throw new IOException("Error al crear el script para agregar la confianza del esquema 'afirma'", e); //$NON-NLS-1$ } // Se escriben los comandos en el script de desinstalacion final ArrayList uninstallCommands = getCommandsToRemoveChromeAndChromiumWarningsOnUninstall(targetDir, userDir); final Iterator list2 = uninstallCommands.iterator(); // Se escriben los comandos en el script de instalacion while(list2.hasNext()) { ConfiguratorUtil.printScript(list2.next(), uninstallationScript); } try { ConfiguratorUtil.writeScript(uninstallationScript, new File(targetDir, UNINSTALL_SCRIPT_NAME)); } catch (final Exception e) { LOGGER.severe( "Excepcion en la creacion del script linux para la modificacion del fichero de protocolos de Google Chrome: " + e //$NON-NLS-1$ ); } } catch (final IOException e) { LOGGER.warning("No se pudieron crear los scripts para registrar el esquema 'afirma' en Chrome: " + e); //$NON-NLS-1$ } } } /** Genera los comandos que desregistran el esquema "afirma" como un * protocolo de confiable en Chrome. * @param appDir Directorio de instalación del sistema * @param userDir Directorio de usuario dentro del sistema operativo. * @param browserPath Directorio de configuración de Chromium o Google Chrome. * @throws IOException */ private static ArrayList getCommandsToRemoveChromeAndChromiumWarningsOnUninstall(final File appDir, final String userDir) throws IOException { final ArrayList commandList = new ArrayList<>(); // Final del if final String[] endIfStatement = new String[] { "fi", //$NON-NLS-1$ }; // Generacion de comandos de desinstalacion ///////////////////////////////////////////////////////////////////////////// ////// Chromium v56 o inferior ///////////////////////////////////////////////////////////////////////////// final String[] ifFileFound1 = getIfFileFoundCommand(userDir, LINUX_CHROMIUM_V56_OR_LOWER_PREFS_PATH); // Generacion de comandos de desinstalacion commandList.add(ifFileFound1); removeProtocolInPreferencesFile1(userDir, LINUX_CHROMIUM_V56_OR_LOWER_PREFS_PATH, commandList); removeProtocolInPreferencesFile2(userDir, LINUX_CHROMIUM_V56_OR_LOWER_PREFS_PATH, commandList); removeProtocolInPreferencesFile3(userDir, LINUX_CHROMIUM_V56_OR_LOWER_PREFS_PATH, commandList); commandList.add( copyConfigurationFile(userDir, LINUX_CHROMIUM_V56_OR_LOWER_PREFS_PATH)); commandList.add(endIfStatement); ///////////////////////////////////////////////////////////////////////////// ////// Chrome v56 o inferior ///////////////////////////////////////////////////////////////////////////// final String[] ifFileFound2 = getIfFileFoundCommand(userDir, LINUX_CHROME_V56_OR_LOWER_PREFS_PATH); // Generacion de comandos de desinstalacion commandList.add(ifFileFound2); removeProtocolInPreferencesFile1(userDir, LINUX_CHROME_V56_OR_LOWER_PREFS_PATH, commandList); removeProtocolInPreferencesFile2(userDir, LINUX_CHROME_V56_OR_LOWER_PREFS_PATH, commandList); removeProtocolInPreferencesFile3(userDir, LINUX_CHROME_V56_OR_LOWER_PREFS_PATH, commandList); commandList.add( copyConfigurationFile(userDir, LINUX_CHROME_V56_OR_LOWER_PREFS_PATH)); commandList.add(endIfStatement); ///////////////////////////////////////////////////////////////////////////// ////// Chromium v57 o superior ///////////////////////////////////////////////////////////////////////////// final String[] ifFileFound3 = getIfFileFoundCommand(userDir, LINUX_CHROMIUM_V57_OR_HIGHER_PREFS_PATH); // Generacion de comandos de desinstalacion commandList.add(ifFileFound3); removeProtocolInPreferencesFile1(userDir, LINUX_CHROMIUM_V57_OR_HIGHER_PREFS_PATH, commandList); removeProtocolInPreferencesFile2(userDir, LINUX_CHROMIUM_V57_OR_HIGHER_PREFS_PATH, commandList); removeProtocolInPreferencesFile3(userDir, LINUX_CHROMIUM_V57_OR_HIGHER_PREFS_PATH, commandList); commandList.add( copyConfigurationFile(userDir, LINUX_CHROMIUM_V57_OR_HIGHER_PREFS_PATH)); commandList.add(endIfStatement); ///////////////////////////////////////////////////////////////////////////// ////// Chrome v57 o superior ///////////////////////////////////////////////////////////////////////////// final String[] ifFileFound4 = getIfFileFoundCommand(userDir, LINUX_CHROME_V57_OR_HIGHER_PREFS_PATH); // Generacion de comandos de desinstalacion commandList.add(ifFileFound4); removeProtocolInPreferencesFile1(userDir, LINUX_CHROME_V57_OR_HIGHER_PREFS_PATH, commandList); removeProtocolInPreferencesFile2(userDir, LINUX_CHROME_V57_OR_HIGHER_PREFS_PATH, commandList); removeProtocolInPreferencesFile3(userDir, LINUX_CHROME_V57_OR_HIGHER_PREFS_PATH, commandList); commandList.add( copyConfigurationFile(userDir, LINUX_CHROME_V57_OR_HIGHER_PREFS_PATH)); commandList.add(endIfStatement); return commandList; } /** Genera los scripts que registran el esquema "afirma" como un * protocolo de confiable en Chrome. * @param appDir Directorio de instalación del sistema * @param userDir Directorio de usuario dentro del sistema operativo. * @throws IOException Cuando se produce un error de entrada/salida. */ private static ArrayList getCommandsToRemoveChromeAndChromiumWarningsOnInstall(final File appDir, final String userDir) throws IOException { final ArrayList commandList = new ArrayList<>(); // Final del if final String[] endIfStatement = new String[] { "fi", //$NON-NLS-1$ }; ///////////////////////////////////////////////////////////////////////////// ////// Chromium v56 o inferior ///////////////////////////////////////////////////////////////////////////// if( new File(userDir, LINUX_CHROMIUM_V56_OR_LOWER_PREFS_PATH).isFile() ) { //Se incluye afirma como protocolo de confianza en Chromium v56 o inferior final String[] commandInstallChromium56OrLower1 = addProtocolInPreferencesFile(userDir, LINUX_CHROMIUM_V56_OR_LOWER_PREFS_PATH); final String[] commandInstallChromium56OrLower2 = correctProtocolInPreferencesFile(userDir, LINUX_CHROMIUM_V56_OR_LOWER_PREFS_PATH); // Comandos para agregar la confianza del esquema 'afirma' en caso de tener Chromium v56 o inferior recien instalado final String[] ifContainsString1 = getIfNotCointainsStringCommand(userDir, LINUX_CHROMIUM_V56_OR_LOWER_PREFS_PATH); final String[] commandInstallChromium56OrLower4 = new String[] { "sed -i", //$NON-NLS-1$ -i para reemplazar en el propio fichero "'s/last_active_profiles\\([^,]*\\),/" //$NON-NLS-1$ + "last_active_profiles\\1,\\\"protocol_handler\\\":{\\\"excluded_schemes\\\":{\\\"afirma\\\":false}},/'", //$NON-NLS-1$ escapePath(userDir + LINUX_CHROMIUM_V56_OR_LOWER_PREFS_PATH) + "1", //$NON-NLS-1$ }; // Generacion de comandos de instalacion commandList.add(commandInstallChromium56OrLower1); commandList.add(commandInstallChromium56OrLower2); commandList.add(ifContainsString1); commandList.add(commandInstallChromium56OrLower4); commandList.add(endIfStatement); commandList.add( copyConfigurationFile(userDir, LINUX_CHROMIUM_V56_OR_LOWER_PREFS_PATH)); } ///////////////////////////////////////////////////////////////////////////// ////// Chrome v56 o inferior ///////////////////////////////////////////////////////////////////////////// if( new File(userDir, LINUX_CHROME_V56_OR_LOWER_PREFS_PATH).isFile() ) { //Se incluye afirma como protocolo de confianza en Chrome v56 o inferior final String[] commandInstallChrome56OrLower1 = addProtocolInPreferencesFile(userDir, LINUX_CHROME_V56_OR_LOWER_PREFS_PATH); final String[] commandInstallChrome56OrLower2 = correctProtocolInPreferencesFile(userDir, LINUX_CHROME_V56_OR_LOWER_PREFS_PATH); final String[] ifContainsString2 = getIfNotCointainsStringCommand(userDir, LINUX_CHROME_V56_OR_LOWER_PREFS_PATH); // Comando para agregar la confianza del esquema 'afirma' en caso de tener Chrome v56 o inferior recien instalado final String[] commandInstallChrome56OrLower4 = new String[] { "sed -i", //$NON-NLS-1$ -i para reemplazar en el propio fichero "'s/last_active_profiles\\([^,]*\\),/" //$NON-NLS-1$ + "last_active_profiles\\1,\\\"protocol_handler\\\":{\\\"excluded_schemes\\\":{\\\"afirma\\\":false}},/'", //$NON-NLS-1$ escapePath(userDir + LINUX_CHROME_V56_OR_LOWER_PREFS_PATH) + "1", //$NON-NLS-1$ }; // Generacion de comandos de instalacion commandList.add(commandInstallChrome56OrLower1); commandList.add(commandInstallChrome56OrLower2); commandList.add(ifContainsString2); commandList.add(commandInstallChrome56OrLower4); commandList.add(endIfStatement); commandList.add( copyConfigurationFile(userDir, LINUX_CHROME_V56_OR_LOWER_PREFS_PATH)); } ///////////////////////////////////////////////////////////////////////////// ////// Chromium v57 o superior ///////////////////////////////////////////////////////////////////////////// if( new File(userDir, LINUX_CHROMIUM_V57_OR_HIGHER_PREFS_PATH).isFile() ) { //Se incluye afirma como protocolo de confianza en Chromium v57 o superior final String[] commandInstallChromium57OrHigher1 = addProtocolInPreferencesFile(userDir, LINUX_CHROMIUM_V57_OR_HIGHER_PREFS_PATH); final String[] commandInstallChromium57OrHigher2 = correctProtocolInPreferencesFile(userDir, LINUX_CHROMIUM_V57_OR_HIGHER_PREFS_PATH); // Generacion de comandos de instalacion commandList.add(commandInstallChromium57OrHigher1); commandList.add(commandInstallChromium57OrHigher2); commandList.add( copyConfigurationFile(userDir, LINUX_CHROMIUM_V57_OR_HIGHER_PREFS_PATH)); } ///////////////////////////////////////////////////////////////////////////// ////// Chrome v57 o superior ///////////////////////////////////////////////////////////////////////////// if( new File(userDir, LINUX_CHROME_V57_OR_HIGHER_PREFS_PATH).isFile() ) { //Se incluye afirma como protocolo de confianza en Chrome v57 o superior final String[] commandInstallChrome57OrHigher1 = addProtocolInPreferencesFile(userDir, LINUX_CHROME_V57_OR_HIGHER_PREFS_PATH); final String[] commandInstallChrome57OrHigher2 = correctProtocolInPreferencesFile(userDir, LINUX_CHROME_V57_OR_HIGHER_PREFS_PATH); // Generacion de comandos de instalacion commandList.add(commandInstallChrome57OrHigher1); commandList.add(commandInstallChrome57OrHigher2); commandList.add( copyConfigurationFile(userDir, LINUX_CHROME_V57_OR_HIGHER_PREFS_PATH)); } return commandList; } /** Genera los scripts para confirmar si existen protocolos definidos en el fichero. * @param userDir Directorio de usuario dentro del sistema operativo. * @param browserPath Directorio de configuración de Chromium o Google Chrome. */ private static String[] getIfNotCointainsStringCommand(final String userDir, final String browserPath) { // If para comprobar si es necesario incluir la sintaxis entera de definicion de protocolos o si, // por el contrario, ya estaba final String[] ifStatement = new String[] { "if ! ", //$NON-NLS-1$ "grep -q \"excluded_schemes\" " + //$NON-NLS-1$ escapePath(userDir + browserPath), "; then", //$NON-NLS-1$ }; return ifStatement; } /** Genera los scripts para confirmar si existe el fichero con el que se va a trabajar. * @param userDir Directorio de usuario dentro del sistema operativo. * @param browserPath Directorio de configuración de Chromium o Google Chrome. */ private static String[] getIfFileFoundCommand(final String userDir, final String browserPath) { // If para comprobar si es necesario incluir la sintaxis entera de definicion de protocolos o si, // por el contrario, ya estaba final String[] ifStatement = new String[] { "if [ -f ", //$NON-NLS-1$ escapePath(userDir + browserPath), " ]; then", //$NON-NLS-1$ }; return ifStatement; } /** Genera los scripts para reemplazar el fichero original por el temporal con el que se estaba trabajando. * @param userDir Directorio de usuario dentro del sistema operativo. * @param browserPath Directorio de configuración de Chromium o Google Chrome. */ private static String[] copyConfigurationFile(final String userDir, final String browserPath) { // Comando para sobreescribir el fichero de configuracion final String[] commandCopy = new String[] { "\\cp", //$NON-NLS-1$ escapePath(userDir + browserPath) + "1", //$NON-NLS-1$ escapePath(userDir + browserPath), }; return commandCopy; } /** Genera los scripts para eliminar el protocolo afirma. * @param userDir Directorio de usuario dentro del sistema operativo. * @param browserPath Directorio de configuración de Chromium o Google Chrome. */ private static String[] addProtocolInPreferencesFile(final String userDir, final String browserPath) { // Comando para agregar la confianza del esquema 'afirma' en Chrome final String[] commandInstall1 = new String[] { "sed", //$NON-NLS-1$ "'s/\\\"protocol_handler\\\":{\\\"excluded_schemes\\\":{/" //$NON-NLS-1$ + "\\\"protocol_handler\\\":{\\\"excluded_schemes\\\":{\\\"afirma\\\":false,/g'", //$NON-NLS-1$ escapePath(userDir + browserPath), ">", //$NON-NLS-1$ escapePath(userDir + browserPath) + "1", //$NON-NLS-1$ }; return commandInstall1; } /** Genera los scripts para eliminar la coma en caso de que sea el unico protocolo definido en el fichero. * @param userDir Directorio de usuario dentro del sistema operativo. * @param browserPath Directorio de configuración de Chromium o Google Chrome. */ private static String[] correctProtocolInPreferencesFile(final String userDir, final String browserPath) { // Comando para eliminar la coma en caso de ser el unico protocolo de confianza final String[] commandInstall2 = new String[] { "sed -i", //$NON-NLS-1$ -i para reemplazar en el propio fichero "'s/\\\"protocol_handler\\\":{\\\"excluded_schemes\\\":{\\\"afirma\\\":false,}/" //$NON-NLS-1$ + "\\\"protocol_handler\\\":{\\\"excluded_schemes\\\":{\\\"afirma\\\":false}/g'", //$NON-NLS-1$ escapePath(userDir + browserPath) + "1", //$NON-NLS-1$ }; return commandInstall2; } /** Genera los scripts para eliminar el protocolo afirma del fichero. * @param userDir Directorio de usuario dentro del sistema operativo. * @param browserPath Directorio de configuración de Chromium o Google Chrome. * @param sb Objeto para escribir en fichero. */ private static void removeProtocolInPreferencesFile1(final String userDir, final String browserPath, final ArrayList commandList) { // Comando para retirar la confianza del esquema 'afirma' final String[] commandUninstall1 = new String[] { "sed", //$NON-NLS-1$ "'s/\\\"afirma\\\":false,//g'", //$NON-NLS-1$ escapePath(userDir + browserPath), ">", //$NON-NLS-1$ escapePath(userDir + browserPath) + "1", //$NON-NLS-1$ }; commandList.add(commandUninstall1); } /** Genera los scripts para eliminar el protocolo afirma del fichero. * @param userDir Directorio de usuario dentro del sistema operativo. * @param browserPath Directorio de configuración de Chromium o Google Chrome. * @param sb Objeto para escribir en fichero. */ private static void removeProtocolInPreferencesFile2(final String userDir, final String browserPath, final ArrayList commandList) { // Comando para retirar la confianza del esquema 'afirma' final String[] commandUninstall2 = new String[] { "sed -i", //$NON-NLS-1$ -i para reemplazar en el propio fichero "'s/\\\"afirma\\\":false//g'", //$NON-NLS-1$ escapePath(userDir + browserPath) + "1", //$NON-NLS-1$ }; commandList.add(commandUninstall2); } /** Genera los scripts para eliminar la sintaxis que define los protocolos de confianza si no existe ninguno. * @param userDir Directorio de usuario dentro del sistema operativo. * @param browserPath Directorio de configuración de Chromium o Google Chrome. * @param sb Objeto para escribir en fichero. */ private static void removeProtocolInPreferencesFile3(final String userDir, final String browserPath, final ArrayList commandList) { // Comando para retirar la confianza del esquema 'afirma' final String[] commandUninstall3 = new String[] { "sed -i", //$NON-NLS-1$ -i para reemplazar en el propio fichero "'s/\\\"protocol_handler\\\":{\\\"excluded_schemes\\\":{}},//g'", //$NON-NLS-1$ Se elimina la lista vacia de protocolos escapePath(userDir + browserPath) + "1", //$NON-NLS-1$ }; commandList.add(commandUninstall3); } /** * Escapa rutas de fichero para poder usarlas como parte de un script. * @param path Ruta de fichero. * @return Ruta escapada. */ private static String escapePath(final String path) { if (path == null) { throw new IllegalArgumentException( "La ruta a 'escapar' no puede ser nula" //$NON-NLS-1$ ); } return path.replace(" ", "\\ "); //$NON-NLS-1$ //$NON-NLS-2$ } @Override public void uninstall() { // No es necesario hacer nada porque el proceso de desinstalacion de linux // eliminara el directorio de aplicacion con todo su contenido. } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy