Пример #1
0
        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);
            }
        }
Пример #2
0
        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));
        }