public async void ValidateRequest_Should_Fail_With_NonMatching_Signature()
        {
            var httpRequest = new Mock <HttpRequest>();

            httpRequest.SetupAllProperties();
            httpRequest.SetupGet(req => req.Headers[It.IsAny <string>()]).Returns("wrong_signature");
            httpRequest.Object.Body = Stream.Null;

            await Assert.ThrowsAsync <AuthenticationException>(async() =>
            {
                await TwilioHelper.RequestToActivity(httpRequest.Object, null, string.Empty);
            });
        }
Esempio n. 2
0
        public void QueryStringToDictionary_Should_Return_Dictionary_With_Valid_Query()
        {
            var hmac    = new HMACSHA1(Encoding.UTF8.GetBytes(AuthTokenString));
            var builder = new StringBuilder(ValidationUrlString);

            var bodyString = File.ReadAllText(Directory.GetCurrentDirectory() + @"\files\NoMediaPayload.txt");

            byte[]       byteArray = Encoding.ASCII.GetBytes(bodyString);
            MemoryStream stream    = new MemoryStream(byteArray);

            var values = new Dictionary <string, string>();

            var pairs = bodyString.Replace("+", "%20").Split('&');

            foreach (var p in pairs)
            {
                var pair  = p.Split('=');
                var key   = pair[0];
                var value = Uri.UnescapeDataString(pair[1]);

                values.Add(key, value);
            }

            var sortedKeys = new List <string>(values.Keys);

            sortedKeys.Sort(StringComparer.Ordinal);

            foreach (var key in sortedKeys)
            {
                builder.Append(key).Append(values[key] ?? string.Empty);
            }

            var    hashArray = hmac.ComputeHash(Encoding.UTF8.GetBytes(builder.ToString()));
            string hash      = Convert.ToBase64String(hashArray);

            var httpRequest = new Mock <HttpRequest>();

            httpRequest.SetupAllProperties();
            httpRequest.SetupGet(req => req.Headers[It.IsAny <string>()]).Returns(hash);

            httpRequest.Object.Body = stream;

            var activity = TwilioHelper.RequestToActivity(httpRequest.Object, ValidationUrlString, AuthTokenString);

            Assert.NotNull(activity.Id);
            Assert.NotNull(activity.Conversation.Id);
            Assert.NotNull(activity.From.Id);
            Assert.NotNull(activity.Recipient.Id);
            Assert.NotNull(activity.Text);
        }
        public async Task RequestToActivity_Should_NotThrow_KeyNotFoundException_With_NumMedia_GreaterThan_Attachments()
        {
            var hmac    = new HMACSHA1(Encoding.UTF8.GetBytes(AuthTokenString));
            var builder = new StringBuilder(_validationUrlString.ToString());

            var bodyString = File.ReadAllText(PathUtils.NormalizePath(Directory.GetCurrentDirectory() + @"\files\MediaPayload.txt"));

            // Replace NumMedia with a number > the number of attachments
            bodyString = bodyString.Replace("NumMedia=1", "NumMedia=2");

            var byteArray = Encoding.ASCII.GetBytes(bodyString);
            var stream    = new MemoryStream(byteArray);

            var values = new Dictionary <string, string>();

            var pairs = bodyString.Replace("+", "%20").Split('&');

            foreach (var p in pairs)
            {
                var pair  = p.Split('=');
                var key   = pair[0];
                var value = Uri.UnescapeDataString(pair[1]);

                values.Add(key, value);
            }

            var sortedKeys = new List <string>(values.Keys);

            sortedKeys.Sort(StringComparer.Ordinal);

            foreach (var key in sortedKeys)
            {
                builder.Append(key).Append(values[key] ?? string.Empty);
            }

            var hashArray = hmac.ComputeHash(Encoding.UTF8.GetBytes(builder.ToString()));
            var hash      = Convert.ToBase64String(hashArray);

            var httpRequest = new Mock <HttpRequest>();

            httpRequest.SetupAllProperties();
            httpRequest.SetupGet(req => req.Headers[It.IsAny <string>()]).Returns(hash);

            httpRequest.Object.Body = stream;

            var activity = await TwilioHelper.RequestToActivity(httpRequest.Object, _validationUrlString, AuthTokenString);

            Assert.NotNull(activity.Attachments);
        }
        public async Task QueryStringToDictionary_Should_Return_Empty_Dictionary_With_Empty_Query()
        {
            var    hmac      = new HMACSHA1(Encoding.UTF8.GetBytes(AuthTokenString));
            var    builder   = new StringBuilder(_validationUrlString.ToString());
            var    hashArray = hmac.ComputeHash(Encoding.UTF8.GetBytes(builder.ToString()));
            string hash      = Convert.ToBase64String(hashArray);

            var httpRequest = new Mock <HttpRequest>();

            httpRequest.SetupAllProperties();
            httpRequest.SetupGet(req => req.Headers[It.IsAny <string>()]).Returns(hash);
            httpRequest.Object.Body = Stream.Null;

            var activity = await TwilioHelper.RequestToActivity(httpRequest.Object, _validationUrlString, AuthTokenString);

            Assert.Null(activity.Id);
            Assert.Null(activity.Conversation.Id);
            Assert.Null(activity.From.Id);
            Assert.Null(activity.Recipient.Id);
            Assert.Null(activity.Text);
        }
 public async void RequestToActivity_Should_Return_Null_With_Null_HttpRequest()
 {
     Assert.Null(await TwilioHelper.RequestToActivity(null, _validationUrlString, AuthTokenString));
 }