public async Task <IEnumerable <Message> > Get() { var user = await TokenValidatorHandler2.ValidateTokenInHttpRequest(Request); lock (messagesLock) { // Extract user messages var usersMessages = messages.Where(m => m.Recipient == user).ToList(); // Remove them from the message list messages = messages.Where(m => m.Recipient != user).ToList(); return(usersMessages); } }
public async Task <HttpResponseMessage> Post() { var user = await TokenValidatorHandler2.ValidateTokenInHttpRequest(Request); var messageText = await Request.Content.ReadAsStringAsync(); var message = JsonConvert.DeserializeObject <Message>(messageText); var findBots = bots.Where(b => b.Id == message.Recipient); if (findBots.Any()) { var bot = findBots.First(); // This message goes to a bot. Forward it to the bot (with a different Auth token) and not store it var httpClient = new HttpClient(); httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", Tokens.MakeToken(bot.Secret, user)); var messageToBot = new { Sender = message.Sender, Text = message.Text, ReplyTo = "https://localhost:44324//api/messageboard" // TODO: change this for cloud deployments }; var content = new StringContent(JsonConvert.SerializeObject(messageToBot)); HttpResponseMessage response = await httpClient.PostAsync(bot.Url, content); return(response); } else { // The recipient is a human. Store the message -- it will be picked up by the user later lock (messagesLock) { messages.Add(message); } } return(Request.CreateResponse(HttpStatusCode.Created)); }