Exemple #1
0
        public async Task <ActionResult> MessagePost(string name, string message)
        {
            //TelemetryClient.TrackTrace(name + " says: '" + message + "'");

            await messageRepository.AddMessageAsync(name, message, Request.UserHostAddress);

            var responseUrl = Request.Url.AbsoluteUri.Split('?').First();

            return(Redirect($"{responseUrl}?{Query.MessageKey}={Query.MessageSentValue}"));
        }
Exemple #2
0
        public async Task AddMessageAsync(string content, Guid userId, Guid conversationId)
        {
            var user = await _userRepository.GetAsync(userId);

            var conversation = await _conversationRepository.GetAsync(conversationId);

            var message = new Message(content, user, conversation);


            await _messageRepository.AddMessageAsync(message);
        }
        public async Task <SendMessagePayload> SendMessageAsync(
            SendMessageInput input,
            [Service] IMessageRepository repository,
            [Service] ITopicEventSender sender)
        {
            var message = new Message(input.Text);

            await repository.AddMessageAsync(message);

            await sender.SendAsync("AllMessages", message);

            return(new SendMessagePayload(message, input.ClientMutationId));
        }
        public async Task <IActionResult> Create([Bind("IdMessage,Name,Description,PostingDate1,IdCategory,IdRegion")] Message message)
        {
            if (ModelState.IsValid)
            {
                await _messageRepository.AddMessageAsync(message);

                return(RedirectToAction(nameof(Index)));
            }

            PopulateMessage(message.IdRegion, message.IdCategory);

            return(View(message));
        }
Exemple #5
0
        public async Task <SendMessagePayload> SendMessageAsync(
            SendMessageInput input,
            FieldNode field,
            [GlobalState] string currentUserEmail,
            PersonByEmailDataLoader personByEmail,
            [Service] IMessageRepository messageRepository,
            [Service] IEventDispatcher eventDispatcher,
            CancellationToken cancellationToken)
        {
            IReadOnlyList <Person> participants =
                await personByEmail.LoadAsync(
                    cancellationToken, currentUserEmail, input.RecipientEmail)
                .ConfigureAwait(false);

            if (participants[1] is null)
            {
                throw new QueryException(
                          ErrorBuilder.New()
                          .SetCode("UNKNOWN_RECIPIENT")
                          .SetMessage("The given recipient id is invalid.")
                          .AddLocation(field.Arguments[0])
                          .Build());
            }

            Person sender    = participants[0];
            Person recipient = participants[1];

            var message = new Message(
                sender.Id,
                recipient.Id,
                input.Text);

            await messageRepository.AddMessageAsync(
                message, cancellationToken)
            .ConfigureAwait(false);

            await eventDispatcher.SendAsync(
                recipient.Email, message, cancellationToken)
            .ConfigureAwait(false);

            return(new SendMessagePayload(
                       sender,
                       recipient,
                       message,
                       input.ClientMutationId));
        }
Exemple #6
0
        public async Task <ActionResult> AddMessage(Guid userId, [FromBody] MessageToAdd message)
        {
            if (message == null && userId != Guid.Empty)
            {
                return(NotFound());
            }
            if (!_userRepository.CheckIfUserExists(message.ToWho) || !_userRepository.CheckIfUserExists(userId))
            {
                return(NotFound());
            }
            var messageToAdd = _mapper.Map <Message>(message);

            messageToAdd.FromWho = userId;
            await _messageRepository.AddMessageAsync(messageToAdd);

            return(NoContent());
        }
Exemple #7
0
        public async Task <IActionResult> CreateMessage([FromBody] Message message)
        {
            try
            {
                IActionResult result = null;

                if (message == null)
                {
                    return(BadRequest($"The message is invalid (null)"));
                }
                if (message.Id <= 0)
                {
                    return(BadRequest($"The message id is invalid. Id must be greater than zero"));
                }

                if (await _repository.GetMessageByIdAsync(message.Id) == null)
                {
                    result = this.CreatedAtRoute(
                        routeName: "Default",
                        value: await _repository.AddMessageAsync(
                            new Message()
                    {
                        Id   = message.Id,
                        Name = message?.Name,
                        Body = message?.Body
                    }
                            )
                        );
                }
                else
                {
                    result = BadRequest($"The message with {message.Id} already exists");
                }

                return(result);
            }
            catch (Exception ex)
            {
                throw new MessagesDomainException("An error caused an exception", ex);
            }
        }
        public async Task <IActionResult> Create(MessageViewModel messageViewModel)
        {
            if (ModelState.IsValid)
            {
                var result = await validator.ValidateCreationAsync(messageViewModel);

                if (result.Succeeded)
                {
                    var message = await mapper.FromViewModelAsync(messageViewModel);

                    var encrypt = encryptor.EncryptMessage(messageViewModel.Message, messageViewModel.Key);
                    message.Value = encrypt.Value;
                    message.IV    = encrypt.IV;

                    await repository.AddMessageAsync(message);

                    return(RedirectToAction(nameof(Success), new { Id = message.Code }));
                }
                ModelState.AddModelError("", result.Description);
            }
            return(View());
        }
        public async Task <IActionResult> Index([Bind("IdMessage,Name,Description,PostingDate1,IdCategory,IdRegion")] Message message)
        {
            var     id      = HttpContext.User.FindFirst(ClaimTypes.NameIdentifier).Value;
            AppUser appUser = await _appDbContext.Users
                              .Include(i => i.PermissionRegions)
                              .ThenInclude(i => i.Region)
                              .Where(i => i.Id == id)
                              .FirstOrDefaultAsync(m => m.Id == id);

            if (ModelState.IsValid)
            {
                message.PostingDate1 = DateTime.Now;
                if (appUser.PermissionRegions.Where(p => p.Region.IdRegion == message.IdRegion).Any() || HttpContext.User.IsInRole("Admin"))
                {
                    await _messageRepository.AddMessageAsync(message);
                }

                return(RedirectToAction(nameof(Index)));
            }

            PopulateMessage(appUser, message.IdRegion, message.IdCategory);

            return(View(message));
        }
