コード例 #1
0
ファイル: AdminFinder.cs プロジェクト: samueldjack/ravendb
		public static bool IsAdministrator(this IPrincipal principal, AnonymousUserAccessMode mode)
		{
			if (principal == null || principal.Identity == null | principal.Identity.IsAuthenticated == false)
			{
				if (mode == AnonymousUserAccessMode.Admin)
					return true;
				return false;
			}

			var databaseAccessPrincipal = principal as PrincipalWithDatabaseAccess;
			var windowsPrincipal = databaseAccessPrincipal == null ? principal as WindowsPrincipal : databaseAccessPrincipal.Principal;

			if (windowsPrincipal != null)
			{
				var current = WindowsIdentity.GetCurrent();
				var windowsIdentity = ((WindowsIdentity)windowsPrincipal.Identity);

				// if the request was made using the same user as RavenDB is running as, 
				// we consider this to be an administrator request
				if (current != null && current.User == windowsIdentity.User)
					return true;

				if (windowsPrincipal.IsInRole(WindowsBuiltInRole.Administrator))
					return true;

				if (windowsIdentity.User == null)
					return false; // we aren't sure who this use is, probably anonymous?
				// we still need to make this check, to by pass UAC non elevated admin issue
				return cachingAdminFinder.IsAdministrator(windowsIdentity);
			}

			return principal.IsInRole("Administrators");
		}
コード例 #2
0
ファイル: ReplicationBase.cs プロジェクト: pali88/ravendb
        public EmbeddableDocumentStore CreateEmbeddableStore(bool enableCompressionBundle = false,
                                                             AnonymousUserAccessMode anonymousUserAccessMode = AnonymousUserAccessMode.Admin, string requestedStorageType = "esent", [CallerMemberName] string databaseName = null)
        {
            var port = PortRangeStart - stores.Count;

            return(CreateEmbeddableStoreAtPort(port, enableCompressionBundle, anonymousUserAccessMode, requestedStorageType, databaseName));
        }
コード例 #3
0
        public static bool IsInRole(this IPrincipal principal, AnonymousUserAccessMode mode, WindowsBuiltInRole role)
        {
            if (principal == null || principal.Identity == null || principal.Identity.IsAuthenticated == false)
            {
                if (mode == AnonymousUserAccessMode.Admin)
                {
                    return(true);
                }
                return(false);
            }

            var databaseAccessPrincipal = principal as PrincipalWithDatabaseAccess;
            var windowsPrincipal        = databaseAccessPrincipal == null ? principal as WindowsPrincipal : databaseAccessPrincipal.Principal;

            if (windowsPrincipal != null)
            {
                var current         = WindowsIdentity.GetCurrent();
                var windowsIdentity = ((WindowsIdentity)windowsPrincipal.Identity);

                // if the request was made using the same user as RavenDB is running as,
                // we consider this to be an administrator request
                if (current != null && current.User == windowsIdentity.User)
                {
                    return(true);
                }

                if (windowsPrincipal.IsInRole(role))
                {
                    return(true);
                }

                if (windowsIdentity.User == null)
                {
                    return(false); // we aren't sure who this user is, probably anonymous?
                }
                // we still need to make this check, to by pass UAC non elevated admin issue
                return(cachingRoleFinder.IsInRole(windowsIdentity, role));
            }

            var oauthPrincipal = principal as OAuthPrincipal;

            if (oauthPrincipal != null)
            {
                if (role != WindowsBuiltInRole.Administrator)
                {
                    return(false);
                }

                return(oauthPrincipal.IsGlobalAdmin());
            }

            var oneTimeTokenPrincipal = principal as OneTimeTokenPrincipal;

            return(oneTimeTokenPrincipal != null && oneTimeTokenPrincipal.IsAdministratorInAnonymouseMode);
        }
コード例 #4
0
ファイル: ReplicationBase.cs プロジェクト: pali88/ravendb
        public DocumentStore CreateStore(bool enableCompressionBundle                    = false,
                                         Action <DocumentStore> configureStore           = null,
                                         AnonymousUserAccessMode anonymousUserAccessMode = AnonymousUserAccessMode.Admin,
                                         bool enableAuthorization               = false,
                                         string requestedStorageType            = "voron",
                                         bool useFiddler                        = false,
                                         [CallerMemberName] string databaseName = null,
                                         bool runInMemory                       = true)
        {
            var port = PortRangeStart - stores.Count;

            return(CreateStoreAtPort(port, enableCompressionBundle, configureStore, anonymousUserAccessMode, enableAuthorization, requestedStorageType, useFiddler, databaseName, runInMemory));
        }
