Opened 3 years ago
Closed 2 years ago
#22730 closed defect (fixed)
Mapillary plugin fails to log in with "Mapillary: Could not refresh login, logging out" popup, "Mapillary: Failed to login: "The parameter grant_type is required."" API exception
| Reported by: | AntiCompositeNumber | Owned by: | Don-vip |
|---|---|---|---|
| Priority: | normal | Milestone: | |
| Component: | Plugin http2 | Version: | |
| Keywords: | template_report OAuth | Cc: |
Description
When I try to log in to the Mapillary plugin, the Mapillary OAuth grant opens in the browser as normal. I click Allow, and am redirected to a localhost page that says "Login successful, return to JOSM." Upon returning to JOSM, I notice a popup stating "Mapillary: Could not refresh login, logging out".
What steps will reproduce the problem?
- Log out of the Mapillary plugin if already logged in
- Attempt to log into the Mapillary plugin via OAuth (from the Preferences > Plugins > Mapillary menu)
What is the expected result?
It works
What happens instead?
A "Mapillary: Could not refresh login, logging out" popup appears, and I am not logged in.
Please provide any additional information below. Attach a screenshot if possible.
Relevant debug logs, with secret redacted:
2023-02-11 13:30:14.745 INFO: Opening URL: https://www.mapillary.com/connect?client_id=4280585711960869&response_type=code&scope=read&redirect_uri=http%3A%2F%2Flocalhost%3A8763%2F
2023-02-11 13:30:19.836 FINE: Contacting Server...
2023-02-11 13:30:19.836 INFO: POST https://graph.mapillary.com/token (364 B) ...
2023-02-11 13:30:19.836 FINE: REQUEST HEADERS: {Accept=*/*, Accept-Encoding=gzip, deflate, Authorization=OAuth MLY|4280585711960869|[***]}
2023-02-11 13:30:19.969 INFO: POST https://graph.mapillary.com/token -> HTTP_2 500 (132 ms; 136 B)
2023-02-11 13:30:19.969 FINE: RESPONSE HEADERS: {:status=[500], access-control-allow-origin=[*], alt-svc=[h3=":443"; ma=86400], cache-control=[no-store], content-length=[136], content-type=[application/json; charset=UTF-8], date=[Sat, 11 Feb 2023 18:30:19 GMT], expires=[Sat, 01 Jan 2000 00:00:00 GMT], mapillary-api-version=[v1.0], pragma=[no-cache], priority=[u=3,i], strict-transport-security=[max-age=31536000; preload; includeSubDomains], vary=[Origin], www-authenticate=[OAuth "Facebook Platform" "invalid_request" "The parameter grant_type is required."], x-app-usage=[{"call_volume":0,"cpu_time":0}], x-fb-debug=[wgApxlGCLLPODtrJG94Z8NwIcm8biG7y02pf5iJ9Desu/b/jZZ0QlwZK+z5FiYlajZrWvrhu9ALy7AqUrlKG4w==], x-fb-request-id=[A4UYjL_IZGBq6kAwEMbPwNJ], x-fb-rev=[1006949215], x-fb-trace-id=[AB9UoUQSevp]}
2023-02-11 13:30:19.969 FINE: Server returned content: application/json; charset=UTF-8 of length: 136. Not printing.
2023-02-11 13:30:19.969 FINE: Downloading data...
2023-02-11 13:30:19.971 INFO: Mapillary: Failed to login: {"error":{"message":"The parameter grant_type is required.","type":"MLYApiException","code":100,"fbtrace_id":"A4UYjL_IZGBq6kAwEMbPwNJ"}}
Relative:URL: ^/trunk
Repository:UUID: 0c6e7542-c601-0410-84e7-c038aed88b3b
Last:Changed Date: 2023-01-29 21:53:34 +0100 (Sun, 29 Jan 2023)
Revision:18646
Build-Date:2023-01-30 02:30:56
URL:https://josm.openstreetmap.de/svn/trunk
Identification: JOSM/1.5 (18646 en) Linux Arch Linux
Memory Usage: 900 MB / 3912 MB (471 MB allocated, but free)
Java version: 19.0.2+7, N/A, OpenJDK 64-Bit Server VM
Look and Feel: com.formdev.flatlaf.FlatDarkLaf
Screen: :0.0 1920×1080 (scaling 1.00×1.00) :0.1 1920×1080 (scaling 1.00×1.00)
Maximum Screen Size: 1920×1080
Best cursor sizes: 16×16→16×16, 32×32→32×32
Environment variable LANG: en_US.UTF-8
System property file.encoding: UTF-8
System property sun.jnu.encoding: UTF-8
Locale info: en_US
Numbers with default locale: 1234567890 -> 1234567890
Desktop environment: i3
VM arguments: [--add-opens=java.desktop/javax.swing.text.html=ALL-UNNAMED, -Djosm.restart=true, -Dawt.useSystemAAFontSettings=gasp]
Program arguments: [--debug]
Plugins:
+ AddrInterpolation (36011)
+ Create_grid_of_ways (35976)
+ FastDraw (35978)
+ FixAddresses (36011)
+ HouseNumberTaggingTool (35951)
+ ImportImagePlugin (36013)
+ ImproveOsm (235)
+ MakeParallel (v1.1.0)
+ Mapillary (2.1.1)
+ OpeningHoursEditor (35924)
+ QuickLabel (23)
+ RoadSigns (36038)
+ SeaChart (35840)
+ ShapeTools (1250)
+ alignways (36011)
+ apache-commons (36034)
+ apache-http (35924)
+ auto_tools (81)
+ buildings_tools (36011)
+ changeset-viewer (0.0.6)
+ continuosDownload (105)
+ easypresets (1623509627)
+ editgpx (35931)
+ ejml (35924)
+ flatlaf (36036)
+ geotools (36028)
+ http2 (35921)
+ intersection (0.0.7)
+ jackson (36034)
+ jaxb (35952)
+ jna (36005)
+ jogl (1.2.3)
+ jts (36004)
+ log4j (36034)
+ measurement (35978)
+ notesolver (0.5.0)
+ opendata (36025)
+ openqa (v0.3.3)
+ photo_geotagging (35933)
+ photoadjust (36011)
+ print (35893)
+ pt_assistant (1ff2e15)
+ public_transport (36011)
+ reverter (36043)
+ shrinkwrap (v1.0.4)
+ tageditor (36011)
+ todo (30306)
+ touchscreenhelper (35893)
+ turnlanes-tagging (v0.0.5)
+ turnrestrictions (36011)
+ utilsplugin2 (36011)
+ wikipedia (605)
Tagging presets:
+ https://josm.openstreetmap.de/josmfile?page=Presets/ParkingLanes&zip=1
+ https://josm.openstreetmap.de/josmfile?page=Presets/Quick-stops&zip=1
+ https://raw.githubusercontent.com/yopaseopor/traffic_signs_preset_JOSM/master/US.zip
+ https://josm.openstreetmap.de/josmfile?page=Presets/Quick-highways&zip=1
+ https://josm.openstreetmap.de/josmfile?page=Presets/Playground_Equipment&zip=1
+ ${HOME}/Documents/Presets_Golf_Course.zip
+ https://josm.openstreetmap.de/josmfile?page=Presets/Telecom&zip=1
+ <josm.userdata>/EasyPresets.xml
Map paint styles:
- https://josm.openstreetmap.de/josmfile?page=Styles/Lane_features&zip=1
- https://josm.openstreetmap.de/josmfile?page=Styles/Enhanced_Lane_and_Road_Attributes&zip=1
- https://raw.githubusercontent.com/species/josm-preset-traffic_sign_direction/master/direction.mapcss
+ https://josm.openstreetmap.de/josmfile?page=Styles/ParkingLanes&zip=1
+ https://raw.githubusercontent.com/yopaseopor/traffic_signs_style_JOSM/master/Styles_Traffic_signs_AME.zip
+ https://josm.openstreetmap.de/josmfile?page=Styles/Sidewalks&zip=1
- https://raw.githubusercontent.com/yopaseopor/indoormap/master/indoormap-style.mapcss
- https://josm.openstreetmap.de/josmfile?page=Styles/Building_Levels_Labels&zip=1
- https://raw.githubusercontent.com/OpenSidewalks/OpenSidewalks-Schema/master/open_sidewalks.mapcss
- https://josm.openstreetmap.de/josmfile?page=Styles/SimpleBuildingTags&zip=1
- https://josm.openstreetmap.de/josmfile?page=Styles/SimpleRoofTags&zip=1
- https://josm.openstreetmap.de/josmfile?page=Styles/TreeCrownDiameter&zip=1
- https://raw.githubusercontent.com/species/josm-preset-wheelchair/master/sidewalks_kerbs.mapcss
- https://josm.openstreetmap.de/josmfile?page=Styles/PublicTransport&zip=1
- https://josm.openstreetmap.de/josmfile?page=Styles/AddressValidator&zip=1
- https://josm.openstreetmap.de/josmfile?page=Styles/PublicTransportV2&zip=1
+ https://josm.openstreetmap.de/josmfile?page=Styles/TigerReviewedNo&zip=1
+ https://josm.openstreetmap.de/josmfile?page=Styles/FixmeAndNote&zip=1
Last errors/warnings:
- 00009.022 E: java.nio.file.NoSuchFileException: ${HOME}/Documents/Presets_Golf_Course.zip
- 00009.022 E: ${HOME}/Documents/Presets_Golf_Course.zip
- 00009.028 E: Failed to locate image 'traffic_signs/US/US_W14-1.png'
- 00009.028 W: null: Could not get presets icon traffic_signs/US/US_W14-1.png
- 00011.473 E: Failed to locate image 'bus.png'
- 00012.237 E: Failed to locate image 'traffic_signs/US/US_W14-1.png'
- 00012.238 W: null: Could not get presets icon traffic_signs/US/US_W14-1.png
- 00012.242 E: Failed to locate image 'traffic_signs/US/US_W14-1.png'
- 00012.242 W: noexit: Could not get presets icon traffic_signs/US/US_W14-1.png
- 00018.176 E: Invalid setting (Icon missing): org.openstreetmap.josm.plugins.fixAddresses.FixAddressesPreferences
Attachments (0)
Change History (6)
comment:1 by , 3 years ago
| Keywords: | OAuth added |
|---|
comment:2 by , 3 years ago
comment:3 by , 3 years ago
| Component: | Plugin mapillary → Plugin http2 |
|---|---|
| Owner: | changed from to |
I cannot reproduce locally. Which is awesome. Looking at the code, there should be a grant_type in the body of the request. So something else is going on.
2023-02-11 13:30:19.971 INFO: Mapillary: Failed to login: {"error":{"message":"The parameter grant_type is required.","type":"MLYApiException","code":100,"fbtrace_id":"A4UYjL_IZGBq6kAwEMbPwNJ"}}
After some investigation, it looks like http2 is the problem. I'll see if I can fix that today, especially since we will probably be making the http2 HttpClient implementation the default once we move to Java 11+.
comment:4 by , 3 years ago
After quite a bit of investigation, it appears that the Http1Client codepaths sets application/x-www-form-urlencoded as the Content-Type if (a) we are POSTing (b) getOutputStream() is called and (c) no Content-Type header is yet set (according to really old documentation).
I ended up using https://httpbin.org/ to figure out what was actually being sent, since the debugger wasn't actually helpful (throughout the entire debug session, the Http1Client Content-Type header was application/json).
How do we want to handle this difference in behavior between Http1Client and Http2Client?
- Have the Mapillary plugin explicitly set the
Content-Type. - Add an explicit
Content-Typeset inHttp2Client. I prefer this option, since it is a difference in behavior fromHttp1Client. This would be something likeif ("POST".equals(getRequestMethod())) { /* Set the header */ }. - Add an explicit
Content-Typeset inHttp1Client.
Short class to reproduce (look at the logged responses):
class Scratch { public static void main(String[] args) throws IOException { Config.setPreferencesInstance(new MemoryPreferences()); final URL url = new URL("https://httpbin.org/post"); final byte[] body = "grant_type=authorization_code&client_id=1234code=some_random_code here".getBytes(StandardCharsets.UTF_8); HttpClient.setFactory(Http1Client::new); final Http1Client http1Client = (Http1Client) HttpClient.create(url, "POST"); HttpClient.setFactory(Http2Client::new); final Http2Client http2Client = (Http2Client) HttpClient.create(url, "POST"); http1Client.setRequestBody(body); http2Client.setRequestBody(body); //http2Client.setHeader("Content-Type", "application/x-www-form-urlencoded"); try { Logging.info(http1Client.connect().fetchContent()); Logging.info(http2Client.connect().fetchContent()); } finally { http1Client.disconnect(); } } }
comment:6 by , 2 years ago
| Resolution: | → fixed |
|---|---|
| Status: | new → closed |
I've fixed the Mapillary issue in v2.1.4.



I'll probably rework the Mapillary OAuth support to use the JOSM OAuth implementation. Now that we have it.