Changeset 10973 in josm


Ignore:
Timestamp:
2016-09-08T00:02:03+02:00 (3 years ago)
Author:
Don-vip
Message:

see #13564 - proper management of invalid URLs in remote control handlers + add unit test

Location:
trunk
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/RequestHandler.java

    r10587 r10973  
    146146         */
    147147        PermissionPrefWithDefault permissionPref = getPermissionPref();
    148         if (permissionPref != null && permissionPref.pref != null) {
    149             if (!Main.pref.getBoolean(permissionPref.pref, permissionPref.defaultVal)) {
    150                 String err = MessageFormat.format("RemoteControl: ''{0}'' forbidden by preferences", myCommand);
    151                 Main.info(err);
    152                 throw new RequestHandlerForbiddenException(err);
    153             }
     148        if (permissionPref != null && permissionPref.pref != null && !Main.pref.getBoolean(permissionPref.pref, permissionPref.defaultVal)) {
     149            String err = MessageFormat.format("RemoteControl: ''{0}'' forbidden by preferences", myCommand);
     150            Main.info(err);
     151            throw new RequestHandlerForbiddenException(err);
    154152        }
    155153
     
    179177     *
    180178     * @param url The request URL.
    181      */
    182     public void setUrl(String url) {
     179     * @throws RequestHandlerBadRequestException if request URL is invalid
     180     */
     181    public void setUrl(String url) throws RequestHandlerBadRequestException {
    183182        this.request = url;
    184         parseArgs();
     183        try {
     184            parseArgs();
     185        } catch (URISyntaxException e) {
     186            throw new RequestHandlerBadRequestException(e);
     187        }
    185188    }
    186189
     
    190193     *
    191194     * Can be overridden by subclass.
    192      */
    193     protected void parseArgs() {
    194         try {
    195             this.args = getRequestParameter(new URI(this.request));
    196         } catch (URISyntaxException ex) {
    197             throw new RuntimeException(ex);
    198         }
     195     * @throws URISyntaxException if request URL is invalid
     196     */
     197    protected void parseArgs() throws URISyntaxException {
     198        this.args = getRequestParameter(new URI(this.request));
    199199    }
    200200
     
    311311
    312312    public static class RequestHandlerErrorException extends RequestHandlerException {
     313
     314        /**
     315         * Constructs a new {@code RequestHandlerErrorException}.
     316         * @param cause the cause (which is saved for later retrieval by the {@link #getCause()} method).
     317         */
    313318        public RequestHandlerErrorException(Throwable cause) {
    314319            super(cause);
     
    318323    public static class RequestHandlerBadRequestException extends RequestHandlerException {
    319324
     325        /**
     326         * Constructs a new {@code RequestHandlerBadRequestException}.
     327         * @param message the detail message. The detail message is saved for later retrieval by the {@link #getMessage()} method.
     328         */
    320329        public RequestHandlerBadRequestException(String message) {
    321330            super(message);
    322331        }
    323332
     333        /**
     334         * Constructs a new {@code RequestHandlerBadRequestException}.
     335         * @param cause the cause (which is saved for later retrieval by the {@link #getCause()} method).
     336         */
     337        public RequestHandlerBadRequestException(Throwable cause) {
     338            super(cause);
     339        }
     340
     341        /**
     342         * Constructs a new {@code RequestHandlerBadRequestException}.
     343         * @param message the detail message. The detail message is saved for later retrieval by the {@link #getMessage()} method.
     344         * @param cause the cause (which is saved for later retrieval by the {@link #getCause()} method).
     345         */
    324346        public RequestHandlerBadRequestException(String message, Throwable cause) {
    325347            super(message, cause);
     
    328350
    329351    public static class RequestHandlerForbiddenException extends RequestHandlerException {
    330         private static final long serialVersionUID = 2263904699747115423L;
    331 
     352
     353        /**
     354         * Constructs a new {@code RequestHandlerForbiddenException}.
     355         * @param message the detail message. The detail message is saved for later retrieval by the {@link #getMessage()} method.
     356         */
    332357        public RequestHandlerForbiddenException(String message) {
    333358            super(message);
     
    337362    public abstract static class RawURLParseRequestHandler extends RequestHandler {
    338363        @Override
    339         protected void parseArgs() {
     364        protected void parseArgs() throws URISyntaxException {
    340365            Map<String, String> args = new HashMap<>();
    341366            if (request.indexOf('?') != -1) {
  • trunk/test/unit/org/openstreetmap/josm/io/remotecontrol/handler/AddNodeHandlerTest.java

    r10436 r10973  
    3131    }
    3232
    33     private static AddNodeHandler newHandler(String url) {
     33    private static AddNodeHandler newHandler(String url) throws RequestHandlerBadRequestException {
    3434        AddNodeHandler req = new AddNodeHandler();
    3535        if (url != null)
  • trunk/test/unit/org/openstreetmap/josm/io/remotecontrol/handler/AddWayHandlerTest.java

    r10436 r10973  
    3131    }
    3232
    33     private static AddWayHandler newHandler(String url) {
     33    private static AddWayHandler newHandler(String url) throws RequestHandlerBadRequestException {
    3434        AddWayHandler req = new AddWayHandler();
    3535        if (url != null)
  • trunk/test/unit/org/openstreetmap/josm/io/remotecontrol/handler/ImageryHandlerTest.java

    r10116 r10973  
    2828    }
    2929
    30     private static ImageryHandler newHandler(String url) {
     30    private static ImageryHandler newHandler(String url) throws RequestHandlerBadRequestException {
    3131        ImageryHandler req = new ImageryHandler();
    3232        if (url != null)
  • trunk/test/unit/org/openstreetmap/josm/io/remotecontrol/handler/ImportHandlerTest.java

    r10436 r10973  
    3636    }
    3737
    38     private static ImportHandler newHandler(String url) {
     38    private static ImportHandler newHandler(String url) throws RequestHandlerBadRequestException {
    3939        ImportHandler req = new ImportHandler();
    4040        if (url != null)
     
    4545    /**
    4646     * Non-regression test for bug #7434.
     47     * @throws Exception if any error occurs
    4748     */
    4849    @Test
    49     public void testTicket7434() {
     50    public void testTicket7434() throws Exception {
    5051        ImportHandler req = newHandler("http://localhost:8111/import?url=http://localhost:8888/relations?relations=19711&mode=recursive");
    5152        assertEquals("http://localhost:8888/relations?relations=19711&mode=recursive", req.args.get("url"));
  • trunk/test/unit/org/openstreetmap/josm/io/remotecontrol/handler/LoadAndZoomHandlerTest.java

    r10116 r10973  
    2828    }
    2929
    30     private static LoadAndZoomHandler newHandler(String url) {
     30    private static LoadAndZoomHandler newHandler(String url) throws RequestHandlerBadRequestException {
    3131        LoadAndZoomHandler req = new LoadAndZoomHandler();
    3232        if (url != null)
  • trunk/test/unit/org/openstreetmap/josm/io/remotecontrol/handler/LoadObjectHandlerTest.java

    r10116 r10973  
    2828    }
    2929
    30     private static LoadObjectHandler newHandler(String url) {
     30    private static LoadObjectHandler newHandler(String url) throws RequestHandlerBadRequestException {
    3131        LoadObjectHandler req = new LoadObjectHandler();
    3232        if (url != null)
  • trunk/test/unit/org/openstreetmap/josm/io/remotecontrol/handler/RequestHandlerTest.java

    r8876 r10973  
    1010import org.junit.Test;
    1111import org.openstreetmap.josm.io.remotecontrol.PermissionPrefWithDefault;
     12import org.openstreetmap.josm.io.remotecontrol.handler.RequestHandler.RequestHandlerBadRequestException;
    1213
    1314/**
     
    1617public class RequestHandlerTest {
    1718
    18     Map<String, String> getRequestParameter(String url) {
     19    Map<String, String> getRequestParameter(String url) throws RequestHandlerBadRequestException {
    1920        final RequestHandler req = new RequestHandler() {
    2021            @Override
     
    4748    /**
    4849     * Test request parameter - case 1
     50     * @throws RequestHandlerBadRequestException never
    4951     */
    5052    @Test
    51     public void testRequestParameter1() {
     53    public void testRequestParameter1() throws RequestHandlerBadRequestException {
    5254        final Map<String, String> expected = new HashMap<>();
    5355        expected.put("query", "a");
     
    5860    /**
    5961     * Test request parameter - case 2
     62     * @throws RequestHandlerBadRequestException never
    6063     */
    6164    @Test
    62     public void testRequestParameter2() {
     65    public void testRequestParameter2() throws RequestHandlerBadRequestException {
    6366        assertEquals(Collections.singletonMap("query", "a&b==c"),
    6467                getRequestParameter("http://example.com/?query=a%26b==c"));
     
    6770    /**
    6871     * Test request parameter - case 3
     72     * @throws RequestHandlerBadRequestException never
    6973     */
    7074    @Test
    71     public void testRequestParameter3() {
     75    public void testRequestParameter3() throws RequestHandlerBadRequestException {
    7276        assertEquals(Collections.singleton("blue+light blue"),
    7377                getRequestParameter("http://example.com/blue+light%20blue?blue%2Blight+blue").keySet());
     
    7882     * @see <a href="http://blog.lunatech.com/2009/02/03/what-every-web-developer-must-know-about-url-encoding">
    7983     *      What every web developer must know about URL encoding</a>
     84     * @throws RequestHandlerBadRequestException never
    8085     */
    8186    @Test
    82     public void testRequestParameter4() {
     87    public void testRequestParameter4() throws RequestHandlerBadRequestException {
    8388        assertEquals(Collections.singletonMap("/?:@-._~!$'()* ,;", "/?:@-._~!$'()* ,;=="), getRequestParameter(
    8489                // CHECKSTYLE.OFF: LineLength
     
    8994    /**
    9095     * Test request parameter - case 5
     96     * @throws RequestHandlerBadRequestException never
    9197     */
    9298    @Test
    93     public void testRequestParameter5() {
     99    public void testRequestParameter5() throws RequestHandlerBadRequestException {
    94100        final Map<String, String> expected = new HashMap<>();
    95101        expected.put("space", " ");
     
    97103        assertEquals(expected, getRequestParameter("http://example.com/?space=%20&tab=%09"));
    98104    }
     105
     106    /**
     107     * Test request parameter - invalid case
     108     * @throws RequestHandlerBadRequestException always
     109     */
     110    @Test(expected = RequestHandlerBadRequestException.class)
     111    public void testRequestParameterInvalid() throws RequestHandlerBadRequestException {
     112        getRequestParameter("http://localhost:8111/load_and_zoom"+
     113                "?addtags=wikipedia:de=Wei%C3%9Fe_Gasse|maxspeed=5"+
     114                "&select=way23071688,way23076176,way23076177,"+
     115                "&left=13.739727546842&right=13.740890970188&top=51.049987191025&bottom=51.048466954325");
     116    }
    99117}
Note: See TracChangeset for help on using the changeset viewer.