public void DoDelete(Context context) { foreach (var message in context.Messages .Where(u => u.IdMessagesThread == thread.PublicId)) { DMessage dMessage = new DMessage(message, myUserId); dMessage.DoDelete(context); } context.MessagesThread.Remove(thread); var jthread = new JMessageThread() { PublicId = thread.PublicId, DoOnlyDelete = true }; PushOperations.SendIJType(context, jthread, myUserId, myUserId); //PushOperations.DeleteBlobMessage(context, thread.GetBlobId(), myUserId); //Piggy bug fix //throw new NotSupportedException("Not supported, because developer of this app is absolutly useless."); }
public static void ParseIJTypeMessage(Context context, JsonCapsula decoded, long senderId, long messageId, long myUserId) { if (decoded == null) { return; } if (context.Contacts .Where(u => u.PublicId == senderId) .Select(u => u.Trusted) .SingleOrDefault() != 1) { throw new Exception($"User with id {senderId} isn't trusted."); } bool permission = senderId == myUserId; switch (decoded.Message.GetJsonType()) { case JsonTypes.ALARM: JAlarm alarm = (JAlarm)decoded.Message; permission = permission || context.Contacts .Where(u => u.PublicId == senderId) .Select(u => u.AlarmPermission) .SingleOrDefault() == 1; if (permission) { context.Alarms.Add(new Alarms() { BlobMessagesId = messageId, Text = alarm.Text, Time = alarm.Date.GetChatovatkoString() }); context.SaveChanges(); } else { throw new Exception($"User with id {senderId} doesn't have permission to set alarm."); } break; case JsonTypes.CONTACT: JContact detail = (JContact)decoded.Message; if (permission) { var toUpdate = context.Contacts .Where(u => u.PublicId == detail.PublicId) .SingleOrDefault(); if (toUpdate != null) { toUpdate.NickName = detail.NickName; toUpdate.PublicCertificate = detail.PublicCertificate; toUpdate.AlarmPermission = detail.AlarmPermission ? 1 : 0; toUpdate.PublicId = detail.PublicId; toUpdate.ReceiveAesKey = detail.ReceiveAesKey; toUpdate.SendAesKey = detail.SendAesKey; toUpdate.UserName = detail.UserName; toUpdate.Trusted = detail.Trusted ? 1 : 0; toUpdate.BlobMessagesId = messageId; } else { context.Contacts.Add(new Contacts() { NickName = detail.NickName, PublicCertificate = detail.PublicCertificate, AlarmPermission = detail.AlarmPermission ? 1 : 0, PublicId = detail.PublicId, ReceiveAesKey = detail.ReceiveAesKey, SendAesKey = detail.SendAesKey, UserName = detail.UserName, Trusted = detail.Trusted ? 1 : 0, BlobMessagesId = messageId }); } context.SaveChanges(); } else { throw new Exception($"User with id {senderId} doesn't have permission to set contact detail."); } break; case JsonTypes.MESSAGES: JMessage jmessage = (JMessage)decoded.Message; long threadWithUser = ( from threads in context.MessagesThread where threads.PublicId == jmessage.MessageThreadId select threads.WithUser ).SingleOrDefault(); permission = permission || threadWithUser == senderId; if (permission) { bool onlive = (from threads in context.MessagesThread where threads.PublicId == jmessage.MessageThreadId select threads.Onlive) .SingleOrDefault() == 1; bool updated = false; if (onlive) { var toUpdateInfo = (from bmessages in context.BlobMessages join messages in context.Messages on bmessages.Id equals messages.BlobMessagesId where bmessages.SenderId == senderId && messages.IdMessagesThread == jmessage.MessageThreadId select new { messages.BlobMessagesId, messages.Id }) .SingleOrDefault(); if (toUpdateInfo != null) { var toUpdate = context.Messages .Where(m => m.Id == toUpdateInfo.Id) .SingleOrDefault(); updated = true; toUpdate.Text = jmessage.Text; toUpdate.Date = jmessage.Time.GetChatovatkoString(); toUpdate.BlobMessagesId = messageId; context.SaveChanges(); } } if (!updated) { context.Messages.Add(new Messages() { Date = jmessage.Time.GetChatovatkoString(), Text = jmessage.Text, IdMessagesThread = jmessage.MessageThreadId, BlobMessagesId = messageId }); context.SaveChanges(); } } else { throw new Exception($"User with id {senderId} doesn't have permission to send this message."); } break; case JsonTypes.MESSAGES_THREAD: JMessageThread messageThread = (JMessageThread)decoded.Message; permission = permission || (messageThread.WithUserId == senderId && !messageThread.DoOnlyDelete); if (permission) { var old = context.MessagesThread .Where(u => u.PublicId == messageThread.PublicId) .SingleOrDefault(); if (messageThread.DoOnlyDelete && old != null) { context.Remove(old); } else if (messageThread.DoOnlyDelete) { } else if (old != null) { old.Name = messageThread.Name; old.BlobMessagesId = messageId; old.Archived = messageThread.Archived ? 1 : 0; } else { context.MessagesThread.Add(new MessagesThread { Name = messageThread.Name, PublicId = messageThread.PublicId, Onlive = messageThread.Onlive ? 1 : 0, Archived = messageThread.Archived ? 1 : 0, WithUser = messageThread.WithUserId, BlobMessagesId = messageId }); } context.SaveChanges(); } else { throw new Exception($"User with id {senderId} doesn't have permission to create/edit/delete this message thread."); } break; default: throw new Exception($"Json type unknown."); } }
public static void ParseIJTypeMessage(Context context, IJType decoded, long senderId, long messageId, long myUserId) { if (decoded == null) { return; } if (context.Contacts .Where(u => u.PublicId == senderId) .Select(u => u.Trusted) .SingleOrDefault() != 1) { throw new Exception($"User with id {senderId} isn't trusted."); } bool permission = senderId == myUserId; switch (decoded.GetJsonType()) { case JsonTypes.ALARM: JAlarm alarm = (JAlarm)decoded; permission = permission || context.ContactsDetail .Where(u => u.ContactId == senderId) .Select(u => u.AlarmPermission) .SingleOrDefault() == 1; if (permission) { context.Alarms.Add(new Alarms() { BlobMessagesId = messageId, Text = alarm.Text, Time = alarm.Date.GetChatovatkoString() }); context.SaveChanges(); } else { throw new Exception($"User with id {senderId} doesn't have permission to set alarm."); } break; case JsonTypes.CONTACT_DETAIL: JContactDetail detail = (JContactDetail)decoded; permission = permission || context.ContactsDetail .Where(u => u.ContactId == senderId) .Select(u => u.ChangeContactsPermission) .SingleOrDefault() == 1; if (permission) { var toUpdate = context.ContactsDetail .Where(u => u.ContactId == detail.ContactId) .SingleOrDefault(); if (toUpdate != null) { toUpdate.NickName = detail.NickName; toUpdate.BlobMessagesId = messageId; toUpdate.AlarmPermission = detail.AlarmPermission ? 1 : 0; toUpdate.ChangeContactsPermission = detail.ChangeContactPermission; } else { context.ContactsDetail.Add(new ContactsDetail() { AlarmPermission = detail.ChangeContactPermission, NickName = detail.NickName, BlobMessagesId = messageId, ContactId = detail.ContactId, ChangeContactsPermission = detail.ChangeContactPermission }); } context.SaveChanges(); } else { throw new Exception($"User with id {senderId} doesn't have permission to set contact detail."); } break; case JsonTypes.MESSAGES: JMessage jmessage = (JMessage)decoded; long threadWithUser = ( from threads in context.MessagesThread where threads.PublicId == jmessage.MessageThreadId select threads.WithUser ).SingleOrDefault(); permission = permission || threadWithUser == senderId; if (permission) { bool onlive = (from threads in context.MessagesThread where threads.PublicId == jmessage.MessageThreadId select threads.Onlive) .SingleOrDefault() == 1; bool updated = false; if (onlive) { var toUpdateInfo = (from bmessages in context.BlobMessages join messages in context.Messages on bmessages.Id equals messages.BlobMessagesId where bmessages.SenderId == senderId && messages.IdMessagesThread == jmessage.MessageThreadId select new { messages.BlobMessagesId, messages.Id }) .SingleOrDefault(); if (toUpdateInfo != null) { var toUpdate = context.Messages .Where(m => m.Id == toUpdateInfo.Id) .SingleOrDefault(); updated = true; toUpdate.Text = jmessage.Text; toUpdate.Date = jmessage.Time.GetChatovatkoString(); toUpdate.BlobMessagesId = messageId; context.SaveChanges(); } } if (!updated) { context.Messages.Add(new Messages() { Date = jmessage.Time.GetChatovatkoString(), Text = jmessage.Text, IdMessagesThread = jmessage.MessageThreadId, BlobMessagesId = messageId }); context.SaveChanges(); } } else { throw new Exception($"User with id {senderId} doesn't have permission to send this message."); } break; case JsonTypes.MESSAGES_THREAD: JMessageThread messageThread = (JMessageThread)decoded; permission = permission || (messageThread.WithUserId == senderId && !messageThread.DoOnlyDelete); if (permission) { var old = context.MessagesThread .Where(u => u.PublicId == messageThread.PublicId) .SingleOrDefault(); if (messageThread.DoOnlyDelete && old != null) { context.Remove(old); } else if (messageThread.DoOnlyDelete) { } else if (old != null) { old.Name = messageThread.Name; old.BlobMessagesId = messageId; old.Archived = messageThread.Archived; } else { context.MessagesThread.Add(new MessagesThread { Name = messageThread.Name, PublicId = messageThread.PublicId, Onlive = messageThread.Onlive, Archived = messageThread.Archived, WithUser = messageThread.WithUserId, BlobMessagesId = messageId }); } context.SaveChanges(); } else { throw new Exception($"User with id {senderId} doesn't have permission to create/edit/delete this message thread."); } break; case JsonTypes.AES_KEY: JAESKey aesKey = (JAESKey)decoded; if (permission) { var contact = context.Contacts .Where(c => c.PublicId == aesKey.UserId) .SingleOrDefault(); if (contact.SendAesKey != null) { throw new Exception($"AES key of user {contact.UserName} already exist."); } contact.SendAesKey = aesKey.AESKey; context.SaveChanges(); } else { throw new Exception($"User with id {senderId} doesn't have permission to create AES keys to send."); } break; } }