Changeset 2015 in josm for trunk


Ignore:
Timestamp:
2009-08-30T18:57:05+02:00 (15 years ago)
Author:
stoecker
Message:

fixed #3112 - patch by bastiK - cleanup password hook

Location:
trunk/src/org/openstreetmap/josm
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/gui/preferences/ServerAccessPreference.java

    r1955 r2015  
    44import static org.openstreetmap.josm.tools.I18n.tr;
    55
    6 import java.awt.Font;
    7 
    8 import javax.swing.JLabel;
    9 import javax.swing.JPasswordField;
    10 import javax.swing.JTextField;
    11 
    12 import org.openstreetmap.josm.Main;
    13 import org.openstreetmap.josm.tools.GBC;
    146import org.openstreetmap.josm.io.OsmConnection;
    15 import org.openstreetmap.josm.io.CredentialsManager.PreferenceAdditions;
     7import org.openstreetmap.josm.io.CredentialsManager;
    168
    179public class ServerAccessPreference implements PreferenceSetting {
     
    2416
    2517    /**
    26      * Editfield for the Base url to the REST API from OSM.
    27      */
    28     private JTextField osmDataServer = new JTextField(20);
    29     /**
    3018     * Provide username and password input editfields.
    3119     * Store the values if user hits OK.
    3220     */
    33     private PreferenceAdditions credentialsPA = OsmConnection.credentialsManager.newPreferenceAdditions();
     21    private CredentialsManager.PreferenceAdditions credentialsPA = OsmConnection.credentialsManager.newPreferenceAdditions();
    3422
    3523    public void addGui(PreferenceDialog gui) {
    36         osmDataServer.setText(Main.pref.get("osm-server.url", "http://api.openstreetmap.org/api"));
    37         osmDataServer.setToolTipText(tr("The base URL for the OSM server (REST API)"));
    38         gui.connection.add(new JLabel(tr("Base Server URL")), GBC.std());
    39         gui.connection.add(osmDataServer, GBC.eol().fill(GBC.HORIZONTAL).insets(5,0,0,5));
    4024        credentialsPA.addPreferenceOptions(gui.connection);
    4125    }
    4226
    4327    public boolean ok() {
    44         Main.pref.put("osm-server.url", osmDataServer.getText());
    4528        credentialsPA.preferencesChanged();
    4629        return false;
  • trunk/src/org/openstreetmap/josm/io/CredentialsManager.java

    r1958 r2015  
    99 */
    1010public interface CredentialsManager {
     11    enum Key {
     12        OSM_SERVER_URL("url"),
     13        USERNAME("username"),
     14        PASSWORD("password");
     15        final private String pname;
     16        private Key(String name) {
     17            pname = name;
     18        }
     19        @Override public String toString() {
     20            return pname;
     21        }
     22    };
     23   
    1124    /**
    12      * lookupUsername, lookupPassword:
    13      *
    1425     * Should throw or return non-null, possibly empty String.
    1526     */
    16     public String lookupUsername() throws CMException;
    17     public String lookupPassword() throws CMException;
     27    public String lookup(Key key) throws CMException;
    1828
    1929    /**
    20      * storeUsername, storePassword:
    21      *
    2230     * May silently fail to store.
    2331     */
    24     public void storeUsername(String username) throws CMException;
    25     public void storePassword(String password) throws CMException;
     32    public void store(Key key, String secret) throws CMException;
    2633
    2734    /**
  • trunk/src/org/openstreetmap/josm/io/OsmConnection.java

    r1962 r2015  
    112112        try {
    113113            synchronized (credentialsManager) {
    114                 auth = credentialsManager.lookupUsername() + ":" + credentialsManager.lookupPassword();
     114                auth = credentialsManager.lookup(CredentialsManager.Key.USERNAME) + ":" +
     115                    credentialsManager.lookup(CredentialsManager.Key.PASSWORD);
    115116            }
    116117        } catch (CredentialsManager.CMException e) {
     
    130131        return cancel;
    131132    }
    132 
     133    /**
     134     * Default implementation of the CredentialsManager interface.
     135     * Saves passwords in plain text file.
     136     */
    133137    public static class PlainCredentialsManager implements CredentialsManager {
    134         public String lookupUsername() throws CMException {
    135             String username = Main.pref.get("osm-server.username", null);
    136             if (username == null) throw new CredentialsManager.NoContentException();
    137             return username;
    138         }
    139         public String lookupPassword() throws CMException {
    140             String password = Main.pref.get("osm-server.password");
    141             if (password == null) throw new CredentialsManager.NoContentException();
    142             return password;
    143         }
    144         public void storeUsername(String username) {
    145             Main.pref.put("osm-server.username", username);
    146         }
    147         public void storePassword(String password) {
    148             Main.pref.put("osm-server.password", password);
     138        public String lookup(CredentialsManager.Key key) throws CMException {
     139            String secret = Main.pref.get("osm-server." + key.toString(), null);
     140            if (secret == null) throw new CredentialsManager.NoContentException();
     141            return secret;           
     142        }
     143        public void store(CredentialsManager.Key key, String secret) {
     144            Main.pref.put("osm-server." + key.toString(), secret);
    149145        }
    150146        public PasswordAuthentication getPasswordAuthentication(OsmAuth caller) {
    151147            String username, password;
    152148            try {
    153                 username = lookupUsername();
     149                username = lookup(Key.USERNAME);
    154150            } catch (CMException e) {
    155151                username = "";
    156152            }
    157153            try {
    158                 password = lookupPassword();
     154                password = lookup(Key.PASSWORD);
    159155            } catch (CMException e) {
    160156                password = "";
     
    175171                p.add(warning, GBC.eop());
    176172
    177                 JCheckBox savePassword = new JCheckBox(tr("Save user and password (unencrypted)"), !username.equals("") && !password.equals(""));
     173                JCheckBox savePassword = new JCheckBox(tr("Save user and password (unencrypted)"),
     174                                                       !username.equals("") && !password.equals(""));
    178175                p.add(savePassword, GBC.eop());
    179176
    180                 int choice = new ExtendedDialog(Main.parent,
    181                         tr("Enter Password"),
    182                         p,
    183                         new String[] {tr("Login"), tr("Cancel")},
    184                         new String[] {"ok.png", "cancel.png"}).getValue();
     177                int choice = new ExtendedDialog(
     178                    Main.parent,
     179                    tr("Enter Password"),
     180                    p,
     181                    new String[] {tr("Login"), tr("Cancel")},
     182                    new String[] {"ok.png", "cancel.png"}).getValue();
    185183
    186184                if (choice != 1) {
     
    191189                password = String.valueOf(passwordField.getPassword());
    192190                if (savePassword.isSelected()) {
    193                     storeUsername(username);
    194                     storePassword(password);
     191                    store(Key.USERNAME, username);
     192                    store(Key.PASSWORD, password);
    195193                }
    196194                if (username.equals(""))
     
    203201            return new PreferenceAdditions() {
    204202                /**
     203                 * Editfield for the Base url to the REST API from OSM.
     204                 */
     205                final private JTextField osmDataServerURL = new JTextField(20);
     206                /**
    205207                 * Editfield for the username to the OSM account.
    206208                 */
    207                 private JTextField osmDataUsername = new JTextField(20);
     209                final private JTextField osmDataUsername = new JTextField(20);
    208210                /**
    209211                 * Passwordfield for the userpassword of the REST API.
    210212                 */
    211                 private JPasswordField osmDataPassword = new JPasswordField(20);
    212 
     213                final private JPasswordField osmDataPassword = new JPasswordField(20);
     214
     215                private String oldServerURL = "";
    213216                private String oldUsername = "";
    214217                private String oldPassword = "";
     
    216219                public void addPreferenceOptions(JPanel panel) {
    217220                    try {
    218                         oldUsername = lookupUsername();
     221                        oldServerURL = lookup(Key.OSM_SERVER_URL); // result is not null (see CredentialsManager)
     222                    } catch (CMException e) {
     223                        oldServerURL = "";
     224                    }
     225                    if (oldServerURL.equals("")) oldServerURL = "http://api.openstreetmap.org/api";
     226                    try {
     227                        oldUsername = lookup(Key.USERNAME);
    219228                    } catch (CMException e) {
    220229                        oldUsername = "";
    221230                    }
    222231                    try {
    223                         oldPassword = lookupPassword();
     232                        oldPassword = lookup(Key.PASSWORD);
    224233                    } catch (CMException e) {
    225234                        oldPassword = "";
    226235                    }
     236                    osmDataServerURL.setText(oldServerURL);
    227237                    osmDataUsername.setText(oldUsername);
    228238                    osmDataPassword.setText(oldPassword);
     239                    osmDataServerURL.setToolTipText(tr("The base URL for the OSM server (REST API)"));
    229240                    osmDataUsername.setToolTipText(tr("Login name (e-mail) to the OSM account."));
    230241                    osmDataPassword.setToolTipText(tr("Login password to the OSM account. Leave blank to not store any password."));
     242                    panel.add(new JLabel(tr("Base Server URL")), GBC.std());
     243                    panel.add(osmDataServerURL, GBC.eol().fill(GBC.HORIZONTAL).insets(5,0,0,5));
    231244                    panel.add(new JLabel(tr("OSM username (e-mail)")), GBC.std());
    232245                    panel.add(osmDataUsername, GBC.eol().fill(GBC.HORIZONTAL).insets(5,0,0,5));
     
    241254                }
    242255                public void preferencesChanged() {
     256                    String newServerURL = osmDataServerURL.getText();
    243257                    String newUsername = osmDataUsername.getText();
    244258                    String newPassword = String.valueOf(osmDataPassword.getPassword());
     259                    if (!oldServerURL.equals(newServerURL)) {
     260                        store(Key.OSM_SERVER_URL, newServerURL);
     261                    }
    245262                    if (!oldUsername.equals(newUsername)) {
    246                         storeUsername(newUsername);
     263                        store(Key.USERNAME, newUsername);
    247264                    }
    248265                    if (!oldPassword.equals(newPassword)) {
    249                         storePassword(newPassword);
     266                        store(Key.PASSWORD, newPassword);
    250267                    }
    251268                }
Note: See TracChangeset for help on using the changeset viewer.