diff --git a/ccm-core/src/main/java/org/libreccm/api/admin/security/GroupsApi.java b/ccm-core/src/main/java/org/libreccm/api/admin/security/GroupsApi.java
index e15fef66b..320d5e21a 100644
--- a/ccm-core/src/main/java/org/libreccm/api/admin/security/GroupsApi.java
+++ b/ccm-core/src/main/java/org/libreccm/api/admin/security/GroupsApi.java
@@ -53,6 +53,9 @@ import org.libreccm.security.User;
import java.util.stream.Collectors;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.UriInfo;
+
/**
*
* @author Jens Pelzetter
@@ -61,6 +64,9 @@ import java.util.stream.Collectors;
@Path("/groups")
public class GroupsApi {
+ @Context
+ private UriInfo uriInfo;
+
@Inject
private GroupManager groupManager;
@@ -139,11 +145,12 @@ public class GroupsApi {
groupRepository.save(group);
return Response
- .status(Response.Status.CREATED)
- .contentLocation(
- URI.create(String.format("/api/groups/%s", group.getName()))
- )
- .build();
+ .created(
+ uriInfo
+ .getRequestUriBuilder()
+ .path(group.getName())
+ .build()
+ ).build();
}
@PUT
@@ -209,13 +216,13 @@ public class GroupsApi {
@QueryParam("offset") @DefaultValue("0") final int offset
) {
final Group group = repository.findGroup(groupIdentifier);
-
+
return new ListView<>(
groupRepository
- .findGroupMemberships(group, limit, offset)
- .stream()
- .map(GroupUserMembership::new)
- .collect(Collectors.toList()),
+ .findGroupMemberships(group, limit, offset)
+ .stream()
+ .map(GroupUserMembership::new)
+ .collect(Collectors.toList()),
groupRepository.countGroupMemberships(group),
limit,
offset
diff --git a/ccm-core/src/main/java/org/libreccm/api/admin/security/RolesApi.java b/ccm-core/src/main/java/org/libreccm/api/admin/security/RolesApi.java
index 9fbf00677..1fa841b34 100644
--- a/ccm-core/src/main/java/org/libreccm/api/admin/security/RolesApi.java
+++ b/ccm-core/src/main/java/org/libreccm/api/admin/security/RolesApi.java
@@ -58,34 +58,34 @@ import javax.ws.rs.core.UriInfo;
@RequestScoped
@Path("/roles")
public class RolesApi {
-
+
@Context
private UriInfo uriInfo;
-
+
@Inject
private CcmObjectRepository ccmObjectRepository;
-
+
@Inject
private IdentifierParser identifierExtractor;
-
+
@Inject
private PartyRepository partyRepository;
-
+
@Inject
private PermissionManager permissionManager;
-
+
@Inject
private PermissionRepository permissionRepository;
-
+
@Inject
private SecurityApiRepository repository;
-
+
@Inject
private RoleManager roleManager;
-
+
@Inject
private RoleRepository roleRepository;
-
+
@GET
@Path("/")
@Produces(MediaType.APPLICATION_JSON)
@@ -98,7 +98,7 @@ public class RolesApi {
) {
final long count = roleRepository.countAll();
final List roles = roleRepository.findAll(limit, offset);
-
+
return new ListView<>(
roles.stream().map(RoleData::new).collect(Collectors.toList()),
count,
@@ -106,7 +106,7 @@ public class RolesApi {
offset
);
}
-
+
@GET
@Path("/{roleIdentifier}")
@Produces(MediaType.APPLICATION_JSON)
@@ -118,7 +118,7 @@ public class RolesApi {
) {
return new RoleData(repository.findRole(roleIdentifier));
}
-
+
@POST
@Path("/")
@Consumes(MediaType.APPLICATION_JSON)
@@ -129,14 +129,18 @@ public class RolesApi {
final Role role = new Role();
role.setName(roleData.getName());
role.setDescription(roleData.getDescription());
-
+
roleRepository.save(role);
-
- return Response.created(
- URI.create(String.format("/api/admin/roles/%s", role.getName()))
- ).build();
+
+ return Response
+ .created(
+ uriInfo
+ .getBaseUriBuilder()
+ .path(role.getName())
+ .build()
+ ).build();
}
-
+
@PUT
@Path("/{roleIdentifier}")
@Consumes(MediaType.APPLICATION_JSON)
@@ -148,20 +152,20 @@ public class RolesApi {
final RoleData roleData
) {
final Role role = repository.findRole(roleIdentifier);
-
+
if (roleData != null
&& roleData.getName() != null
&& !roleData.getName().equals(role.getName())) {
role.setName(roleData.getName());
}
-
+
roleRepository.save(role);
-
+
return Response
.ok(String.format("Role %s updated succesfully.", roleIdentifier))
.build();
}
-
+
@DELETE
@Path("/{roleIdentifier}")
@Consumes(MediaType.APPLICATION_JSON)
@@ -177,7 +181,7 @@ public class RolesApi {
.ok(String.format("Role %s deleted successfully.", roleIdentifier))
.build();
}
-
+
@GET
@Path("/{roleIdentifier}/members")
@Produces(MediaType.APPLICATION_JSON)
@@ -202,7 +206,7 @@ public class RolesApi {
offset
);
}
-
+
@PUT
@Path("/{roleIdentifier}/members/{partyIdentifier}")
@AuthorizationRequired
@@ -214,9 +218,9 @@ public class RolesApi {
) {
final Role role = repository.findRole(groupIdentifier);
final Party party = repository.findParty(partyIdentifier);
-
+
roleManager.assignRoleToParty(role, party);
-
+
return Response
.ok(
String.format(
@@ -226,7 +230,7 @@ public class RolesApi {
)
).build();
}
-
+
@DELETE
@Path("/{roleIdentifier}/members/{partyIdentifier}")
@AuthorizationRequired
@@ -238,9 +242,9 @@ public class RolesApi {
) {
final Role role = repository.findRole(groupIdentifier);
final Party party = repository.findParty(partyIdentifier);
-
+
roleManager.removeRoleFromParty(role, party);
-
+
return Response
.ok(
String.format(
@@ -251,7 +255,7 @@ public class RolesApi {
)
.build();
}
-
+
@GET
@Path("/{roleIdentifier}/permissions")
@Produces(MediaType.APPLICATION_JSON)
@@ -275,7 +279,7 @@ public class RolesApi {
offset
);
}
-
+
@POST
@Path("/{roleIdentifier}/permissions")
@Consumes(MediaType.APPLICATION_JSON)
@@ -288,7 +292,7 @@ public class RolesApi {
) {
final Role role = repository.findRole(roleIdentifier);
final String privilege = permissionData.getGrantedPrivilege();
-
+
final Permission permission;
if (permissionData.getObject() != null) {
final CcmObject object = ccmObjectRepository
@@ -317,15 +321,15 @@ public class RolesApi {
permission = permissionManager.grantPrivilege(
privilege, role, object
);
- return Response.created(
- URI.create(
- String.format(
- "/api/admin/roles/%s/permissions/UUID-%s",
- role.getName(),
- permission.getUuid()
- )
- )
- ).build();
+ return Response
+ .created(
+ uriInfo
+ .getBaseUriBuilder()
+ .path(role.getName())
+ .path("permissions")
+ .path(String.format("UUID-%s", permission.getUuid()))
+ .build()
+ ).build();
}
} else {
if (permissionRepository.existsPermission(privilege, role)) {
@@ -339,20 +343,20 @@ public class RolesApi {
).build();
} else {
permission = permissionManager.grantPrivilege(privilege, role);
-
- return Response.created(
- URI.create(
- String.format(
- "/api/admin/roles/%s/permissions/UUID-%s",
- role.getName(),
- permission.getUuid()
- )
- )
- ).build();
+
+ return Response
+ .created(
+ uriInfo
+ .getRequestUriBuilder()
+ .path(role.getName())
+ .path("permissions")
+ .path(String.format("UUID-%s", permission.getUuid()))
+ .build()
+ ).build();
}
}
}
-
+
@DELETE
@Path("/{roleIdentifier}/permissions/{permissionIdentifier}")
@AuthorizationRequired
@@ -365,10 +369,10 @@ public class RolesApi {
final String permissionIdentifierParam
) {
final Role role = repository.findRole(roleIdentifier);
-
+
final Identifier permissionIdentifier = identifierExtractor
.parseIdentifier(roleIdentifier);
-
+
final Permission permission;
switch (permissionIdentifier.getType()) {
case ID:
@@ -398,17 +402,17 @@ public class RolesApi {
)
);
break;
-
+
default:
return Response
.status(Response.Status.BAD_REQUEST)
.entity("Permissions can only be identified by ID or UUID.")
.build();
}
-
+
permissionRepository.delete(permission);
-
+
return Response.ok().build();
}
-
+
}
diff --git a/ccm-core/src/main/java/org/libreccm/api/admin/security/UsersApi.java b/ccm-core/src/main/java/org/libreccm/api/admin/security/UsersApi.java
index 0d1b57438..2985bead8 100644
--- a/ccm-core/src/main/java/org/libreccm/api/admin/security/UsersApi.java
+++ b/ccm-core/src/main/java/org/libreccm/api/admin/security/UsersApi.java
@@ -55,6 +55,9 @@ import org.libreccm.security.UserRepository;
import java.util.stream.Collectors;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.UriInfo;
+
/**
* Provides RESTful API endpoints for managing users. Access to all endpoints
* defined by this class requires admin privileges.
@@ -65,6 +68,9 @@ import java.util.stream.Collectors;
@Path("/users")
public class UsersApi {
+ @Context
+ private UriInfo uriInfo;
+
@Inject
private GroupManager groupManager;
@@ -221,12 +227,12 @@ public class UsersApi {
);
return Response
- .status(Response.Status.CREATED)
- .contentLocation(
- URI.create(String.format("/api/users/%s", user.getName())
- )
- )
- .build();
+ .created(
+ uriInfo
+ .getBaseUriBuilder()
+ .path(user.getName())
+ .build()
+ ).build();
}
/**