]> git.basschouten.com Git - openhab-addons.git/blob
79d872a7caf4ace8401daa576c0f85d4b613346e
[openhab-addons.git] /
1 /**
2  * Copyright (c) 2010-2021 Contributors to the openHAB project
3  *
4  * See the NOTICE file(s) distributed with this work for additional
5  * information.
6  *
7  * This program and the accompanying materials are made available under the
8  * terms of the Eclipse Public License 2.0 which is available at
9  * http://www.eclipse.org/legal/epl-2.0
10  *
11  * SPDX-License-Identifier: EPL-2.0
12  */
13 package org.openhab.binding.mielecloud.internal.config.servlet;
14
15 import java.io.IOException;
16 import java.util.Optional;
17
18 import javax.servlet.http.HttpServletRequest;
19 import javax.servlet.http.HttpServletResponse;
20
21 import org.eclipse.jdt.annotation.NonNullByDefault;
22
23 /**
24  * Servlet showing the pair account page.
25  *
26  * @author Björn Lange - Initial Contribution
27  */
28 @NonNullByDefault
29 public final class PairAccountServlet extends AbstractShowPageServlet {
30     private static final long serialVersionUID = 6565378471951635420L;
31
32     public static final String CLIENT_ID_PARAMETER_NAME = "clientId";
33     public static final String CLIENT_SECRET_PARAMETER_NAME = "clientSecret";
34
35     public static final String MISSING_CLIENT_ID_PARAMETER_NAME = "missingClientId";
36     public static final String MISSING_CLIENT_SECRET_PARAMETER_NAME = "missingClientSecret";
37     public static final String MISSING_BRIDGE_ID_PARAMETER_NAME = "missingBridgeId";
38     public static final String MISSING_EMAIL_PARAMETER_NAME = "missingEmail";
39     public static final String MALFORMED_BRIDGE_ID_PARAMETER_NAME = "malformedBridgeId";
40     public static final String MALFORMED_EMAIL_PARAMETER_NAME = "malformedEmail";
41     public static final String FAILED_TO_DERIVE_REDIRECT_URL_PARAMETER_NAME = "failedToDeriveRedirectUrl";
42     public static final String ONGOING_AUTHORIZATION_IN_STEP1_EXPIRES_IN_MINUTES_PARAMETER_NAME = "ongoingAuthorizationInStep1ExpiresInMinutes";
43     public static final String ONGOING_AUTHORIZATION_UNKNOWN_EXPIRY_TIME = "unknown";
44     public static final String NO_ONGOING_AUTHORIZATION_IN_STEP2_PARAMETER_NAME = "noOngoingAuthorizationInStep2";
45     public static final String MISSING_REQUEST_URL_PARAMETER_NAME = "missingRequestUrl";
46
47     private static final String PAIR_ACCOUNT_SKELETON = "pairing.html";
48
49     private static final String CLIENT_ID_PLACEHOLDER = "<!-- CLIENT ID -->";
50     private static final String CLIENT_SECRET_PLACEHOLDER = "<!-- CLIENT SECRET -->";
51     private static final String ERROR_MESSAGE_PLACEHOLDER = "<!-- ERROR MESSAGE -->";
52
53     /**
54      * Creates a new {@link PairAccountServlet}.
55      *
56      * @param resourceLoader Loader for resources.
57      */
58     public PairAccountServlet(ResourceLoader resourceLoader) {
59         super(resourceLoader);
60     }
61
62     @Override
63     protected String handleGetRequest(HttpServletRequest request, HttpServletResponse response)
64             throws MieleHttpException, IOException {
65         String skeleton = getResourceLoader().loadResourceAsString(PAIR_ACCOUNT_SKELETON);
66         skeleton = renderClientIdAndClientSecret(request, skeleton);
67         skeleton = renderErrorMessage(request, skeleton);
68         return skeleton;
69     }
70
71     private String renderClientIdAndClientSecret(HttpServletRequest request, String skeleton) {
72         String prefilledClientId = Optional.ofNullable(request.getParameter(CLIENT_ID_PARAMETER_NAME)).orElse("");
73         String prefilledClientSecret = Optional.ofNullable(request.getParameter(CLIENT_SECRET_PARAMETER_NAME))
74                 .orElse("");
75         return skeleton.replace(CLIENT_ID_PLACEHOLDER, prefilledClientId).replace(CLIENT_SECRET_PLACEHOLDER,
76                 prefilledClientSecret);
77     }
78
79     private String renderErrorMessage(HttpServletRequest request, String skeleton) {
80         if (ServletUtil.isParameterEnabled(request, MISSING_CLIENT_ID_PARAMETER_NAME)) {
81             return skeleton.replace(ERROR_MESSAGE_PLACEHOLDER,
82                     "<div class=\"alert alert-danger\" role=\"alert\">Missing client ID.</div>");
83         } else if (ServletUtil.isParameterEnabled(request, MISSING_CLIENT_SECRET_PARAMETER_NAME)) {
84             return skeleton.replace(ERROR_MESSAGE_PLACEHOLDER,
85
86                     "<div class=\"alert alert-danger\" role=\"alert\">Missing client secret.</div>");
87         } else if (ServletUtil.isParameterEnabled(request, MISSING_BRIDGE_ID_PARAMETER_NAME)) {
88             return skeleton.replace(ERROR_MESSAGE_PLACEHOLDER,
89                     "<div class=\"alert alert-danger\" role=\"alert\">Missing bridge ID.</div>");
90         } else if (ServletUtil.isParameterEnabled(request, MISSING_EMAIL_PARAMETER_NAME)) {
91             return skeleton.replace(ERROR_MESSAGE_PLACEHOLDER,
92                     "<div class=\"alert alert-danger\" role=\"alert\">Missing e-mail address.</div>");
93         } else if (ServletUtil.isParameterEnabled(request, MALFORMED_BRIDGE_ID_PARAMETER_NAME)) {
94             return skeleton.replace(ERROR_MESSAGE_PLACEHOLDER,
95                     "<div class=\"alert alert-danger\" role=\"alert\">Malformed bridge ID. A bridge ID may only contain letters, numbers, '-' and '_'!</div>");
96         } else if (ServletUtil.isParameterEnabled(request, MALFORMED_EMAIL_PARAMETER_NAME)) {
97             return skeleton.replace(ERROR_MESSAGE_PLACEHOLDER,
98                     "<div class=\"alert alert-danger\" role=\"alert\">Malformed e-mail address.</div>");
99         } else if (ServletUtil.isParameterEnabled(request, FAILED_TO_DERIVE_REDIRECT_URL_PARAMETER_NAME)) {
100             return skeleton.replace(ERROR_MESSAGE_PLACEHOLDER,
101                     "<div class=\"alert alert-danger\" role=\"alert\">Failed to derive redirect URL.</div>");
102         } else if (ServletUtil.isParameterPresent(request,
103                 ONGOING_AUTHORIZATION_IN_STEP1_EXPIRES_IN_MINUTES_PARAMETER_NAME)) {
104             String minutesUntilExpiry = request
105                     .getParameter(ONGOING_AUTHORIZATION_IN_STEP1_EXPIRES_IN_MINUTES_PARAMETER_NAME);
106             if (ONGOING_AUTHORIZATION_UNKNOWN_EXPIRY_TIME.equals(minutesUntilExpiry)) {
107                 return skeleton.replace(ERROR_MESSAGE_PLACEHOLDER,
108                         "<div class=\"alert alert-danger\" role=\"alert\">There is an authorization ongoing at the moment. Please complete that authorization prior to starting a new one or try again later.</div>");
109             } else {
110                 return skeleton.replace(ERROR_MESSAGE_PLACEHOLDER,
111                         "<div class=\"alert alert-danger\" role=\"alert\">There is an authorization ongoing at the moment. Please complete that authorization prior to starting a new one or try again in "
112                                 + minutesUntilExpiry + " minutes.</div>");
113             }
114         } else if (ServletUtil.isParameterEnabled(request, NO_ONGOING_AUTHORIZATION_IN_STEP2_PARAMETER_NAME)) {
115             return skeleton.replace(ERROR_MESSAGE_PLACEHOLDER,
116                     "<div class=\"alert alert-danger\" role=\"alert\">Failed to start auhtorization process. Are you trying to perform multiple authorizations at the same time?</div>");
117         } else if (ServletUtil.isParameterEnabled(request, MISSING_REQUEST_URL_PARAMETER_NAME)) {
118             return skeleton.replace(ERROR_MESSAGE_PLACEHOLDER,
119                     "<div class=\"alert alert-danger\" role=\"alert\">Missing request URL. Please try again.</div>");
120         } else {
121             return skeleton.replace(ERROR_MESSAGE_PLACEHOLDER, "");
122         }
123     }
124 }