Esempio n. 1
0
        //It's not really a edit, just create a new version, with new time and new text
        public async Task <bool> Edit(EditMessageDTO editMessageDTO, int jwtOwner, MyDbContext _context)
        {
            var valid = Helper.ValidMessageText(editMessageDTO.NewMessageText);

            if (!valid)
            {
                throw new Exception("Message is invalid");
            }

            var message = await _context.Messages.FirstOrDefaultAsync(c => c.MessageId == editMessageDTO.MessageId);

            if (message == null)
            {
                throw new Exception("Message does not exist, please contact the chat administrator");
            }

            if (message.UserId != jwtOwner)
            {
                throw new Exception("You don't own this message, you cannot modify it.");
            }

            message.AddMessageVersion(new MessageVersion(message.MessageId, editMessageDTO.NewMessageText));

            await _context.SaveChangesAsync();

            return(true);
        }
Esempio n. 2
0
        public async Task EditMessage(int messageId, string messageText, JwtToken jwt, bool valid)
        {
            var client     = _factory.CreateClient();
            var newMessage = new EditMessageDTO(messageId, messageText);

            var addMessageJson = new StringContent(
                JsonConvert.SerializeObject(newMessage),
                Encoding.UTF8,
                "application/json");

            client.DefaultRequestHeaders.Add("jwt", jwt.Token);
            var response = await client.PostAsync("/editmessage", addMessageJson);

            var result = await response.Content.ReadAsStringAsync();

            if (valid)
            {
                Assert.Equal(System.Net.HttpStatusCode.OK, response.StatusCode);
            }
            else
            {
                Assert.Equal(System.Net.HttpStatusCode.InternalServerError, response.StatusCode);
            }
        }
Esempio n. 3
0
        public async Task DeleteMessage(string receiverId, EditMessageDTO message)
        {
            string   senderName = Context.User.FindFirst(ClaimTypes.Name).Value;
            ObjectId senderId   = ObjectId.Parse(Context.User.FindFirst(ClaimTypes.NameIdentifier).Value);
            ObjectId receiver   = ObjectId.Parse(receiverId);

            ObjectId?chatInteractionId = null;

            if (message.ChatInteractionId != null)
            {
                chatInteractionId = ObjectId.Parse(message.ChatInteractionId);
            }

            var data = _context.GetDb;

            var chatCollection = data.GetCollection <ChatInteraction>("ChatInteractions");
            var userCollection = data.GetCollection <User>("Users");

            var filterForSenderUser = Builders <User> .Filter.Eq("_id", senderId);

            var filterForReceiverUser = Builders <User> .Filter.Eq("_id", receiver);

            if (chatInteractionId != null)
            {
                // Delete message:
                var filter = Builders <ChatInteraction> .Filter.Eq("_id", chatInteractionId);

                var innerFilter = Builders <Message> .Filter.Eq("_id", ObjectId.Parse(message.Id));

                var update = Builders <ChatInteraction> .Update.PullFilter("Messages", innerFilter);

                await chatCollection.UpdateOneAsync(filter, update);
            }
            else
            {
                var receiverUser = (await userCollection.FindAsync(filterForReceiverUser)).FirstOrDefault();

                // check receiver contacts if they contain sender
                var chatInteractionWithSender = receiverUser.Contacts?.Where(contact => contact.Name == senderName).FirstOrDefault();
                if (chatInteractionWithSender != null)
                {
                    // Delete message:
                    var filter = Builders <ChatInteraction> .Filter.Eq("_id", chatInteractionId);

                    var innerFilter = Builders <Message> .Filter.Eq("_id", ObjectId.Parse(message.Id));

                    var update = Builders <ChatInteraction> .Update.PullFilter("Messages", innerFilter);

                    await chatCollection.UpdateOneAsync(filter, update);
                }
                else
                {
                    return;
                }
            }

            // Notify Users about Delete:
            var userConnections = _connections.GetConnections(receiver);

            foreach (var connectionId in userConnections)
            {
                await Clients.Client(connectionId).SendAsync("deletedMessage", new
                {
                    SenderId = senderId.ToString(),
                    Message  = new MessageReturnDTO {
                        Sender = senderName, Content = message.Message, Seen = false, Id = message.Id
                    },
                    ReceiverId        = receiver.ToString(),
                    ChatInteractionId = chatInteractionId.ToString()
                });
            }

            var senderConnections = _connections.GetConnections(senderId);

            foreach (var connectionId in senderConnections)
            {
                await Clients.Client(connectionId).SendAsync("deletedMessage", new
                {
                    SenderId = senderId.ToString(),
                    Message  = new MessageReturnDTO {
                        Sender = senderName, Content = message.Message, Seen = false, Id = message.Id
                    },
                    ReceiverId        = receiver.ToString(),
                    ChatInteractionId = chatInteractionId.ToString()
                });
            }
        }
