Beispiel #1
0
        public void ValidateRequest_NoCookie_TampredToken_RedirectToErrorPageWithHashError_DoNotStoreCookie()
        {
            Exception expectedException  = new Exception();
            var       cookieProviderMock = MockRepository.GenerateMock <IUserInQueueStateRepository>();

            var config = new EventConfig()
            {
                EventId              = "e1",
                QueueDomain          = "testDomain.com",
                CookieValidityMinute = 10,
                ExtendCookieValidity = false,
                Version              = 100
            };
            var customerKey = "4e1db821-a825-49da-acd0-5d376f2068db";
            var queueId     = "iopdb821-a825-49da-acd0-5d376f2068db";

            cookieProviderMock.Stub(stub => stub.GetState("", "")).IgnoreArguments().Return(new StateInfo(false, "", false));
            string hash = "";

            var queueitToken = QueueITTokenGenerator.GenerateToken(
                DateTime.UtcNow.AddHours(1),
                "e1",
                queueId,
                false,
                20,

                customerKey,
                out hash

                );

            queueitToken = queueitToken.Replace("False", "True");
            var currentUrl       = "http://test.test.com?b=h";
            var knownUserVersion = typeof(UserInQueueService).Assembly.GetName().Version.ToString();//queryStringList.Add($"ver=c{}");
            var expectedErrorUrl = $"https://testDomain.com/error/hash?c=testCustomer&e=e1" +
                                   $"&ver=v3-{knownUserVersion}"
                                   + $"&cver=100"
                                   + $"&queueittoken={queueitToken}"
                                   + $"&t={HttpUtility.UrlEncode(currentUrl)}";


            UserInQueueService testObject = new UserInQueueService(cookieProviderMock);
            var result = testObject.ValidateRequest(currentUrl, queueitToken, config, "testCustomer", customerKey);

            Assert.True(result.DoRedirect);

            var regex           = new Regex("&ts=[^&]*");
            var match           = regex.Match(result.RedirectUrl);
            var serverTimestamp = DateTimeHelper.GetUnixTimeStampAsDate(match.Value.Replace("&ts=", "").Replace("&", ""));

            Assert.True(DateTime.UtcNow.Subtract(serverTimestamp) < TimeSpan.FromSeconds(10));
            var redirectUrl = regex.Replace(result.RedirectUrl, "");

            Assert.True(redirectUrl.ToUpper() == expectedErrorUrl.ToUpper());
            Assert.True(config.EventId == result.EventId);
            cookieProviderMock.AssertWasNotCalled(stub => stub.Store("", "", true, "", 0, ""),
                                                  options => options.IgnoreArguments());
        }
        public void ValidateRequest_NoCookie_EventIdMismatch_RedirectToErrorPageWithEventIdMissMatchError_DoNotStoreCookie()
        {
            var cookieProviderMock = Substitute.For <IUserInQueueStateRepository>();
            var config             = new QueueEventConfig()
            {
                EventId              = "e2",
                QueueDomain          = "testDomain.com",
                CookieValidityMinute = 10,
                ExtendCookieValidity = false,
                Version              = 10,
                ActionName           = "QueueAction"
            };
            var customerKey = "4e1db821-a825-49da-acd0-5d376f2068db";
            var queueId     = "iopdb821-a825-49da-acd0-5d376f2068db";

            cookieProviderMock.GetState("", 10, "").ReturnsForAnyArgs(new StateInfo(false, false, "", null, ""));
            string hash = "";

            var queueitToken = QueueITTokenGenerator.GenerateToken(
                DateTime.UtcNow.AddHours(1),
                "e1",
                queueId,
                true,
                null,
                customerKey,
                out hash, "queue"
                );

            var targetUrl        = "http://test.test.com?b=h";
            var knownUserVersion = UserInQueueService.SDK_VERSION;
            var expectedMan      = Uri.EscapeDataString(config.ActionName);
            var expectedErrorUrl = $"https://testDomain.com/error/eventid/?c=testCustomer&e=e2" +
                                   $"&ver={knownUserVersion}" + "&cver=10"
                                   + $"&man=QueueAction"
                                   + $"&queueittoken={queueitToken}"
                                   + $"&t={Uri.EscapeDataString(targetUrl)}";

            UserInQueueService testObject = new UserInQueueService(cookieProviderMock);

            var result = testObject.ValidateQueueRequest(targetUrl, queueitToken, config, "testCustomer", customerKey);

            Assert.True(result.DoRedirect);
            var regex           = new Regex("&ts=[^&]*");
            var match           = regex.Match(result.RedirectUrl);
            var serverTimestamp = DateTimeHelper.GetDateTimeFromUnixTimeStamp(match.Value.Replace("&ts=", "").Replace("&", ""));

            Assert.True(DateTime.UtcNow.Subtract(serverTimestamp) < TimeSpan.FromSeconds(10));

            var redirectUrl = regex.Replace(result.RedirectUrl, "");

            Assert.True(redirectUrl.ToUpper() == expectedErrorUrl.ToUpper());
            Assert.True(config.EventId == result.EventId);
            Assert.Equal(config.ActionName, result.ActionName);
            cookieProviderMock.DidNotReceiveWithAnyArgs().Store("", "", null, "", null, "");
            cookieProviderMock.DidNotReceiveWithAnyArgs().CancelQueueCookie(config.EventId, config.CookieDomain);
        }
