[
https://issues.apache.org/jira/browse/FINERACT-2931?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Adam Saghy updated FINERACT-2931:
---------------------------------
Fix Version/s: 1.16.0
> Creating a Web hook fails with HTTP 500 unless the Payload URL ends with "/"
> -----------------------------------------------------------------------------
>
> Key: FINERACT-2931
> URL: https://issues.apache.org/jira/browse/FINERACT-2931
> Project: Apache Fineract
> Issue Type: Bug
> Reporter: chinmaya samantara
> Assignee: chinmaya samantara
> Priority: Minor
> Fix For: 1.16.0
>
>
> Creating a hook with the *Web* template fails with HTTP 500 when the Payload
> URL doesn't end with a slash, which is the usual form of a webhook URL (e.g.
> https://example.com/hook).
> *Steps to reproduce*
> {code:json}
> POST /fineract-provider/api/v1/hooks
> {
> "name": "Web",
> "isActive": true,
> "displayName": "my hook",
> "events": [ { "actionName": "CREATE", "entityName": "CLIENT" } ],
> "config": { "Payload URL": "https://example.com/hook", "Content Type":
> "json" }
> }
> {code}
> *Actual result:* HTTP 500. The log shows:
> {noformat}
> java.lang.IllegalArgumentException: baseUrl must end in /:
> https://example.com/hook
> at
> org.apache.fineract.infrastructure.hooks.processor.ProcessorHelper.createWebHookService(ProcessorHelper.java:118)
> at
> org.apache.fineract.infrastructure.hooks.service.HookWritePlatformServiceImpl.validateHookRules(HookWritePlatformServiceImpl.java:242)
> {noformat}
> The same request with "https://example.com/hook/" returns 200. A malformed
> URL (e.g. "abc") also gives HTTP 500 instead of a validation error.
> *Expected result:* the hook is created and the events are sent to
> https://example.com/hook. A malformed URL is rejected with a 400 validation
> error (url.invalid).
> *Cause*
> WebHookService uses @POST(".") / @GET("."), so
> ProcessorHelper.createWebHookService(url) passes the Payload URL to Retrofit
> as the *base* URL, and Retrofit requires a base URL that ends with "/".
> validateHookRules() only catches IOException, so the IllegalArgumentException
> becomes a 500.
> *Proposed fix*
> Pass the hook URL to each request with Retrofit's @Url parameter and use only
> the scheme, host and port as the base URL. URLs that already end with "/" are
> sent to exactly the same address as before. Also treat
> IllegalArgumentException from the URL as url.invalid in validateHookRules().
> This affects the Web, Elastic Search and SMS Bridge hook processors, which
> share WebHookService.
> Checked on develop 6bb3c0c293 and 7ac780192.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)