/// <summary>
        /// The cookie value's bindings.
        /// </summary>
        public static string GetSalt(this HttpContext context, ICaptchaCryptoProvider captchaProtectionProvider)
        {
            var ip        = context.Connection.RemoteIpAddress;
            var userAgent = (string)context.Request.Headers[HeaderNames.UserAgent];
            var issueDate = DateTime.Now.ToString("yyyy_MM_dd", CultureInfo.InvariantCulture);
            var name      = typeof(ProvidersExtensions).Name;
            var salt      = $"::{issueDate}::{name}::{ip}::{userAgent}";

            return(captchaProtectionProvider.Hash(salt).HashString);
        }
        /// <summary>
        /// Serialize the given data to an string.
        /// </summary>
        public string Serialize(object data)
        {
            var resultBytes = JsonSerializer.SerializeToUtf8Bytes(data,
                                                                  new JsonSerializerOptions {
                WriteIndented = false, IgnoreNullValues = true
            });
            var token = _captchaProtectionProvider.Hash(Encoding.UTF8.GetString(resultBytes)).HashString;

            _distributedCache.Set(token, resultBytes, new DistributedCacheEntryOptions
            {
                AbsoluteExpiration = DateTimeOffset.UtcNow.AddMinutes(_options.AbsoluteExpirationMinutes)
            });
            return(token);
        }
예제 #3
0
        /// <summary>
        /// Serialize the given data to an string.
        /// </summary>
        public string Serialize(object data)
        {
            var result = JsonSerializer.Serialize(data,
                                                  new JsonSerializerOptions {
                WriteIndented = false, IgnoreNullValues = true
            });
            var token = _captchaProtectionProvider.Hash(result).HashString;

            _memoryCache.Set(token, result, new MemoryCacheEntryOptions
            {
                AbsoluteExpiration = DateTimeOffset.UtcNow.AddMinutes(_options.AbsoluteExpirationMinutes),
                Size = 1 // the size limit is the count of entries
            });
            return(token);
        }
예제 #4
0
        /// <summary>
        /// The cookie value's bindings.
        /// </summary>
        public static string GetSalt(this HttpContext context, ICaptchaCryptoProvider captchaProtectionProvider)
        {
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }

            if (captchaProtectionProvider == null)
            {
                throw new ArgumentNullException(nameof(captchaProtectionProvider));
            }

            var userAgent = (string)context.Request.Headers[HeaderNames.UserAgent];
            var issueDate = DateTime.Now.ToString("yyyy_MM_dd", CultureInfo.InvariantCulture);
            var name      = typeof(ProvidersExtensions).Name;
            var salt      = $"::{issueDate}::{name}::{userAgent}";

            return(captchaProtectionProvider.Hash(salt).HashString);
        }