Changeset 2748 in josm


Ignore:
Timestamp:
06.01.2010 20:35:56 (2 years ago)
Author:
Gubaer
Message:

new: JOSM now supports OAuth

See also online help for server preferences and new OAuth Authorisation Wizard

Location:
trunk
Files:
1 added
22 edited

Legend:

Unmodified
Added
Removed
  • trunk/CONTRIBUTION

    r2704 r2748  
    22and is now maintained by the OpenStreetMap community. 
    33 
    4 The current JOSM maintainer is Dirk Stöcker. 
     4The current JOSM maintainer is Dirk Stöcker. 
    55 
    66Major code contributions from (in alphabetical order): 
     
    1717Raphael Mack 
    1818Frederik Ramm 
    19 Dirk Stöcker 
     19Dirk Stöcker 
    2020 
    2121Many minor contributions and patches by others; see SVN history 
     
    3838The Bzip2 code is from Keiron Liddle (Apache project) and licensed 
    3939with Apache license version 2.0. 
     40 
     41The signpost code (http://code.google.com/p/oauth-signpost/) 
     42is from Matthias Käppler and licensed with the Apache License 2.0. 
  • trunk/build.xml

    r2715 r2748  
    103103                        <zipfileset src="lib/gettext-commons-0.9.6.jar" /> 
    104104                        <zipfileset src="lib/metadata-extractor-2.3.1-nosun.jar" /> 
     105                        <zipfileset src="lib/commons-codec-1.4.jar" /> 
     106                        <zipfileset src="lib/signpost-core-1.1.jar" /> 
    105107                </jar> 
    106108        </target> 
  • trunk/src/org/openstreetmap/josm/actions/PreferencesAction.java

    r2323 r2748  
    22package org.openstreetmap.josm.actions; 
    33 
     4import static org.openstreetmap.josm.gui.help.HelpUtil.ht; 
    45import static org.openstreetmap.josm.tools.I18n.tr; 
    5 import static org.openstreetmap.josm.gui.help.HelpUtil.ht; 
    66 
    7 import java.awt.Dimension; 
    8 import java.awt.GridBagLayout; 
    97import java.awt.event.ActionEvent; 
    108import java.awt.event.KeyEvent; 
    119 
    12 import javax.swing.JDialog; 
    13 import javax.swing.JOptionPane; 
    14 import javax.swing.JPanel; 
    15  
    1610import org.openstreetmap.josm.Main; 
    1711import org.openstreetmap.josm.gui.preferences.PreferenceDialog; 
    18 import org.openstreetmap.josm.tools.GBC; 
    1912import org.openstreetmap.josm.tools.Shortcut; 
    2013 
     
    3023     */ 
    3124    public PreferencesAction() { 
    32         super(tr("Preferences..."), "preference", tr("Open a preferences page for global settings."), 
    33         Shortcut.registerShortcut("system:preferences", tr("Preferences"), KeyEvent.VK_F12, Shortcut.GROUP_DIRECT), true); 
     25        super(tr("Preferences..."), "preference", tr("Open a preferences dialog for global settings."), 
     26                Shortcut.registerShortcut("system:preferences", tr("Preferences"), KeyEvent.VK_F12, Shortcut.GROUP_DIRECT), true); 
    3427        putValue("help", ht("/Action/Preferences")); 
    3528    } 
     
    4336 
    4437    public void run() { 
    45         PreferenceDialog prefDlg = new PreferenceDialog(); 
    46         prefDlg.setMinimumSize(new Dimension(400,300)); 
    47         JPanel prefPanel = new JPanel(new GridBagLayout()); 
    48         prefPanel.add(prefDlg, GBC.eol().fill(GBC.BOTH)); 
    49  
    50         JOptionPane pane = new JOptionPane(prefPanel, JOptionPane.PLAIN_MESSAGE, JOptionPane.OK_CANCEL_OPTION); 
    51         JDialog dlg = pane.createDialog(Main.parent, tr("Preferences")); 
    52         dlg.setResizable(true); 
    53         dlg.setMinimumSize(new Dimension(500,400)); 
    54  
    55 //      if (dlg.getWidth() > 600) 
    56 //          dlg.setSize(600, dlg.getHeight()); 
    57 //      if (dlg.getHeight() > 600) 
    58 //          dlg.setSize(dlg.getWidth(),600); 
    59  
    60         int JOSMWidth = Main.parent.getWidth(); 
    61         int JOSMHeight = Main.parent.getHeight(); 
    62  
    63         if (JOSMWidth > 2000 && JOSMWidth >  JOSMHeight * 2) 
    64             // don't center on horizontal span monitor configurations (yes, can be selfish sometimes) 
    65             JOSMWidth /= 2; 
    66  
    67         int targetWidth = JOSMWidth / 2; 
    68         if (targetWidth < 600) targetWidth = 600; 
    69         if (targetWidth > 1200) targetWidth = 1200; 
    70         int targetHeight = (JOSMHeight * 3) / 4; 
    71         if (targetHeight < 600) targetHeight = 600; 
    72         if (targetHeight > 1200) targetHeight = 1200; 
    73  
    74         int targetX = Main.parent.getX() + JOSMWidth / 2 - targetWidth / 2; 
    75         int targetY = Main.parent.getY() + JOSMHeight / 2 - targetHeight / 2; 
    76  
    77         dlg.setBounds(targetX, targetY, targetWidth, targetHeight); 
    78  
    79         dlg.setModal(true); 
    80         dlg.setVisible(true); 
    81         if (pane.getValue() instanceof Integer && (Integer)pane.getValue() == JOptionPane.OK_OPTION) 
    82             prefDlg.ok(); 
    83         dlg.dispose(); 
     38        new PreferenceDialog(Main.parent).setVisible(true); 
    8439    } 
    8540} 
  • trunk/src/org/openstreetmap/josm/actions/ShowStatusReportAction.java

    r2500 r2748  
    9090 
    9191                while ((line = input.readLine()) != null) { 
    92                     // Skip potential private information 
    93                     if (line.trim().toLowerCase().startsWith("osm-server.username")) { 
     92                    String toCheck = line.trim().toLowerCase(); 
     93                    if (toCheck.startsWith("osm-server.username") 
     94                            || toCheck.startsWith("osm-server.password") 
     95                            || toCheck.startsWith("marker.show") 
     96                            || toCheck.startsWith("oauth.access-token.key") 
     97                            || toCheck.startsWith("oauth.access-token.secret")) { 
    9498                        continue; 
    9599                    } 
    96                     if (line.trim().toLowerCase().startsWith("osm-server.password")) { 
    97                         continue; 
    98                     } 
    99                     if (line.trim().toLowerCase().startsWith("marker.show")) { 
    100                         continue; 
    101                     } 
    102  
    103100                    text.append(line); 
    104101                    text.append("\n"); 
  • trunk/src/org/openstreetmap/josm/actions/UnGlueAction.java

    r2589 r2748  
    9090                int count = 0; 
    9191                for (Way w : OsmPrimitive.getFilteredList(n.getReferrers(), Way.class)) { 
    92                     if (!w.isUsable()) 
     92                    if (!w.isUsable()) { 
    9393                        continue; 
     94                    } 
    9495                    count++; 
    9596                } 
     
    287288            if (originalNode == pushNode) { 
    288289                // clone the node for all other ways 
    289                 pushNode = new Node(pushNode, true); 
     290                pushNode = new Node(pushNode, true /* clear OSM ID */); 
    290291                newNodes.add(pushNode); 
    291292                cmds.add(new AddCommand(pushNode)); 
     
    307308        HashSet<String> rolesToReAdd = null; 
    308309        for (Relation r : OsmPrimitive.getFilteredList(originalNode.getReferrers(), Relation.class)) { 
    309             if (r.isDeleted()) 
     310            if (r.isDeleted()) { 
    310311                continue; 
     312            } 
    311313            newRel = null; 
    312314            rolesToReAdd = null; 
  • trunk/src/org/openstreetmap/josm/data/ServerSidePreferences.java

    r2641 r2748  
    7777                System.out.println("uploading preferences to "+u); 
    7878                HttpURLConnection con = (HttpURLConnection)u.openConnection(); 
     79                // FIXME: 
     80                // - doesn't work if CredentialManager isn't JosmPreferencesCredentialManager 
     81                // - doesn't work for OAuth 
     82 
    7983                con.addRequestProperty("Authorization", "Basic "+Base64.encode(get("osm-server.username")+":"+get("osm-server.password"))); 
    8084                con.setRequestMethod("POST"); 
  • trunk/src/org/openstreetmap/josm/data/osm/Node.java

    r2620 r2748  
    8686     */ 
    8787    public Node(Node clone, boolean clearId) { 
    88         super(clone.getUniqueId(), true); 
     88        super(clone.getUniqueId(), true /* allow negative IDs */); 
    8989        cloneFrom(clone); 
    9090        if (clearId) { 
  • trunk/src/org/openstreetmap/josm/gui/ExceptionDialogUtil.java

    r2598 r2748  
    229229 
    230230    /** 
     231     * Explains a {@see OsmApiException} which was thrown because the authentication at 
     232     * the OSM server failed 
     233     * 
     234     * @param e the exception 
     235     */ 
     236    public static void explainAuthenticationFailed(OsmApiException e) { 
     237        String authMethod = Main.pref.get("osm-server.auth-method", "basic"); 
     238        String msg; 
     239        if (authMethod.equals("oauth")) { 
     240            msg = ExceptionUtil.explainFailedOAuthAuthentication(e); 
     241        } else { 
     242            msg = ExceptionUtil.explainFailedBasicAuthentication(e); 
     243        } 
     244 
     245        HelpAwareOptionPane.showOptionDialog( 
     246                Main.parent, 
     247                msg, 
     248                tr("Authentication Failed"), 
     249                JOptionPane.ERROR_MESSAGE, 
     250                ht("/ErrorMessages#AuthenticationFailed") 
     251        ); 
     252    } 
     253 
     254    /** 
     255     * Explains a {@see OsmApiException} which was thrown because accessing a protected 
     256     * resource was forbidden. 
     257     * 
     258     * @param e the exception 
     259     */ 
     260    public static void explainAuthorizationFailed(OsmApiException e) { 
     261        HelpAwareOptionPane.showOptionDialog( 
     262                Main.parent, 
     263                ExceptionUtil.explainFailedOAuthAuthorisation(e), 
     264                tr("Authorisation Failed"), 
     265                JOptionPane.ERROR_MESSAGE, 
     266                ht("/ErrorMessages#AuthenticationFailed") 
     267        ); 
     268    } 
     269 
     270 
     271    /** 
    231272     * Explains a {@see UnknownHostException} which has caused an {@see OsmTransferException}. 
    232273     * This is most likely happening when there is an error in the API URL or when 
     
    302343        if (e instanceof OsmApiException) { 
    303344            OsmApiException oae = (OsmApiException) e; 
    304             if (oae.getResponseCode() == HttpURLConnection.HTTP_PRECON_FAILED) { 
     345            switch(oae.getResponseCode()) { 
     346            case HttpURLConnection.HTTP_PRECON_FAILED: 
    305347                explainPreconditionFailed(oae); 
    306348                return; 
     349            case HttpURLConnection.HTTP_GONE: 
     350                explainGoneForUnknownPrimitive(oae); 
     351                return; 
     352            case HttpURLConnection.HTTP_INTERNAL_ERROR: 
     353                explainInternalServerError(oae); 
     354                return; 
     355            case HttpURLConnection.HTTP_BAD_REQUEST: 
     356                explainBadRequest(oae); 
     357                return; 
     358            case HttpURLConnection.HTTP_NOT_FOUND: 
     359                explainNotFound(oae); 
     360                return; 
     361            case HttpURLConnection.HTTP_CONFLICT: 
     362                explainConflict(oae); 
     363                return; 
     364            case HttpURLConnection.HTTP_UNAUTHORIZED: 
     365                explainAuthenticationFailed(oae); 
     366                return; 
     367            case HttpURLConnection.HTTP_FORBIDDEN: 
     368                explainAuthorizationFailed(oae); 
     369                return; 
    307370            } 
    308             if (oae.getResponseCode() == HttpURLConnection.HTTP_GONE) { 
    309                 explainGoneForUnknownPrimitive(oae); 
    310                 return; 
    311             } 
    312             if (oae.getResponseCode() == HttpURLConnection.HTTP_INTERNAL_ERROR) { 
    313                 explainInternalServerError(oae); 
    314                 return; 
    315             } 
    316             if (oae.getResponseCode() == HttpURLConnection.HTTP_BAD_REQUEST) { 
    317                 explainBadRequest(oae); 
    318                 return; 
    319             } 
    320             if (oae.getResponseCode() == HttpURLConnection.HTTP_NOT_FOUND) { 
    321                 explainNotFound(oae); 
    322                 return; 
    323             } 
    324             if (oae.getResponseCode() == HttpURLConnection.HTTP_CONFLICT) { 
    325                 explainConflict(oae); 
    326                 return; 
    327             } 
    328  
    329         } 
    330         explainGeneric(e); 
     371            explainGeneric(e); 
     372        } 
    331373    } 
    332374 
  • trunk/src/org/openstreetmap/josm/gui/MainApplication.java

    r2715 r2748  
    2121 
    2222import org.openstreetmap.josm.Main; 
     23import org.openstreetmap.josm.gui.preferences.server.OAuthAccessTokenHolder; 
    2324import org.openstreetmap.josm.io.DefaultProxySelector; 
    2425import org.openstreetmap.josm.io.auth.CredentialsManagerFactory; 
     
    6263 
    6364    /** 
     65     * Displays help on the console 
     66     *  
     67     */ 
     68    public static void showHelp() { 
     69        // TODO: put in a platformHook for system that have no console by default 
     70        System.out.println(tr("Java OpenStreetMap Editor")+"\n\n"+ 
     71                tr("usage")+":\n"+ 
     72                "\tjava -jar josm.jar <options>...\n\n"+ 
     73                tr("options")+":\n"+ 
     74                "\t--help|-?|-h                              "+tr("Show this help")+"\n"+ 
     75                "\t--geometry=widthxheight(+|-)x(+|-)y       "+tr("Standard unix geometry argument")+"\n"+ 
     76                "\t[--download=]minlat,minlon,maxlat,maxlon  "+tr("Download the bounding box")+"\n"+ 
     77                "\t[--download=]<url>                        "+tr("Download the location at the url (with lat=x&lon=y&zoom=z)")+"\n"+ 
     78                "\t[--download=]<filename>                   "+tr("Open file (as raw gps, if .gpx)")+"\n"+ 
     79                "\t--downloadgps=minlat,minlon,maxlat,maxlon "+tr("Download the bounding box as raw gps")+"\n"+ 
     80                "\t--selection=<searchstring>                "+tr("Select with the given search")+"\n"+ 
     81                "\t--[no-]maximize                           "+tr("Launch in maximized mode")+"\n"+ 
     82                "\t--reset-preferences                       "+tr("Reset the preferences to default")+"\n\n"+ 
     83                "\t--language=<language>                     "+tr("Set the language.")+"\n\n"+ 
     84                tr("options provided as Java system properties")+":\n"+ 
     85                "\t-Djosm.home="+tr("/PATH/TO/JOSM/FOLDER/         ")+tr("Change the folder for all user settings")+"\n\n"+ 
     86                tr("note: For some tasks, JOSM needs a lot of memory. It can be necessary to add the following\n" + 
     87                "      Java option to increase the maximum size of allocated memory")+":\n"+ 
     88                "\t-Xmx...m\n\n"+ 
     89                tr("examples")+":\n"+ 
     90                "\tjava -jar josm.jar track1.gpx track2.gpx london.osm\n"+ 
     91                "\tjava -jar josm.jar http://www.openstreetmap.org/index.html?lat=43.2&lon=11.1&zoom=13\n"+ 
     92                "\tjava -jar josm.jar london.osm --selection=http://www.ostertag.name/osm/OSM_errors_node-duplicate.xml\n"+ 
     93                "\tjava -jar josm.jar 43.2,11.1,43.4,11.4\n"+ 
     94                "\tjava -Djosm.home=/home/user/.josm_dev -jar josm.jar\n"+ 
     95                "\tjava -Xmx400m -jar josm.jar\n\n"+ 
     96                tr("Parameters are read in the order they are specified, so make sure you load\n"+ 
     97                "some data before --selection")+"\n\n"+ 
     98                tr("Instead of --download=<bbox> you may specify osm://<bbox>\n")); 
     99    } 
     100 
     101    /** 
    64102     * Main application Startup 
    65103     */ 
     
    102140        Main.pref.updateSystemProperties(); 
    103141 
    104         Authenticator.setDefault( 
    105                 new DefaultAuthenticator( 
    106                         CredentialsManagerFactory.getCredentialManager() 
    107                 ) 
    108         ); 
     142        DefaultAuthenticator.createInstance(CredentialsManagerFactory.getCredentialManager()); 
     143        Authenticator.setDefault(DefaultAuthenticator.getInstance()); 
    109144        ProxySelector.setDefault(new DefaultProxySelector(ProxySelector.getDefault())); 
    110  
     145        OAuthAccessTokenHolder.getInstance().init(Main.pref, CredentialsManagerFactory.getCredentialManager()); 
     146 
     147        // asking for help? show help and exit 
    111148        if (argList.contains("--help") || argList.contains("-?") || argList.contains("-h")) { 
    112             // TODO: put in a platformHook for system that have no console by default 
    113             System.out.println(tr("Java OpenStreetMap Editor")+"\n\n"+ 
    114                     tr("usage")+":\n"+ 
    115                     "\tjava -jar josm.jar <options>...\n\n"+ 
    116                     tr("options")+":\n"+ 
    117                     "\t--help|-?|-h                              "+tr("Show this help")+"\n"+ 
    118                     "\t--geometry=widthxheight(+|-)x(+|-)y       "+tr("Standard unix geometry argument")+"\n"+ 
    119                     "\t[--download=]minlat,minlon,maxlat,maxlon  "+tr("Download the bounding box")+"\n"+ 
    120                     "\t[--download=]<url>                        "+tr("Download the location at the url (with lat=x&lon=y&zoom=z)")+"\n"+ 
    121                     "\t[--download=]<filename>                   "+tr("Open file (as raw gps, if .gpx)")+"\n"+ 
    122                     "\t--downloadgps=minlat,minlon,maxlat,maxlon "+tr("Download the bounding box as raw gps")+"\n"+ 
    123                     "\t--selection=<searchstring>                "+tr("Select with the given search")+"\n"+ 
    124                     "\t--[no-]maximize                           "+tr("Launch in maximized mode")+"\n"+ 
    125                     "\t--reset-preferences                       "+tr("Reset the preferences to default")+"\n\n"+ 
    126                     "\t--language=<language>                     "+tr("Set the language.")+"\n\n"+ 
    127                     tr("options provided as Java system properties")+":\n"+ 
    128                     "\t-Djosm.home="+tr("/PATH/TO/JOSM/FOLDER/         ")+tr("Change the folder for all user settings")+"\n\n"+ 
    129                     tr("note: For some tasks, JOSM needs a lot of memory. It can be necessary to add the following\n" + 
    130                     "      Java option to increase the maximum size of allocated memory")+":\n"+ 
    131                     "\t-Xmx...m\n\n"+ 
    132                     tr("examples")+":\n"+ 
    133                     "\tjava -jar josm.jar track1.gpx track2.gpx london.osm\n"+ 
    134                     "\tjava -jar josm.jar http://www.openstreetmap.org/index.html?lat=43.2&lon=11.1&zoom=13\n"+ 
    135                     "\tjava -jar josm.jar london.osm --selection=http://www.ostertag.name/osm/OSM_errors_node-duplicate.xml\n"+ 
    136                     "\tjava -jar josm.jar 43.2,11.1,43.4,11.4\n"+ 
    137                     "\tjava -Djosm.home=/home/user/.josm_dev -jar josm.jar\n"+ 
    138                     "\tjava -Xmx400m -jar josm.jar\n\n"+ 
    139                     tr("Parameters are read in the order they are specified, so make sure you load\n"+ 
    140                     "some data before --selection")+"\n\n"+ 
    141                     tr("Instead of --download=<bbox> you may specify osm://<bbox>\n")); 
     149            showHelp(); 
    142150            System.exit(0); 
    143151        } 
     
    185193    public static void removeObsoletePreferences() { 
    186194        String[] obsolete = { 
    187                 "sample.preference.that.does.not.exist", // sample comment, expiry date should go here 
    188                 "osm-server.version", // remove this around 10/2009 
    189                 "osm-server.additional-versions", // remove this around 10/2009 
    190                 null 
     195                "proxy.anonymous", // 01/2010 - not needed anymore. Can be removed mid 2010 
     196                "proxy.enable"     // 01/2010 - not needed anymore. Can be removed mid 2010 
    191197        }; 
    192         for (String i : obsolete) { 
    193             if (i == null) { 
    194                 continue; 
    195             } 
    196             if (Main.pref.hasKey(i)) { 
    197                 Main.pref.removeFromCollection(i, Main.pref.get(i)); 
    198                 System.out.println(tr("Preference setting {0} has been removed since it is no longer used.", i)); 
     198        for (String key : obsolete) { 
     199            if (Main.pref.hasKey(key)) { 
     200                Main.pref.removeFromCollection(key, Main.pref.get(key)); 
     201                System.out.println(tr("Preference setting {0} has been removed since it is no longer used.", key)); 
    199202            } 
    200203        } 
  • trunk/src/org/openstreetmap/josm/gui/dialogs/changeset/query/AdvancedChangesetQueryPanel.java

    r2689 r2748  
    66import java.awt.BorderLayout; 
    77import java.awt.Color; 
    8 import java.awt.Dimension; 
    98import java.awt.GridBagConstraints; 
    109import java.awt.GridBagLayout; 
    1110import java.awt.Insets; 
    12 import java.awt.Rectangle; 
    1311import java.awt.event.ItemEvent; 
    1412import java.awt.event.ItemListener; 
     
    2826import javax.swing.JScrollPane; 
    2927import javax.swing.JTextField; 
    30 import javax.swing.Scrollable; 
    3128import javax.swing.text.JTextComponent; 
    3229 
     
    3936import org.openstreetmap.josm.gui.widgets.BoundingBoxSelectionPanel; 
    4037import org.openstreetmap.josm.gui.widgets.SelectAllOnFocusGainedDecorator; 
     38import org.openstreetmap.josm.gui.widgets.VerticallyScrollablePanel; 
    4139import org.openstreetmap.josm.io.ChangesetQuery; 
    4240import org.openstreetmap.josm.tools.CheckParameterUtil; 
     
    5957    protected JPanel buildQueryPanel() { 
    6058        ItemListener stateChangeHandler = new RestrictionGroupStateChangeHandler(); 
    61         JPanel pnl  = new QuerySpecificationPanel(); 
     59        JPanel pnl  = new VerticallyScrollablePanel(); 
    6260        pnl.setBorder(BorderFactory.createEmptyBorder(5,5,5,5)); 
    6361        pnl.setLayout(new GridBagLayout()); 
     
    961959    } 
    962960 
    963     static private class QuerySpecificationPanel extends JPanel implements Scrollable { 
    964         public Dimension getPreferredScrollableViewportSize() { 
    965             return getPreferredSize(); 
    966         } 
    967  
    968         public int getScrollableBlockIncrement(Rectangle arg0, int arg1, int arg2) { 
    969             return 20; 
    970         } 
    971  
    972         public boolean getScrollableTracksViewportHeight() { 
    973             return false; 
    974         } 
    975  
    976         public boolean getScrollableTracksViewportWidth() { 
    977             return true; 
    978         } 
    979  
    980         public int getScrollableUnitIncrement(Rectangle arg0, int arg1, int arg2) { 
    981             return 10; 
    982         } 
    983     } 
    984  
    985961    /** 
    986962     * Validator for user ids entered in in a {@see JTextComponent}. 
  • trunk/src/org/openstreetmap/josm/io/DefaultProxySelector.java

    r2733 r2748  
    1616 
    1717import org.openstreetmap.josm.Main; 
    18 import org.openstreetmap.josm.gui.preferences.ProxyPreferences; 
    19 import org.openstreetmap.josm.gui.preferences.ProxyPreferences.ProxyPolicy; 
     18import org.openstreetmap.josm.gui.preferences.server.ProxyPreferencesPanel; 
     19import org.openstreetmap.josm.gui.preferences.server.ProxyPreferencesPanel.ProxyPolicy; 
     20 
    2021 
    2122/** 
     
    99100     */ 
    100101    public void initFromPreferences() { 
    101         String value = Main.pref.get(ProxyPreferences.PROXY_POLICY); 
     102        String value = Main.pref.get(ProxyPreferencesPanel.PROXY_POLICY); 
    102103        if (value.length() == 0) { 
    103             System.err.println(tr("Warning: no preference ''{0}'' found.", ProxyPreferences.PROXY_POLICY)); 
     104            System.err.println(tr("Warning: no preference ''{0}'' found.", ProxyPreferencesPanel.PROXY_POLICY)); 
    104105            System.err.println(tr("The proxy will not be used.")); 
    105106            proxyPolicy = ProxyPolicy.NO_PROXY; 
     
    107108            proxyPolicy= ProxyPolicy.fromName(value); 
    108109            if (proxyPolicy == null) { 
    109                 System.err.println(tr("Warning: unexpected value for preference ''{0}'' found. Got ''{1}''. Will use no proxy.", ProxyPreferences.PROXY_POLICY, value)); 
     110                System.err.println(tr("Warning: unexpected value for preference ''{0}'' found. Got ''{1}''. Will use no proxy.", ProxyPreferencesPanel.PROXY_POLICY, value)); 
    110111                proxyPolicy = ProxyPolicy.NO_PROXY; 
    111112            } 
    112113        } 
    113         String host = Main.pref.get(ProxyPreferences.PROXY_HTTP_HOST, null); 
    114         int port = parseProxyPortValue(ProxyPreferences.PROXY_HTTP_PORT, Main.pref.get(ProxyPreferences.PROXY_HTTP_PORT, null)); 
     114        String host = Main.pref.get(ProxyPreferencesPanel.PROXY_HTTP_HOST, null); 
     115        int port = parseProxyPortValue(ProxyPreferencesPanel.PROXY_HTTP_PORT, Main.pref.get(ProxyPreferencesPanel.PROXY_HTTP_PORT, null)); 
    115116        if (host != null && ! host.trim().equals("") && port > 0) { 
    116117            httpProxySocketAddress = new InetSocketAddress(host,port); 
     
    123124        } 
    124125 
    125         host = Main.pref.get(ProxyPreferences.PROXY_SOCKS_HOST, null); 
    126         port = parseProxyPortValue(ProxyPreferences.PROXY_SOCKS_PORT, Main.pref.get(ProxyPreferences.PROXY_SOCKS_PORT, null)); 
     126        host = Main.pref.get(ProxyPreferencesPanel.PROXY_SOCKS_HOST, null); 
     127        port = parseProxyPortValue(ProxyPreferencesPanel.PROXY_SOCKS_PORT, Main.pref.get(ProxyPreferencesPanel.PROXY_SOCKS_PORT, null)); 
    127128        if (host != null && ! host.trim().equals("") && port > 0) { 
    128129            socksProxySocketAddress = new InetSocketAddress(host,port); 
  • trunk/src/org/openstreetmap/josm/io/OsmApi.java

    r2734 r2748  
    466466    } 
    467467 
     468    protected boolean isUsingOAuth() { 
     469        String authMethod = Main.pref.get("osm-server.auth-method", "basic"); 
     470        return authMethod.equals("oauth"); 
     471    } 
     472 
    468473    private String sendRequest(String requestMethod, String urlSuffix,String requestBody, ProgressMonitor monitor) throws OsmTransferException { 
    469474        return sendRequest(requestMethod, urlSuffix, requestBody, monitor, true); 
     
    574579                case HttpURLConnection.HTTP_GONE: 
    575580                    throw new OsmApiPrimitiveGoneException(errorHeader, errorBody); 
    576                 case HttpURLConnection.HTTP_UNAUTHORIZED: 
    577                 case HttpURLConnection.HTTP_PROXY_AUTH: 
    578                     // if we get here with HTTP_UNAUTHORIZED or HTTP_PROXY_AUTH the user canceled the 
    579                     // username/password dialog. Throw an OsmTransferCancelledException. 
    580                     // 
    581                     throw new OsmTransferCancelledException(); 
     581                    //                case HttpURLConnection.HTTP_UNAUTHORIZED: 
     582                    //                    throw new OsmApiException(retCode, errorHeader, errorBody); 
     583                    //                case HttpURLConnection.HTTP_PROXY_AUTH: 
     584                    //                    throw new OsmApiException(retCode, errorHeader, errorBody); 
     585                    //                case HttpURLConnection.HTTP_FORBIDDEN: 
     586                    //                    throw new OsmApiException(retCode, errorHeader, errorBody); 
    582587                case HttpURLConnection.HTTP_CONFLICT: 
    583588                    if (ChangesetClosedException.errorHeaderMatchesPattern(errorHeader)) 
     
    585590                    else 
    586591                        throw new OsmApiException(retCode, errorHeader, errorBody); 
     592                case HttpURLConnection.HTTP_FORBIDDEN: 
     593                    OsmApiException e = new OsmApiException(retCode, errorHeader, errorBody); 
     594                    e.setAccessedUrl(activeConnection.getURL().toString()); 
     595                    throw e; 
    587596                default: 
    588597                    throw new OsmApiException(retCode, errorHeader, errorBody); 
  • trunk/src/org/openstreetmap/josm/io/OsmApiException.java

    r2512 r2748  
    88    private String errorHeader; 
    99    private String errorBody; 
     10    private String accessedUrl; 
    1011 
    1112    public OsmApiException() { 
     
    6061        sb.append("ResponseCode=") 
    6162        .append(responseCode); 
    62         if (errorHeader != null && !errorBody.trim().equals("")) { 
     63        if (errorHeader != null && errorBody != null && !errorBody.trim().equals("")) { 
    6364            sb.append(", Error Header=<") 
    6465            .append(tr(errorHeader)) 
     
    9596        return sb.toString(); 
    9697    } 
     98 
     99    public void setAccessedUrl(String url) { 
     100        this.accessedUrl = url; 
     101    } 
     102 
     103    public String getAccessedUrl() { 
     104        return accessedUrl; 
     105    } 
    97106} 
  • trunk/src/org/openstreetmap/josm/io/OsmConnection.java

    r2641 r2748  
    11// License: GPL. Copyright 2007 by Immanuel Scholz and others 
    22package org.openstreetmap.josm.io; 
     3 
     4import static org.openstreetmap.josm.tools.I18n.tr; 
    35 
    46import java.net.HttpURLConnection; 
     
    1113import java.util.logging.Logger; 
    1214 
     15import oauth.signpost.OAuthConsumer; 
     16import oauth.signpost.exception.OAuthException; 
     17 
     18import org.openstreetmap.josm.Main; 
     19import org.openstreetmap.josm.data.oauth.OAuthParameters; 
     20import org.openstreetmap.josm.gui.preferences.server.OAuthAccessTokenHolder; 
    1321import org.openstreetmap.josm.io.auth.CredentialsManagerException; 
    1422import org.openstreetmap.josm.io.auth.CredentialsManagerFactory; 
     
    2735    protected boolean cancel = false; 
    2836    protected HttpURLConnection activeConnection; 
     37    protected OAuthParameters oauthParameters; 
    2938 
    3039    /** 
     
    5968    } 
    6069 
    61     protected void addAuth(HttpURLConnection con) throws OsmTransferException { 
     70    /** 
     71     * Adds an authentication header for basic authentication 
     72     *  
     73     * @param con the connection 
     74     * @throws OsmTransferException thrown is something went wrong. Check for nested exceptions 
     75     */ 
     76    protected void addBasicAuthorizationHeader(HttpURLConnection con) throws OsmTransferException { 
    6277        CharsetEncoder encoder = Charset.forName("UTF-8").newEncoder(); 
    6378        CredentialsManagerResponse response; 
     
    89104 
    90105    /** 
     106     * Signs the connection with an OAuth authentication header 
     107     *  
     108     * @param connection the connection 
     109     *  
     110     * @throws OsmTransferException thrown if there is currently no OAuth Access Token configured 
     111     * @throws OsmTransferException thrown if signing fails 
     112     */ 
     113    protected void addOAuthAuthorizationHeader(HttpURLConnection connection) throws OsmTransferException { 
     114        if (oauthParameters == null) { 
     115            oauthParameters = OAuthParameters.createFromPreferences(Main.pref); 
     116        } 
     117        OAuthConsumer consumer = oauthParameters.buildConsumer(); 
     118        OAuthAccessTokenHolder holder = OAuthAccessTokenHolder.getInstance(); 
     119        if (! holder.containsAccessToken()) 
     120            throw new OsmTransferException(tr("Failed to add an OAuth authentication header. There is currently no OAuth Access Token configured.")); 
     121 
     122        consumer.setTokenWithSecret(holder.getAccessTokenKey(), holder.getAccessTokenSecret()); 
     123        try { 
     124            consumer.sign(connection); 
     125        } catch(OAuthException e) { 
     126            throw new OsmTransferException(tr("Failed to sign a HTTP connection with an OAuth Authentication header"), e); 
     127        } 
     128    } 
     129 
     130    protected void addAuth(HttpURLConnection connection) throws OsmTransferException { 
     131        String authMethod = Main.pref.get("osm-server.auth-method", "basic"); 
     132        if (authMethod.equals("basic")) { 
     133            addBasicAuthorizationHeader(connection); 
     134        } else if (authMethod.equals("oauth")) { 
     135            addOAuthAuthorizationHeader(connection); 
     136        } else { 
     137            String msg = tr("Warning: unexpected value for preference ''{0}''. Got ''{1}''.", "osm-server.auth-method", authMethod); 
     138            System.err.println(msg); 
     139            throw new OsmTransferException(msg); 
     140        } 
     141    } 
     142 
     143    /** 
    91144     * Replies true if this connection is canceled 
    92145     * 
  • trunk/src/org/openstreetmap/josm/io/OsmServerUserInfoReader.java

    r2688 r2748  
    2525public class OsmServerUserInfoReader extends OsmServerReader { 
    2626 
    27     public OsmServerUserInfoReader() { 
    28         setDoAuthenticate(true); 
    29     } 
    30  
    31     @Override 
    32     public DataSet parseOsm(ProgressMonitor progressMonitor) throws OsmTransferException { 
    33         // not implemented 
    34         return null; 
    35     } 
    36  
    37     protected String getAttribute(Node node, String name) { 
     27    static protected String getAttribute(Node node, String name) { 
    3828        return node.getAttributes().getNamedItem(name).getNodeValue(); 
    3929    } 
    4030 
    41     protected UserInfo buildFromXML(Document document) throws OsmDataParsingException{ 
     31    static public UserInfo buildFromXML(Document document) throws OsmDataParsingException{ 
    4232        try { 
    4333            XPathFactory factory = XPathFactory.newInstance(); 
     
    121111    } 
    122112 
     113    public OsmServerUserInfoReader() { 
     114        setDoAuthenticate(true); 
     115    } 
     116 
     117    @Override 
     118    public DataSet parseOsm(ProgressMonitor progressMonitor) throws OsmTransferException { 
     119        // not implemented 
     120        return null; 
     121    } 
     122 
     123 
     124 
    123125    public UserInfo fetchUserInfo(ProgressMonitor monitor) throws OsmTransferException { 
    124126        try { 
    125             monitor.beginTask("Reading user info ..."); 
     127            monitor.beginTask(tr("Reading user info ...")); 
    126128            InputStream in = getInputStream("user/details", monitor.createSubTaskMonitor(1, true)); 
    127129            return buildFromXML( 
  • trunk/src/org/openstreetmap/josm/io/auth/CredentialsManager.java

    r2711 r2748  
    44import java.net.PasswordAuthentication; 
    55import java.net.Authenticator.RequestorType; 
     6 
     7import org.openstreetmap.josm.data.oauth.OAuthToken; 
    68 
    79/** 
     
    1315 *   optional HTTP proxy server a user may use</li> 
    1416 *  </ul> 
     17 *  
     18 *  In addition, it manages an OAuth Access Token for accessing the OSM server. 
    1519 */ 
    1620public interface CredentialsManager { 
     
    4650     */ 
    4751    public CredentialsManagerResponse getCredentials(RequestorType requestorType, boolean noSuccessWithLastResponse) throws CredentialsManagerException; 
     52 
     53 
     54    /** 
     55     * Lookup the current OAuth Access Token to access the OSM server. Replies null, if no 
     56     * Access Token is currently managed by this CredentialManager. 
     57     *  
     58     * @return the current OAuth Access Token to access the OSM server. 
     59     * @throws CredentialsManagerException thrown if something goes wrong 
     60     */ 
     61    public OAuthToken lookupOAuthAccessToken() throws CredentialsManagerException; 
     62 
     63    /** 
     64     * Stores the OAuth Access Token <code>accessToken</code>. 
     65     *  
     66     * @param accessToken the access Token. null, to remove the Access Token. 
     67     * @throws CredentialsManagerException thrown if something goes wrong 
     68     */ 
     69    public void storeOAuthAccessToken(OAuthToken accessToken) throws CredentialsManagerException; 
    4870} 
  • trunk/src/org/openstreetmap/josm/io/auth/DefaultAuthenticator.java

    r2711 r2748  
    88import java.util.logging.Logger; 
    99 
     10import org.openstreetmap.josm.Main; 
     11 
    1012/** 
    1113 * This is the default authenticator used in JOSM. It delegates lookup of credentials 
     
    1618public  class DefaultAuthenticator extends Authenticator { 
    1719    private static final Logger logger = Logger.getLogger(DefaultAuthenticator.class.getName()); 
     20    private static DefaultAuthenticator instance; 
     21 
     22    public static DefaultAuthenticator getInstance() { 
     23        return instance; 
     24    } 
     25 
     26    public static void createInstance(CredentialsManager credentialManager) { 
     27        instance = new DefaultAuthenticator(credentialManager); 
     28    } 
    1829 
    1930    private CredentialsManager credentialManager; 
    2031    private final Map<RequestorType, Boolean> credentialsTried = new HashMap<RequestorType, Boolean>(); 
     32    private boolean enabled = true; 
    2133 
    2234    /** 
     
    2436     * @param credentialManager the credential manager 
    2537     */ 
    26     public DefaultAuthenticator(CredentialsManager credentialManager) { 
     38    private DefaultAuthenticator(CredentialsManager credentialManager) { 
    2739        this.credentialManager = credentialManager; 
    2840    } 
     41 
     42 
    2943 
    3044    /** 
     
    3448     */ 
    3549    @Override protected PasswordAuthentication getPasswordAuthentication() { 
     50        if (!enabled) 
     51            return null; 
    3652        try { 
     53            if (getRequestorType().equals(Authenticator.RequestorType.SERVER)) { 
     54                // if we are working with OAuth we don't prompt for a password 
     55                // 
     56                String authMethod = Main.pref.get("osm-server.auth-method", "basic"); 
     57                if (authMethod.equals("oauth")) 
     58                    return null; 
     59            } 
    3760            boolean tried = credentialsTried.get(getRequestorType()) != null; 
    3861            CredentialsManagerResponse response = credentialManager.getCredentials(getRequestorType(), tried); 
     
    4669        } 
    4770    } 
     71 
     72    public boolean isEnabled() { 
     73        return enabled; 
     74    } 
     75 
     76    public void setEnabled(boolean enabled) { 
     77        this.enabled = enabled; 
     78    } 
    4879} 
  • trunk/src/org/openstreetmap/josm/io/auth/JosmPreferencesCredentialManager.java

    r2711 r2748  
    66 
    77import org.openstreetmap.josm.Main; 
     8import org.openstreetmap.josm.data.oauth.OAuthToken; 
    89import org.openstreetmap.josm.gui.io.CredentialDialog; 
    9 import org.openstreetmap.josm.gui.preferences.ProxyPreferences; 
     10import org.openstreetmap.josm.gui.preferences.server.ProxyPreferencesPanel; 
    1011 
    1112/** 
     
    3233            return new PasswordAuthentication(user, password == null ? new char[0] : password.toCharArray()); 
    3334        case PROXY: 
    34             user = Main.pref.get(ProxyPreferences.PROXY_USER, null); 
    35             password = Main.pref.get(ProxyPreferences.PROXY_PASS, null); 
     35            user = Main.pref.get(ProxyPreferencesPanel.PROXY_USER, null); 
     36            password = Main.pref.get(ProxyPreferencesPanel.PROXY_PASS, null); 
    3637            if (user == null) 
    3738                return null; 
     
    5758            break; 
    5859        case PROXY: 
    59             Main.pref.put("proxy.username", credentials.getUserName()); 
     60            Main.pref.put(ProxyPreferencesPanel.PROXY_USER, credentials.getUserName()); 
    6061            if (credentials.getPassword() == null) { 
    61                 Main.pref.put("proxy.password", null); 
     62                Main.pref.put(ProxyPreferencesPanel.PROXY_PASS, null); 
    6263            } else { 
    63                 Main.pref.put("proxy.password", String.valueOf(credentials.getPassword())); 
     64                Main.pref.put(ProxyPreferencesPanel.PROXY_PASS, String.valueOf(credentials.getPassword())); 
    6465            } 
    6566            break; 
     
    104105        return response; 
    105106    } 
     107 
     108 
     109    /** 
     110     * Lookup the current OAuth Access Token to access the OSM server. Replies null, if no 
     111     * Access Token is currently managed by this CredentialManager. 
     112     *  
     113     * @return the current OAuth Access Token to access the OSM server. 
     114     * @throws CredentialsManagerException thrown if something goes wrong 
     115     */ 
     116    public OAuthToken lookupOAuthAccessToken() throws CredentialsManagerException { 
     117        String accessTokenKey = Main.pref.get("oauth.access-token.key", null); 
     118        String accessTokenSecret = Main.pref.get("oauth.access-token.secret", null); 
     119        if (accessTokenKey == null && accessTokenSecret == null) 
     120            return null; 
     121        return new OAuthToken(accessTokenKey, accessTokenSecret); 
     122    } 
     123 
     124    /** 
     125     * Stores the OAuth Access Token <code>accessToken</code>. 
     126     *  
     127     * @param accessToken the access Token. null, to remove the Access Token. 
     128     * @throws CredentialsManagerException thrown if something goes wrong 
     129     */ 
     130    public void storeOAuthAccessToken(OAuthToken accessToken) throws CredentialsManagerException { 
     131        if (accessToken == null) { 
     132            Main.pref.put("oauth.access-token.key", null); 
     133            Main.pref.put("oauth.access-token.secret", null); 
     134        } else { 
     135            Main.pref.put("oauth.access-token.key", accessToken.getKey()); 
     136            Main.pref.put("oauth.access-token.secret", accessToken.getSecret()); 
     137        } 
     138    } 
    106139} 
  • trunk/src/org/openstreetmap/josm/tools/ExceptionUtil.java

    r2512 r2748  
    1919 
    2020import org.openstreetmap.josm.Main; 
     21import org.openstreetmap.josm.gui.preferences.server.OAuthAccessTokenHolder; 
    2122import org.openstreetmap.josm.io.ChangesetClosedException; 
    2223import org.openstreetmap.josm.io.OsmApi; 
     
    8788    } 
    8889 
     90    public static String explainFailedBasicAuthentication(OsmApiException e) { 
     91        e.printStackTrace(); 
     92        return tr("<html>" 
     93                + "Authentication at the OSM server with the username ''{0}'' failed.<br>" 
     94                + "Please check the username and the password in the JOSM preferences." 
     95                + "</html>", 
     96                Main.pref.get("osm-server.username") 
     97        ); 
     98    } 
     99 
     100    public static String explainFailedOAuthAuthentication(OsmApiException e) { 
     101        e.printStackTrace(); 
     102        return tr("<html>" 
     103                + "Authentication at the OSM server with the OAuth token ''{0}'' failed.<br>" 
     104                + "Please launch the preferences dialog and retrieve another OAuth token." 
     105                + "</html>", 
     106                OAuthAccessTokenHolder.getInstance().getAccessTokenKey() 
     107        ); 
     108    } 
     109 
     110    public static String explainFailedOAuthAuthorisation(OsmApiException e) { 
     111        e.printStackTrace(); 
     112        return tr("<html>" 
     113                + "Authorisation at the OSM server with the OAuth token ''{0}'' failed.<br>" 
     114                + "The token is not authorised to access the protected resource<br>" 
     115                + "''{1}''.<br>" 
     116                + "Please launch the preferences dialog and retrieve another OAuth token." 
     117                + "</html>", 
     118                OAuthAccessTokenHolder.getInstance().getAccessTokenKey(), 
     119                e.getAccessedUrl() == null ? tr("unknown") : e.getAccessedUrl() 
     120        ); 
     121    } 
    89122    /** 
    90123     * Explains an error due to a 409 conflict 
  • trunk/src/org/openstreetmap/josm/tools/OpenBrowser.java

    r1169 r2748  
    11// License: GPL. Copyright 2007 by Immanuel Scholz and others 
    22package org.openstreetmap.josm.tools; 
     3 
     4import static org.openstreetmap.josm.tools.I18n.tr; 
    35 
    46import java.io.IOException; 
     
    2123    /** 
    2224     * @return <code>null</code> for success or a string in case of an error. 
     25     * @throws IllegalStateException thrown if no platform is set to which opening the URL can be dispatched, 
     26     * {@see Main#platform} 
    2327     */ 
    24     public static String displayUrl(String url) { 
     28    public static String displayUrl(String url) throws IllegalStateException { 
    2529        if (Main.applet) { 
    2630            try { 
     
    3337        } 
    3438 
     39        if (Main.platform == null) 
     40            throw new IllegalStateException(tr("Failed to open URL. There is currently no platform set. Please set a platform first.")); 
    3541        try { 
    3642            Main.platform.openUrl(url); 
  • trunk/test/config/test-functional-env.properties

    r1806 r2748  
    99# This is the home directory for JOSM plugins: ${josm.home}\plugins\*.jar 
    1010# 
    11 josm.home=C:\\data\\projekte\\osm\\tag-editor-plugin 
     11josm.home=C:\\data\\projekte\\osm\\josm-dev 
    1212 
    1313 
     
    1616#   temporary results  
    1717# 
    18 test.functional.tempdir=C:\\data\\projekte\\eclipse-3.4.1-ws\\JOSM-1769\\test\\data\\temp 
     18test.functional.tempdir=C:\\data\\projekte\\osm\\josm-dev\\temp 
    1919 
  • trunk/test/functional/org/openstreetmap/josm/fixtures/JOSMFixture.java

    r2600 r2748  
    1414import org.openstreetmap.josm.data.projection.Mercator; 
    1515import org.openstreetmap.josm.io.OsmApi; 
     16import org.openstreetmap.josm.tools.I18n; 
    1617 
    1718public class JOSMFixture { 
     
    4243        } catch(Exception e){ 
    4344            logger.log(Level.SEVERE, MessageFormat.format("failed to load property file ''{0}''", testPropertiesResourceName)); 
    44             fail(MessageFormat.format("failed to load property file ''{0}''", testPropertiesResourceName)); 
     45            fail(MessageFormat.format("failed to load property file ''{0}''. \nMake sure the path ''$project_root/test/config'' is on the classpath.", testPropertiesResourceName)); 
    4546        } 
    4647 
     
    5354            File f = new File(josmHome); 
    5455            if (! f.exists() || ! f.canRead()) { 
    55                 fail(MessageFormat.format("property ''{0}'' points to ''{1}'' which is either not existing or not readable", "josm.home", josmHome)); 
     56                fail(MessageFormat.format("property ''{0}'' points to ''{1}'' which is either not existing or not readable.\nEdit ''{2}'' and update the value ''josm.home''. ", "josm.home", josmHome,testPropertiesResourceName )); 
    5657            } 
    5758        } 
    5859        System.setProperty("josm.home", josmHome); 
     60        I18n.init(); 
     61        // initialize the plaform hook, and 
     62        Main.determinePlatformHook(); 
     63        // call the really early hook before we anything else 
     64        Main.platform.preStartupHook(); 
     65 
    5966        Main.pref.init(false); 
    6067 
Note: See TracChangeset for help on using the changeset viewer.