[ecovacs] Fix expired token handling for XML-over-MQTT models (#17333)

At least the Deebot 900 sends an unusual error response in case of
expired token.

Fixes #15961

Signed-off-by: Danny Baumann <dannybaumann@web.de>
This commit is contained in:
maniac103 2024-11-05 14:20:00 +01:00 committed by GitHub
parent 65f1a9698d
commit 16e1c64bec
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 17 additions and 10 deletions

View File

@ -24,14 +24,12 @@ public class AbstractPortalIotCommandResponse {
@SerializedName("errno")
private final int errorCode;
@SerializedName("error")
private final String errorMessage;
private final Object errorObject; // might be a string or a JSON object
// unused field: 'id' (string)
public AbstractPortalIotCommandResponse(String result, int errorCode, String errorMessage) {
public AbstractPortalIotCommandResponse(String result, int errorCode, Object errorObject) {
this.result = result;
this.errorCode = errorCode;
this.errorMessage = errorMessage;
this.errorObject = errorObject;
}
public boolean wasSuccessful() {
@ -39,13 +37,22 @@ public class AbstractPortalIotCommandResponse {
}
public boolean failedDueToAuthProblem() {
return "fail".equals(result) && errorMessage != null && errorMessage.toLowerCase().contains("auth error");
if (!"fail".equals(result)) {
return false;
}
if (errorCode == 3) {
// Error 3 is 'OAuth error'
return true;
}
String errorMessage = errorObject != null ? errorObject.toString().toLowerCase() : "";
return errorMessage.contains("auth error") || errorMessage.contains("token error");
}
public String getErrorMessage() {
if (wasSuccessful()) {
return null;
}
String errorMessage = errorObject != null ? errorObject.toString() : null;
return "result=" + result + ", errno=" + errorCode + ", error=" + errorMessage;
}
}

View File

@ -27,8 +27,8 @@ public class PortalIotCommandJsonResponse extends AbstractPortalIotCommandRespon
@SerializedName("resp")
public final JsonElement response;
public PortalIotCommandJsonResponse(String result, JsonElement response, int errorCode, String errorMessage) {
super(result, errorCode, errorMessage);
public PortalIotCommandJsonResponse(String result, JsonElement response, int errorCode, Object errorObject) {
super(result, errorCode, errorObject);
this.response = response;
}

View File

@ -21,8 +21,8 @@ public class PortalIotCommandXmlResponse extends AbstractPortalIotCommandRespons
@SerializedName("resp")
private final String responseXml;
public PortalIotCommandXmlResponse(String result, String responseXml, int errorCode, String errorMessage) {
super(result, errorCode, errorMessage);
public PortalIotCommandXmlResponse(String result, String responseXml, int errorCode, Object errorObject) {
super(result, errorCode, errorObject);
this.responseXml = responseXml;
}