コード例 #5
0
ファイル: Program.cs プロジェクト: plasmaboyer/ravendb
        private static void RunInDebugMode(AnonymousUserAccessMode? anonymousUserAccessMode, RavenConfiguration ravenConfiguration)
        {
			var consoleAppender = new ConsoleAppender
			{
				Layout = new PatternLayout(PatternLayout.DefaultConversionPattern),
			};
			consoleAppender.AddFilter(new LoggerMatchFilter
			{
				AcceptOnMatch = true,
				LoggerToMatch = typeof(HttpServer).FullName
			});
			consoleAppender.AddFilter(new DenyAllFilter());
			BasicConfigurator.Configure(consoleAppender);
            NonAdminHttp.EnsureCanListenToWhenInNonAdminContext(ravenConfiguration.Port);
            if (anonymousUserAccessMode.HasValue)
                ravenConfiguration.AnonymousUserAccessMode = anonymousUserAccessMode.Value;
            while (RunServer(ravenConfiguration))
            {
                
            }
        }
コード例 #6
0
        private IDocumentStore CreateStoreAtPort(int port, bool enableCompressionBundle = false, bool removeDataDirectory = true, Action <DocumentStore> configureStore = null, AnonymousUserAccessMode anonymousUserAccessMode = AnonymousUserAccessMode.All)
        {
            Raven.Database.Server.NonAdminHttp.EnsureCanListenToWhenInNonAdminContext(port);
            var serverConfiguration = new Raven.Database.Config.RavenConfiguration
            {
                Settings = { { "Raven/ActiveBundles", "replication" + (enableCompressionBundle ? ";compression" : string.Empty) } },
                AnonymousUserAccessMode = anonymousUserAccessMode,
                DataDirectory           = "Data #" + servers.Count,
                RunInUnreliableYetFastModeThatIsNotSuitableForProduction = true,
                RunInMemory            = true,
                Port                   = port,
                DefaultStorageTypeName = RavenTest.GetDefaultStorageType()
            };

            ConfigureServer(serverConfiguration);
            if (removeDataDirectory)
            {
                IOExtensions.DeleteDirectory(serverConfiguration.DataDirectory);
            }

            serverConfiguration.PostInit();
            var ravenDbServer = new RavenDbServer(serverConfiguration);

            servers.Add(ravenDbServer);

            var documentStore = new DocumentStore {
                Url = ravenDbServer.Database.Configuration.ServerUrl
            };

            ConfigureStore(documentStore);
            if (configureStore != null)
            {
                configureStore(documentStore);
            }
            documentStore.Initialize();

            stores.Add(documentStore);

            ConfigureDatbase(ravenDbServer.Database);
            return(documentStore);
        }
コード例 #7
0
        public IDocumentStore CreateStore(bool enableCompressionBundle = false, bool removeDataDirectory = true, Action <DocumentStore> configureStore = null, AnonymousUserAccessMode anonymousUserAccessMode = AnonymousUserAccessMode.Admin, bool enableAuthorization = false, string requestedStorage = null)
        {
            var port = PortRangeStart - stores.Count;

            return(CreateStoreAtPort(port, enableCompressionBundle, removeDataDirectory, configureStore, anonymousUserAccessMode, enableAuthorization, requestedStorage));
        }
コード例 #8
0
ファイル: ReplicationBase.cs プロジェクト: pali88/ravendb
        private EmbeddableDocumentStore CreateEmbeddableStoreAtPort(int port, bool enableCompressionBundle = false, AnonymousUserAccessMode anonymousUserAccessMode = AnonymousUserAccessMode.All, string storeTypeName = "esent", string databaseName = null)
        {
            NonAdminHttp.EnsureCanListenToWhenInNonAdminContext(port);
            var store = NewDocumentStore(port: port,
                                         requestedStorage: storeTypeName,
                                         activeBundles: "replication" + (enableCompressionBundle ? ";compression" : string.Empty),
                                         anonymousUserAccessMode: anonymousUserAccessMode,
                                         databaseName: databaseName);

            return(store);
        }
コード例 #9
0
ファイル: RavenTestBase.cs プロジェクト: mynkow/ravendb
        /// <summary>
        /// Creates a new Embeddable document store.
        /// </summary>
        /// <param name="runInMemory">Whatever the database should run purely in memory. When running in memory, nothing is written to disk and if the server is restarted all data will be lost.<br/>Default: <b>true</b></param>
        /// <param name="requestedStorage">What storage type to use (see: RavenDB Storage engines).<br/>Allowed values: <b>vornon</b>, <b>esent</b>.<br/>Default: <b>voron</b></param>
        /// <param name="catalog">Custom bundles that are not provided by RavenDb.</param>
        /// <param name="dataDir">The path for the database directory. Can use ~\ as the root, in which case the path will start from the server base directory. <br/>Default: <b>~\Databases\System</b></param>
        /// <param name="enableAuthentication"></param>
        /// <param name="activeBundles">Semicolon separated list of bundles names, such as: 'Replication;Versioning'.<br/>Default: no bundles turned on.</param>
        /// <param name="port">The port to use when creating the http listener. Allowed: 1 - 65,536 or * (find first available port from 8079 and upward).<br/>Default: <b>8079</b></param>
        /// <param name="anonymousUserAccessMode">Determines what actions an anonymous user can do. Get - read only, All - read & write, None - allows access to only authenticated users, Admin - all (including administrative actions).<br/>Default: <b>Get</b></param>
        /// <param name="configureStore">An action delegate which allows you to configure the document store instance that is returned. eg. <code>configureStore: store => store.DefaultDatabase = "MasterDb"</code></param>
        /// <param name="databaseName">Name of the server that will show up on /admin/stats endpoint.</param>
        /// <param name="indexes">A collection of indexes to execute.</param>
        /// <param name="transformers">A collection of transformers to execute.</param>
        /// <param name="seedData">A collection of some fake data that will be automatically stored into the document store.</param>
        /// <param name="noStaleQueries">When you query an index, the query will wait for the index to complete it's indexing and not be stale -before- the query is executed.</param>
        /// <param name="conventions">The conventions to be used when creating a new embeddable document store</param>
        /// <remarks>Besides the document store being instantiated, it is also Initialized.<br/>Also, if you provide some indexes to be used, make sure you understand that they might be stale when you query them. To make sure you're querying against indexes that have completed their indexing (ie. index is not stale), use the <code>noStaleQueries</code> parameter to determine if you wish to query against a stale or not-stale query.</remarks>
        /// <returns>A new instance of an EmbeddableDocumentStore.</returns>
        public EmbeddableDocumentStore NewDocumentStore(
            bool runInMemory              = true,
            string requestedStorage       = null,
            ComposablePartCatalog catalog = null,
            string dataDir            = null,
            bool enableAuthentication = false,
            string activeBundles      = null,
            int?port = null,
            AnonymousUserAccessMode anonymousUserAccessMode            = AnonymousUserAccessMode.Admin,
            Action <EmbeddableDocumentStore> configureStore            = null,
            [CallerMemberName] string databaseName                     = null,
            IEnumerable <AbstractIndexCreationTask> indexes            = null,
            IEnumerable <AbstractTransformerCreationTask> transformers = null,
            IEnumerable <IEnumerable> seedData = null,
            bool noStaleQueries            = false,
            DocumentConvention conventions = null)
        {
            databaseName = NormalizeDatabaseName(databaseName);

            var storageType   = GetDefaultStorageType(requestedStorage);
            var dataDirectory = dataDir ?? NewDataPath(databaseName);
            var documentStore = new EmbeddableDocumentStore
            {
                UseEmbeddedHttpServer = port.HasValue,
                Conventions           = conventions ?? new DocumentConvention()
            };

            ConfigurationHelper.ApplySettingsToConfiguration(documentStore.Configuration);

            documentStore.Configuration.DefaultStorageTypeName = storageType;
            documentStore.Configuration.DataDirectory          = Path.Combine(dataDirectory, "System");
            documentStore.Configuration.RunInUnreliableYetFastModeThatIsNotSuitableForProduction = true;
            documentStore.Configuration.RunInMemory             = storageType.Equals("esent", StringComparison.OrdinalIgnoreCase) == false && runInMemory;
            documentStore.Configuration.Port                    = port ?? 8079;
            documentStore.Configuration.AnonymousUserAccessMode = anonymousUserAccessMode;

            documentStore.Configuration.FileSystem.DataDirectory = Path.Combine(dataDirectory, "FileSystem");
            documentStore.Configuration.Encryption.UseFips       = ConfigurationHelper.UseFipsEncryptionAlgorithms;

            if (activeBundles != null)
            {
                documentStore.Configuration.Settings["Raven/ActiveBundles"] = activeBundles;
            }

            if (catalog != null)
            {
                documentStore.Configuration.Catalog.Catalogs.Add(catalog);
            }

            try
            {
                if (configureStore != null)
                {
                    configureStore(documentStore);
                }

                ModifyStore(documentStore);
                ModifyConfiguration(documentStore.Configuration);
                documentStore.Configuration.PostInit();
                documentStore.Initialize();

                if (enableAuthentication)
                {
                    EnableAuthentication(documentStore.SystemDatabase);
                }

                CreateDefaultIndexes(documentStore);

                if (indexes != null)
                {
                    ExecuteIndexes(indexes, documentStore);
                }

                if (noStaleQueries)
                {
                    documentStore.Listeners.RegisterListener(new NoStaleQueriesListener());
                }

                if (transformers != null)
                {
                    ExecuteTransformers(transformers, documentStore);
                }

                if (seedData != null)
                {
                    StoreSeedData(seedData, documentStore);
                }

                return(documentStore);
            }
            catch
            {
                // We must dispose of this object in exceptional cases, otherwise this test will break all the following tests.
                documentStore.Dispose();
                throw;
            }
            finally
            {
                stores.Add(documentStore);
            }
        }
コード例 #10
0
ファイル: AbstractLandlord.cs プロジェクト: tryadiadi/ravendb
 public IEnumerable <TransportState> GetUserAllowedTransportStates(IPrincipal user, DocumentDatabase systemDatabase, AnonymousUserAccessMode annonymouseUserAccessMode, MixedModeRequestAuthorizer mixedModeRequestAuthorizer, string authHeader)
 {
     foreach (var resourceName in GetUserAllowedResourcesByPrefix(user, systemDatabase, annonymouseUserAccessMode, mixedModeRequestAuthorizer, authHeader))
     {
         TransportState curTransportState;
         if (ResourseTransportStates.TryGetValue(resourceName, out curTransportState))
         {
             yield return(curTransportState);
         }
     }
 }
コード例 #11
0
        private EmbeddableDocumentStore CreateEmbeddableStoreAtPort(int port, bool enableCompressionBundle = false, bool removeDataDirectory = true, Action <DocumentStore> configureStore = null, AnonymousUserAccessMode anonymousUserAccessMode = AnonymousUserAccessMode.All)
        {
            Raven.Database.Server.NonAdminHttp.EnsureCanListenToWhenInNonAdminContext(port);

            var embeddedStore = new EmbeddableDocumentStore
            {
                UseEmbeddedHttpServer = true,
                Configuration         =
                {
                    Settings                                                 = { { "Raven/ActiveBundles", "replication" + (enableCompressionBundle ? ";compression" : string.Empty) } },
                    AnonymousUserAccessMode = anonymousUserAccessMode,
                    DataDirectory           = "Data #" + stores.Count,
                    RunInUnreliableYetFastModeThatIsNotSuitableForProduction = true,
                    RunInMemory            = true,
                    Port                   = port,
                    DefaultStorageTypeName = RavenTest.GetDefaultStorageType()
                },
            };

            if (removeDataDirectory)
            {
                IOExtensions.DeleteDirectory(embeddedStore.Configuration.DataDirectory);
            }

            ConfigureStore(embeddedStore);
            if (configureStore != null)
            {
                configureStore(embeddedStore);
            }
            embeddedStore.Initialize();

            stores.Add(embeddedStore);

            return(embeddedStore);
        }
コード例 #12
0
ファイル: Program.cs プロジェクト: Inferis/ravendb
        private static void RunInDebugMode(AnonymousUserAccessMode? anonymousUserAccessMode)
        {
			var consoleAppender = new ConsoleAppender
			{
				Layout = new PatternLayout(PatternLayout.DefaultConversionPattern),
			};
			consoleAppender.AddFilter(new LoggerMatchFilter
			{
				AcceptOnMatch = true,
				LoggerToMatch = typeof(HttpServer).FullName
			});
			consoleAppender.AddFilter(new DenyAllFilter());
			BasicConfigurator.Configure(consoleAppender);
            var ravenConfiguration = new RavenConfiguration();
            NonAdminHttp.EnsureCanListenToWhenInNonAdminContext(ravenConfiguration.Port);
            if (anonymousUserAccessMode.HasValue)
                ravenConfiguration.AnonymousUserAccessMode = anonymousUserAccessMode.Value;
            using (new RavenDbServer(ravenConfiguration))
            {
                var path = Path.Combine(Environment.CurrentDirectory, "default.raven");
                if (File.Exists(path))
                {
                    Console.WriteLine("Loading data from: {0}", path);
                    Smuggler.Smuggler.ImportData(ravenConfiguration.ServerUrl, path);
                }

                Console.WriteLine("Raven is ready to process requests.");
                Console.WriteLine("Data directory: {0}, Port: {1}", ravenConfiguration.DataDirectory, ravenConfiguration.Port);
                Console.WriteLine("Press the enter key to stop the server or enter 'cls' and then enter to clear the log");
                while (true)
                {
                    var readLine = Console.ReadLine();
                    if (!"CLS".Equals(readLine, StringComparison.InvariantCultureIgnoreCase))
                        break;
                    Console.Clear();
                }
            }
        }
コード例 #13
0
 public static bool IsBackupOperator(this IPrincipal principal, AnonymousUserAccessMode mode)
 {
     return(IsInRole(principal, mode, WindowsBuiltInRole.BackupOperator));
 }
