Ejemplo n.º 1
0
        public override void SetValidationResult(IQueue queue, IValidateResult validationResult, DateTime?expirationTime = null)
        {
            AcceptedConfirmedResult acceptedResult = validationResult as AcceptedConfirmedResult;

            if (acceptedResult != null)
            {
                var key = GenerateKey(queue.CustomerId, queue.EventId);
                SessionStateModel model = new SessionStateModel()
                {
                    QueueId      = acceptedResult.KnownUser.QueueId,
                    OriginalUri  = acceptedResult.KnownUser.OriginalUrl,
                    PlaceInQueue = acceptedResult.KnownUser.PlaceInQueue,
                    TimeStamp    = acceptedResult.KnownUser.TimeStamp,
                    RedirectType = acceptedResult.KnownUser.RedirectType,
                };

                if (expirationTime != null)
                {
                    model.Expiration = expirationTime;
                }
                else if (acceptedResult.KnownUser.RedirectType == RedirectType.Idle)
                {
                    model.Expiration = DateTime.UtcNow.Add(IdleExpiration);
                }
                else if (!ExtendValidity)
                {
                    model.Expiration = DateTime.UtcNow.AddMinutes(HttpContext.Current.Session.Timeout);
                }

                HttpContext.Current.Session[key] = model;
            }
        }
Ejemplo n.º 2
0
        public override void SetValidationResult(IQueue queue, IValidateResult validationResult, DateTime?expirationTime = null)
        {
            AcceptedConfirmedResult acceptedResult = validationResult as AcceptedConfirmedResult;

            if (acceptedResult != null)
            {
                string       queueId      = acceptedResult.KnownUser.QueueId.ToString();
                string       originalUrl  = acceptedResult.KnownUser.OriginalUrl;
                int          placeInQueue = acceptedResult.KnownUser.PlaceInQueue.HasValue ? acceptedResult.KnownUser.PlaceInQueue.Value : 0;
                RedirectType redirectType = acceptedResult.KnownUser.RedirectType;
                string       timeStamp    = Hashing.GetTimestamp(acceptedResult.KnownUser.TimeStamp).ToString();

                if (!expirationTime.HasValue)
                {
                    expirationTime = DateTime.UtcNow.Add(redirectType == RedirectType.Idle ? IdleExpiration : CookieExpiration);
                }

                string hash = GenerateHash(queueId, originalUrl, placeInQueue.ToString(), redirectType, timeStamp, expirationTime.Value);

                SetCookie(queue, queueId, originalUrl, placeInQueue, redirectType, timeStamp, hash, expirationTime.Value);
            }
        }
