/*
* 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.data;
import android.text.TextUtils;
import java.io.Serializable;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class MXDeviceInfo implements Serializable {
private static final long serialVersionUID = 20129670646382964L;
//
//private static final String LOG_TAG = "MXDeviceInfo";
// This device is a new device and the user was not warned it has been added.
public static final int DEVICE_VERIFICATION_UNKNOWN = -1;
// The user has not yet verified this device.
public static final int DEVICE_VERIFICATION_UNVERIFIED = 0;
// The user has verified this device.
public static final int DEVICE_VERIFICATION_VERIFIED = 1;
// The user has blocked this device.
public static final int DEVICE_VERIFICATION_BLOCKED = 2;
/**
* The id of this device.
*/
public String deviceId;
/**
* the user id
*/
public String userId;
/**
* The list of algorithms supported by this device.
*/
public List<String> algorithms;
/**
* A map from <key type>:<id> -> <base64-encoded key>>.
*/
public Map<String, String> keys;
/**
* The signature of this MXDeviceInfo.
* A map from <key type>:<device_id> -> <base64-encoded key>>.
*/
public Map<String, Map<String, String>> signatures;
/*
* Additional data from the homeserver.
*/
public Map<String, Object> unsigned;
/**
* Verification state of this device.
*/
public int mVerified;
/**
* Constructor
*/
public MXDeviceInfo() {
mVerified = DEVICE_VERIFICATION_UNKNOWN;
}
/**
* Constructor
*
* @param aDeviceId the device id
*/
public MXDeviceInfo(String aDeviceId) {
deviceId = aDeviceId;
mVerified = DEVICE_VERIFICATION_UNKNOWN;
}
/**
* Tells if the device is unknown
*
* @return true if the device is unknown
*/
public boolean isUnknown() {
return mVerified == DEVICE_VERIFICATION_UNKNOWN;
}
/**
* Tells if the device is verified.
*
* @return true if the device is verified
*/
public boolean isVerified() {
return mVerified == DEVICE_VERIFICATION_VERIFIED;
}
/**
* Tells if the device is unverified.
*
* @return true if the device is unverified
*/
public boolean isUnverified() {
return mVerified == DEVICE_VERIFICATION_UNVERIFIED;
}
/**
* Tells if the device is blocked.
*
* @return true if the device is blocked
*/
public boolean isBlocked() {
return mVerified == DEVICE_VERIFICATION_BLOCKED;
}
/**
* @return the fingerprint
*/
public String fingerprint() {
if ((null != keys) && !TextUtils.isEmpty(deviceId)) {
return keys.get("ed25519:" + deviceId);
}
return null;
}
/**
* @return the identity key
*/
public String identityKey() {
if ((null != keys) && !TextUtils.isEmpty(deviceId)) {
return keys.get("curve25519:" + deviceId);
}
return null;
}
/**
* @return the display name
*/
public String displayName() {
if (null != unsigned) {
return (String) unsigned.get("device_display_name");
}
return null;
}
/**
* @return the signed data map
*/
public Map<String, Object> signalableJSONDictionary() {
HashMap<String, Object> map = new HashMap<>();
map.put("device_id", deviceId);
if (null != userId) {
map.put("user_id", userId);
}
if (null != algorithms) {
map.put("algorithms", algorithms);
}
if (null != keys) {
map.put("keys", keys);
}
return map;
}
/**
* @return a dictionary of the parameters
*/
public Map<String, Object> JSONDictionary() {
HashMap<String, Object> JSONDictionary = new HashMap<>();
JSONDictionary.put("device_id", deviceId);
if (null != userId) {
JSONDictionary.put("user_id", userId);
}
if (null != algorithms) {
JSONDictionary.put("algorithms", algorithms);
}
if (null != keys) {
JSONDictionary.put("keys", keys);
}
if (null != signatures) {
JSONDictionary.put("signatures", signatures);
}
if (null != unsigned) {
JSONDictionary.put("unsigned", unsigned);
}
return JSONDictionary;
}
@Override
public java.lang.String toString() {
return "MXDeviceInfo " + userId + ":" + deviceId;
}
}