Ticket #3112: npm_add_osm_server

File npm_add_osm_server, 11.5 KB (added by bastiK, 16 years ago)

make not only password and username part of credentials management, but also the osm server url

Line 
1Index: src/org/openstreetmap/josm/gui/preferences/ServerAccessPreference.java
2===================================================================
3--- src/org/openstreetmap/josm/gui/preferences/ServerAccessPreference.java (revision 1979)
4+++ src/org/openstreetmap/josm/gui/preferences/ServerAccessPreference.java (working copy)
5@@ -3,16 +3,8 @@
6
7 import static org.openstreetmap.josm.tools.I18n.tr;
8
9-import java.awt.Font;
10-
11-import javax.swing.JLabel;
12-import javax.swing.JPasswordField;
13-import javax.swing.JTextField;
14-
15-import org.openstreetmap.josm.Main;
16-import org.openstreetmap.josm.tools.GBC;
17 import org.openstreetmap.josm.io.OsmConnection;
18-import org.openstreetmap.josm.io.CredentialsManager.PreferenceAdditions;
19+import org.openstreetmap.josm.io.CredentialsManager;
20
21 public class ServerAccessPreference implements PreferenceSetting {
22
23@@ -23,25 +15,16 @@
24 }
25
26 /**
27- * Editfield for the Base url to the REST API from OSM.
28- */
29- private JTextField osmDataServer = new JTextField(20);
30- /**
31 * Provide username and password input editfields.
32 * Store the values if user hits OK.
33 */
34- private PreferenceAdditions credentialsPA = OsmConnection.credentialsManager.newPreferenceAdditions();
35+ private CredentialsManager.PreferenceAdditions credentialsPA = OsmConnection.credentialsManager.newPreferenceAdditions();
36
37 public void addGui(PreferenceDialog gui) {
38- osmDataServer.setText(Main.pref.get("osm-server.url", "http://api.openstreetmap.org/api"));
39- osmDataServer.setToolTipText(tr("The base URL for the OSM server (REST API)"));
40- gui.connection.add(new JLabel(tr("Base Server URL")), GBC.std());
41- gui.connection.add(osmDataServer, GBC.eol().fill(GBC.HORIZONTAL).insets(5,0,0,5));
42 credentialsPA.addPreferenceOptions(gui.connection);
43 }
44
45 public boolean ok() {
46- Main.pref.put("osm-server.url", osmDataServer.getText());
47 credentialsPA.preferencesChanged();
48 return false;
49 }
50Index: src/org/openstreetmap/josm/io/CredentialsManager.java
51===================================================================
52--- src/org/openstreetmap/josm/io/CredentialsManager.java (revision 1979)
53+++ src/org/openstreetmap/josm/io/CredentialsManager.java (working copy)
54@@ -8,21 +8,28 @@
55 * username/password-related user interaction is encapsulated here.
56 */
57 public interface CredentialsManager {
58+ enum Key {
59+ OSM_SERVER_URL("url"),
60+ USERNAME("username"),
61+ PASSWORD("password");
62+ final private String pname;
63+ private Key(String name) {
64+ pname = name;
65+ }
66+ @Override public String toString() {
67+ return pname;
68+ }
69+ };
70+
71 /**
72- * lookupUsername, lookupPassword:
73- *
74 * Should throw or return non-null, possibly empty String.
75 */
76- public String lookupUsername() throws CMException;
77- public String lookupPassword() throws CMException;
78+ public String lookup(Key key) throws CMException;
79
80 /**
81- * storeUsername, storePassword:
82- *
83 * May silently fail to store.
84 */
85- public void storeUsername(String username) throws CMException;
86- public void storePassword(String password) throws CMException;
87+ public void store(Key key, String secret) throws CMException;
88
89 /**
90 * If authentication using the stored credentials fails, this method is
91Index: src/org/openstreetmap/josm/io/OsmConnection.java
92===================================================================
93--- src/org/openstreetmap/josm/io/OsmConnection.java (revision 1979)
94+++ src/org/openstreetmap/josm/io/OsmConnection.java (working copy)
95@@ -111,7 +111,8 @@
96 String auth;
97 try {
98 synchronized (credentialsManager) {
99- auth = credentialsManager.lookupUsername() + ":" + credentialsManager.lookupPassword();
100+ auth = credentialsManager.lookup(CredentialsManager.Key.USERNAME) + ":" +
101+ credentialsManager.lookup(CredentialsManager.Key.PASSWORD);
102 }
103 } catch (CredentialsManager.CMException e) {
104 auth = ":";
105@@ -129,33 +130,28 @@
106 public boolean isCanceled() {
107 return cancel;
108 }
109-
110+ /**
111+ * Default implementation of the CredentialsManager interface.
112+ * Saves passwords in plain text file.
113+ */
114 public static class PlainCredentialsManager implements CredentialsManager {
115- public String lookupUsername() throws CMException {
116- String username = Main.pref.get("osm-server.username", null);
117- if (username == null) throw new CredentialsManager.NoContentException();
118- return username;
119+ public String lookup(CredentialsManager.Key key) throws CMException {
120+ String secret = Main.pref.get("osm-server." + key.toString(), null);
121+ if (secret == null) throw new CredentialsManager.NoContentException();
122+ return secret;
123 }
124- public String lookupPassword() throws CMException {
125- String password = Main.pref.get("osm-server.password");
126- if (password == null) throw new CredentialsManager.NoContentException();
127- return password;
128+ public void store(CredentialsManager.Key key, String secret) {
129+ Main.pref.put("osm-server." + key.toString(), secret);
130 }
131- public void storeUsername(String username) {
132- Main.pref.put("osm-server.username", username);
133- }
134- public void storePassword(String password) {
135- Main.pref.put("osm-server.password", password);
136- }
137 public PasswordAuthentication getPasswordAuthentication(OsmAuth caller) {
138 String username, password;
139 try {
140- username = lookupUsername();
141+ username = lookup(Key.USERNAME);
142 } catch (CMException e) {
143 username = "";
144 }
145 try {
146- password = lookupPassword();
147+ password = lookup(Key.PASSWORD);
148 } catch (CMException e) {
149 password = "";
150 }
151@@ -174,14 +170,16 @@
152 warning.setFont(warning.getFont().deriveFont(Font.ITALIC));
153 p.add(warning, GBC.eop());
154
155- JCheckBox savePassword = new JCheckBox(tr("Save user and password (unencrypted)"), !username.equals("") && !password.equals(""));
156+ JCheckBox savePassword = new JCheckBox(tr("Save user and password (unencrypted)"),
157+ !username.equals("") && !password.equals(""));
158 p.add(savePassword, GBC.eop());
159
160- int choice = new ExtendedDialog(Main.parent,
161- tr("Enter Password"),
162- p,
163- new String[] {tr("Login"), tr("Cancel")},
164- new String[] {"ok.png", "cancel.png"}).getValue();
165+ int choice = new ExtendedDialog(
166+ Main.parent,
167+ tr("Enter Password"),
168+ p,
169+ new String[] {tr("Login"), tr("Cancel")},
170+ new String[] {"ok.png", "cancel.png"}).getValue();
171
172 if (choice != 1) {
173 caller.authCancelled = true;
174@@ -190,8 +188,8 @@
175 username = usernameField.getText();
176 password = String.valueOf(passwordField.getPassword());
177 if (savePassword.isSelected()) {
178- storeUsername(username);
179- storePassword(password);
180+ store(Key.USERNAME, username);
181+ store(Key.PASSWORD, password);
182 }
183 if (username.equals(""))
184 return null;
185@@ -202,32 +200,47 @@
186 public PreferenceAdditions newPreferenceAdditions() {
187 return new PreferenceAdditions() {
188 /**
189+ * Editfield for the Base url to the REST API from OSM.
190+ */
191+ final private JTextField osmDataServerURL = new JTextField(20);
192+ /**
193 * Editfield for the username to the OSM account.
194 */
195- private JTextField osmDataUsername = new JTextField(20);
196+ final private JTextField osmDataUsername = new JTextField(20);
197 /**
198 * Passwordfield for the userpassword of the REST API.
199 */
200- private JPasswordField osmDataPassword = new JPasswordField(20);
201+ final private JPasswordField osmDataPassword = new JPasswordField(20);
202
203+ private String oldServerURL = "";
204 private String oldUsername = "";
205 private String oldPassword = "";
206
207 public void addPreferenceOptions(JPanel panel) {
208 try {
209- oldUsername = lookupUsername();
210+ oldServerURL = lookup(Key.OSM_SERVER_URL); // result is not null (see CredentialsManager)
211 } catch (CMException e) {
212+ oldServerURL = "";
213+ }
214+ if (oldServerURL.equals("")) oldServerURL = "http://api.openstreetmap.org/api";
215+ try {
216+ oldUsername = lookup(Key.USERNAME);
217+ } catch (CMException e) {
218 oldUsername = "";
219 }
220 try {
221- oldPassword = lookupPassword();
222+ oldPassword = lookup(Key.PASSWORD);
223 } catch (CMException e) {
224 oldPassword = "";
225 }
226+ osmDataServerURL.setText(oldServerURL);
227 osmDataUsername.setText(oldUsername);
228 osmDataPassword.setText(oldPassword);
229+ osmDataServerURL.setToolTipText(tr("The base URL for the OSM server (REST API)"));
230 osmDataUsername.setToolTipText(tr("Login name (e-mail) to the OSM account."));
231 osmDataPassword.setToolTipText(tr("Login password to the OSM account. Leave blank to not store any password."));
232+ panel.add(new JLabel(tr("Base Server URL")), GBC.std());
233+ panel.add(osmDataServerURL, GBC.eol().fill(GBC.HORIZONTAL).insets(5,0,0,5));
234 panel.add(new JLabel(tr("OSM username (e-mail)")), GBC.std());
235 panel.add(osmDataUsername, GBC.eol().fill(GBC.HORIZONTAL).insets(5,0,0,5));
236 panel.add(new JLabel(tr("OSM password")), GBC.std());
237@@ -240,13 +253,17 @@
238 panel.add(warning, GBC.eop().fill(GBC.HORIZONTAL));
239 }
240 public void preferencesChanged() {
241+ String newServerURL = osmDataServerURL.getText();
242 String newUsername = osmDataUsername.getText();
243 String newPassword = String.valueOf(osmDataPassword.getPassword());
244+ if (!oldServerURL.equals(newServerURL)) {
245+ store(Key.OSM_SERVER_URL, newServerURL);
246+ }
247 if (!oldUsername.equals(newUsername)) {
248- storeUsername(newUsername);
249+ store(Key.USERNAME, newUsername);
250 }
251 if (!oldPassword.equals(newPassword)) {
252- storePassword(newPassword);
253+ store(Key.PASSWORD, newPassword);
254 }
255 }
256 };