]> git.basschouten.com Git - openhab-addons.git/commitdiff
[homeconnect] Fix login for simulator environment (#13653)
authorbruestel <jonas@bruestel.net>
Fri, 4 Nov 2022 17:28:40 +0000 (18:28 +0100)
committerGitHub <noreply@github.com>
Fri, 4 Nov 2022 17:28:40 +0000 (18:28 +0100)
* Add redirect URI to oAuth request

Signed-off-by: Jonas BrĂ¼stel <jonas@bruestel.net>
bundles/org.openhab.binding.homeconnect/src/main/java/org/openhab/binding/homeconnect/internal/servlet/HomeConnectServlet.java
bundles/org.openhab.binding.homeconnect/src/main/resources/assets/js/homeconnect.js
bundles/org.openhab.binding.homeconnect/src/main/resources/templates/bridges.html

index 27229541ae780c7041e4d31ef88f16a72b11463b..4c288f111965949a1915b7ebe2ee99e6cdfcc043 100644 (file)
@@ -95,6 +95,7 @@ public class HomeConnectServlet extends HttpServlet {
     private static final String PARAM_BRIDGE_ID = "bridgeId";
     private static final String PARAM_THING_ID = "thingId";
     private static final String PARAM_PATH = "path";
+    private static final String PARAM_REDIRECT_URI = "redirectUri";
     private static final String ACTION_AUTHORIZE = "authorize";
     private static final String ACTION_CLEAR_CREDENTIALS = "clearCredentials";
     private static final String ACTION_SHOW_DETAILS = "show-details";
@@ -392,8 +393,11 @@ public class HomeConnectServlet extends HttpServlet {
             HomeConnectBridgeHandler bridgeHandler = bridgeHandlerOptional.get();
             if (ACTION_AUTHORIZE.equals(action)) {
                 try {
-                    String authorizationUrl = bridgeHandler.getOAuthClientService().getAuthorizationUrl(null, null,
-                            bridgeHandler.getThing().getUID().getAsString());
+                    String redirectUri = bridgeHandler.getConfiguration().isSimulator()
+                            ? request.getParameter(PARAM_REDIRECT_URI)
+                            : null;
+                    String authorizationUrl = bridgeHandler.getOAuthClientService().getAuthorizationUrl(redirectUri,
+                            null, bridgeHandler.getThing().getUID().getAsString());
                     logger.debug("Generated authorization url: {}", authorizationUrl);
 
                     response.sendRedirect(authorizationUrl);
@@ -491,8 +495,11 @@ public class HomeConnectServlet extends HttpServlet {
         Optional<HomeConnectBridgeHandler> bridgeHandler = getBridgeHandler(state);
         if (bridgeHandler.isPresent()) {
             try {
+                String redirectUri = bridgeHandler.get().getConfiguration().isSimulator()
+                        ? request.getRequestURL().toString()
+                        : null;
                 AccessTokenResponse accessTokenResponse = bridgeHandler.get().getOAuthClientService()
-                        .getAccessTokenResponseByAuthorizationCode(code, null);
+                        .getAccessTokenResponseByAuthorizationCode(code, redirectUri);
 
                 logger.debug("access token response: {}", accessTokenResponse);
 
index 9f7fb05ef11e69a5b6b4eb73baed47df84b9ae68..4ffe25d5ca7b0162cad5d2bece0e1d3c6fdbfd0b 100644 (file)
@@ -6,6 +6,7 @@
     feather.replace();
 
     $(".redirectUri").text(window.location.href.substring(0, window.location.href.lastIndexOf('/homeconnect') + 12));
+    $(".redirectUriInput").val(window.location.href.substring(0, window.location.href.lastIndexOf('/homeconnect') + 12));
 
     $('#apiDetailModal').on('show.bs.modal', function (event) {
         var button = $(event.relatedTarget);
index b2bf3086a9c280077dddb26447f0204a0f505c3c..091db72e4bfa9c35816ef50db0673cfb8f2b487e 100644 (file)
                             <dd class="col-sm-8">
                                 <form method="post" style="display: inline-block">
                                     <input type="hidden" name="bridgeId" th:value="${uid}"/>
-                                    <input type="hidden" name="action" value="clearCredentials">
+                                    <input type="hidden" name="action" value="clearCredentials" />
                                     <button type="submit" class="btn btn-secondary btn-sm">Clear stored credentials</button>
                                 </form>
                                 <form method="post" style="display: inline-block">
-                                    <input type="hidden" name="bridgeId" th:value="${uid}"/>
-                                    <input type="hidden" name="action" value="authorize">
+                                    <input type="hidden" name="bridgeId" th:value="${uid}" />
+                                    <input type="hidden" name="action" value="authorize" />
+                                    <input type="hidden" name="redirectUri" value="" class="redirectUriInput" />
                                     <button type="submit" class="btn btn-primary btn-sm">Authorize bridge</button>
                                 </form>
                             </dd>