Ejemplo n.º 3
0
        public override IValidateResult GetValidationResult(IQueue queue)
        {
            try
            {
                var key = GenerateKey(queue.CustomerId, queue.EventId);

                HttpCookie validationCookie = HttpContext.Current.Request.Cookies.Get(key);
                if (validationCookie == null)
                {
                    return(null);
                }

                string       queueId      = validationCookie.Values["QueueId"];
                string       originalUrl  = HttpUtility.UrlDecode(validationCookie.Values["OriginalUrl"]);
                int          placeInQueue = (int)Hashing.DecryptPlaceInQueue(validationCookie.Values["PlaceInQueue"]);
                RedirectType redirectType = (RedirectType)Enum.Parse(typeof(RedirectType), validationCookie.Values["RedirectType"]);
                string       timeStamp    = validationCookie.Values["TimeStamp"];
                string       actualHash   = validationCookie.Values["Hash"];
                string       expires      = validationCookie.Values["Expires"];

                DateTime expirationTime = DateTime.MinValue;
                if (DateTime.TryParse(expires, out expirationTime))
                {
                    expirationTime = expirationTime.ToUniversalTime();
                }

                if (expirationTime < DateTime.UtcNow)
                {
                    return(null);
                }

                string expectedHash = GenerateHash(
                    queueId, originalUrl, placeInQueue.ToString(), redirectType, timeStamp, expirationTime);

                if (actualHash != expectedHash)
                {
                    return(null);
                }

                AcceptedConfirmedResult result = new AcceptedConfirmedResult(
                    queue,
                    new Md5KnownUser(
                        new Guid(queueId),
                        placeInQueue,
                        Hashing.TimestampToDateTime(long.Parse(timeStamp)),
                        queue.CustomerId,
                        queue.EventId,
                        redirectType,
                        originalUrl),
                    false);

                if (ExtendValidity && result.KnownUser.RedirectType != RedirectType.Idle)
                {
                    DateTime newExpirationTime = DateTime.UtcNow.Add(CookieExpiration);
                    string   newHash           = GenerateHash(
                        queueId, originalUrl, placeInQueue.ToString(), redirectType, timeStamp, newExpirationTime);

                    SetCookie(
                        queue,
                        queueId,
                        originalUrl,
                        placeInQueue,
                        redirectType,
                        timeStamp,
                        newHash,
                        newExpirationTime);
                }

                return(result);
            }
            catch (ArgumentException)
            {
                return(null);
            }
        }
        public override IValidateResult GetValidationResult(IQueue queue)
        {
            try
            {
                var key = GenerateKey(queue.CustomerId, queue.EventId);

                HttpCookie validationCookie = HttpContext.Current.Request.Cookies.Get(key);
                if (validationCookie == null)
                    return null;

                string queueId = validationCookie.Values["QueueId"];
                string originalUrl = HttpUtility.UrlDecode(validationCookie.Values["OriginalUrl"]);
                int placeInQueue = (int)Hashing.DecryptPlaceInQueue(validationCookie.Values["PlaceInQueue"]);
                RedirectType redirectType = (RedirectType)Enum.Parse(typeof(RedirectType), validationCookie.Values["RedirectType"]);
                string timeStamp = validationCookie.Values["TimeStamp"];
                string actualHash = validationCookie.Values["Hash"];
                string expires = validationCookie.Values["Expires"];

                DateTime expirationTime = DateTime.MinValue;
                if (DateTime.TryParse(expires, out expirationTime))
                    expirationTime = expirationTime.ToUniversalTime();

                if (expirationTime < DateTime.UtcNow)
                    return null;

                string expectedHash = GenerateHash(
                    queueId, originalUrl, placeInQueue.ToString(), redirectType, timeStamp, expirationTime);

                if (actualHash != expectedHash)
                    return null;

                AcceptedConfirmedResult result = new AcceptedConfirmedResult(
                    queue,
                    new Md5KnownUser(
                        new Guid(queueId),
                        placeInQueue,
                        Hashing.TimestampToDateTime(long.Parse(timeStamp)),
                        queue.CustomerId,
                        queue.EventId,
                        redirectType,
                        originalUrl), 
                    false);

                if (ExtendValidity && result.KnownUser.RedirectType != RedirectType.Idle)
                {
                    DateTime newExpirationTime = DateTime.UtcNow.Add(CookieExpiration);
                    string newHash = GenerateHash(
                        queueId, originalUrl, placeInQueue.ToString(), redirectType, timeStamp, newExpirationTime);

                    SetCookie(
                        queue, 
                        queueId, 
                        originalUrl, 
                        placeInQueue, 
                        redirectType, 
                        timeStamp,
                        newHash,
                        newExpirationTime);
                }

                return result;
            }
            catch (ArgumentException)
            {
                return null;
            }
        }
 internal static void Cancel(AcceptedConfirmedResult result)
 {
     IValidateResultRepository repository = _validationResultProviderFactory.Invoke();
     repository.Cancel(result.Queue, result);
 }
 internal static void SetExpiration(AcceptedConfirmedResult result, DateTime expirationTime)
 {
     IValidateResultRepository repository = _validationResultProviderFactory.Invoke();
     repository.SetValidationResult(result.Queue, result, expirationTime);
 }
        private static IValidateResult ValidateRequest(
            IQueue queue, 
            bool sslEnabled, 
            bool includeTargetUrl, 
            string targetUrl,
            string domainAlias,
            CultureInfo language = null, 
            string layoutName = null)
        {
            IValidateResult sessionObject = _validationResultProviderFactory.Invoke().GetValidationResult(queue);
            if (sessionObject != null)
            {
                AcceptedConfirmedResult confirmedResult = sessionObject as AcceptedConfirmedResult;
                if (confirmedResult != null)
                    return new AcceptedConfirmedResult(queue, confirmedResult.KnownUser, false);

                return sessionObject;
            }
            try
            {
                IKnownUser knownUser = KnownUserFactory.VerifyMd5Hash();

                if (knownUser == null)
                {
                    string landingPageUrl = queue.GetLandingPageUrl(includeTargetUrl);

                    if (landingPageUrl != null)
                        return new EnqueueResult(queue, landingPageUrl);

                    if (targetUrl != null)
                        return new EnqueueResult(queue, queue.GetQueueUrl(targetUrl, sslEnabled, domainAlias, language, layoutName));

                    return new EnqueueResult(queue, queue.GetQueueUrl(includeTargetUrl, sslEnabled, domainAlias, language, layoutName));
                }
                if (_defaultTicketExpiration != default(TimeSpan) && knownUser.TimeStamp <= DateTime.UtcNow.Subtract(_defaultTicketExpiration))
                {
                    throw new ExpiredValidationException(queue, knownUser);
                }

                AcceptedConfirmedResult result = new AcceptedConfirmedResult(queue, knownUser, true);
                _validationResultProviderFactory.Invoke().SetValidationResult(queue, result);

                return result;
            }
            catch (InvalidKnownUserUrlException ex)
            {
                throw new KnownUserValidationException(ex, queue);
            }
            catch (InvalidKnownUserHashException ex)
            {
                throw new KnownUserValidationException(ex, queue);
            }
        }