Merge branch 'decrypt-enhance-implement-errors' into 'master'
[Room] Enhance decrypt error handling See merge request famedly/famedlysdk!216
This commit is contained in:
		
						commit
						664f97b251
					
				|  | @ -921,9 +921,10 @@ class Room { | ||||||
|     if (this.encrypted && client.store != null) { |     if (this.encrypted && client.store != null) { | ||||||
|       await client.store.transaction(() { |       await client.store.transaction(() { | ||||||
|         for (int i = 0; i < events.length; i++) { |         for (int i = 0; i < events.length; i++) { | ||||||
|           if (events[i].type == EventTypes.Encrypted) { |           if (events[i].type == EventTypes.Encrypted && | ||||||
|  |               events[i].content["body"] == DecryptError.UNKNOWN_SESSION) { | ||||||
|             events[i] = events[i].decrypted; |             events[i] = events[i].decrypted; | ||||||
|             if (events[i].type == EventTypes.Encrypted) { |             if (events[i].type != EventTypes.Encrypted) { | ||||||
|               client.store.storeEventUpdate( |               client.store.storeEventUpdate( | ||||||
|                 EventUpdate( |                 EventUpdate( | ||||||
|                   eventType: events[i].typeKey, |                   eventType: events[i].typeKey, | ||||||
|  | @ -1531,14 +1532,14 @@ class Room { | ||||||
|     Map<String, dynamic> decryptedPayload; |     Map<String, dynamic> decryptedPayload; | ||||||
|     try { |     try { | ||||||
|       if (!client.encryptionEnabled) { |       if (!client.encryptionEnabled) { | ||||||
|         throw ("Encryption is not enabled in your client."); |         throw (DecryptError.NOT_ENABLED); | ||||||
|       } |       } | ||||||
|       if (event.content["algorithm"] != "m.megolm.v1.aes-sha2") { |       if (event.content["algorithm"] != "m.megolm.v1.aes-sha2") { | ||||||
|         throw ("Unknown encryption algorithm."); |         throw (DecryptError.UNKNOWN_ALGORITHM); | ||||||
|       } |       } | ||||||
|       final String sessionId = event.content["session_id"]; |       final String sessionId = event.content["session_id"]; | ||||||
|       if (!sessionKeys.containsKey(sessionId)) { |       if (!sessionKeys.containsKey(sessionId)) { | ||||||
|         throw ("The sender has not sent us the session key."); |         throw (DecryptError.UNKNOWN_SESSION); | ||||||
|       } |       } | ||||||
|       final olm.DecryptResult decryptResult = sessionKeys[sessionId] |       final olm.DecryptResult decryptResult = sessionKeys[sessionId] | ||||||
|           .inboundGroupSession |           .inboundGroupSession | ||||||
|  | @ -1551,7 +1552,7 @@ class Room { | ||||||
|         if ((_outboundGroupSession?.session_id() ?? "") == sessionId) { |         if ((_outboundGroupSession?.session_id() ?? "") == sessionId) { | ||||||
|           clearOutboundGroupSession(); |           clearOutboundGroupSession(); | ||||||
|         } |         } | ||||||
|         throw ("The secure channel with the sender was corrupted."); |         throw (DecryptError.CHANNEL_CORRUPTED); | ||||||
|       } |       } | ||||||
|       sessionKeys[sessionId].indexes[messageIndexKey] = |       sessionKeys[sessionId].indexes[messageIndexKey] = | ||||||
|           decryptResult.message_index; |           decryptResult.message_index; | ||||||
|  | @ -1560,8 +1561,7 @@ class Room { | ||||||
| 
 | 
 | ||||||
|       decryptedPayload = json.decode(decryptResult.plaintext); |       decryptedPayload = json.decode(decryptResult.plaintext); | ||||||
|     } catch (exception) { |     } catch (exception) { | ||||||
|       if (exception.toString() == |       if (exception.toString() == DecryptError.UNKNOWN_SESSION) { | ||||||
|           "The sender has not sent us the session key.") { |  | ||||||
|         decryptedPayload = { |         decryptedPayload = { | ||||||
|           "content": event.content, |           "content": event.content, | ||||||
|           "type": "m.room.encrypted", |           "type": "m.room.encrypted", | ||||||
|  | @ -1593,3 +1593,12 @@ class Room { | ||||||
|     ); |     ); | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | abstract class DecryptError { | ||||||
|  |   static const String NOT_ENABLED = "Encryption is not enabled in your client."; | ||||||
|  |   static const String UNKNOWN_ALGORITHM = "Unknown encryption algorithm."; | ||||||
|  |   static const String UNKNOWN_SESSION = | ||||||
|  |       "The sender has not sent us the session key."; | ||||||
|  |   static const String CHANNEL_CORRUPTED = | ||||||
|  |       "The secure channel with the sender was corrupted."; | ||||||
|  | } | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue