예제 #1
0
        private static async Task <HttpApiTransport> GetTransportAsync(ArangoDbOptions options)
        {
            if (!string.IsNullOrWhiteSpace(options.JwtToken))
            {
                return(HttpApiTransport.UsingJwtAuth(new Uri(options.HostUri), options.Database, options.JwtToken));
            }

            if (options.IsGenerateJwtTokenBasedOnUserNameAndPassword)
            {
                if (string.IsNullOrWhiteSpace(options.UserName))
                {
                    throw new ArgumentNullException(nameof(options.UserName));
                }
                if (string.IsNullOrWhiteSpace(options.Password))
                {
                    throw new ArgumentNullException(nameof(options.Password));
                }

                var transport        = HttpApiTransport.UsingNoAuth(new Uri(options.HostUri), options.Database);
                var authClient       = new AuthApiClient(transport);
                var jwtTokenResponse = await authClient.GetJwtTokenAsync(options.UserName, options.Password);

                transport.SetJwtToken(jwtTokenResponse.Jwt);
                return(transport);
            }

            if (!string.IsNullOrWhiteSpace(options.UserName) && !string.IsNullOrWhiteSpace(options.Password))
            {
                return(HttpApiTransport.UsingBasicAuth(new Uri(options.HostUri), options.Database, options.UserName, options.Password));
            }

            return(HttpApiTransport.UsingNoAuth(new Uri(options.HostUri), options.Database));
        }
예제 #2
0
        public async Task SetJwt_ShouldSucceed()
        {
            string jwtToken        = null;
            string arangodbBaseUrl = $"http://{_fixture.ArangoDbHost}:8529/";

            using (var transport = HttpApiTransport.UsingNoAuth(
                       new Uri(arangodbBaseUrl),
                       nameof(HttpApiTransportTest)))
            {
                var authClient = new AuthApiClient(transport);

                var jwtTokenResponse = await authClient.GetJwtTokenAsync(
                    new JwtTokenRequestBody
                {
                    Username = _fixture.Username,
                    Password = _fixture.Password
                });

                jwtToken = jwtTokenResponse.Jwt;

                // Use token in current transport
                transport.SetJwtToken(jwtToken);
                var databaseApi = new DatabaseApiClient(transport);

                var userDatabasesResponse = await databaseApi.GetUserDatabasesAsync();

                Assert.NotEmpty(userDatabasesResponse.Result);
            }
        }
예제 #3
0
        public async Task QuickStart_ShouldSucceed()
        {
            try
            {
                await QuickStartDoc();
            }
            finally
            {
                using (var systemDbTransport = HttpApiTransport.UsingBasicAuth(
                           new Uri($"http://{_arangoDbHost}:8529/"),
                           "_system",
                           "root",
                           "root"))
                {
                    var systemDb = new DatabaseApiClient(systemDbTransport);

                    try
                    {
                        await systemDb.DeleteDatabaseAsync("arangodb-net-standard");
                    }
                    catch (ApiErrorException ex)
                    {
                        // assume database didn't exist
                        Console.WriteLine(ex.Message);
                    }
                }
            }
        }
예제 #4
0
        protected HttpApiTransport GetHttpTransport(string dbName)
        {
            var transport = new HttpApiTransport(
                new Uri("http://localhost:8529/"),
                dbName,
                "root",
                "root");

            _transports.Add(transport);
            return(transport);
        }
예제 #5
0
        protected HttpApiTransport GetHttpTransport(string dbName)
        {
            var transport = HttpApiTransport.UsingBasicAuth(
                new Uri($"http://{ArangoDbHost}:8529/"),
                dbName,
                "root",
                "root");

            _transports.Add(transport);
            return(transport);
        }
예제 #6
0
        protected HttpApiTransport GetHttpTransport(string dbName)
        {
            var transport = HttpApiTransport.UsingBasicAuth(
                new Uri($"http://{ArangoDbHost}:8529/"),
                dbName,
                ArangoDBTestSettings.RootUsername,
                ArangoDBTestSettings.RootPassword);

            _transports.Add(transport);
            return(transport);
        }
예제 #7
0
        public async Task UseVpack_ShouldSucceed()
        {
            string arangodbBaseUrl = $"http://{_fixture.ArangoDbHost}:8529/";

            using (var transport = HttpApiTransport.UsingBasicAuth(
                       new Uri(arangodbBaseUrl),
                       nameof(HttpApiTransportTest),
                       "root",
                       "root"))
            {
                transport.UseVPackContentType();
                string docUrl = arangodbBaseUrl + "_db/" + nameof(HttpApiTransportTest) + $"/_admin/echo";
                using (var response = await transport.GetAsync(docUrl))
                {
                    Assert.Equal("application/x-velocypack", response.Content.Headers.ContentType.MediaType);
                }
            }
        }
        public static IServiceCollection AddArangoDB(this IServiceCollection serviceDescriptors)
        {
            var transport = HttpApiTransport.UsingBasicAuth(
                new Uri("http://185.239.107.111:8529"),
                "_system",
                "root",
                "6600068167");

            var arangoDBClient = new ArangoDBClient(transport);

            serviceDescriptors.AddAutoMapper(typeof(ServiceCollectionExtension), typeof(MappingProfile));

            serviceDescriptors.AddTransient <IEntityInstanceRepository, ArangoDBEntityInstanceRepository>();
            serviceDescriptors.AddTransient <ILinkInstanceRepository, ArangoDBLinkInstanceRepository>();
            serviceDescriptors.AddTransient <IGraphAlgorithms, ArangoDBGraphAlgorithms>();
            serviceDescriptors.AddSingleton(arangoDBClient);

            return(serviceDescriptors);
        }
