コード例 #1
0
        private static ICacheableKeyRingProvider SetupCreateCacheableKeyRingTestAndCreateKeyManager(
            IList <string> callSequence,
            IEnumerable <CancellationToken> getCacheExpirationTokenReturnValues,
            IEnumerable <IReadOnlyCollection <IKey> > getAllKeysReturnValues,
            IEnumerable <Tuple <DateTimeOffset, DateTimeOffset, IKey> > createNewKeyCallbacks,
            IEnumerable <Tuple <DateTimeOffset, IEnumerable <IKey>, DefaultKeyResolution> > resolveDefaultKeyPolicyReturnValues,
            KeyRotationOptions keyManagementOptions = null)
        {
            var getCacheExpirationTokenReturnValuesEnumerator = getCacheExpirationTokenReturnValues.GetEnumerator();
            var mockKeyManager = new Mock <IKeyManager>(MockBehavior.Strict);

            mockKeyManager.Setup(o => o.GetCacheExpirationToken())
            .Returns(() =>
            {
                callSequence.Add("GetCacheExpirationToken");
                getCacheExpirationTokenReturnValuesEnumerator.MoveNext();
                return(getCacheExpirationTokenReturnValuesEnumerator.Current);
            });

            var getAllKeysReturnValuesEnumerator = getAllKeysReturnValues.GetEnumerator();

            mockKeyManager.Setup(o => o.GetAllKeys())
            .Returns(() =>
            {
                callSequence.Add("GetAllKeys");
                getAllKeysReturnValuesEnumerator.MoveNext();
                return(getAllKeysReturnValuesEnumerator.Current);
            });

            if (createNewKeyCallbacks != null)
            {
                var createNewKeyCallbacksEnumerator = createNewKeyCallbacks.GetEnumerator();
                mockKeyManager.Setup(o => o.CreateNewKey(It.IsAny <DateTimeOffset>(), It.IsAny <DateTimeOffset>()))
                .Returns <DateTimeOffset, DateTimeOffset>((activationDate, expirationDate) =>
                {
                    callSequence.Add("CreateNewKey");
                    createNewKeyCallbacksEnumerator.MoveNext();
                    Assert.Equal(createNewKeyCallbacksEnumerator.Current.Item1, activationDate);
                    Assert.Equal(createNewKeyCallbacksEnumerator.Current.Item2, expirationDate);
                    return(createNewKeyCallbacksEnumerator.Current.Item3);
                });
            }

            var resolveDefaultKeyPolicyReturnValuesEnumerator = resolveDefaultKeyPolicyReturnValues.GetEnumerator();
            var mockDefaultKeyResolver = new Mock <IDefaultKeyResolver>(MockBehavior.Strict);

            mockDefaultKeyResolver.Setup(o => o.ResolveDefaultKeyPolicy(It.IsAny <DateTimeOffset>(), It.IsAny <IEnumerable <IKey> >()))
            .Returns <DateTimeOffset, IEnumerable <IKey> >((now, allKeys) =>
            {
                callSequence.Add("ResolveDefaultKeyPolicy");
                resolveDefaultKeyPolicyReturnValuesEnumerator.MoveNext();
                Assert.Equal(resolveDefaultKeyPolicyReturnValuesEnumerator.Current.Item1, now);
                Assert.Equal(resolveDefaultKeyPolicyReturnValuesEnumerator.Current.Item2, allKeys);
                return(resolveDefaultKeyPolicyReturnValuesEnumerator.Current.Item3);
            });

            return(CreateKeyRingProvider(mockKeyManager.Object, mockDefaultKeyResolver.Object, keyManagementOptions));
        }
コード例 #2
0
        public void ConfigureService_should_configure_mongodb_services()
        {
            var documentStoreMock = new Mock <IDocumentStore>();
            var sessionMock       = new Mock <IAsyncDocumentSession>();
            var advancedMock      = new Mock <IAsyncAdvancedSessionOperations>();

            sessionMock.SetupGet(m => m.Advanced).Returns(advancedMock.Object);
            documentStoreMock.Setup(m => m.OpenAsyncSession(It.IsAny <SessionOptions>())).Returns(sessionMock.Object);
            using var sut = new HostBuilder()
                            .ConfigureAppConfiguration(builder =>
            {
                builder.AddJsonFile(Path.Combine(Environment.CurrentDirectory, @"..\..\..\..\..\src\Aguacongas.TheIdServer\appsettings.json"));
                builder.AddJsonFile(Path.Combine(Environment.CurrentDirectory, @"appsettings.Test.json"), true);
                builder.AddInMemoryCollection(new Dictionary <string, string>
                {
                    ["DbType"] = DbTypes.RavenDb.ToString(),
                    ["IdentityServer:Key:StorageKind"]    = StorageKind.MongoDb.ToString(),
                    ["DataProtectionOptions:StorageKind"] = StorageKind.MongoDb.ToString(),
                    ["Seed"] = "false"
                });
            })
                            .ConfigureServices((context, services) =>
            {
                var startup = new Startup(context.Configuration, null);
                services.AddSingleton(p => documentStoreMock.Object);
                startup.ConfigureServices(services);
                services.AddSingleton(p => documentStoreMock.Object);
            }).Build();

            var provider = sut.Services;

            Assert.NotNull(provider.GetService <IAdminStore <ApiClaim> >());
            var configureRotationOptions = provider.GetService <IConfigureOptions <KeyRotationOptions> >();
            var rotationOptions          = new KeyRotationOptions();

            configureRotationOptions.Configure(rotationOptions);
            Assert.IsType <MongoDb.MongoDbXmlRepository <MongoDb.KeyRotationKey> >(rotationOptions.XmlRepository);
            var configureManagementOptions = provider.GetService <IConfigureOptions <KeyManagementOptions> >();
            var managementOptions          = new KeyRotationOptions();

            configureManagementOptions.Configure(managementOptions);
            Assert.IsType <MongoDb.MongoDbXmlRepository <MongoDb.DataProtectionKey> >(managementOptions.XmlRepository);
        }
