private static Guid GetConversationId(DataAccessLayer.User sender, DataAccessLayer.User recipient) { int senderId = recipient.UserType == DataAccessLayer.UserType.Group ? 0 : sender.Id; return(MessageValidator.GetConversationGuid(senderId, recipient.Id)); }
public static void Validate(this Message message, DataAccessLayer.User sender) { message.MessageId = Guid.NewGuid(); message.LastUpdateTimeUtcTicks = DateTime.UtcNow.Ticks; message.PostDateTimeUtcTicks = DateTime.UtcNow.Ticks; if (message.Sender == null || message.Sender.Id != sender.Id) { throw new InvalidMessageException(InvalidMessageError.InvalidSenderError); } if (message.Recipient == null || message.Recipient.Id == message.Sender.Id) { throw new InvalidMessageException(InvalidMessageError.InvalidRecipientError); } if (message.ConversationId != GetConversationId(message.Sender, message.Recipient) && message.ConversationId != Guid.Empty) { throw new InvalidMessageException(InvalidMessageError.InvalidSenderError); } if (message.ConversationId == Guid.Empty) { int senderId = message.Recipient.UserType == DataAccessLayer.UserType.Group ? 0 : message.SenderId; message.ConversationId = MessageValidator.GetConversationGuid(senderId, message.RecipientId); } if (((message.MessageFlags & MessageFlags.Image) == MessageFlags.Image) && message.Image == null) { throw new InvalidMessageException(InvalidMessageError.ImageMissingError); } if (((message.MessageFlags & (MessageFlags.PollMessage | MessageFlags.Calendar)) == MessageFlags.PollMessage) && (message.PollOptions == null || message.PollOptions.Count == 0)) { throw new InvalidMessageException(InvalidMessageError.InvalidPollOptionsError); } if (((message.MessageFlags & MessageFlags.PollResponseMessage) == MessageFlags.PollResponseMessage) && (message.PollMessageId == Guid.Empty)) { throw new InvalidMessageException(InvalidMessageError.InvalidPollResponseError); } if ((message.MessageFlags & MessageFlags.PollResponseMessage) == MessageFlags.PollResponseMessage) { if (message.PollMessageId == null) { throw new InvalidMessageException(InvalidMessageError.InvalidPollResponseError); } Message pollMessage = MessageStore.Instance.GetMessage(message.ConversationId, message.PollMessageId.Value); if (pollMessage == null) { throw new InvalidMessageException(InvalidMessageError.InvalidPollResponseError); } if ((pollMessage.MessageFlags & MessageFlags.PollMessage) != MessageFlags.PollMessage) { throw new InvalidMessageException(InvalidMessageError.InvalidPollResponseError); } if (((pollMessage.MessageFlags & MessageFlags.Calendar) == 0) && !pollMessage.PollOptions.Contains(message.PollResponse)) { throw new InvalidMessageException(InvalidMessageError.InvalidPollResponseError); } } if (message.ClientMessageId == Guid.Empty) { message.ClientMessageId = Guid.NewGuid(); } }