/*
* Copyright 2016 OpenMarket Ltd
* Copyright 2017 Vector Creations Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.matrix.androidsdk.crypto;
import android.text.TextUtils;
import org.matrix.androidsdk.rest.model.MatrixError;
/**
* Represents a standard error response.
*/
public class MXCryptoError extends MatrixError {
/**
* Error codes
*/
public static final String ENCRYPTING_NOT_ENABLED_ERROR_CODE = "ENCRYPTING_NOT_ENABLED";
public static final String UNABLE_TO_ENCRYPT_ERROR_CODE = "UNABLE_TO_ENCRYPT";
public static final String UNABLE_TO_DECRYPT_ERROR_CODE = "UNABLE_TO_DECRYPT";
public static final String UNKNOWN_INBOUND_SESSION_ID_ERROR_CODE = "UNKNOWN_INBOUND_SESSION_ID";
public static final String INBOUND_SESSION_MISMATCH_ROOM_ID_ERROR_CODE = "INBOUND_SESSION_MISMATCH_ROOM_ID";
public static final String MISSING_FIELDS_ERROR_CODE = "MISSING_FIELDS";
public static final String MISSING_CIPHER_TEXT_ERROR_CODE = "MISSING_CIPHER_TEXT";
public static final String NOT_INCLUDE_IN_RECIPIENTS_ERROR_CODE = "NOT_INCLUDE_IN_RECIPIENTS";
public static final String BAD_RECIPIENT_ERROR_CODE = "BAD_RECIPIENT";
public static final String BAD_RECIPIENT_KEY_ERROR_CODE = "BAD_RECIPIENT_KEY";
public static final String FORWARDED_MESSAGE_ERROR_CODE = "FORWARDED_MESSAGE";
public static final String BAD_ROOM_ERROR_CODE = "BAD_ROOM";
public static final String BAD_ENCRYPTED_MESSAGE_ERROR_CODE = "BAD_ENCRYPTED_MESSAGE";
public static final String DUPLICATED_MESSAGE_INDEX_ERROR_CODE = "DUPLICATED_MESSAGE_INDEX";
public static final String MISSING_PROPERTY_ERROR_CODE = "MISSING_PROPERTY";
public static final String OLM_ERROR_CODE = "OLM_ERROR_CODE";
public static final String UNKNOWN_DEVICES_CODE = "UNKNOWN_DEVICES_CODE";
/**
* short error reasons
*/
public static final String UNABLE_TO_DECRYPT = "Unable to decrypt";
public static final String UNABLE_TO_ENCRYPT = "Unable to encrypt";
/**
* Detailed error reasons
*/
public static final String ENCRYPTING_NOT_ENABLED_REASON = "Encryption not enabled";
public static final String UNABLE_TO_ENCRYPT_REASON = "Unable to encrypt %s";
public static final String UNABLE_TO_DECRYPT_REASON = "Unable to decrypt %1$s. Algorithm: %2$s";
public static final String OLM_REASON = "OLM error: %1$s";
public static final String DETAILLED_OLM_REASON = "Unable to decrypt %1$s. OLM error: %2$s";
public static final String UNKNOWN_INBOUND_SESSION_ID_REASON = "Unknown inbound session id";
public static final String INBOUND_SESSION_MISMATCH_ROOM_ID_REASON = "Mismatched room_id for inbound group session (expected %1$s, was %2$s)";
public static final String MISSING_FIELDS_REASON = "Missing fields in input";
public static final String MISSING_CIPHER_TEXT_REASON = "Missing ciphertext";
public static final String NOT_INCLUDED_IN_RECIPIENT_REASON = "Not included in recipients";
public static final String BAD_RECIPIENT_REASON = "Message was intented for %1$s";
public static final String BAD_RECIPIENT_KEY_REASON = "Message not intended for this device";
public static final String FORWARDED_MESSAGE_REASON = "Message forwarded from %1$s";
public static final String BAD_ROOM_REASON = "Message intended for room %1$s";
public static final String BAD_ENCRYPTED_MESSAGE_REASON = "Bad Encrypted Message";
public static final String DUPLICATE_MESSAGE_INDEX_REASON = "Duplicate message index, possible replay attack %1$s";
public static final String ERROR_MISSING_PROPERTY_REASON = "No '%1$s' property. Cannot prevent unknown-key attack";
public static final String UNKNOWN_DEVICES_REASON = "This room contains unknown devices which have not been verified. \nWe strongly recommend you verify them before continuing.";
/**
* Describe the error with more details
*/
private String mDetailedErrorDescription = null;
/**
* Data exception.
* Some exceptions provide some data to describe the exception
*/
public Object mExceptionData = null;
/**
* Create a crypto error
*
* @param code the error code (see XX_ERROR_CODE)
* @param shortErrorDescription the short error description
* @param detailedErrorDescription the detailed error description
*/
public MXCryptoError(String code, String shortErrorDescription, String detailedErrorDescription) {
errcode = code;
error = shortErrorDescription;
mDetailedErrorDescription = detailedErrorDescription;
}
/**
* Create a crypto error
*
* @param code the error code (see XX_ERROR_CODE)
* @param shortErrorDescription the short error description
* @param detailedErrorDescription the detailed error description
* @param exceptionData the exception data
*/
public MXCryptoError(String code, String shortErrorDescription, String detailedErrorDescription, Object exceptionData) {
errcode = code;
error = shortErrorDescription;
mDetailedErrorDescription = detailedErrorDescription;
mExceptionData = exceptionData;
}
/**
* @return true if the current error is an olm one.
*/
public boolean isOlmError() {
return TextUtils.equals(OLM_ERROR_CODE, errcode);
}
/**
* @return the detailed error description
*/
public String getDetailedErrorDescription() {
if (TextUtils.isEmpty(mDetailedErrorDescription)) {
return error;
}
return mDetailedErrorDescription;
}
}