Skip to content

Commit 76f6359

Browse files
author
Mark
committed
getAccessibleDatabasesFor user
1 parent fe24764 commit 76f6359

File tree

5 files changed

+61
-5
lines changed

5 files changed

+61
-5
lines changed

src/main/java/com/arangodb/ArangoDB.java

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,7 @@ public ArangoDatabase db(final String name) {
231231
}
232232

233233
/**
234-
* creates a new database
234+
* Creates a new database
235235
*
236236
* @see <a href="https://docs.arangodb.com/current/HTTP/Database/DatabaseManagement.html#create-database">API
237237
* Documentation</a>
@@ -245,6 +245,8 @@ public Boolean createDatabase(final String name) throws ArangoDBException {
245245
}
246246

247247
/**
248+
* Retrieves a list of all existing databases
249+
*
248250
* @see <a href="https://docs.arangodb.com/current/HTTP/Database/DatabaseManagement.html#list-of-databases">API
249251
* Documentation</a>
250252
* @return a list of all existing databases
@@ -255,6 +257,8 @@ public Collection<String> getDatabases() throws ArangoDBException {
255257
}
256258

257259
/**
260+
* Retrieves a list of all databases the current user can access
261+
*
258262
* @see <a href=
259263
* "https://docs.arangodb.com/current/HTTP/Database/DatabaseManagement.html#list-of-accessible-databases">API
260264
* Documentation</a>
@@ -265,6 +269,22 @@ public Collection<String> getAccessibleDatabases() throws ArangoDBException {
265269
return executor.execute(getAccessibleDatabasesRequest(db().name()), getDatabaseResponseDeserializer());
266270
}
267271

272+
/**
273+
* List available database to the specified user
274+
*
275+
* @see <a href=
276+
* "https://docs.arangodb.com/current/HTTP/UserManagement/index.html#list-the-databases-available-to-a-user">API
277+
* Documentation</a>
278+
* @param user
279+
* The name of the user for which you want to query the databases
280+
* @return
281+
* @throws ArangoDBException
282+
*/
283+
public Collection<String> getAccessibleDatabasesFor(final String user) throws ArangoDBException {
284+
return executor.execute(getAccessibleDatabasesForRequest(db().name(), user),
285+
getAccessibleDatabasesForResponseDeserializer());
286+
}
287+
268288
/**
269289
* Returns the server name and version number.
270290
*

src/main/java/com/arangodb/internal/InternalArangoDB.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,10 @@
2020

2121
package com.arangodb.internal;
2222

23+
import java.util.ArrayList;
2324
import java.util.Collection;
25+
import java.util.Iterator;
26+
import java.util.Map.Entry;
2427

2528
import com.arangodb.entity.LogLevelEntity;
2629
import com.arangodb.entity.UserEntity;
@@ -87,6 +90,26 @@ protected Request getAccessibleDatabasesRequest(final String database) {
8790
executor.createPath(ArangoDBConstants.PATH_API_DATABASE, ArangoDBConstants.USER));
8891
}
8992

93+
protected Request getAccessibleDatabasesForRequest(final String database, final String user) {
94+
return new Request(database, RequestType.GET,
95+
executor.createPath(ArangoDBConstants.PATH_API_USER, user, ArangoDBConstants.DATABASE));
96+
}
97+
98+
protected ResponseDeserializer<Collection<String>> getAccessibleDatabasesForResponseDeserializer() {
99+
return new ResponseDeserializer<Collection<String>>() {
100+
@Override
101+
public Collection<String> deserialize(final Response response) throws VPackException {
102+
final VPackSlice result = response.getBody().get(ArangoDBConstants.RESULT);
103+
final Collection<String> dbs = new ArrayList<String>();
104+
for (final Iterator<Entry<String, VPackSlice>> iterator = result.objectIterator(); iterator
105+
.hasNext();) {
106+
dbs.add(iterator.next().getKey());
107+
}
108+
return dbs;
109+
}
110+
};
111+
}
112+
90113
protected Request getVersionRequest() {
91114
return new Request(ArangoDBConstants.SYSTEM, RequestType.GET, ArangoDBConstants.PATH_API_VERSION);
92115
}
@@ -160,4 +183,5 @@ protected Request setLogLevelRequest(final LogLevelEntity entity) {
160183
return new Request(ArangoDBConstants.SYSTEM, RequestType.PUT, ArangoDBConstants.PATH_API_ADMIN_LOG_LEVEL)
161184
.setBody(executor.serialize(entity));
162185
}
186+
163187
}

src/test/java/com/arangodb/ArangoDBTest.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,15 @@ public void getAccessibleDatabases() {
118118
assertThat(dbs, hasItem("_system"));
119119
}
120120

121+
@Test
122+
public void getAccessibleDatabasesFor() {
123+
final ArangoDB arangoDB = new ArangoDB.Builder().build();
124+
final Collection<String> dbs = arangoDB.getAccessibleDatabasesFor("root");
125+
assertThat(dbs, is(notNullValue()));
126+
assertThat(dbs.size(), greaterThan(0));
127+
assertThat(dbs, hasItem("_system"));
128+
}
129+
121130
@Test
122131
public void createUser() {
123132
final ArangoDB arangoDB = new ArangoDB.Builder().build();

src/test/java/com/arangodb/util/ArangoUtilTest.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,14 @@
3131

3232
import com.arangodb.ArangoDB;
3333
import com.arangodb.entity.BaseDocument;
34+
import com.arangodb.internal.ArangoExecutorSync;
35+
import com.arangodb.internal.InternalArangoDB;
36+
import com.arangodb.internal.velocystream.ConnectionSync;
3437
import com.arangodb.velocypack.Type;
3538
import com.arangodb.velocypack.VPackBuilder;
3639
import com.arangodb.velocypack.VPackSlice;
3740
import com.arangodb.velocypack.ValueType;
41+
import com.arangodb.velocystream.Response;
3842

3943
/**
4044
* @author Mark - mark at arangodb.com
@@ -46,7 +50,7 @@ public class ArangoUtilTest {
4650

4751
@BeforeClass
4852
public static void setup() {
49-
final ArangoDB arangoDB = new ArangoDB.Builder().build();
53+
final InternalArangoDB<ArangoExecutorSync, Response, ConnectionSync> arangoDB = new ArangoDB.Builder().build();
5054
util = arangoDB.util();
5155
}
5256

tests/travis/setup_arangodb.sh

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,8 @@ echo "Starting ArangoDB '${ARANGOD}'"
2929
${ARANGOD} \
3030
--database.directory ${TMP_DIR} \
3131
--configuration none \
32-
--server.endpoint vpp+tcp://127.0.0.1:8529 \
33-
--server.endpoint vpp+ssl://127.0.0.1:8530 \
34-
--server.endpoint tcp://127.0.0.1:8531 \
32+
--server.endpoint tcp://127.0.0.1:8529 \
33+
--server.endpoint ssl://127.0.0.1:8530 \
3534
--ssl.keyfile ./server.pem \
3635
--javascript.app-path ${ARANGODB_DIR}/js/apps \
3736
--javascript.startup-directory ${ARANGODB_DIR}/js \

0 commit comments

Comments
 (0)