Esempio n. 4
0
        public async Task <IActionResult> TestEdit()
        {
            /*
             * await _hub.EditMessage("60286f9f5e7da329ba5eb813",
             *                      new EditMessageDTO { ChatInteractionId = "602923c3301b700389cdb3e1",
             *                                           Message = "TestEdit",
             *                                           Id = "602923c3301b700389cdb3e0"});
             * return Ok();
             */
            string   senderName = "tes";                                      //Context.User.FindFirst(ClaimTypes.Name).Value;
            ObjectId senderId   = ObjectId.Parse("60286f7c5e7da329ba5eb812"); //ObjectId.Parse(Context.User.FindFirst(ClaimTypes.NameIdentifier).Value);
            ObjectId receiver   = ObjectId.Parse("60286f9f5e7da329ba5eb813");

            ObjectId?      chatInteractionId = null;
            EditMessageDTO message           = new EditMessageDTO {
                ChatInteractionId = "602923c3301b700389cdb3e1",
                Message           = "TestEdit",
                Id = "602923c3301b700389cdb3e0"
            };

            if (message.ChatInteractionId != null)
            {
                chatInteractionId = ObjectId.Parse(message.ChatInteractionId);
            }

            var data = _context.GetDb;

            var chatCollection = data.GetCollection <ChatInteraction>("ChatInteractions");
            var userCollection = data.GetCollection <User>("Users");

            var filterForSenderUser = Builders <User> .Filter.Eq("_id", senderId);

            var filterForReceiverUser = Builders <User> .Filter.Eq("_id", receiver);

            if (chatInteractionId != null)
            {
                // Edit message:
                var filterChat = Builders <ChatInteraction> .Filter.Eq("_id", chatInteractionId);

                var filterMessage = Builders <Message> .Filter.Eq("_id", ObjectId.Parse(message.Id));

                var filterMessageList = Builders <ChatInteraction> .Filter.ElemMatch("Messages", filterMessage);

                var filter = Builders <ChatInteraction> .Filter.And(filterChat, filterMessageList);

                var update = Builders <ChatInteraction> .Update.Set(chatOrigin => chatOrigin.Messages[-1].Content, message.Message);

                await chatCollection.UpdateOneAsync(filter, update);
            }
            else
            {
                var receiverUser = (await userCollection.FindAsync(filterForReceiverUser)).FirstOrDefault();

                // check receiver contacts if they contain sender
                var chatInteractionWithSender = receiverUser.Contacts?.Where(contact => contact.Name == senderName).FirstOrDefault();
                if (chatInteractionWithSender != null)
                {
                    // Edit message:
                    var filterChat = Builders <ChatInteraction> .Filter.Eq("_id", chatInteractionId);

                    var filterMessage = Builders <Message> .Filter.Eq("_id", ObjectId.Parse(message.Id));

                    var filterMessageList = Builders <ChatInteraction> .Filter.ElemMatch(chat => chat.Messages, filterMessage);

                    var filter = Builders <ChatInteraction> .Filter.And(filterChat, filterMessageList);

                    var update = Builders <ChatInteraction> .Update.Set(chatOrigin => chatOrigin.Messages[-1].Content, message.Message);

                    await chatCollection.UpdateOneAsync(filter, update);
                }
                else
                {
                    return(BadRequest());
                }
            }

            return(Ok());
        }
Esempio n. 5
0
        public async Task <IActionResult> TestDelete()
        {
            /*await _hub.EditMessage("60286f9f5e7da329ba5eb813",
             *                      new EditMessageDTO
             *                      {
             *                          ChatInteractionId = "602923c3301b700389cdb3e1",
             *                          Id = "602923c3301b700389cdb3e0"
             *                      });
             * return Ok();*/

            string   senderName = "tes";                                      //Context.User.FindFirst(ClaimTypes.Name).Value;
            ObjectId senderId   = ObjectId.Parse("60286f7c5e7da329ba5eb812"); //ObjectId.Parse(Context.User.FindFirst(ClaimTypes.NameIdentifier).Value);
            ObjectId receiver   = ObjectId.Parse("60286f9f5e7da329ba5eb813");

            ObjectId?      chatInteractionId = null;
            EditMessageDTO message           = new EditMessageDTO
            {
                ChatInteractionId = "60287f294060e2f632006ca2",
                Message           = "TestEdit",
                Id = "6029ab7a00f5dc00eeeed3cb"
            };

            if (message.ChatInteractionId != null)
            {
                chatInteractionId = ObjectId.Parse(message.ChatInteractionId);
            }

            var data = _context.GetDb;

            var chatCollection = data.GetCollection <ChatInteraction>("ChatInteractions");
            var userCollection = data.GetCollection <User>("Users");

            var filterForSenderUser = Builders <User> .Filter.Eq("_id", senderId);

            var filterForReceiverUser = Builders <User> .Filter.Eq("_id", receiver);

            if (chatInteractionId != null)
            {
                // Delete message:
                var filter = Builders <ChatInteraction> .Filter.Eq("_id", chatInteractionId);

                var innerFilter = Builders <Message> .Filter.Eq("_id", ObjectId.Parse(message.Id));

                var update = Builders <ChatInteraction> .Update.PullFilter("Messages", innerFilter);

                await chatCollection.UpdateOneAsync(filter, update);
            }
            else
            {
                var receiverUser = (await userCollection.FindAsync(filterForReceiverUser)).FirstOrDefault();

                // check receiver contacts if they contain sender
                var chatInteractionWithSender = receiverUser.Contacts?.Where(contact => contact.Name == senderName).FirstOrDefault();
                if (chatInteractionWithSender != null)
                {
                    // Delete message:
                    var filter = Builders <ChatInteraction> .Filter.Eq("_id", chatInteractionId);

                    var innerFilter = Builders <Message> .Filter.Eq("_id", ObjectId.Parse(message.Id));

                    var update = Builders <ChatInteraction> .Update.PullFilter("Messages", innerFilter);

                    await chatCollection.UpdateOneAsync(filter, update);
                }
                else
                {
                    return(BadRequest());
                }
            }

            return(Ok());
        }