// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.plugins.npm; import java.util.Objects; import org.netbeans.modules.keyring.gnome.GnomeProvider; import org.netbeans.modules.keyring.kde.KWalletProvider; import org.netbeans.modules.keyring.mac.MacProvider; import org.netbeans.spi.keyring.KeyringProvider; import static org.openstreetmap.josm.tools.I18n.tr; public enum NPMType { PLAIN( "josm-standard", null, "default", tr("Plain text, JOSM default") ), GNOME_KEYRING( "gnome-keyring", GnomeProvider.class, "gnome-keyring", tr("Use {0}", "gnome-keyring") ), KWALLET( "kwallet", KWalletProvider.class, "KWallet", tr("Use {0}", "KWallet")), KEYCHAIN( "keychain", MacProvider.class, "Apple Keychain", tr("Use {0}", "Mac OS X Keychain")), CRYPT32( "crypt32", Win32Provider.class, "Windows data encryption", tr("Encrypt data with Windows logon credentials") ); private static String genericIntro(String name) { return tr("The native password manager plugin detected {0} on your system.", name); // + "You can let {1} handle your sensitive data from now on. " // + "This means your username and password is no longer saved in plain text in your preferences file. " // + "(It is still transferred over the network unencrypted, though.)", name, name); } private final String prefString; private final Class<? extends KeyringProvider> providerClass; private final String name; private KeyringProvider provider; private final String introText; private final String selectionText; NPMType(String prefString, Class<? extends KeyringProvider> providerClass, String name, String selectionText) { this.prefString = prefString; this.providerClass = providerClass; this.name = name; this.introText = genericIntro(name); this.selectionText = selectionText; } public static NPMType fromPrefString(String pref) { for (NPMType t : NPMType.values()) { if (Objects.equals(pref, t.prefString)) { return t; } } return null; } public String toPrefString() { return prefString; } public String getSelectionText() { return selectionText; } public String getIntroText() { return introText; } public String getName() { return name; } public KeyringProvider getProvider() { if (providerClass == null) return null; if (provider == null) { try { provider = providerClass.newInstance(); } catch (InstantiationException ex) { throw new RuntimeException(); } catch (IllegalAccessException ex) { throw new RuntimeException(); } } return provider; } }