Fix verbs for repository and rename class

This commit is contained in:
René Pfeuffer
2019-01-23 12:22:06 +01:00
parent 7e9d60fa8d
commit fdf4421a55
5 changed files with 127 additions and 43 deletions

View File

@@ -0,0 +1,50 @@
package sonia.scm.api.v2.resources;
import com.webcohesion.enunciate.metadata.rs.ResponseCode;
import com.webcohesion.enunciate.metadata.rs.StatusCodes;
import sonia.scm.security.RepositoryPermissionProvider;
import sonia.scm.web.VndMediaType;
import javax.inject.Inject;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import java.util.Collection;
/**
* RESTful Web Service Resource to get available repository types.
*/
@Path(RepositoryPermissionResource.PATH)
public class RepositoryPermissionResource {
static final String PATH = "v2/repositoryPermissions/";
private final RepositoryPermissionProvider repositoryPermissionProvider;
@Inject
public RepositoryPermissionResource(RepositoryPermissionProvider repositoryPermissionProvider) {
this.repositoryPermissionProvider = repositoryPermissionProvider;
}
@GET
@Path("verbs")
@StatusCodes({
@ResponseCode(code = 200, condition = "success"),
@ResponseCode(code = 500, condition = "internal server error")
})
@Produces(VndMediaType.REPOSITORY_TYPE_COLLECTION)
public Collection<String> getRepositoryPermissionVerbs() {
return repositoryPermissionProvider.availableVerbs();
}
@GET
@Path("roles")
@StatusCodes({
@ResponseCode(code = 200, condition = "success"),
@ResponseCode(code = 500, condition = "internal server error")
})
@Produces(VndMediaType.REPOSITORY_TYPE_COLLECTION)
public Collection getRepositoryRoles() {
return repositoryPermissionProvider.availableRoles();
}
}

View File

@@ -21,15 +21,15 @@ import java.util.Enumeration;
import java.util.List;
import java.util.stream.Collectors;
public class RepositoryPermissions {
public class RepositoryPermissionProvider {
private static final Logger logger = LoggerFactory.getLogger(RepositoryPermissions.class);
private static final Logger logger = LoggerFactory.getLogger(RepositoryPermissionProvider.class);
private static final String REPOSITORY_PERMISSION_DESCRIPTOR = "META-INF/scm/repository-permissions.xml";
private final ConfigurationEntryStoreFactory storeFactory;
private final AvailableRepositoryPermissions availablePermissions;
@Inject
public RepositoryPermissions(ConfigurationEntryStoreFactory storeFactory, PluginLoader pluginLoader) {
public RepositoryPermissionProvider(ConfigurationEntryStoreFactory storeFactory, PluginLoader pluginLoader) {
this.storeFactory = storeFactory;
this.availablePermissions = readAvailablePermissions(pluginLoader);
}
@@ -57,7 +57,7 @@ public class RepositoryPermissions {
while (descriptorEnum.hasMoreElements()) {
URL descriptorUrl = descriptorEnum.nextElement();
logger.debug("read permission descriptor from {}", descriptorUrl);
logger.debug("read repository permission descriptor from {}", descriptorUrl);
RepositoryPermissionsRoot repositoryPermissionsRoot = parsePermissionDescriptor(context, descriptorUrl);
availableVerbs.addAll(repositoryPermissionsRoot.verbs.verbs);
@@ -79,7 +79,8 @@ public class RepositoryPermissions {
RepositoryPermissionsRoot descriptorWrapper =
(RepositoryPermissionsRoot) context.createUnmarshaller().unmarshal(
descriptorUrl);
logger.trace("permissions from {}: {}", descriptorUrl, descriptorWrapper);
logger.trace("repository permissions from {}: {}", descriptorUrl, descriptorWrapper.verbs.verbs);
logger.trace("repository roles from {}: {}", descriptorUrl, descriptorWrapper.roles.roles);
return descriptorWrapper;
} catch (JAXBException ex) {
logger.error("could not parse permission descriptor", ex);