コード例 #14
0
		public EmbeddableDocumentStore NewDocumentStore(
			bool runInMemory = true,
			string requestedStorage = null,
			ComposablePartCatalog catalog = null,
			string dataDir = null,
			bool enableAuthentication = false,
			string activeBundles = null,
			int? port = null,
			AnonymousUserAccessMode anonymousUserAccessMode = AnonymousUserAccessMode.Admin,
			Action<EmbeddableDocumentStore> configureStore = null,
            [CallerMemberName] string databaseName = null)
		{
		    databaseName = NormalizeDatabaseName(databaseName);

			var storageType = GetDefaultStorageType(requestedStorage);
			var dataDirectory = dataDir ?? NewDataPath(databaseName);
			var documentStore = new EmbeddableDocumentStore
			{
				UseEmbeddedHttpServer = port.HasValue,
				Configuration =
				{
					DefaultStorageTypeName = storageType,
					DataDirectory = Path.Combine(dataDirectory, "System"),
					FileSystemDataDirectory = Path.Combine(dataDirectory, "FileSystem"),
					RunInUnreliableYetFastModeThatIsNotSuitableForProduction = true,
					RunInMemory = storageType.Equals("esent", StringComparison.OrdinalIgnoreCase) == false && runInMemory,
					Port = port == null ? 8079 : port.Value,
					UseFips = SettingsHelper.UseFipsEncryptionAlgorithms,
					AnonymousUserAccessMode = anonymousUserAccessMode,
				}
			};

			if (activeBundles != null)
			{
				documentStore.Configuration.Settings["Raven/ActiveBundles"] = activeBundles;
			}

			if (catalog != null)
				documentStore.Configuration.Catalog.Catalogs.Add(catalog);

			try
			{
				if (configureStore != null) 
					configureStore(documentStore);
				ModifyStore(documentStore);
				ModifyConfiguration(documentStore.Configuration);
                documentStore.Configuration.PostInit();
				documentStore.Initialize();

				if (enableAuthentication)
				{
					EnableAuthentication(documentStore.DocumentDatabase);
				}

				CreateDefaultIndexes(documentStore);

				return documentStore;
			}
			catch
			{
				// We must dispose of this object in exceptional cases, otherwise this test will break all the following tests.
				documentStore.Dispose();
				throw;
			}
			finally
			{
				stores.Add(documentStore);
			}
		}
コード例 #15
0
        private DocumentStore CreateStoreAtPort(int port, bool enableCompressionBundle = false, bool removeDataDirectory = true, Action <DocumentStore> configureStore = null, AnonymousUserAccessMode anonymousUserAccessMode = AnonymousUserAccessMode.Admin, bool enableAuthorization = false, string requestedStorage = null)
        {
            NonAdminHttp.EnsureCanListenToWhenInNonAdminContext(port);

            var storageType = GetDefaultStorageType(requestedStorage);

            var serverConfiguration = new RavenConfiguration
            {
                Settings = { { "Raven/ActiveBundles", "replication" + (enableCompressionBundle ? ";compression" : string.Empty) } },
                AnonymousUserAccessMode = anonymousUserAccessMode,
                DataDirectory           = Path.Combine("Database #" + stores.Count, "SysDb"),
                RunInUnreliableYetFastModeThatIsNotSuitableForProduction = true,
                RunInMemory            = storageType.Equals("esent", StringComparison.OrdinalIgnoreCase) == false,
                Port                   = port,
                DefaultStorageTypeName = storageType
            };

            ConfigureServer(serverConfiguration);
            if (removeDataDirectory)
            {
                IOExtensions.DeleteDirectory(serverConfiguration.DataDirectory);
            }

            serverConfiguration.PostInit();
            var ravenDbServer = new RavenDbServer(serverConfiguration);

            servers.Add(ravenDbServer);

            if (enableAuthorization)
            {
                EnableAuthentication(ravenDbServer.Database);
                ConfigureServer(serverConfiguration);
            }

            var documentStore = new DocumentStore {
                Url = ravenDbServer.Database.Configuration.ServerUrl
            };

            ConfigureStore(documentStore);
            if (configureStore != null)
            {
                configureStore(documentStore);
            }
            documentStore.Initialize();

            stores.Add(documentStore);

            ConfigureDatabase(ravenDbServer.Database);
            return(documentStore);
        }
