package io.sloeber.core.api; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.equinox.security.storage.ISecurePreferences; import org.eclipse.equinox.security.storage.SecurePreferencesFactory; import org.eclipse.equinox.security.storage.StorageException; import io.sloeber.core.common.Common; import io.sloeber.core.common.Const; import io.sloeber.core.tools.Messages; public class PasswordManager { private String myPassword; private String myLogin = null; private String myhost = null; boolean ret = false; public PasswordManager() { // no constructor needed } public String getPassword() { return this.myPassword; } public String getLogin() { return this.myLogin; } public String getHost() { return this.myhost; } /** * Sets the host. If there is no Login,password for this host the method * returns false. If a login/password for the host is found the method * returns true * * @param host * @return */ public boolean setHost(String host) { this.myhost = host; this.myPassword = null; this.myLogin = null; String nodename = ConvertHostToNodeName(this.myhost); ISecurePreferences root = SecurePreferencesFactory.getDefault(); try { if (root.nodeExists(nodename)) { ISecurePreferences node = root.node(nodename); this.myPassword = node.get(Messages.security_password, null); this.myLogin = node.get(Messages.security_login, null); return true; } } catch (StorageException e) { Common.log(new Status(IStatus.ERROR, Const.CORE_PLUGIN_ID, "Set a password on the project properties->arduino page", e)); //$NON-NLS-1$ } return false; } /** * Sets the login and password for a host * * @param host * @param login * @param password * @throws Exception */ public void setLoginData(String host, String login, String password) throws Exception { this.myhost = host; this.myLogin = login; this.myPassword = password; String nodename = ConvertHostToNodeName(this.myhost); ISecurePreferences root = SecurePreferencesFactory.getDefault(); ISecurePreferences node = root.node(nodename); node.put(Messages.security_login, this.myLogin, false); node.put(Messages.security_password, this.myPassword, true); } static public void setPwd(String host, String login, String pwd) { String nodename = ConvertHostToNodeName(host); ISecurePreferences root = SecurePreferencesFactory.getDefault(); ISecurePreferences node = root.node(nodename); try { node.put(Messages.security_login, login, false); node.put(Messages.security_password, pwd, false); } catch (StorageException e) { Common.log(new Status(IStatus.ERROR, Const.CORE_PLUGIN_ID, "failed to set login info", e)); //$NON-NLS-1$ } } public static void ErasePassword(String host) { String nodename = ConvertHostToNodeName(host); ISecurePreferences root = SecurePreferencesFactory.getDefault(); if (root.nodeExists(nodename)) { ISecurePreferences node = root.node(nodename); node.removeNode();// (Messages.security_password, null, true); } } private static String ConvertHostToNodeName(String host) { return "ssh/" + host.replace(Const.DOT, Const.SLACH); //$NON-NLS-1$ } }