diff --git a/bundles/org.openhab.binding.freeboxos/src/main/java/org/openhab/binding/freeboxos/internal/api/ApiHandler.java b/bundles/org.openhab.binding.freeboxos/src/main/java/org/openhab/binding/freeboxos/internal/api/ApiHandler.java index f981bafe77b51..6f760e52cbb58 100644 --- a/bundles/org.openhab.binding.freeboxos/src/main/java/org/openhab/binding/freeboxos/internal/api/ApiHandler.java +++ b/bundles/org.openhab.binding.freeboxos/src/main/java/org/openhab/binding/freeboxos/internal/api/ApiHandler.java @@ -121,7 +121,11 @@ public synchronized T executeUri(URI uri, HttpMethod method, Class clazz, } else if (statusCode == Code.FORBIDDEN) { logger.debug("Fobidden, serviceReponse was {}, ", content); if (result instanceof Response errorResponse) { - throw new FreeboxException(errorResponse.getErrorCode(), errorResponse.getMsg()); + if (errorResponse.getErrorCode() == Response.ErrorCode.INSUFFICIENT_RIGHTS) { + throw new PermissionException(errorResponse.getMissingRight(), errorResponse.getMsg()); + } else { + throw new FreeboxException(errorResponse.getErrorCode(), errorResponse.getMsg()); + } } } diff --git a/bundles/org.openhab.binding.freeboxos/src/main/java/org/openhab/binding/freeboxos/internal/api/PermissionException.java b/bundles/org.openhab.binding.freeboxos/src/main/java/org/openhab/binding/freeboxos/internal/api/PermissionException.java index 2ca6f2b1b8b0a..0c512ec1d1d1f 100644 --- a/bundles/org.openhab.binding.freeboxos/src/main/java/org/openhab/binding/freeboxos/internal/api/PermissionException.java +++ b/bundles/org.openhab.binding.freeboxos/src/main/java/org/openhab/binding/freeboxos/internal/api/PermissionException.java @@ -13,6 +13,7 @@ package org.openhab.binding.freeboxos.internal.api; import org.eclipse.jdt.annotation.NonNullByDefault; +import org.openhab.binding.freeboxos.internal.api.Response.ErrorCode; import org.openhab.binding.freeboxos.internal.api.rest.LoginManager; /** @@ -26,6 +27,11 @@ public class PermissionException extends FreeboxException { private final LoginManager.Permission permission; + public PermissionException(LoginManager.Permission permission, String message) { + super(ErrorCode.INSUFFICIENT_RIGHTS, message); + this.permission = permission; + } + public PermissionException(LoginManager.Permission permission, String format, Object... args) { super(format, args); this.permission = permission; diff --git a/bundles/org.openhab.binding.freeboxos/src/main/java/org/openhab/binding/freeboxos/internal/handler/ApiConsumerHandler.java b/bundles/org.openhab.binding.freeboxos/src/main/java/org/openhab/binding/freeboxos/internal/handler/ApiConsumerHandler.java index 9fa6a32dd1190..e3a4034249f58 100644 --- a/bundles/org.openhab.binding.freeboxos/src/main/java/org/openhab/binding/freeboxos/internal/handler/ApiConsumerHandler.java +++ b/bundles/org.openhab.binding.freeboxos/src/main/java/org/openhab/binding/freeboxos/internal/handler/ApiConsumerHandler.java @@ -26,6 +26,7 @@ import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jdt.annotation.Nullable; import org.openhab.binding.freeboxos.internal.api.FreeboxException; +import org.openhab.binding.freeboxos.internal.api.PermissionException; import org.openhab.binding.freeboxos.internal.api.rest.LanBrowserManager.Source; import org.openhab.binding.freeboxos.internal.api.rest.MediaReceiverManager; import org.openhab.binding.freeboxos.internal.api.rest.MediaReceiverManager.MediaType; @@ -176,8 +177,11 @@ public void handleCommand(ChannelUID channelUID, Command command) { logger.debug("Unexpected command {} on channel {}", command, channelUID.getId()); } } + } catch (PermissionException e) { + logger.warn("Missing permission {} for handling command {} on channel {}: {}", e.getPermission(), command, + channelUID.getId(), e.getMessage()); } catch (FreeboxException e) { - logger.warn("Error handling command: {}", e.getMessage()); + logger.warn("Error handling command {} on channel {}: {}", command, channelUID.getId(), e.getMessage()); } }