コード例 #16
0
ファイル: RavenTestBase.cs プロジェクト: hero106wen/ravendb
        /// <summary>
        /// Creates a new Embeddable document store.
        /// </summary>
        /// <param name="runInMemory">Whatever the database should run purely in memory. When running in memory, nothing is written to disk and if the server is restarted all data will be lost.<br/>Default: <b>true</b></param>
        /// <param name="requestedStorage">What storage type to use (see: RavenDB Storage engines).<br/>Allowed values: <b>vornon</b>, <b>esent</b>.<br/>Default: <b>voron</b></param>
        /// <param name="catalog">Custom bundles that are not provided by RavenDb.</param>
        /// <param name="dataDir">The path for the database directory. Can use ~\ as the root, in which case the path will start from the server base directory. <br/>Default: <b>~\Databases\System</b></param>
        /// <param name="enableAuthentication"></param>
        /// <param name="activeBundles">Semicolon separated list of bundles names, such as: 'Replication;Versioning'.<br/>Default: no bundles turned on.</param>
        /// <param name="port">The port to use when creating the http listener. Allowed: 1 - 65,536 or * (find first available port from 8079 and upward).<br/>Default: <b>8079</b></param>
        /// <param name="anonymousUserAccessMode">Determines what actions an anonymous user can do. Get - read only, All - read & write, None - allows access to only authenticated users, Admin - all (including administrative actions).<br/>Default: <b>Get</b></param>
        /// <param name="configureStore">An action delegate which allows you to configure the document store instance that is returned. eg. <code>configureStore: store => store.DefaultDatabase = "MasterDb"</code></param>
        /// <param name="databaseName">Name of the server that will show up on /admin/stats endpoint.</param>
        /// <param name="indexes">A collection of indexes to execute.</param>
        /// <param name="transformers">A collection of transformers to execute.</param>
        /// <param name="seedData">A collection of some fake data that will be automatically stored into the document store.</param>
        /// <param name="noStaleQueries">When you query an index, the query will wait for the index to complete it's indexing and not be stale -before- the query is executed.</param>
        /// <param name="conventions">The conventions to be used when creating a new embeddable document store</param>
        /// <remarks>Besides the document store being instantiated, it is also Initialized.<br/>Also, if you provide some indexes to be used, make sure you understand that they might be stale when you query them. To make sure you're querying against indexes that have completed their indexing (ie. index is not stale), use the <code>noStaleQueries</code> parameter to determine if you wish to query against a stale or not-stale query.</remarks>
        /// <returns>A new instance of an EmbeddableDocumentStore.</returns>
        public EmbeddableDocumentStore NewDocumentStore(
            bool runInMemory = true,
            string requestedStorage = null,
            ComposablePartCatalog catalog = null,
            string dataDir = null,
            bool enableAuthentication = false,
            string activeBundles = null,
            int? port = null,
            AnonymousUserAccessMode anonymousUserAccessMode = AnonymousUserAccessMode.Admin,
            Action<EmbeddableDocumentStore> configureStore = null,
            [CallerMemberName] string databaseName = null,
            IEnumerable<AbstractIndexCreationTask> indexes = null,
            IEnumerable<AbstractTransformerCreationTask> transformers = null,
            IEnumerable<IEnumerable> seedData = null,
            bool noStaleQueries = false,
            DocumentConvention conventions = null)
        {
            databaseName = NormalizeDatabaseName(databaseName);

            var storageType = GetDefaultStorageType(requestedStorage);
            var dataDirectory = dataDir ?? NewDataPath(databaseName);
            var documentStore = new EmbeddableDocumentStore
            {
                UseEmbeddedHttpServer = port.HasValue,
                Conventions = conventions ?? new DocumentConvention()
            };

            ConfigurationHelper.ApplySettingsToConfiguration(documentStore.Configuration);

            documentStore.Configuration.DefaultStorageTypeName = storageType;
            documentStore.Configuration.DataDirectory = Path.Combine(dataDirectory, "System");
            documentStore.Configuration.RunInUnreliableYetFastModeThatIsNotSuitableForProduction = true;
            documentStore.Configuration.RunInMemory = storageType.Equals("esent", StringComparison.OrdinalIgnoreCase) == false && runInMemory;
            documentStore.Configuration.Port = port ?? 8079;
            documentStore.Configuration.AnonymousUserAccessMode = anonymousUserAccessMode;

            documentStore.Configuration.FileSystem.DataDirectory = Path.Combine(dataDirectory, "FileSystem");
            documentStore.Configuration.Encryption.UseFips = ConfigurationHelper.UseFipsEncryptionAlgorithms;

            if (activeBundles != null)
            {
                documentStore.Configuration.Settings["Raven/ActiveBundles"] = activeBundles;
            }

            if (catalog != null)
            {
                documentStore.Configuration.Catalog.Catalogs.Add(catalog);
            }

            try
            {
                if (configureStore != null)
                {
                    configureStore(documentStore);
                }

                ModifyStore(documentStore);
                ModifyConfiguration(documentStore.Configuration);
                documentStore.Configuration.PostInit();
                documentStore.Initialize();

                if (enableAuthentication)
                {
                    EnableAuthentication(documentStore.SystemDatabase);
                }

                CreateDefaultIndexes(documentStore);

                if (indexes != null)
                {
                    ExecuteIndexes(indexes, documentStore);
                }

                if (noStaleQueries)
                {
                    documentStore.Listeners.RegisterListener(new NoStaleQueriesListener());
                }

                if (transformers != null)
                {
                    ExecuteTransformers(transformers, documentStore);
                }

                if (seedData != null)
                {
                    StoreSeedData(seedData, documentStore);
                }

                return documentStore;
            }
            catch
            {
                // We must dispose of this object in exceptional cases, otherwise this test will break all the following tests.
                documentStore.Dispose();
                throw;
            }
            finally
            {
                stores.Add(documentStore);
            }
        }
