diff --git a/lib/OlmDevice.js b/lib/OlmDevice.js index fe1f85510..feaf219d3 100644 --- a/lib/OlmDevice.js +++ b/lib/OlmDevice.js @@ -315,6 +315,38 @@ OlmDevice.prototype.getSessionIdForDevice = function(theirDeviceIdentityKey) { return sessionIds[0]; }; +/** + * Get information on the active Olm sessions for a device. + *
+ * Returns an array, with an entry for each active session. The first entry in + * the result will be the one used for outgoing messages. Each entry contains + * the keys 'hasReceivedMessage' (true if the session has received an incoming + * message and is therefore past the pre-key stage), and 'sessionId'. + * + * @param {string} deviceIdentityKey Curve25519 identity key for the device + * @return {Array.<{sessionId: string, hasReceivedMessage: Boolean}>} + */ +OlmDevice.prototype.getSessionInfoForDevice = function(deviceIdentityKey) { + var sessionIds = this.getSessionIdsForDevice(deviceIdentityKey); + sessionIds.sort(); + + var info = []; + + function getSessionInfo(session) { + return { + hasReceivedMessage: session.has_received_message() + }; + } + + for (var i = 0; i < sessionIds.length; i++) { + var sessionId = sessionIds[i]; + var res = this._getSession(deviceIdentityKey, sessionId, getSessionInfo); + res.sessionId = sessionId; + info.push(res); + } + return info; +}; + /** * Encrypt an outgoing message using an existing session * diff --git a/lib/crypto.js b/lib/crypto.js index 213b0ec9c..44803fca8 100644 --- a/lib/crypto.js +++ b/lib/crypto.js @@ -488,6 +488,36 @@ Crypto.prototype.setDeviceVerification = function(userId, deviceId, verified, bl }; +/** + * Get information on the active olm sessions with a user + *
+ * Returns a map from device id to an object with keys 'deviceIdKey' (the + * device's curve25519 identity key) and 'sessions' (an array of objects in the + * same format as that returned by {@link module:OlmDevice#getSessionInfoForDevice}). + *
+ * This method is provided for debugging purposes.
+ *
+ * @param {string} userId id of user to inspect
+ *
+ * @return {Object.