Skip to content

Commit

Permalink
[ecovacs] Fix expired token handling for XML-over-MQTT models (#17333)
Browse files Browse the repository at this point in the history
At least the Deebot 900 sends an unusual error response in case of
expired token.

Fixes #15961

Signed-off-by: Danny Baumann <[email protected]>
  • Loading branch information
maniac103 authored Nov 5, 2024
1 parent 65f1a96 commit 16e1c64
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -24,28 +24,35 @@ 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() {
return "ok".equals(result);
}

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;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

Expand Down

0 comments on commit 16e1c64

Please sign in to comment.