Add useragent parameter (#17455)

Signed-off-by: Leo Siepel <leosiepel@gmail.com>
Signed-off-by: Ciprian Pascu <contact@ciprianpascu.ro>
This commit is contained in:
lsiepel 2024-10-05 09:27:20 +02:00 committed by Ciprian Pascu
parent 76f2a0bb48
commit 773a929d1a
6 changed files with 18 additions and 2 deletions

View File

@ -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`

View File

@ -38,4 +38,6 @@ public class ICalendarConfiguration {
public String url;
@Nullable
public String username;
@Nullable
public String userAgent;
}

View File

@ -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));

View File

@ -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);

View File

@ -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

View File

@ -54,6 +54,11 @@
<label>Command Authorization Code</label>
<description>Authorization Code to allow the execution of Command Tags (may be empty)</description>
</parameter>
<parameter name="userAgent" type="text" required="false">
<label>User Agent</label>
<description>Some providers require a specific user agent header. If left empty, the default Jetty header is used.</description>
<advanced>true</advanced>
</parameter>
</config-description>
</bridge-type>