Exemplo n.º 1
0
        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.");
        }
Exemplo n.º 2
0
        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.");
            }
        }
Exemplo n.º 3
0
        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;
            }
        }