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; } }
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); } }
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); } }