コード例 #17
0
        public EmbeddableDocumentStore NewDocumentStore(
            bool runInMemory              = true,
            string requestedStorage       = null,
            ComposablePartCatalog catalog = null,
            string dataDir            = null,
            bool enableAuthentication = false,
            string activeBundles      = null,
            int?port = null,
            AnonymousUserAccessMode anonymousUserAccessMode = AnonymousUserAccessMode.Admin,
            Action <EmbeddableDocumentStore> configureStore = null,
            [CallerMemberName] string databaseName          = null)
        {
            databaseName = NormalizeDatabaseName(databaseName);

            var storageType   = GetDefaultStorageType(requestedStorage);
            var dataDirectory = dataDir ?? NewDataPath(databaseName);
            var documentStore = new EmbeddableDocumentStore
            {
                UseEmbeddedHttpServer = port.HasValue,
                Configuration         =
                {
                    DefaultStorageTypeName  = storageType,
                    DataDirectory           = Path.Combine(dataDirectory,                "System"),
                    FileSystemDataDirectory = Path.Combine(dataDirectory,                "FileSystem"),
                    RunInUnreliableYetFastModeThatIsNotSuitableForProduction = true,
                    RunInMemory             = storageType.Equals("esent",                StringComparison.OrdinalIgnoreCase) == false && runInMemory,
                    Port                    = port == null ? 8079 : port.Value,
                    UseFips                 = SettingsHelper.UseFipsEncryptionAlgorithms,
                    AnonymousUserAccessMode = anonymousUserAccessMode,
                }
            };

            if (activeBundles != null)
            {
                documentStore.Configuration.Settings["Raven/ActiveBundles"] = activeBundles;
            }

            if (catalog != null)
            {
                documentStore.Configuration.Catalog.Catalogs.Add(catalog);
            }

            try
            {
                if (configureStore != null)
                {
                    configureStore(documentStore);
                }
                ModifyStore(documentStore);
                ModifyConfiguration(documentStore.Configuration);
                documentStore.Configuration.PostInit();
                documentStore.Initialize();

                if (enableAuthentication)
                {
                    EnableAuthentication(documentStore.DocumentDatabase);
                }

                CreateDefaultIndexes(documentStore);

                return(documentStore);
            }
            catch
            {
                // We must dispose of this object in exceptional cases, otherwise this test will break all the following tests.
                documentStore.Dispose();
                throw;
            }
            finally
            {
                stores.Add(documentStore);
            }
        }
コード例 #18
0
ファイル: AbstractLandlord.cs プロジェクト: tryadiadi/ravendb
        public string[] GetUserAllowedResourcesByPrefix(IPrincipal user, DocumentDatabase systemDatabase, AnonymousUserAccessMode annonymouseUserAccessMode, MixedModeRequestAuthorizer mixedModeRequestAuthorizer, string authHeader)
        {
            List <string> approvedResources = null;
            var           nextPageStart     = 0;
            var           resources         = systemDatabase.Documents
                                              .GetDocumentsWithIdStartingWith(ResourcePrefix, null, null, 0,
                                                                              systemDatabase.Configuration.MaxPageSize, CancellationToken.None, ref nextPageStart);

            var reourcesNames = resources
                                .Select(database =>
                                        database.Value <RavenJObject>("@metadata").Value <string>("@id").Replace(ResourcePrefix, string.Empty)).ToArray();

            if (annonymouseUserAccessMode == AnonymousUserAccessMode.None)
            {
                if (user == null)
                {
                    return(null);
                }

                var  oneTimePrincipal = user as MixedModeRequestAuthorizer.OneTimetokenPrincipal;
                bool isAdministrator  = oneTimePrincipal != null ?
                                        oneTimePrincipal.IsAdministratorInAnonymouseMode :
                                        user.IsAdministrator(annonymouseUserAccessMode);

                if (isAdministrator == false)
                {
                    var authorizer = mixedModeRequestAuthorizer;
                    approvedResources = authorizer.GetApprovedResources(user, authHeader, reourcesNames);
                }
            }

            if (approvedResources != null)
            {
                reourcesNames = reourcesNames.Where(resourceName => approvedResources.Contains(resourceName)).ToArray();
            }

            return(reourcesNames);
        }
