ManagementAPI getLogEvents() is double encoding the LogEventFilter's withQuery() value
CalebeGeazi opened this issue · 2 comments
Describe the problem you'd like to have solved
When building a LogEventFilter
object that adds a date range
query via the LogEventsFilter.withQuery()
method, and then passing this object to the ManagementAPI getLogEvents()
method the resulting q
query string parameter is being double encoded. This is causing a 400 Bad Request
error.
Reproduction
Here's the code snippet for setting the query parameter and making the getLogEvents()
call:
LocalDate date = LocalDate.now().minus(Period.ofDays(30));
String query = "date:[" + date + " TO *]";
LogEventFilter filter = new LogEventFilter()
.withQuery(query)
.withPage(pageNumber, 10);
Request<LogEventsPage> request = managementApi.users().getLogEvents(userId, filter);
request.execute();
Environment
- Version of this library used: Tested on 1.34.0 and 1.40.1
- Version of the platform or framework used, if applicable: Java 1.8
- Other relevant versions (language, server software, OS, browser): N/A
- Other modules/plugins/libraries that might be involved: N/A
Describe the ideal solution
I would expect the query to only be URLEncoded once.
Alternatives and current work-arounds
Manually build the request to call the /users/{user-id}/logs
endpoint.
Thanks for reporting this. Looks like the issue is that in QueryFilter#withQuery
we encode the query, but then re-encode it in getLogEvents
with addQueryParameter
. Quick fix may be to do what we do in UsersEntity#list
, checking if the param name is the query key and not encoding that param.
This will be fixed with #420 which will be available in 1.41.0, which will be available in maven central shortly. Thanks!