From: lsiepel Date: Sat, 5 Oct 2024 07:27:20 +0000 (+0200) Subject: Add useragent parameter (#17455) X-Git-Url: https://git.basschouten.com/?a=commitdiff_plain;h=d2a785392eb7ac710c26a0765e1a947cab02931c;p=openhab-addons.git Add useragent parameter (#17455) Signed-off-by: Leo Siepel --- diff --git a/bundles/org.openhab.binding.icalendar/README.md b/bundles/org.openhab.binding.icalendar/README.md index 150dd34df5..f355cb9f4e 100644 --- a/bundles/org.openhab.binding.icalendar/README.md +++ b/bundles/org.openhab.binding.icalendar/README.md @@ -26,6 +26,7 @@ Each `calendar` thing requires the following configuration parameters: | `password` | The password for pulling the calendar. If set, the binding pulls the calendar using basic auth. Only valid in combination with `username`. | optional | | `maxSize` | The maximum size of the iCal-file in Mebibytes. | mandatory (default available) | | `authorizationCode` | The authorization code to permit the execution of embedded command tags. If set, the binding checks that the authorization code in the command tag matches before executing any commands. | optional | +| `userAgent` | Some providers require a specific user agent header. If left empty, the default Jetty header is used. | optional | ### Configuration for `eventfilter` diff --git a/bundles/org.openhab.binding.icalendar/src/main/java/org/openhab/binding/icalendar/internal/config/ICalendarConfiguration.java b/bundles/org.openhab.binding.icalendar/src/main/java/org/openhab/binding/icalendar/internal/config/ICalendarConfiguration.java index 5a12796e36..968b5ab7a2 100644 --- a/bundles/org.openhab.binding.icalendar/src/main/java/org/openhab/binding/icalendar/internal/config/ICalendarConfiguration.java +++ b/bundles/org.openhab.binding.icalendar/src/main/java/org/openhab/binding/icalendar/internal/config/ICalendarConfiguration.java @@ -38,4 +38,6 @@ public class ICalendarConfiguration { public String url; @Nullable public String username; + @Nullable + public String userAgent; } diff --git a/bundles/org.openhab.binding.icalendar/src/main/java/org/openhab/binding/icalendar/internal/handler/ICalendarHandler.java b/bundles/org.openhab.binding.icalendar/src/main/java/org/openhab/binding/icalendar/internal/handler/ICalendarHandler.java index 53b3f9236a..28011739b3 100644 --- a/bundles/org.openhab.binding.icalendar/src/main/java/org/openhab/binding/icalendar/internal/handler/ICalendarHandler.java +++ b/bundles/org.openhab.binding.icalendar/src/main/java/org/openhab/binding/icalendar/internal/handler/ICalendarHandler.java @@ -153,7 +153,8 @@ public class ICalendarHandler extends BaseBridgeHandler implements CalendarUpdat final int maxSize = maxSizeBD.intValue(); try { regularPull = new PullJob(httpClient, new URI(currentConfiguration.url), currentConfiguration.username, - currentConfiguration.password, calendarFile, maxSize * 1048576, this); + currentConfiguration.password, calendarFile, maxSize * 1048576, this, + currentConfiguration.userAgent); } catch (URISyntaxException e) { throw new ConfigBrokenException(String.format( "The URI '%s' for downloading the calendar contains syntax errors.", currentConfiguration.url)); diff --git a/bundles/org.openhab.binding.icalendar/src/main/java/org/openhab/binding/icalendar/internal/handler/PullJob.java b/bundles/org.openhab.binding.icalendar/src/main/java/org/openhab/binding/icalendar/internal/handler/PullJob.java index 79d9fc3a33..112d5025e4 100644 --- a/bundles/org.openhab.binding.icalendar/src/main/java/org/openhab/binding/icalendar/internal/handler/PullJob.java +++ b/bundles/org.openhab.binding.icalendar/src/main/java/org/openhab/binding/icalendar/internal/handler/PullJob.java @@ -61,6 +61,7 @@ class PullJob implements Runnable { private final Logger logger = LoggerFactory.getLogger(PullJob.class); private final int maxSize; private final URI sourceURI; + private @Nullable final String userAgent; /** * Constructor of PullJob for creating a single pull of a calendar. @@ -74,7 +75,7 @@ class PullJob implements Runnable { * @param listener The listener that should be fired when update succeed. */ public PullJob(HttpClient httpClient, URI sourceURI, @Nullable String username, @Nullable String password, - File destination, int maxSize, CalendarUpdateListener listener) { + File destination, int maxSize, CalendarUpdateListener listener, @Nullable String userAgent) { this.httpClient = httpClient; this.sourceURI = sourceURI; if (username != null && password != null) { @@ -85,12 +86,16 @@ class PullJob implements Runnable { this.destination = destination; this.listener = listener; this.maxSize = maxSize; + this.userAgent = userAgent; } @Override public void run() { final Request request = httpClient.newRequest(sourceURI).followRedirects(true).method(HttpMethod.GET) .timeout(HTTP_TIMEOUT_SECS, TimeUnit.SECONDS); + if (userAgent != null && !userAgent.isBlank()) { + request.agent(userAgent); + } final Authentication.Result currentAuthentication = authentication; if (currentAuthentication != null) { currentAuthentication.apply(request); diff --git a/bundles/org.openhab.binding.icalendar/src/main/resources/OH-INF/i18n/icalendar.properties b/bundles/org.openhab.binding.icalendar/src/main/resources/OH-INF/i18n/icalendar.properties index f0013970c6..34675a0924 100644 --- a/bundles/org.openhab.binding.icalendar/src/main/resources/OH-INF/i18n/icalendar.properties +++ b/bundles/org.openhab.binding.icalendar/src/main/resources/OH-INF/i18n/icalendar.properties @@ -24,6 +24,8 @@ thing-type.config.icalendar.calendar.refreshTime.label = Refresh Time thing-type.config.icalendar.calendar.refreshTime.description = Frequency to scan for changes in minutes thing-type.config.icalendar.calendar.url.label = URL thing-type.config.icalendar.calendar.url.description = URL for downloading iCalendar events +thing-type.config.icalendar.calendar.userAgent.label = User Agent +thing-type.config.icalendar.calendar.userAgent.description = Some providers require a specific user agent header. If left empty, the default Jetty header is used. thing-type.config.icalendar.calendar.username.label = User Name thing-type.config.icalendar.calendar.username.description = User name for fetching the calendar (usable in combination with password in HTTP basic auth) thing-type.config.icalendar.eventfilter.datetimeEnd.label = End diff --git a/bundles/org.openhab.binding.icalendar/src/main/resources/OH-INF/thing/thing-types.xml b/bundles/org.openhab.binding.icalendar/src/main/resources/OH-INF/thing/thing-types.xml index 756d6c3e36..f7fbdd86cf 100644 --- a/bundles/org.openhab.binding.icalendar/src/main/resources/OH-INF/thing/thing-types.xml +++ b/bundles/org.openhab.binding.icalendar/src/main/resources/OH-INF/thing/thing-types.xml @@ -54,6 +54,11 @@ Authorization Code to allow the execution of Command Tags (may be empty) + + + Some providers require a specific user agent header. If left empty, the default Jetty header is used. + true +