/// <summary>
        /// Add Redis Operational Store.
        /// </summary>
        /// <param name="builder"></param>
        /// <param name="optionsBuilder">Redis Operational Store Options builder</param>
        /// <returns></returns>
        public static IIdentityServerBuilder AddOperationalStore(this IIdentityServerBuilder builder, Action <RedisOperationalStoreOptions> optionsBuilder)
        {
            var options = new RedisOperationalStoreOptions();

            optionsBuilder?.Invoke(options);
            builder.Services.AddSingleton(options);

            builder.Services.AddScoped <RedisMultiplexer <RedisOperationalStoreOptions> >();
            builder.Services.AddTransient <IPersistedGrantStore, PersistedGrantStore>();
            return(builder);
        }
Example #2
0
 public PersistedGrantStore(RedisMultiplexer <RedisOperationalStoreOptions> multiplexer, ILogger <PersistedGrantStore> logger, ISystemClock clock)
 {
     if (multiplexer is null)
     {
         throw new ArgumentNullException(nameof(multiplexer));
     }
     this.options  = multiplexer.RedisOptions;
     this.database = multiplexer.Database;
     this.logger   = logger ?? throw new ArgumentNullException(nameof(logger));
     this.clock    = clock;
 }
        public PersistedGrantStoreTests()
        {
            _logger = new Mock <ILogger <PersistedGrantStore> >();
            _clock  = new Mock <ISystemClock>();
            string connectionString = ConfigurationUtils.GetConfiguration()["Redis:ConnectionString"];
            var    options          = new RedisOperationalStoreOptions {
                RedisConnectionString = connectionString
            };

            _multiplexer = new RedisMultiplexer <RedisOperationalStoreOptions>(options);

            _store = new PersistedGrantStore(_multiplexer, _logger.Object, _clock.Object);
        }
        public void Multiplexer_Provided_Uses_Provided_Multiplexer()
        {
            var cacheOptions = new RedisCacheOptions()
            {
                RedisConnectionMultiplexer = new FakeConnectionMultiplexer()
            };

            Assert.IsType <FakeConnectionMultiplexer>(cacheOptions.RedisConnectionMultiplexer);

            var storeOptions = new RedisOperationalStoreOptions()
            {
                RedisConnectionMultiplexer = new FakeConnectionMultiplexer()
            };

            Assert.IsType <FakeConnectionMultiplexer>(storeOptions.RedisConnectionMultiplexer);
        }
        public void ConnectionString_Provided_Makes_Connection()
        {
            var cacheOptions = new RedisCacheOptions()
            {
                RedisConnectionString = ConfigurationUtils.GetConfiguration()["Redis:ConnectionString"]
            };

            Assert.IsType <StackExchange.Redis.ConnectionMultiplexer>(cacheOptions.RedisConnectionMultiplexer);

            var storeOptions = new RedisOperationalStoreOptions()
            {
                RedisConnectionString = ConfigurationUtils.GetConfiguration()["Redis:ConnectionString"]
            };

            Assert.IsType <StackExchange.Redis.ConnectionMultiplexer>(storeOptions.RedisConnectionMultiplexer);
        }
        public void Multiplexer_And_ConnectionString_Provided_Uses_Provided_Multiplexer()
        {
            var cacheOptions = new RedisCacheOptions()
            {
                RedisConnectionString      = "fake", // if connection is made, this will throw
                RedisConnectionMultiplexer = new FakeConnectionMultiplexer()
            };

            Assert.IsType <FakeConnectionMultiplexer>(cacheOptions.RedisConnectionMultiplexer);

            var storeOptions = new RedisOperationalStoreOptions()
            {
                RedisConnectionString      = "fake", // if connection is made, this will throw
                RedisConnectionMultiplexer = new FakeConnectionMultiplexer()
            };

            Assert.IsType <FakeConnectionMultiplexer>(storeOptions.RedisConnectionMultiplexer);
        }
        public static IIdentityServerBuilder UseRedisGrantStore(this IIdentityServerBuilder builder, RedisOperationalStoreOptions storeOptionAction)
        {
            //var storeOption = new RedisStoreOptions();
            //storeOptionAction?.Invoke(storeOption);
            builder.Services.AddSingleton(storeOptionAction);

            builder.Services.AddTransient <IGrantStoreProvider, RedisGrantStoreProvider>();
            //builder.Services.AddTransient<IPersistedGrantStore, GrantStore>();

            return(builder);
        }