コード例 #19
0
ファイル: Program.cs プロジェクト: nzdunic/ravendb
        private static void RunInDebugMode(AnonymousUserAccessMode? anonymousUserAccessMode, RavenConfiguration ravenConfiguration, bool lauchBrowser)
        {
        	ConfigureDebugLogging();

        	NonAdminHttp.EnsureCanListenToWhenInNonAdminContext(ravenConfiguration.Port);
            if (anonymousUserAccessMode.HasValue)
                ravenConfiguration.AnonymousUserAccessMode = anonymousUserAccessMode.Value;
			while (RunServerInDebugMode(ravenConfiguration, lauchBrowser))
            {
            	lauchBrowser = false;
            }
        }
コード例 #20
0
ファイル: Program.cs プロジェクト: felipeleusin/ravendb
		private static void RunInDebugMode(
			AnonymousUserAccessMode? anonymousUserAccessMode,
			RavenConfiguration ravenConfiguration,
			bool launchBrowser,
			bool noLog)
		{
			if (noLog == false)
				ConfigureDebugLogging();

			NonAdminHttp.EnsureCanListenToWhenInNonAdminContext(ravenConfiguration.Port, ravenConfiguration.Encryption.UseSsl);
			if (anonymousUserAccessMode.HasValue)
				ravenConfiguration.AnonymousUserAccessMode = anonymousUserAccessMode.Value;
			while (RunServerInDebugMode(ravenConfiguration, launchBrowser, server => InteractiveRun(server)))
			{
				launchBrowser = false;
			}
		}
コード例 #21
0
ファイル: RoleFinder.cs プロジェクト: 925coder/ravendb
		public static bool IsBackupOperator(this IPrincipal principal, AnonymousUserAccessMode mode)
		{
			return IsInRole(principal, mode, WindowsBuiltInRole.BackupOperator);
		}
コード例 #22
0
        public IDocumentStore CreateStore(bool enableCompressionBundle = false, bool removeDataDirectory = true, Action <DocumentStore> configureStore = null, AnonymousUserAccessMode anonymousUserAccessMode = AnonymousUserAccessMode.All)
        {
            var port = PortRangeStart - servers.Count;

            return(CreateStoreAtPort(port, enableCompressionBundle, removeDataDirectory, configureStore, anonymousUserAccessMode));
        }
コード例 #23
0
ファイル: ReplicationBase.cs プロジェクト: pali88/ravendb
        private DocumentStore CreateStoreAtPort(int port, bool enableCompressionBundle = false,
                                                Action <DocumentStore> configureStore  = null, AnonymousUserAccessMode anonymousUserAccessMode = AnonymousUserAccessMode.Admin, bool enableAuthorization = false,
                                                string storeTypeName = "voron", bool useFiddler = false, string databaseName = null, bool runInMemory = true)
        {
            var ravenDbServer = GetNewServer(port,
                                             requestedStorage: storeTypeName,
                                             activeBundles: "replication" + (enableCompressionBundle ? ";compression" : string.Empty),
                                             enableAuthentication: anonymousUserAccessMode == AnonymousUserAccessMode.None,
                                             databaseName: databaseName,
                                             configureConfig: ConfigureConfig,
                                             configureServer: ConfigureServer,
                                             runInMemory: runInMemory);

            if (enableAuthorization)
            {
                EnableAuthentication(ravenDbServer.SystemDatabase);
            }

            ConfigureDatabase(ravenDbServer.SystemDatabase, databaseName: databaseName);

            var documentStore = NewRemoteDocumentStore(ravenDbServer: ravenDbServer,
                                                       configureStore: configureStore,
                                                       fiddler: useFiddler,
                                                       databaseName: databaseName,
                                                       runInMemory: runInMemory);

            return(documentStore);
        }
コード例 #24
0
ファイル: Program.cs プロジェクト: torkelo/ravendb
 private static void RunInDebugMode(bool createDefaultDatabase, AnonymousUserAccessMode? anonymousUserAccessMode)
 {
     var consoleAppender = new ConsoleAppender
     {
         Layout = new PatternLayout(PatternLayout.DefaultConversionPattern),
     };
     consoleAppender.AddFilter(new LoggerMatchFilter
     {
         AcceptOnMatch = true,
         LoggerToMatch = typeof (HttpServer).FullName
     });
     BasicConfigurator.Configure(consoleAppender);
     var ravenConfiguration = new RavenConfiguration
     {
         ShouldCreateDefaultsWhenBuildingNewDatabaseFromScratch = createDefaultDatabase,
     };
     RavenDbServer.EnsureCanListenToWhenInNonAdminContext(ravenConfiguration.Port);
     if (anonymousUserAccessMode.HasValue)
         ravenConfiguration.AnonymousUserAccessMode = anonymousUserAccessMode.Value;
     using (new RavenDbServer(ravenConfiguration))
     {
         Console.WriteLine("Raven is ready to process requests.");
         Console.WriteLine("Press any key to stop the server");
         Console.ReadLine();
     }
 }