예제 #9
0
        public ArangoDBClient OpenConnection(string dbName = "_system", bool root = false)
        {
            if (Client != null)
            {
                return(Client);
            }

            var user     = root ? _databaseSettings.User : _databaseSettings.DbUser;
            var password = root ? _databaseSettings.Password : _databaseSettings.DbPassword;
            // We must use the _system database to create databases
            var systemDbTransport = HttpApiTransport.UsingBasicAuth(
                new Uri(_databaseSettings.Url),
                dbName,
                password,
                user
                );

            return(Client = new ArangoDBClient(systemDbTransport));
        }
예제 #10
0
        public async Task UsingJwtAuth_ShouldSucceed()
        {
            string jwtToken        = null;
            string arangodbBaseUrl = $"http://{_fixture.ArangoDbHost}:8529/";

            using (var transport = HttpApiTransport.UsingNoAuth(
                       new Uri(arangodbBaseUrl),
                       nameof(HttpApiTransportTest)))
            {
                var authClient = new AuthApiClient(transport);
                authClient.ThrowErrorsAsExceptions = true;

                var jwtTokenResponse = await authClient.GetJwtTokenAsync(
                    new JwtTokenRequestBody
                {
                    Username = _fixture.Username,
                    Password = _fixture.Password
                });

                jwtToken = jwtTokenResponse.Jwt;

                DatabaseApiClient databaseApi = new DatabaseApiClient(transport)
                {
                    ThrowErrorsAsExceptions = true
                };

                // Not authorized, should throw.
                var ex = await Assert.ThrowsAsync <ApiErrorException>(async() =>
                                                                      await databaseApi.GetCurrentDatabaseInfoAsync());
            }

            // Use token in a new transport created via `UsingJwtAuth`.
            using (var transport = HttpApiTransport.UsingJwtAuth(
                       new Uri(arangodbBaseUrl),
                       nameof(HttpApiTransportTest),
                       jwtToken))
            {
                var databaseApi           = new DatabaseApiClient(transport);
                var userDatabasesResponse = await databaseApi.GetUserDatabasesAsync();

                Assert.NotEmpty(userDatabasesResponse.Results);
            }
        }
예제 #11
0
 private void Init()
 {
     transport =
         HttpApiTransport.UsingBasicAuth(new Uri(settings.Uri), settings.Database, settings.UserId, settings.Password);
     Client = new ArangoDBClient(transport);
 }
예제 #12
0
        /// <summary>
        /// The function body here is intended for use in "Quick Start" usage documentation.
        /// </summary>
        /// <returns></returns>
        private async Task QuickStartDoc()
        {
            // You must use the system database to create databases!
            using (var systemDbTransport = HttpApiTransport.UsingBasicAuth(
                       new Uri($"http://{_arangoDbHost}:8529/"),
                       "_system",
                       "root",
                       "root"))
            {
                var systemDb = new DatabaseApiClient(systemDbTransport);

                // Create a new database with one user.
                await systemDb.PostDatabaseAsync(
                    new PostDatabaseBody
                {
                    Name  = "arangodb-net-standard",
                    Users = new List <DatabaseUser>
                    {
                        new DatabaseUser
                        {
                            Username = "******",
                            Passwd   = "yoko123"
                        }
                    }
                });
            }

            // Use our new database, with basic auth credentials for the user jlennon.
            var transport = HttpApiTransport.UsingBasicAuth(
                new Uri($"http://{_arangoDbHost}:8529"),
                "arangodb-net-standard",
                "jlennon",
                "yoko123");

            var adb = new ArangoDBClient(transport);

            // Create a collection in the database
            await adb.Collection.PostCollectionAsync(
                new PostCollectionBody
            {
                Name = "MyCollection"
                       // A whole heap of other options exist to define key options,
                       // sharding options, etc
            });

            // Create document in the collection using anonymous type
            await adb.Document.PostDocumentAsync(
                "MyCollection",
                new
            {
                MyProperty = "Value"
            });

            // Create document in the collection using strong type
            await adb.Document.PostDocumentAsync(
                "MyCollection",
                new MyClass
            {
                ItemNumber  = 123456,
                Description = "Some item"
            });

            // Run AQL query (create a query cursor)
            var response = await adb.Cursor.PostCursorAsync <MyClassDocument>(
                @"FOR doc IN MyCollection 
                  FILTER doc.ItemNumber == 123456 
                  RETURN doc");

            MyClassDocument item = response.Result.First();

            // Partially update document
            await adb.Document.PatchDocumentAsync <object, object>(
                "MyCollection",
                item._key,
                new { Description = "More description" });

            // Fully update document
            item.Description = "Some item with some more description";
            await adb.Document.PutDocumentAsync(
                $"MyCollection/{item._key}",
                item);
        }