Skip to content
Open
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -241,6 +241,13 @@ public static boolean checkAndParseAction(String action) {
}
}

public static void checkPdModeEnabled(GraphManager manager) {
if (!manager.isUsePD()) {
throw new HugeException(
"GraphSpace management is not supported in standalone mode");
}
}

public static boolean hasAdminPerm(GraphManager manager, String user) {
return manager.authManager().isAdminManager(user);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ public String createManager(@Context GraphManager manager,
@PathParam("graphspace") String graphSpace,
JsonManager jsonManager) {
LOG.debug("Create manager: {}", jsonManager);
checkPdModeEnabled(manager);
String user = jsonManager.user;
HugePermission type = jsonManager.type;
// graphSpace now comes from @PathParam instead of JsonManager
Expand Down Expand Up @@ -117,6 +118,7 @@ public void delete(@Context GraphManager manager,
@QueryParam("user") String user,
@QueryParam("type") HugePermission type) {
LOG.debug("Delete graph manager: {} {} {}", user, type, graphSpace);
checkPdModeEnabled(manager);
E.checkArgument(!"admin".equals(user) ||
type != HugePermission.ADMIN,
"User 'admin' can't be removed from ADMIN");
Expand Down Expand Up @@ -160,7 +162,7 @@ public String list(@Context GraphManager manager,
@PathParam("graphspace") String graphSpace,
@QueryParam("type") HugePermission type) {
LOG.debug("list graph manager: {} {}", type, graphSpace);

checkPdModeEnabled(manager);
AuthManager authManager = manager.authManager();
validType(type);
List<String> adminManagers;
Expand Down Expand Up @@ -190,7 +192,7 @@ public String checkRole(@Context GraphManager manager,
@PathParam("graphspace") String graphSpace,
@QueryParam("type") HugePermission type) {
LOG.debug("check if current user is graph manager: {} {}", type, graphSpace);

checkPdModeEnabled(manager);
validType(type);
AuthManager authManager = manager.authManager();
String user = HugeGraphAuthProxy.username();
Expand Down Expand Up @@ -222,6 +224,7 @@ public String getRolesInGs(@Context GraphManager manager,
@PathParam("graphspace") String graphSpace,
@QueryParam("user") String user) {
LOG.debug("get user [{}]'s role in graph space [{}]", user, graphSpace);
checkPdModeEnabled(manager);
AuthManager authManager = manager.authManager();
List<HugePermission> result = new ArrayList<>();
validGraphSpace(manager, graphSpace);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ public class GraphSpaceAPI extends API {
@Produces(APPLICATION_JSON_WITH_CHARSET)
public Object list(@Context GraphManager manager,
@Context SecurityContext sc) {
checkPdModeEnabled(manager);
Set<String> spaces = manager.graphSpaces();
return ImmutableMap.of("graphSpaces", spaces);
}
Expand All @@ -86,6 +87,7 @@ public Object list(@Context GraphManager manager,
@Produces(APPLICATION_JSON_WITH_CHARSET)
public Object get(@Context GraphManager manager,
@PathParam("graphspace") String graphSpace) {
checkPdModeEnabled(manager);
manager.getSpaceStorage(graphSpace);
GraphSpace gs = space(manager, graphSpace);

Expand Down Expand Up @@ -155,7 +157,7 @@ public Object listProfile(@Context GraphManager manager,
@RolesAllowed({"admin"})
public String create(@Context GraphManager manager,
JsonGraphSpace jsonGraphSpace) {

checkPdModeEnabled(manager);
jsonGraphSpace.checkCreate(false);

String creator = HugeGraphAuthProxy.username();
Expand Down Expand Up @@ -186,7 +188,7 @@ public boolean isPrefix(Map<String, Object> profile, String prefix) {
public Map<String, Object> manage(@Context GraphManager manager,
@PathParam("name") String name,
Map<String, Object> actionMap) {

checkPdModeEnabled(manager);
E.checkArgument(actionMap != null && actionMap.size() == 2 &&
actionMap.containsKey(GRAPH_SPACE_ACTION),
"Invalid request body '%s'", actionMap);
Expand Down Expand Up @@ -315,6 +317,7 @@ public Map<String, Object> manage(@Context GraphManager manager,
@RolesAllowed({"admin"})
public void delete(@Context GraphManager manager,
@PathParam("name") String name) {
checkPdModeEnabled(manager);
manager.dropGraphSpace(name);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -280,6 +280,10 @@ private boolean usePD() {
return this.PDExist;
}

public boolean isUsePD() {
return this.PDExist;
}

Comment on lines +279 to 282
private static void registerCacheMetrics(Map<String, Cache<?, ?>> caches) {
Set<String> names = MetricManager.INSTANCE.getRegistry().getNames();
for (Map.Entry<String, Cache<?, ?>> entry : caches.entrySet()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -279,6 +279,46 @@ public void testInvalidSpaceCreation() {
assertResponseStatus(400, r);
}

@Test
public void testStandaloneModeForbidsAllEndpoints() {
Assume.assumeFalse("skip this test for hstore (PD mode)",
Objects.equals("hstore", System.getProperty("backend")));

final String standaloneError =
"GraphSpace management is not supported in standalone mode";

// list
Response r = this.client().get(PATH);
String content = assertResponseStatus(400, r);
Assert.assertTrue(content.contains(standaloneError));

// get
r = this.client().get(PATH, "DEFAULT");
content = assertResponseStatus(400, r);
Assert.assertTrue(content.contains(standaloneError));

// create
String createBody = "{\"name\":\"test_standalone\",\"nickname\":\"test\","
+ "\"description\":\"test\",\"cpu_limit\":10,"
+ "\"memory_limit\":10,\"storage_limit\":10,"
+ "\"max_graph_number\":10,\"max_role_number\":10,"
+ "\"auth\":false,\"configs\":{}}";
r = this.client().post(PATH, createBody);
content = assertResponseStatus(400, r);
Assert.assertTrue(content.contains(standaloneError));

// manage (update action)
String manageBody = "{\"action\":\"update\",\"update\":{\"name\":\"DEFAULT\"}}";
r = this.client().put(PATH, "DEFAULT", manageBody, Map.of());
content = assertResponseStatus(400, r);
Assert.assertTrue(content.contains(standaloneError));

// delete
r = this.client().delete(PATH, "nonexistent");
content = assertResponseStatus(400, r);
Assert.assertTrue(content.contains(standaloneError));
}

@Test
public void testListProfile() {
// Get profile list without prefix
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -981,4 +981,45 @@ public void testUserWithDifferentRolesInMultipleSpaces() {
Assert.assertTrue("Only graphb1 should remain in spaceb",
graphsList.contains("graphb1") && !graphsList.contains("graphb2"));
}

@Test
public void testStandaloneModeForbidsAllEndpoints() {
Assume.assumeFalse("skip this test for hstore (PD mode)",
Objects.equals("hstore", System.getProperty("backend")));

final String standaloneError =
"GraphSpace management is not supported in standalone mode";
final String path = managerPath("DEFAULT");

// createManager
String createBody = "{\"user\":\"admin\",\"type\":\"ADMIN\"}";
Response r = this.client().post(path, createBody);
String content = assertResponseStatus(400, r);
Assert.assertTrue(content.contains(standaloneError));

// delete (via query params)
r = this.client().delete(path,
ImmutableMap.of("user", "admin",
"type", HugePermission.ADMIN));
content = assertResponseStatus(400, r);
Assert.assertTrue(content.contains(standaloneError));

// list
r = this.client().get(path,
ImmutableMap.of("type", (Object) HugePermission.ADMIN));
content = assertResponseStatus(400, r);
Assert.assertTrue(content.contains(standaloneError));

// checkRole
r = this.client().get(path + "/check",
ImmutableMap.of("type", (Object) HugePermission.ADMIN));
content = assertResponseStatus(400, r);
Assert.assertTrue(content.contains(standaloneError));

// getRolesInGs
r = this.client().get(path + "/role",
ImmutableMap.of("user", (Object) "admin"));
content = assertResponseStatus(400, r);
Assert.assertTrue(content.contains(standaloneError));
}
}
Loading