mirror of
https://github.com/openhab/openhab-addons.git
synced 2025-01-10 15:11:59 +01:00
[mielecloud] Remove e-mail parameter validation (#11073)
Signed-off-by: Björn Lange <bjoern.lange@tu-dortmund.de>
This commit is contained in:
parent
5b4b51f6ae
commit
699b7712c3
@ -23,7 +23,7 @@ import org.openhab.core.thing.ThingTypeUID;
|
||||
* @author Björn Lange - Added locale config parameter, added i18n key collection
|
||||
* @author Benjamin Bolte - Add pre-heat finished and plate step channels, door state and door alarm channels, info
|
||||
* state channel and map signal flags from API
|
||||
* @author Björn Lange - Add elapsed time channel, dish warmer thing
|
||||
* @author Björn Lange - Add elapsed time channel, dish warmer thing, removed e-mail validation
|
||||
*/
|
||||
@NonNullByDefault
|
||||
public final class MieleCloudBindingConstants {
|
||||
@ -227,7 +227,6 @@ public final class MieleCloudBindingConstants {
|
||||
public static final String BRIDGE_STATUS_DESCRIPTION_ACCESS_TOKEN_NOT_CONFIGURED = "@text/mielecloud.bridge.status.access.token.not.configured";
|
||||
public static final String BRIDGE_STATUS_DESCRIPTION_ACCOUNT_NOT_AUTHORIZED = "@text/mielecloud.bridge.status.account.not.authorized";
|
||||
public static final String BRIDGE_STATUS_DESCRIPTION_ACCESS_TOKEN_REFRESH_FAILED = "@text/mielecloud.bridge.status.access.token.refresh.failed";
|
||||
public static final String BRIDGE_STATUS_DESCRIPTION_INVALID_EMAIL = "@text/mielecloud.bridge.status.invalid.email";
|
||||
public static final String BRIDGE_STATUS_DESCRIPTION_TRANSIENT_HTTP_ERROR = "@text/mielecloud.bridge.status.transient.http.error";
|
||||
|
||||
public static final String THING_STATUS_DESCRIPTION_WEBSERVICE_MISSING = "@text/mielecloud.thing.status.webservice.missing";
|
||||
|
@ -23,7 +23,6 @@ import org.openhab.binding.mielecloud.internal.MieleCloudBindingConstants;
|
||||
import org.openhab.binding.mielecloud.internal.config.exception.BridgeCreationFailedException;
|
||||
import org.openhab.binding.mielecloud.internal.config.exception.BridgeReconfigurationFailedException;
|
||||
import org.openhab.binding.mielecloud.internal.handler.MieleBridgeHandler;
|
||||
import org.openhab.binding.mielecloud.internal.util.EmailValidator;
|
||||
import org.openhab.binding.mielecloud.internal.util.LocaleValidator;
|
||||
import org.openhab.core.config.discovery.DiscoveryResult;
|
||||
import org.openhab.core.config.discovery.DiscoveryResultBuilder;
|
||||
@ -96,11 +95,6 @@ public final class CreateBridgeServlet extends AbstractRedirectionServlet {
|
||||
return "/mielecloud/failure?" + FailureServlet.MALFORMED_BRIDGE_UID_PARAMETER_NAME + "=true";
|
||||
}
|
||||
|
||||
if (!EmailValidator.isValid(email)) {
|
||||
logger.warn("Cannot create bridge: E-mail address '{}' is malformed.", email);
|
||||
return "/mielecloud/failure?" + FailureServlet.MALFORMED_EMAIL_PARAMETER_NAME + "=true";
|
||||
}
|
||||
|
||||
String locale = getValidLocale(request.getParameter(LOCALE_PARAMETER_NAME));
|
||||
|
||||
logger.debug("Auto configuring Miele account using locale '{}' (requested locale was '{}')", locale,
|
||||
@ -131,7 +125,7 @@ public final class CreateBridgeServlet extends AbstractRedirectionServlet {
|
||||
if (inbox.add(result)) {
|
||||
return pairBridge(bridgeUid);
|
||||
} else {
|
||||
return reconfigureBridge(bridgeUid, locale, email);
|
||||
return reconfigureBridge(bridgeUid);
|
||||
}
|
||||
}
|
||||
|
||||
@ -145,7 +139,7 @@ public final class CreateBridgeServlet extends AbstractRedirectionServlet {
|
||||
return thing;
|
||||
}
|
||||
|
||||
private Thing reconfigureBridge(ThingUID thingUid, String locale, String email) {
|
||||
private Thing reconfigureBridge(ThingUID thingUid) {
|
||||
logger.debug("Thing already exists. Modifying configuration.");
|
||||
Thing thing = thingRegistry.get(thingUid);
|
||||
if (thing == null) {
|
||||
|
@ -35,7 +35,6 @@ public class FailureServlet extends AbstractShowPageServlet {
|
||||
public static final String MISSING_BRIDGE_UID_PARAMETER_NAME = "missingBridgeUid";
|
||||
public static final String MISSING_EMAIL_PARAMETER_NAME = "missingEmail";
|
||||
public static final String MALFORMED_BRIDGE_UID_PARAMETER_NAME = "malformedBridgeUid";
|
||||
public static final String MALFORMED_EMAIL_PARAMETER_NAME = "malformedEmail";
|
||||
public static final String MISSING_REQUEST_URL_PARAMETER_NAME = "missingRequestUrl";
|
||||
|
||||
public static final String OAUTH2_ERROR_ACCESS_DENIED = "access_denied";
|
||||
@ -80,8 +79,6 @@ public class FailureServlet extends AbstractShowPageServlet {
|
||||
return "Missing e-mail address.";
|
||||
} else if (ServletUtil.isParameterEnabled(request, MALFORMED_BRIDGE_UID_PARAMETER_NAME)) {
|
||||
return "Malformed bridge UID.";
|
||||
} else if (ServletUtil.isParameterEnabled(request, MALFORMED_EMAIL_PARAMETER_NAME)) {
|
||||
return "Malformed e-mail address.";
|
||||
} else if (ServletUtil.isParameterEnabled(request, MISSING_REQUEST_URL_PARAMETER_NAME)) {
|
||||
return "Missing request URL. Please try the config flow again.";
|
||||
} else {
|
||||
|
@ -24,7 +24,6 @@ import org.openhab.binding.mielecloud.internal.auth.OAuthException;
|
||||
import org.openhab.binding.mielecloud.internal.config.OAuthAuthorizationHandler;
|
||||
import org.openhab.binding.mielecloud.internal.config.exception.NoOngoingAuthorizationException;
|
||||
import org.openhab.binding.mielecloud.internal.config.exception.OngoingAuthorizationException;
|
||||
import org.openhab.binding.mielecloud.internal.util.EmailValidator;
|
||||
import org.openhab.core.thing.ThingUID;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
@ -98,11 +97,6 @@ public final class ForwardToLoginServlet extends AbstractRedirectionServlet {
|
||||
return getErrorRedirectionUrl(PairAccountServlet.MALFORMED_BRIDGE_ID_PARAMETER_NAME);
|
||||
}
|
||||
|
||||
if (!EmailValidator.isValid(email)) {
|
||||
logger.warn("Passed e-mail address '{}' is invalid.", email);
|
||||
return getErrorRedirectionUrl(PairAccountServlet.MALFORMED_EMAIL_PARAMETER_NAME);
|
||||
}
|
||||
|
||||
try {
|
||||
authorizationHandler.beginAuthorization(clientId, clientSecret, bridgeUid, email);
|
||||
} catch (OngoingAuthorizationException e) {
|
||||
|
@ -37,7 +37,6 @@ public final class PairAccountServlet extends AbstractShowPageServlet {
|
||||
public static final String MISSING_BRIDGE_ID_PARAMETER_NAME = "missingBridgeId";
|
||||
public static final String MISSING_EMAIL_PARAMETER_NAME = "missingEmail";
|
||||
public static final String MALFORMED_BRIDGE_ID_PARAMETER_NAME = "malformedBridgeId";
|
||||
public static final String MALFORMED_EMAIL_PARAMETER_NAME = "malformedEmail";
|
||||
public static final String FAILED_TO_DERIVE_REDIRECT_URL_PARAMETER_NAME = "failedToDeriveRedirectUrl";
|
||||
public static final String ONGOING_AUTHORIZATION_IN_STEP1_EXPIRES_IN_MINUTES_PARAMETER_NAME = "ongoingAuthorizationInStep1ExpiresInMinutes";
|
||||
public static final String ONGOING_AUTHORIZATION_UNKNOWN_EXPIRY_TIME = "unknown";
|
||||
@ -93,9 +92,6 @@ public final class PairAccountServlet extends AbstractShowPageServlet {
|
||||
} else if (ServletUtil.isParameterEnabled(request, MALFORMED_BRIDGE_ID_PARAMETER_NAME)) {
|
||||
return skeleton.replace(ERROR_MESSAGE_PLACEHOLDER,
|
||||
"<div class=\"alert alert-danger\" role=\"alert\">Malformed bridge ID. A bridge ID may only contain letters, numbers, '-' and '_'!</div>");
|
||||
} else if (ServletUtil.isParameterEnabled(request, MALFORMED_EMAIL_PARAMETER_NAME)) {
|
||||
return skeleton.replace(ERROR_MESSAGE_PLACEHOLDER,
|
||||
"<div class=\"alert alert-danger\" role=\"alert\">Malformed e-mail address.</div>");
|
||||
} else if (ServletUtil.isParameterEnabled(request, FAILED_TO_DERIVE_REDIRECT_URL_PARAMETER_NAME)) {
|
||||
return skeleton.replace(ERROR_MESSAGE_PLACEHOLDER,
|
||||
"<div class=\"alert alert-danger\" role=\"alert\">Failed to derive redirect URL.</div>");
|
||||
|
@ -23,7 +23,6 @@ import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
import org.eclipse.jdt.annotation.NonNullByDefault;
|
||||
import org.openhab.binding.mielecloud.internal.config.ThingsTemplateGenerator;
|
||||
import org.openhab.binding.mielecloud.internal.util.EmailValidator;
|
||||
import org.openhab.binding.mielecloud.internal.webservice.language.LanguageProvider;
|
||||
import org.openhab.core.thing.ThingUID;
|
||||
import org.slf4j.Logger;
|
||||
@ -97,12 +96,6 @@ public class SuccessServlet extends AbstractShowPageServlet {
|
||||
"Malformed bridge UID.");
|
||||
}
|
||||
|
||||
if (!EmailValidator.isValid(email)) {
|
||||
logger.warn("Success page received malformed e-mail address '{}'.", email);
|
||||
return getResourceLoader().loadResourceAsString("failure.html").replace(ERROR_MESSAGE_TEXT_PLACEHOLDER,
|
||||
"Malformed e-mail address.");
|
||||
}
|
||||
|
||||
String skeleton = getResourceLoader().loadResourceAsString("success.html");
|
||||
skeleton = renderErrorMessage(request, skeleton);
|
||||
skeleton = renderBridgeUid(skeleton, bridgeUid);
|
||||
|
@ -30,7 +30,6 @@ import org.openhab.binding.mielecloud.internal.auth.OAuthException;
|
||||
import org.openhab.binding.mielecloud.internal.auth.OAuthTokenRefreshListener;
|
||||
import org.openhab.binding.mielecloud.internal.auth.OAuthTokenRefresher;
|
||||
import org.openhab.binding.mielecloud.internal.discovery.ThingDiscoveryService;
|
||||
import org.openhab.binding.mielecloud.internal.util.EmailValidator;
|
||||
import org.openhab.binding.mielecloud.internal.util.LocaleValidator;
|
||||
import org.openhab.binding.mielecloud.internal.webservice.ConnectionError;
|
||||
import org.openhab.binding.mielecloud.internal.webservice.ConnectionStatusListener;
|
||||
@ -58,7 +57,7 @@ import org.slf4j.LoggerFactory;
|
||||
*
|
||||
* @author Roland Edelhoff - Initial contribution
|
||||
* @author Björn Lange - Introduced CombiningLanguageProvider field and interactions, added LanguageProvider super
|
||||
* interface, switched from polling to SSE, added support for multiple bridges
|
||||
* interface, switched from polling to SSE, added support for multiple bridges, removed e-mail validation
|
||||
*/
|
||||
@NonNullByDefault
|
||||
public class MieleBridgeHandler extends BaseBridgeHandler
|
||||
@ -122,14 +121,6 @@ public class MieleBridgeHandler extends BaseBridgeHandler
|
||||
}
|
||||
|
||||
public void initializeWebservice() {
|
||||
if (!EmailValidator.isValid(getConfig().get(MieleCloudBindingConstants.CONFIG_PARAM_EMAIL).toString())) {
|
||||
updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.CONFIGURATION_ERROR,
|
||||
I18NKeys.BRIDGE_STATUS_DESCRIPTION_INVALID_EMAIL);
|
||||
// When the e-mail configuration is changed a new initialization will be triggered. Therefore, we can leave
|
||||
// the bridge in this state.
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
webService = webserviceFactory.get();
|
||||
} catch (MieleWebserviceInitializationException e) {
|
||||
|
@ -1,36 +0,0 @@
|
||||
/**
|
||||
* Copyright (c) 2010-2021 Contributors to the openHAB project
|
||||
*
|
||||
* See the NOTICE file(s) distributed with this work for additional
|
||||
* information.
|
||||
*
|
||||
* This program and the accompanying materials are made available under the
|
||||
* terms of the Eclipse Public License 2.0 which is available at
|
||||
* http://www.eclipse.org/legal/epl-2.0
|
||||
*
|
||||
* SPDX-License-Identifier: EPL-2.0
|
||||
*/
|
||||
package org.openhab.binding.mielecloud.internal.util;
|
||||
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import org.eclipse.jdt.annotation.NonNullByDefault;
|
||||
|
||||
/**
|
||||
* Utility for validating e-mail addresses.
|
||||
*
|
||||
* @author Björn Lange - Initial Contribution
|
||||
*/
|
||||
@NonNullByDefault
|
||||
public final class EmailValidator {
|
||||
private static final Pattern EMAIL_PATTERN = Pattern
|
||||
.compile("^[a-zA-Z_0-9\\.+%-]{3,}\\@([a-zA-Z_0-9-]+\\.)+[a-z]+$");
|
||||
|
||||
private EmailValidator() {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
public static boolean isValid(String emailAddress) {
|
||||
return EMAIL_PATTERN.matcher(emailAddress).matches();
|
||||
}
|
||||
}
|
@ -245,7 +245,6 @@ channel-type.mielecloud.battery_level.description=The battery level of the robot
|
||||
mielecloud.bridge.status.access.token.not.configured=The OAuth2 access token is not configured.
|
||||
mielecloud.bridge.status.account.not.authorized=The account has not been authorized. Please consult the documentation on how to do that.
|
||||
mielecloud.bridge.status.access.token.refresh.failed=Failed to refresh the OAuth2 access token. Please authorize the account again.
|
||||
mielecloud.bridge.status.invalid.email=The configured e-mail address has an invalid format.
|
||||
mielecloud.bridge.status.transient.http.error=An unexpected HTTP error occurred. Check the logs if this error persists.
|
||||
mielecloud.thing.status.webservice.missing=The Miele webservice cannot be accessed over the bridge. Check the bridge configuration.
|
||||
mielecloud.thing.status.removed=This Miele device has been removed from the Miele@home account.
|
||||
|
@ -53,7 +53,7 @@
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="email">E-mail address:</label>
|
||||
<input type="text" class="form-control" id="email" name="email" placeholder="Enter the e-mail address associated with your Miele Cloud Account" required pattern="[a-zA-Z_0-9.+%-]{3,}@([a-zA-Z_0-9-]+[.])+[a-z]+)" />
|
||||
<input type="text" class="form-control" id="email" name="email" placeholder="Enter the e-mail address associated with your Miele Cloud Account" required />
|
||||
</div>
|
||||
<button type="submit" class="btn btn-danger btn-lg">Pair Account</button>
|
||||
</form>
|
||||
|
@ -1,46 +0,0 @@
|
||||
/**
|
||||
* Copyright (c) 2010-2021 Contributors to the openHAB project
|
||||
*
|
||||
* See the NOTICE file(s) distributed with this work for additional
|
||||
* information.
|
||||
*
|
||||
* This program and the accompanying materials are made available under the
|
||||
* terms of the Eclipse Public License 2.0 which is available at
|
||||
* http://www.eclipse.org/legal/epl-2.0
|
||||
*
|
||||
* SPDX-License-Identifier: EPL-2.0
|
||||
*/
|
||||
package org.openhab.binding.mielecloud.internal.util;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
import org.eclipse.jdt.annotation.NonNullByDefault;
|
||||
import org.junit.jupiter.params.ParameterizedTest;
|
||||
import org.junit.jupiter.params.provider.ValueSource;
|
||||
|
||||
/**
|
||||
* @author Björn Lange - Initial Contribution
|
||||
*/
|
||||
@NonNullByDefault
|
||||
public class EmailValidatorTest {
|
||||
@ParameterizedTest
|
||||
@ValueSource(strings = { "example@openhab.org", "itsme@test24.com", "my-account@t-online.de", "Some@dDRESs.edu",
|
||||
"min@Length.com" })
|
||||
void validEmailAddress(String emailAddress) {
|
||||
// when:
|
||||
var valid = EmailValidator.isValid(emailAddress);
|
||||
|
||||
// then:
|
||||
assertTrue(valid);
|
||||
}
|
||||
|
||||
@ParameterizedTest
|
||||
@ValueSource(strings = { "examp!e@###.org", "to@o.short.com" })
|
||||
void invalidEmailAddress(String emailAddress) {
|
||||
// when:
|
||||
var valid = EmailValidator.isValid(emailAddress);
|
||||
|
||||
// then:
|
||||
assertFalse(valid);
|
||||
}
|
||||
}
|
@ -225,18 +225,4 @@ public class CreateBridgeServletTest extends AbstractConfigFlowTest {
|
||||
assertTrue(website.contains("Pairing failed!"));
|
||||
assertTrue(website.contains("Missing e-mail address."));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenAMalformedEmailIsPassedToBridgeCreationThenTheBrowserIsRedirectedToTheFailurePageAndAnErrorIsShown()
|
||||
throws Exception {
|
||||
// when:
|
||||
Website website = getCrawler()
|
||||
.doGetRelative("/mielecloud/createBridgeThing?" + CreateBridgeServlet.BRIDGE_UID_PARAMETER_NAME + "="
|
||||
+ MieleCloudBindingIntegrationTestConstants.BRIDGE_THING_UID.getAsString() + "&"
|
||||
+ CreateBridgeServlet.EMAIL_PARAMETER_NAME + "=openhab.openhab.org");
|
||||
|
||||
// then:
|
||||
assertTrue(website.contains("Pairing failed!"));
|
||||
assertTrue(website.contains("Malformed e-mail address."));
|
||||
}
|
||||
}
|
||||
|
@ -267,23 +267,4 @@ public class ForwardToLoginServletTest extends AbstractConfigFlowTest {
|
||||
"Go to <a href=\"https://www.miele.com/f/com/en/register_api.aspx\">the Miele developer portal</a> to obtain your"));
|
||||
assertTrue(maybePairAccountSite.contains("Missing e-mail address."));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenAMalformedEmailIsPassedThenTheBrowserIsRedirectedToThePairSiteAndAWarningIsDisplayed()
|
||||
throws Exception {
|
||||
// when:
|
||||
Website maybePairAccountSite = getCrawler()
|
||||
.doGetRelative("/mielecloud/forwardToLogin?" + ForwardToLoginServlet.CLIENT_ID_PARAMETER_NAME + "="
|
||||
+ MieleCloudBindingIntegrationTestConstants.CLIENT_ID + "&"
|
||||
+ ForwardToLoginServlet.CLIENT_SECRET_PARAMETER_NAME + "="
|
||||
+ MieleCloudBindingIntegrationTestConstants.CLIENT_SECRET + "&"
|
||||
+ ForwardToLoginServlet.BRIDGE_ID_PARAMETER_NAME + "="
|
||||
+ MieleCloudBindingIntegrationTestConstants.BRIDGE_ID + "&"
|
||||
+ ForwardToLoginServlet.EMAIL_PARAMETER_NAME + "=not_an_Email");
|
||||
|
||||
// then:
|
||||
assertTrue(maybePairAccountSite.contains(
|
||||
"Go to <a href=\"https://www.miele.com/f/com/en/register_api.aspx\">the Miele developer portal</a> to obtain your"));
|
||||
assertTrue(maybePairAccountSite.contains("Malformed e-mail address"));
|
||||
}
|
||||
}
|
||||
|
@ -131,16 +131,4 @@ public class SuccessServletTest extends AbstractConfigFlowTest {
|
||||
assertTrue(website.contains("Pairing failed!"));
|
||||
assertTrue(website.contains("Missing e-mail address."));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenTheSuccessPageIsRequestedAndAMalformedEmailIsPassedThenTheFailurePageIsShown() throws Exception {
|
||||
// when:
|
||||
Website website = getCrawler().doGetRelative("/mielecloud/success?" + SuccessServlet.BRIDGE_UID_PARAMETER_NAME
|
||||
+ "=" + MieleCloudBindingIntegrationTestConstants.BRIDGE_THING_UID.getAsString() + "&"
|
||||
+ SuccessServlet.EMAIL_PARAMETER_NAME + "=not:an!email");
|
||||
|
||||
// then:
|
||||
assertTrue(website.contains("Pairing failed!"));
|
||||
assertTrue(website.contains("Malformed e-mail address."));
|
||||
}
|
||||
}
|
||||
|
@ -195,21 +195,6 @@ public class MieleBridgeHandlerTest extends OpenHabOsgiTest {
|
||||
MieleCloudBindingConstants.I18NKeys.BRIDGE_STATUS_DESCRIPTION_ACCESS_TOKEN_NOT_CONFIGURED);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testThingStatusIsSetToOfflineWithDetailConfigurationErrorAndDescriptionWhenTheEmailAddressIsInvalid()
|
||||
throws Exception {
|
||||
// given:
|
||||
getBridge().getConfiguration().setProperties(
|
||||
Collections.singletonMap(MieleCloudBindingConstants.CONFIG_PARAM_EMAIL, "not!a!mail$address"));
|
||||
|
||||
// when:
|
||||
getHandler().initialize();
|
||||
|
||||
// then:
|
||||
assertThingStatusIs(ThingStatus.OFFLINE, ThingStatusDetail.CONFIGURATION_ERROR,
|
||||
MieleCloudBindingConstants.I18NKeys.BRIDGE_STATUS_DESCRIPTION_INVALID_EMAIL);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testThingStatusIsSetToOfflineWithDetailConfigurationErrorAndDescriptionWhenTheMieleAccountHasNotBeenAuthorized()
|
||||
throws Exception {
|
||||
|
Loading…
Reference in New Issue
Block a user