Exemple #10
0
        public async Task <ActionResult> ReceiveMessage([FromForm, Required] string body, [FromForm, Required] string from)
        {
            try
            {
                if (String.IsNullOrWhiteSpace(AppConfiguration.MessageToNumber))
                {
                    throw new InvalidOperationException("The message 'To' number is missing.");
                }

                var item = await _messageRepository.AddMessageAsync(new Models.Message {
                    From = from, Body = body, To = AppConfiguration.MessageToNumber
                });

                await _messageHubContext.Clients.All.SendAsync("SmsReceived", item);

                return(Ok());
                // TODO: find out why there is no XML formatter for CreatedAtActionResult().
                //return CreatedAtAction(nameof(GetMessgeById), item.Id);
            }
            catch (Exception ex)
            {
                return(StatusCode(500, ex.Message));
            }
        }
Exemple #11
0
        public async Task <SendMessageResult> SendMessageAsync(Message message)
        {
            try
            {
                Dictionary <string, byte[]> keys = null;
                string text = message.Text;

                await messageRepository.AddMessageAsync(message);

                if (EncryptionEnabled)
                {
                    var deviceIdAndPublicKeyMap = await deviceInfoProvider.GetUserDevicesAndPublicKeys((int)message.Recipient);

                    if (deviceIdAndPublicKeyMap.Count > 0)
                    {
                        //don't forget current user's other devices
                        var myDevices = await deviceInfoProvider.GetUserDevicesAndPublicKeys(Settings.MyId);

                        foreach (var myDevice in myDevices)
                        {
                            if (myDevice.Key != Settings.UserDeviceId && myDevice.Key != Settings.MyId.ToString())
                            {
                                deviceIdAndPublicKeyMap[myDevice.Key] = myDevice.Value;
                            }
                        }
                        text = cryptoService.Encrypt(message.Text, deviceIdAndPublicKeyMap, out keys);
                    }
                }

                var request = new SendMessageRequest
                {
                    ReceiverUserId = message.Recipient,
                    SenderName     = Settings.NickName,
                    MessageType    = ServerClient.Entities.Ws.Requests.MessageType.Text,
                    MessageToken   = message.MessageToken,
                    Thumbnail      = message.Thumbnail,
                    GroupId        = message.GroupId,
                    Message        = text,
                    Keys           = keys,
                };

                var response = await messagingService.SendMessage(request);

                if (response.Error == Errors.SendMessage_ProvideKeysForTheseDevices)
                {
                    foreach (var item in response.MissedDevicesWithPublicKeysToReEncrypt)
                    {
                        await deviceInfoProvider.SavePublicKeyForDeviceId(item.DeviceId, item.UserId, Convert.ToBase64String(item.PublicKey));
                    }
                    //try again
                    return(await SendMessageAsync(message));
                }
                if (response.Error == Errors.SendMessage_ReceiversNotFound)
                {
                    return(SendMessageResult.ReceiverUnknown);
                }
                if (response.Error == Errors.SendMessage_ReceiverAndSenderAreSame)
                {
                    return(SendMessageResult.ReceiverAndSenderAreSame);
                }

                OnMessageSent(message.MessageToken);
                return(SendMessageResult.Ok);
            }
            catch (ConnectionException)
            {
                return(SendMessageResult.ConnectionError);
            }
            catch (Exception ex)
            {
                App.Logger.Report(ex);
                return(SendMessageResult.UnknownError);
            }
        }
Exemple #12
0
 public Task AddMessage([FromRoute] string messageBoardId, [FromBody] GameMessage message) => _chatRepository.AddMessageAsync(messageBoardId, message);