Ignore:
Timestamp:
2016-01-09T18:07:26+01:00 (8 years ago)
Author:
simon04
Message:

fix #7943 - Make OAuth work for non-standard OSM APIs

You will need to obtain an application via
http://<server>/user/<user>/oauth_clients/new, and set the OAuth
consumer key+secret in the advanced OAuth parameters.

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

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/gui/oauth/AdvancedOAuthPropertiesPanel.java

    r9220 r9355  
    3535 * <li>Access token URL</li>
    3636 * <li>Authorize URL</li>
     37 * <li>OSM login URL</li>
     38 * <li>OSM logout URL</li>
    3739 * </ul>
    3840 *
     
    4850    private JosmTextField tfAccessTokenURL;
    4951    private JosmTextField tfAuthoriseURL;
     52    private JosmTextField tfOsmLoginURL;
     53    private JosmTextField tfOsmLogoutURL;
    5054    private transient UseDefaultItemListener ilUseDefault;
    5155    private String apiUrl;
     
    120124        SelectAllOnFocusGainedDecorator.decorate(tfAuthoriseURL);
    121125
     126
     127        // -- OSM login URL
     128        gc.gridy = 6;
     129        gc.gridx = 0;
     130        gc.weightx = 0.0;
     131        add(new JLabel(tr("OSM login URL:")), gc);
     132
     133        gc.gridx = 1;
     134        gc.weightx = 1.0;
     135        add(tfOsmLoginURL = new JosmTextField(), gc);
     136        SelectAllOnFocusGainedDecorator.decorate(tfOsmLoginURL);
     137
     138
     139        // -- OSM logout URL
     140        gc.gridy = 7;
     141        gc.gridx = 0;
     142        gc.weightx = 0.0;
     143        add(new JLabel(tr("OSM logout URL:")), gc);
     144
     145        gc.gridx = 1;
     146        gc.weightx = 1.0;
     147        add(tfOsmLogoutURL = new JosmTextField(), gc);
     148        SelectAllOnFocusGainedDecorator.decorate(tfOsmLogoutURL);
     149
    122150        cbUseDefaults.addItemListener(ilUseDefault = new UseDefaultItemListener());
    123151    }
     
    125153    protected boolean hasCustomSettings() {
    126154        OAuthParameters params = OAuthParameters.createDefault(apiUrl);
    127         return
    128            !tfConsumerKey.getText().equals(params.getConsumerKey())
    129         || !tfConsumerSecret.getText().equals(params.getConsumerSecret())
    130         || !tfRequestTokenURL.getText().equals(params.getRequestTokenUrl())
    131         || !tfAccessTokenURL.getText().equals(params.getAccessTokenUrl())
    132         || !tfAuthoriseURL.getText().equals(params.getAuthoriseUrl());
     155        return !params.equals(getAdvancedParameters());
    133156    }
    134157
     
    173196        tfAccessTokenURL.setText(params.getAccessTokenUrl());
    174197        tfAuthoriseURL.setText(params.getAuthoriseUrl());
     198        tfOsmLoginURL.setText(params.getOsmLoginUrl());
     199        tfOsmLogoutURL.setText(params.getOsmLogoutUrl());
    175200
    176201        setChildComponentsEnabled(false);
     
    198223            tfRequestTokenURL.getText(),
    199224            tfAccessTokenURL.getText(),
    200             tfAuthoriseURL.getText());
     225            tfAuthoriseURL.getText(),
     226            tfOsmLoginURL.getText(),
     227            tfOsmLogoutURL.getText());
    201228    }
    202229
     
    220247            tfAccessTokenURL.setText(parameters.getAccessTokenUrl() == null ? "" : parameters.getAccessTokenUrl());
    221248            tfAuthoriseURL.setText(parameters.getAuthoriseUrl() == null ? "" : parameters.getAuthoriseUrl());
     249            tfOsmLoginURL.setText(parameters.getOsmLoginUrl() == null ? "" : parameters.getOsmLoginUrl());
     250            tfOsmLogoutURL.setText(parameters.getOsmLogoutUrl() == null ? "" : parameters.getOsmLogoutUrl());
    222251        }
    223252    }
     
    244273            resetToDefaultSettings();
    245274        } else {
    246             cbUseDefaults.setSelected(false);
    247             tfConsumerKey.setText(pref.get("oauth.settings.consumer-key", OAuthParameters.DEFAULT_JOSM_CONSUMER_KEY));
    248             tfConsumerSecret.setText(pref.get("oauth.settings.consumer-secret", OAuthParameters.DEFAULT_JOSM_CONSUMER_SECRET));
    249             tfRequestTokenURL.setText(pref.get("oauth.settings.request-token-url", OAuthParameters.DEFAULT_REQUEST_TOKEN_URL));
    250             tfAccessTokenURL.setText(pref.get("oauth.settings.access-token-url", OAuthParameters.DEFAULT_ACCESS_TOKEN_URL));
    251             tfAuthoriseURL.setText(pref.get("oauth.settings.authorise-url", OAuthParameters.DEFAULT_AUTHORISE_URL));
    252             setChildComponentsEnabled(true);
     275            setAdvancedParameters(OAuthParameters.createFromPreferences(pref));
    253276        }
    254277        ilUseDefault.setEnabled(true);
     
    265288        pref.put("oauth.settings.use-default", cbUseDefaults.isSelected());
    266289        if (cbUseDefaults.isSelected()) {
    267             pref.put("oauth.settings.consumer-key", null);
    268             pref.put("oauth.settings.consumer-secret", null);
    269             pref.put("oauth.settings.request-token-url", null);
    270             pref.put("oauth.settings.access-token-url", null);
    271             pref.put("oauth.settings.authorise-url", null);
     290            new OAuthParameters(null, null, null, null, null, null, null).rememberPreferences(pref);
    272291        } else {
    273             pref.put("oauth.settings.consumer-key", tfConsumerKey.getText().trim());
    274             pref.put("oauth.settings.consumer-secret", tfConsumerSecret.getText().trim());
    275             pref.put("oauth.settings.request-token-url", tfRequestTokenURL.getText().trim());
    276             pref.put("oauth.settings.access-token-url", tfAccessTokenURL.getText().trim());
    277             pref.put("oauth.settings.authorise-url", tfAuthoriseURL.getText().trim());
     292            getAdvancedParameters().rememberPreferences(pref);
    278293        }
    279294    }
  • trunk/src/org/openstreetmap/josm/gui/oauth/FullyAutomaticAuthorizationUI.java

    r9352 r9355  
    479479
    480480        protected void alertLoginFailed(OsmLoginFailedException e) {
    481             String loginUrl = null;
    482             try {
    483                 loginUrl = authClient.buildOsmLoginUrl();
    484             } catch (OsmOAuthAuthorizationException e1) {
    485                 alertInvalidLoginUrl();
    486                 return;
    487             }
     481            final String loginUrl = getAdvancedPropertiesPanel().getAdvancedParameters().getOsmLoginUrl();
    488482            HelpAwareOptionPane.showOptionDialog(
    489483                    FullyAutomaticAuthorizationUI.this,
  • trunk/src/org/openstreetmap/josm/gui/oauth/OsmOAuthAuthorizationClient.java

    r9309 r9355  
    88import java.lang.reflect.Field;
    99import java.net.HttpURLConnection;
    10 import java.net.MalformedURLException;
    1110import java.net.URL;
    1211import java.nio.charset.StandardCharsets;
     
    247246
    248247    /**
    249      * Derives the OSM login URL from the OAuth Authorization Website URL
    250      *
    251      * @return the OSM login URL
    252      * @throws OsmOAuthAuthorizationException if something went wrong, in particular if the
    253      * URLs are malformed
    254      */
    255     public String buildOsmLoginUrl() throws OsmOAuthAuthorizationException {
    256         try {
    257             URL autUrl = new URL(oauthProviderParameters.getAuthoriseUrl());
    258             URL url = new URL(Main.pref.get("oauth.protocol", "https"), autUrl.getHost(), autUrl.getPort(), "/login");
    259             return url.toString();
    260         } catch (MalformedURLException e) {
    261             throw new OsmOAuthAuthorizationException(e);
    262         }
    263     }
    264 
    265     /**
    266      * Derives the OSM logout URL from the OAuth Authorization Website URL
    267      *
    268      * @return the OSM logout URL
    269      * @throws OsmOAuthAuthorizationException if something went wrong, in particular if the
    270      * URLs are malformed
    271      */
    272     protected String buildOsmLogoutUrl() throws OsmOAuthAuthorizationException {
    273         try {
    274             URL autUrl = new URL(oauthProviderParameters.getAuthoriseUrl());
    275             URL url = new URL(Main.pref.get("oauth.protocol", "https"), autUrl.getHost(), autUrl.getPort(), "/logout");
    276             return url.toString();
    277         } catch (MalformedURLException e) {
    278             throw new OsmOAuthAuthorizationException(e);
    279         }
    280     }
    281 
    282     /**
    283248     * Submits a request to the OSM website for a login form. The OSM website replies a session ID in
    284249     * a cookie.
     
    289254    protected SessionId fetchOsmWebsiteSessionId() throws OsmOAuthAuthorizationException {
    290255        try {
    291             StringBuilder sb = new StringBuilder();
    292             sb.append(buildOsmLoginUrl()).append("?cookie_test=true");
    293             URL url = new URL(sb.toString());
     256            final URL url = new URL(oauthProviderParameters.getOsmLoginUrl() + "?cookie_test=true");
    294257            synchronized (this) {
    295258                connection = HttpClient.create(url);
     
    341304    protected void authenticateOsmSession(SessionId sessionId, String userName, String password) throws OsmLoginFailedException {
    342305        try {
    343             URL url = new URL(buildOsmLoginUrl());
     306            final URL url = new URL(oauthProviderParameters.getOsmLoginUrl());
    344307            final HttpClient client = HttpClient.create(url, "POST").useCache(false);
    345308
     
    383346    protected void logoutOsmSession(SessionId sessionId) throws OsmOAuthAuthorizationException {
    384347        try {
    385             URL url = new URL(buildOsmLogoutUrl());
     348            URL url = new URL(oauthProviderParameters.getOsmLogoutUrl());
    386349            synchronized (this) {
    387350                connection = HttpClient.create(url).setMaxRedirects(-1);
Note: See TracChangeset for help on using the changeset viewer.