diff --git a/src/SafeMessageStorage/SafeMessageStorage/SafeMessageStorage/Services/MessageStorageService/IMessageStorageService.cs b/src/SafeMessageStorage/SafeMessageStorage/SafeMessageStorage/Services/MessageStorageService/IMessageStorageService.cs index 588a9b5..a1b6547 100644 --- a/src/SafeMessageStorage/SafeMessageStorage/SafeMessageStorage/Services/MessageStorageService/IMessageStorageService.cs +++ b/src/SafeMessageStorage/SafeMessageStorage/SafeMessageStorage/Services/MessageStorageService/IMessageStorageService.cs @@ -12,8 +12,10 @@ namespace SafeMessageStorage.Services.MessageStorageService Task SaveMessageAsync(Message message); - Task ReadMessageAsync(); + Task> ReadMessagesAsync(); - Task DeleteMessageAsync(); + Task DeleteMessageAsync(string messageId); + + Task DeleteAllMessagesAsync(); } } diff --git a/src/SafeMessageStorage/SafeMessageStorage/SafeMessageStorage/Services/MessageStorageService/SafeMessageStorageService.cs b/src/SafeMessageStorage/SafeMessageStorage/SafeMessageStorage/Services/MessageStorageService/SafeMessageStorageService.cs index 2703e8a..9ff911f 100644 --- a/src/SafeMessageStorage/SafeMessageStorage/SafeMessageStorage/Services/MessageStorageService/SafeMessageStorageService.cs +++ b/src/SafeMessageStorage/SafeMessageStorage/SafeMessageStorage/Services/MessageStorageService/SafeMessageStorageService.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Linq; using System.Text; using System.Threading.Tasks; using Newtonsoft.Json; @@ -13,33 +14,50 @@ namespace SafeMessageStorage.Services.MessageStorageService { private IAuthorizationService _authorizationService; private ISymmetricEncryptionEngine _encryptionEngine; - private readonly string _messageKey = "377f2486-d2c3-48a7-b821-45d7314479cd"; + private readonly string _messagesKey = "377f2486-d2c3-48a7-b821-45d7314479cd"; - public bool IsStorageEmpty => Xamarin.Essentials.SecureStorage.GetAsync(_messageKey).Result != null; + public bool IsStorageEmpty => Xamarin.Essentials.SecureStorage.GetAsync(_messagesKey).Result != null; public async Task SaveMessageAsync(Message message) { - CheckIfAuthorized(); - var encrypyedMessage = _encryptionEngine.Encrypt(JsonConvert.SerializeObject(message), _authorizationService.AuthorizedUserHash); - await Xamarin.Essentials.SecureStorage.SetAsync(_messageKey, encrypyedMessage); + var messages = await ReadMessagesAsync(); + var messagesList = messages.ToList(); + messagesList.Add(message); + + var encrypyedMessage = _encryptionEngine.Encrypt(JsonConvert.SerializeObject(messagesList), _authorizationService.AuthorizedUserHash); + await Xamarin.Essentials.SecureStorage.SetAsync(_messagesKey, encrypyedMessage); return true; } - public async Task ReadMessageAsync() + public async Task> ReadMessagesAsync() { CheckIfAuthorized(); - var encryptedMessage =await Xamarin.Essentials.SecureStorage.GetAsync(_messageKey); + var encryptedMessage =await Xamarin.Essentials.SecureStorage.GetAsync(_messagesKey); if (encryptedMessage == null) return null; var decryptedMessage = _encryptionEngine.Decrypt(encryptedMessage, _authorizationService.AuthorizedUserHash); - return JsonConvert.DeserializeObject(decryptedMessage); + return JsonConvert.DeserializeObject>(decryptedMessage); } - public async Task DeleteMessageAsync() + public async Task DeleteMessageAsync(string messageId) + { + var messages = await ReadMessagesAsync(); + var enumerable = messages.ToList(); + if (enumerable.All(m => m.Id != messageId)) + return false; + messages = enumerable.Where(m => m.Id != messageId); + + var encrypyedMessage = _encryptionEngine.Encrypt(JsonConvert.SerializeObject(messages.ToList()), _authorizationService.AuthorizedUserHash); + await Xamarin.Essentials.SecureStorage.SetAsync(_messagesKey, encrypyedMessage); + return true; + + } + + public async Task DeleteAllMessagesAsync() { CheckIfAuthorized(); - return Xamarin.Essentials.SecureStorage.Remove(_messageKey); + return Xamarin.Essentials.SecureStorage.Remove(_messagesKey); } private void CheckIfAuthorized()