Beispiel #3
0
        public void ValidateRequest_NoCookie_EventIdMismatch_RedirectToErrorPageWithEventIdMissMatchError_DoNotStoreCookie()
        {
            var cookieProviderMock = MockRepository.GenerateMock <IUserInQueueStateRepository>();
            var config             = new QueueEventConfig()
            {
                EventId              = "e2",
                QueueDomain          = "testDomain.com",
                CookieValidityMinute = 10,
                ExtendCookieValidity = false,
                Version              = 10
            };
            var customerKey = "4e1db821-a825-49da-acd0-5d376f2068db";
            var queueId     = "iopdb821-a825-49da-acd0-5d376f2068db";

            cookieProviderMock.Stub(stub => stub.GetState("", 10, "")).IgnoreArguments().Return(new StateInfo(false, "", null, ""));
            string hash = "";

            var queueitToken = QueueITTokenGenerator.GenerateToken(
                DateTime.UtcNow.AddHours(1),
                "e1",
                queueId,
                true,
                null,
                customerKey,
                out hash, "queue"
                );

            var targetUrl        = "http://test.test.com?b=h";
            var knownUserVersion = UserInQueueService.SDK_VERSION;
            var expectedErrorUrl = $"https://testDomain.com/error/eventid/?c=testCustomer&e=e2" +
                                   $"&ver=v3-aspnet-{knownUserVersion}" + "&cver=10"
                                   + $"&queueittoken={queueitToken}"
                                   + $"&t={HttpUtility.UrlEncode(targetUrl)}";

            UserInQueueService testObject = new UserInQueueService(cookieProviderMock);

            var result = testObject.ValidateQueueRequest(targetUrl, queueitToken, config, "testCustomer", customerKey);

            Assert.True(result.DoRedirect);
            var regex           = new Regex("&ts=[^&]*");
            var match           = regex.Match(result.RedirectUrl);
            var serverTimestamp = DateTimeHelper.GetDateTimeFromUnixTimeStamp(match.Value.Replace("&ts=", "").Replace("&", ""));

            Assert.True(DateTime.UtcNow.Subtract(serverTimestamp) < TimeSpan.FromSeconds(10));

            var redirectUrl = regex.Replace(result.RedirectUrl, "");

            Assert.True(redirectUrl.ToUpper() == expectedErrorUrl.ToUpper());
            Assert.True(config.EventId == result.EventId);
            cookieProviderMock.AssertWasNotCalled(stub => stub.Store("", "", null, "", null, ""),
                                                  options => options.IgnoreArguments());
        }
        public void GetState_ValidCookieFormat_NonExtendable()
        {
            var eventId   = "event1";
            var secretKey = "4e1db821-a825-49da-acd0-5d376f2068db";

            var queueId   = "f8757c2d-34c2-4639-bef2-1736cdd30bbb";
            var cookieKey = UserInQueueStateCookieRepository.GetCookieKey(eventId);

            var fakeContext = MockRepository.GenerateMock <HttpContextBase>();

            var issueTime = DateTimeHelper.GetUnixTimeStampFromDate(DateTime.UtcNow);
            var hash      = QueueITTokenGenerator.GetSHA256Hash(eventId.ToLower() + queueId + "3" + "idle" + issueTime.ToString(),
                                                                secretKey);
            var cookieValue = HttpUtility.UrlEncode($"EventId={eventId}&QueueId={queueId}&{_FixedCookieValidityMinutesKey}=3&RedirectType=idle&IssueTime={issueTime}&Hash={hash}");

            var fakeRequest = MockRepository.GenerateMock <HttpRequestBase>();

            fakeContext.Stub(stub => stub.Request).Return(fakeRequest);
            var cookies = new HttpCookieCollection()
            {
                new HttpCookie("key1")
                {
                    Value = "test"
                },
                new HttpCookie("a")
                {
                    Value = "test"
                },
                new HttpCookie("b")
                {
                    Value = "test"
                },
                new HttpCookie(cookieKey)
                {
                    Value = cookieValue
                }
            };

            fakeRequest.Stub(stub => stub.Cookies).Return(cookies);

            var testObject = new UserInQueueStateCookieRepository(fakeContext);

            var state = testObject.GetState(eventId, 10, secretKey);

            Assert.False(state.IsStateExtendable);
            Assert.True(state.IsValid);
            Assert.True(state.QueueId == queueId);
            Assert.True(state.RedirectType == "idle");
        }
        public void ValidateRequest_NoCookie_ValidToken_ExtendableCookie_DoNotRedirect_StoreExtendableCookie()
        {
            var cookieProviderMock = Substitute.For <IUserInQueueStateRepository>();

            var config = new QueueEventConfig()
            {
                EventId              = "e1",
                QueueDomain          = "testDomain.com",
                CookieValidityMinute = 10,
                ExtendCookieValidity = false,
                ActionName           = "QueueAction"
            };
            var customerKey = "4e1db821-a825-49da-acd0-5d376f2068db";

            var queueId = "iopdb821-a825-49da-acd0-5d376f2068db";

            cookieProviderMock.GetState("", 10, "").ReturnsForAnyArgs(new StateInfo(false, false, "", null, ""));
            string hash = "";

            var queueitToken = QueueITTokenGenerator.GenerateToken(
                DateTime.UtcNow.AddHours(1),
                "e1",
                queueId,
                true,
                null,
                customerKey,
                out hash,
                "queue");

            var targetUrl = "http://test.test.com?b=h";
            UserInQueueService testObject = new UserInQueueService(cookieProviderMock);

            var result = testObject.ValidateQueueRequest(targetUrl, queueitToken, config, "testCustomer", customerKey);

            Assert.True(!result.DoRedirect);

            cookieProviderMock.Received().Store(
                "e1",
                queueId,
                null,
                config.CookieDomain,
                "queue",
                customerKey);
            Assert.True(result.QueueId == queueId);
            Assert.True(result.RedirectType == "queue");
            Assert.True(config.EventId == result.EventId);
            cookieProviderMock.DidNotReceiveWithAnyArgs().CancelQueueCookie(config.EventId, config.CookieDomain);
        }
