Remove POC status

This commit is contained in:
René Pfeuffer
2019-01-18 11:25:24 +01:00
parent 34a7c34bb9
commit 19975f3f4b
3 changed files with 38 additions and 104 deletions

View File

@@ -1,103 +0,0 @@
package sonia.scm.api.v2.resources;
import lombok.extern.slf4j.Slf4j;
import sonia.scm.security.AssignedPermission;
import sonia.scm.security.PermissionDescriptor;
import sonia.scm.security.SecuritySystem;
import javax.inject.Inject;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
/**
* Global Permission Proof of Concept (POC).
* TODO Extend or delete this during implementation!
*/
@Path("v2/permissions")
@Slf4j
public class GlobalPermissionPocResource {
private SecuritySystem securitySystem;
@Inject
public GlobalPermissionPocResource(SecuritySystem securitySystem) {
this.securitySystem = securitySystem;
}
/**
How to use this proof of concept?
curl -vu scmadmin:scmadmin --data '{
"active": true,
"admin": false,
"displayName": "arthur",
"mail": "x@abcde.cd",
"name": "arthur",
"password": "scmadmin",
"type": "xml"
}' \
--header "Content-Type: application/vnd.scmm-user+json;v=2" http://localhost:8081/scm/api/v2/users/
curl -vu scmadmin:scmadmin --data '{
"description": "descr",
"name": "configurers",
"members": [ "arthur" ]
}' \
--header "Content-Type: application/vnd.scmm-group+json" http://localhost:8081/scm/api/v2/groups/
# not allowed
curl -vu arthur:scmadmin http://localhost:8081/scm/api/v2/config
# not allowed (empty)
curl -vu arthur:scmadmin "http://localhost:8081/scm/api/v2/groups/?sortBy=name&desc=true" | jq
# Assign permissions (call this resource)
curl -X POST -vu scmadmin:scmadmin http://localhost:8081/scm/api/v2/permissions
# Now allowed via individual permission
curl -vu arthur:scmadmin "http://localhost:8081/scm/api/v2/groups/?sortBy=name&desc=true" | jq
# allowed via group permission
curl -vu arthur:scmadmin http://localhost:8081/scm/api/v2/config | jq
*/
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Path("")
public Response create() {
// Should contain all permissions defined in permissions.xmls on the classpath.
// Core: scm-webapp/src/main/resources/META-INF/scm/permissions.xml
// Plugins, e.g. scm-plugins/scm-git-plugin/src/main/resources/META-INF/scm/permissions.xml
log.info("{} Available permissions: {}", securitySystem.getAvailablePermissions().size(), securitySystem.getAvailablePermissions());
assignExemplaryPermissions();
// TODO use created()
return Response.noContent().build();
}
@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("")
public Response getAll() {
String[] permissions = securitySystem.getAvailablePermissions().stream().map(PermissionDescriptor::getValue).toArray(String[]::new);
return Response.ok(new PermissionListDto(permissions)).build();
}
protected void assignExemplaryPermissions() {
AssignedPermission groupPermission = new AssignedPermission("configurers", true, new PermissionDescriptor("configuration:*"));
log.info("try to add new permission: {}", groupPermission);
securitySystem.addPermission(groupPermission);
AssignedPermission userPermission = new AssignedPermission("rene", new PermissionDescriptor("group:*"));
log.info("try to add new permission: {}", userPermission);
securitySystem.addPermission(userPermission);
}
}

View File

@@ -0,0 +1,37 @@
package sonia.scm.api.v2.resources;
import lombok.extern.slf4j.Slf4j;
import sonia.scm.security.AssignedPermission;
import sonia.scm.security.PermissionDescriptor;
import sonia.scm.security.SecuritySystem;
import sonia.scm.web.VndMediaType;
import javax.inject.Inject;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
@Path("v2/permissions")
public class GlobalPermissionResource {
private SecuritySystem securitySystem;
@Inject
public GlobalPermissionResource(SecuritySystem securitySystem) {
this.securitySystem = securitySystem;
}
@GET
@Produces(VndMediaType.PERMISSION_COLLECTION)
@Path("")
public Response getAll() {
String[] permissions = securitySystem.getAvailablePermissions().stream().map(PermissionDescriptor::getValue).toArray(String[]::new);
return Response.ok(new PermissionListDto(permissions)).build();
}
}

View File

@@ -616,7 +616,7 @@ class ResourceLinks {
private final LinkBuilder permissionsLlinkBuilder;
PermissionsLinks(ScmPathInfo scmPathInfo) {
this.permissionsLlinkBuilder = new LinkBuilder(scmPathInfo, GlobalPermissionPocResource.class);
this.permissionsLlinkBuilder = new LinkBuilder(scmPathInfo, GlobalPermissionResource.class);
}
String self() {