コード例 #3
0
        private static KeyRingProvider CreateKeyRingProvider(ICacheableKeyRingProvider cacheableKeyRingProvider)
        {
            var mockEncryptorFactory = new Mock <IAuthenticatedEncryptorFactory>();

            mockEncryptorFactory.Setup(m => m.CreateEncryptorInstance(It.IsAny <IKey>())).Returns(new Mock <IAuthenticatedEncryptor>().Object);
            var options = new KeyRotationOptions
            {
                KeyPropagationWindow = TimeSpan.FromDays(2)
            };

            options.AuthenticatedEncryptorFactories.Add(mockEncryptorFactory.Object);

            return(new KeyRingProvider(
                       keyManager: null,
                       keyManagementOptions: Options.Create(options),
                       defaultKeyResolver: null,
                       loggerFactory: NullLoggerFactory.Instance)
            {
                CacheableKeyRingProvider = cacheableKeyRingProvider
            });
        }
コード例 #4
0
        public void ConfigureService_should_configure_mongodb_services()
        {
            var sessionMock  = new Mock <IAsyncDocumentSession>();
            var advancedMock = new Mock <IAsyncAdvancedSessionOperations>();

            sessionMock.SetupGet(m => m.Advanced).Returns(advancedMock.Object);
            using var sut = new HostBuilder()
                            .ConfigureServices((context, services) =>
            {
                var configurationManager = new ConfigurationManager();
                configurationManager.AddJsonFile(Path.Combine(Environment.CurrentDirectory, @"appsettings.json"));
                configurationManager.AddJsonFile(Path.Combine(Environment.CurrentDirectory, @"appsettings.Test.json"), true);
                configurationManager.AddInMemoryCollection(new Dictionary <string, string>
                {
                    ["DbType"] = DbTypes.MongoDb.ToString(),
                    ["ConnectionStrings:DefaultConnection"] = "mongodb://localhost/test",
                    ["IdentityServer:Key:StorageKind"]      = StorageKind.MongoDb.ToString(),
                    ["DataProtectionOptions:StorageKind"]   = StorageKind.MongoDb.ToString(),
                    ["Seed"] = "false"
                });
                services.AddTheIdServer(configurationManager);
            }).Build();

            var provider = sut.Services;

            Assert.NotNull(provider.GetService <IAdminStore <ApiClaim> >());
            var configureRotationOptions = provider.GetService <IConfigureOptions <KeyRotationOptions> >();
            var rotationOptions          = new KeyRotationOptions();

            configureRotationOptions?.Configure(rotationOptions);
            Assert.IsType <MongoDb.MongoDbXmlRepository <MongoDb.KeyRotationKey> >(rotationOptions.XmlRepository);
            var configureManagementOptions = provider.GetService <IConfigureOptions <KeyManagementOptions> >();
            var managementOptions          = new KeyRotationOptions();

            configureManagementOptions?.Configure(managementOptions);
            Assert.IsType <MongoDb.MongoDbXmlRepository <MongoDb.DataProtectionKey> >(managementOptions.XmlRepository);
        }
コード例 #5
0
        private static ICacheableKeyRingProvider CreateKeyRingProvider(IKeyManager keyManager, IDefaultKeyResolver defaultKeyResolver, KeyRotationOptions keyManagementOptions = null)
        {
            var mockEncryptorFactory = new Mock <IAuthenticatedEncryptorFactory>();

            mockEncryptorFactory.Setup(m => m.CreateEncryptorInstance(It.IsAny <IKey>())).Returns(new Mock <IAuthenticatedEncryptor>().Object);
            keyManagementOptions = keyManagementOptions ?? new KeyRotationOptions();
            keyManagementOptions.AuthenticatedEncryptorFactories.Add(mockEncryptorFactory.Object);

            return(new KeyRingProvider(
                       keyManager: keyManager,
                       keyManagementOptions: Options.Create(keyManagementOptions),
                       defaultKeyResolver: defaultKeyResolver,
                       loggerFactory: NullLoggerFactory.Instance));
        }