Beispiel #6
0
        public void ValidateRequest_NoCookie_ValidToken_ExtendableCookie_DoNotRedirect_StoreExtendableCookie()
        {
            var cookieProviderMock = MockRepository.GenerateMock <IUserInQueueStateRepository>();

            var config = new QueueEventConfig()
            {
                EventId              = "e1",
                QueueDomain          = "testDomain.com",
                CookieValidityMinute = 10,
                ExtendCookieValidity = false
            };
            var customerKey = "4e1db821-a825-49da-acd0-5d376f2068db";

            var queueId = "iopdb821-a825-49da-acd0-5d376f2068db";

            cookieProviderMock.Stub(stub => stub.GetState("", 10, "")).IgnoreArguments().Return(new StateInfo(false, "", null, ""));
            string hash = "";

            var queueitToken = QueueITTokenGenerator.GenerateToken(
                DateTime.UtcNow.AddHours(1),
                "e1",
                queueId,
                true,
                null,
                customerKey,
                out hash,
                "queue");

            var targetUrl = "http://test.test.com?b=h";
            UserInQueueService testObject = new UserInQueueService(cookieProviderMock);

            var result = testObject.ValidateQueueRequest(targetUrl, queueitToken, config, "testCustomer", customerKey);

            Assert.True(!result.DoRedirect);

            cookieProviderMock.AssertWasCalled(stub => stub.Store(
                                                   Arg <string> .Is.Equal("e1"),
                                                   Arg <string> .Is.Equal(queueId),
                                                   Arg <int?> .Is.Equal(null),
                                                   Arg <string> .Is.Equal(config.CookieDomain),
                                                   Arg <string> .Is.Equal("queue"),
                                                   Arg <string> .Is.Equal(customerKey),
                                                   Arg <bool?> .Is.Equal(null)));
            Assert.True(result.QueueId == queueId);
            Assert.True(result.RedirectType == "queue");
            Assert.True(config.EventId == result.EventId);
        }
Beispiel #7
0
        public void ExtendQueueCookie_CookieExist_Test()
        {
            var eventId   = "event1";
            var secretKey = "4e1db821-a825-49da-acd0-5d376f2068db";

            var queueId   = "f8757c2d-34c2-4639-bef2-1736cdd30bbb";
            var cookieKey = UserInQueueStateCookieRepository.GetCookieKey(eventId);
            var issueTime = DateTimeHelper.GetUnixTimeStampFromDate(DateTime.UtcNow.AddMinutes(-1));
            var hash      = QueueITTokenGenerator.GetSHA256Hash(eventId.ToLower() + queueId + "3" + "idle" + issueTime.ToString(),
                                                                secretKey);
            var cookieValue = $"EventId={eventId}&QueueId={queueId}&{_FixedCookieValidityMinutesKey}=3&RedirectType=idle&IssueTime={issueTime}&Hash={hash}";

            KnownUserTest.HttpContextMock fakeContext = new KnownUserTest.HttpContextMock();
            var fakeRequest = new KnownUserTest.MockHttpRequest()
            {
                CookiesValue = new NameValueCollection()
                {
                    { cookieKey, cookieValue }
                }
            };

            fakeContext.HttpRequest = fakeRequest;
            var fakeResponse = new KnownUserTest.MockHttpResponse()
            {
            };

            fakeContext.HttpResponse = fakeResponse;

            var testObject = new UserInQueueStateCookieRepository(fakeContext);

            testObject.ReissueQueueCookie(eventId, 12, "testdomain", secretKey);

            var newIssueTime = DateTimeHelper.GetDateTimeFromUnixTimeStamp(CookieHelper.ToNameValueCollectionFromValue(fakeResponse.CookiesValue[cookieKey]["cookieValue"].ToString())["IssueTime"]);

            Assert.True(newIssueTime.Subtract(DateTime.UtcNow) < TimeSpan.FromSeconds(2));
            Assert.True(fakeResponse.CookiesValue[cookieKey]["domain"].ToString() == "testdomain");

            var state = testObject.GetState(eventId, 5, secretKey);

            Assert.True(state.IsValid);
            Assert.True(!state.IsStateExtendable);
            Assert.True(state.QueueId == queueId);
            Assert.True(state.RedirectType == "idle");
        }
Beispiel #8
0
        public void GetState_ValidCookieFormat_Extendable()
        {
            var eventId   = "event1";
            var secretKey = "4e1db821-a825-49da-acd0-5d376f2068db";

            var queueId   = "f8757c2d-34c2-4639-bef2-1736cdd30bbb";
            var cookieKey = UserInQueueStateCookieRepository.GetCookieKey(eventId);



            var issueTime = DateTimeHelper.GetUnixTimeStampFromDate(DateTime.UtcNow);
            var hash      = QueueITTokenGenerator.GetSHA256Hash(eventId.ToLower() + queueId + "queue" + issueTime.ToString(),
                                                                secretKey);
            var cookieValue = $"EventId={eventId}&QueueId={queueId}&RedirectType=queue&IssueTime={issueTime}&Hash={hash}";

            KnownUserTest.HttpContextMock fakeContext = new KnownUserTest.HttpContextMock();
            var fakeRequest = new KnownUserTest.MockHttpRequest()
            {
                CookiesValue = new NameValueCollection()
                {
                    { cookieKey, cookieValue }
                }
            };

            fakeContext.HttpRequest = fakeRequest;
            var fakeResponse = new KnownUserTest.MockHttpResponse()
            {
            };

            fakeContext.HttpResponse = fakeResponse;


            var testObject = new UserInQueueStateCookieRepository(fakeContext);

            var state = testObject.GetState(eventId, 10, secretKey);

            Assert.True(state.IsStateExtendable);
            Assert.True(state.IsValid);
            Assert.True(state.IsFound);
            Assert.True(state.QueueId == queueId);
            Assert.True(state.RedirectType == "queue");
        }
Beispiel #9
0
        public void GetState_OldCookie_InValid_ExpiredCookie_NonExtendable()
        {
            var eventId   = "event1";
            var secretKey = "4e1db821-a825-49da-acd0-5d376f2068db";

            var queueId   = "f8757c2d-34c2-4639-bef2-1736cdd30bbb";
            var cookieKey = UserInQueueStateCookieRepository.GetCookieKey(eventId);

            var issueTime = DateTimeHelper.GetUnixTimeStampFromDate(DateTime.UtcNow.AddMinutes(-4));
            var hash      = QueueITTokenGenerator.GetSHA256Hash(eventId.ToLower() + queueId + "3" + "idle" + issueTime.ToString(),
                                                                secretKey);
            var cookieValue = Uri.EscapeDataString($"EventId={eventId}&QueueId={queueId}&{_FixedCookieValidityMinutesKey}=3&RedirectType=idle&IssueTime={issueTime}&Hash={hash}");

            KnownUserTest.HttpContextMock fakeContext = new KnownUserTest.HttpContextMock();
            var fakeRequest = new KnownUserTest.MockHttpRequest()
            {
                CookiesValue = new NameValueCollection()
                {
                    { cookieKey, cookieValue }
                }
            };

            fakeContext.HttpRequest = fakeRequest;
            var fakeResponse = new KnownUserTest.MockHttpResponse()
            {
            };

            fakeContext.HttpResponse = fakeResponse;

            var testObject = new UserInQueueStateCookieRepository(fakeContext);

            var state = testObject.GetState(eventId, 10, secretKey);

            Assert.True(!state.IsValid);
            Assert.True(state.IsFound);
        }
        public void ExtendQueueCookie_CookieExist_Test()
        {
            var eventId   = "event1";
            var secretKey = "4e1db821-a825-49da-acd0-5d376f2068db";

            var queueId   = "f8757c2d-34c2-4639-bef2-1736cdd30bbb";
            var cookieKey = UserInQueueStateCookieRepository.GetCookieKey(eventId);

            var fakeContext = MockRepository.GenerateMock <HttpContextBase>();

            var issueTime = DateTimeHelper.GetUnixTimeStampFromDate(DateTime.UtcNow.AddMinutes(-1));
            var hash      = QueueITTokenGenerator.GetSHA256Hash(eventId.ToLower() + queueId + "3" + "idle" + issueTime.ToString(),
                                                                secretKey);
            var cookieValue = $"EventId={eventId}&QueueId={queueId}&{_FixedCookieValidityMinutesKey}=3&RedirectType=idle&IssueTime={issueTime}&Hash={hash}";

            var fakeRequest = MockRepository.GenerateMock <HttpRequestBase>();

            fakeContext.Stub(stub => stub.Request).Return(fakeRequest);
            var cookies = new HttpCookieCollection()
            {
                new HttpCookie("key1")
                {
                    Value = "test"
                },
                new HttpCookie("a")
                {
                    Value = "test"
                },
                new HttpCookie("b")
                {
                    Value = "test"
                },
                new HttpCookie(cookieKey)
                {
                    Value = cookieValue, Domain = "testdomain"
                }
            };

            fakeRequest.Stub(stub => stub.Cookies).Return(cookies);

            var fakeResponse = MockRepository.GenerateMock <HttpResponseBase>();

            fakeContext.Stub(stub => stub.Response).Return(fakeResponse);
            fakeResponse.Stub(stub => stub.Cookies).Return(cookies);

            var testObject = new UserInQueueStateCookieRepository(fakeContext);

            testObject.ReissueQueueCookie(eventId, 12, secretKey);

            var newIssueTime = DateTimeHelper.GetDateTimeFromUnixTimeStamp(CookieHelper.ToNameValueCollectionFromValue(cookies[cookieKey].Value)["IssueTime"]);

            Assert.True(newIssueTime.Subtract(DateTime.UtcNow) < TimeSpan.FromSeconds(2));
            Assert.True(cookies[cookieKey].Domain == "testdomain");

            var state = testObject.GetState(eventId, 5, secretKey);

            Assert.True(state.IsValid);
            Assert.True(!state.IsStateExtendable);
            Assert.True(state.QueueId == queueId);
            Assert.True(state.RedirectType == "idle");
        }