mirror of
https://github.com/scm-manager/scm-manager.git
synced 2025-11-09 15:05:44 +01:00
Remove duplicates
This commit is contained in:
@@ -4,7 +4,6 @@ import com.google.inject.Inject;
|
|||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import sonia.scm.plugin.PluginLoader;
|
import sonia.scm.plugin.PluginLoader;
|
||||||
import sonia.scm.store.ConfigurationEntryStoreFactory;
|
|
||||||
|
|
||||||
import javax.xml.bind.JAXBContext;
|
import javax.xml.bind.JAXBContext;
|
||||||
import javax.xml.bind.JAXBException;
|
import javax.xml.bind.JAXBException;
|
||||||
@@ -16,30 +15,33 @@ import java.io.IOException;
|
|||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.Enumeration;
|
import java.util.Enumeration;
|
||||||
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
import static java.util.Collections.unmodifiableCollection;
|
||||||
|
|
||||||
public class RepositoryPermissionProvider {
|
public class RepositoryPermissionProvider {
|
||||||
|
|
||||||
private static final Logger logger = LoggerFactory.getLogger(RepositoryPermissionProvider.class);
|
private static final Logger logger = LoggerFactory.getLogger(RepositoryPermissionProvider.class);
|
||||||
private static final String REPOSITORY_PERMISSION_DESCRIPTOR = "META-INF/scm/repository-permissions.xml";
|
private static final String REPOSITORY_PERMISSION_DESCRIPTOR = "META-INF/scm/repository-permissions.xml";
|
||||||
private final ConfigurationEntryStoreFactory storeFactory;
|
private final Collection<String> availableVerbs;
|
||||||
private final AvailableRepositoryPermissions availablePermissions;
|
private final Collection<RepositoryRole> availableRoles;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public RepositoryPermissionProvider(ConfigurationEntryStoreFactory storeFactory, PluginLoader pluginLoader) {
|
public RepositoryPermissionProvider(PluginLoader pluginLoader) {
|
||||||
this.storeFactory = storeFactory;
|
AvailableRepositoryPermissions availablePermissions = readAvailablePermissions(pluginLoader);
|
||||||
this.availablePermissions = readAvailablePermissions(pluginLoader);
|
this.availableVerbs = unmodifiableCollection(new HashSet<>(availablePermissions.availableVerbs));
|
||||||
|
this.availableRoles = unmodifiableCollection(new HashSet<>(availablePermissions.availableRoles.stream().map(r -> new RepositoryRole(r.name, r.verbs.verbs)).collect(Collectors.toList())));
|
||||||
}
|
}
|
||||||
|
|
||||||
public Collection<String> availableVerbs() {
|
public Collection<String> availableVerbs() {
|
||||||
return availablePermissions.availableVerbs;
|
return availableVerbs;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Collection<RoleDescriptor> availableRoles() {
|
public Collection<RepositoryRole> availableRoles() {
|
||||||
return availablePermissions.availableRoles;
|
return availableRoles;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static AvailableRepositoryPermissions readAvailablePermissions(PluginLoader pluginLoader) {
|
private static AvailableRepositoryPermissions readAvailablePermissions(PluginLoader pluginLoader) {
|
||||||
@@ -93,8 +95,8 @@ public class RepositoryPermissionProvider {
|
|||||||
private final Collection<RoleDescriptor> availableRoles;
|
private final Collection<RoleDescriptor> availableRoles;
|
||||||
|
|
||||||
private AvailableRepositoryPermissions(Collection<String> availableVerbs, Collection<RoleDescriptor> availableRoles) {
|
private AvailableRepositoryPermissions(Collection<String> availableVerbs, Collection<RoleDescriptor> availableRoles) {
|
||||||
this.availableVerbs = Collections.unmodifiableCollection(availableVerbs);
|
this.availableVerbs = unmodifiableCollection(availableVerbs);
|
||||||
this.availableRoles = Collections.unmodifiableCollection(availableRoles);
|
this.availableRoles = unmodifiableCollection(availableRoles);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -124,13 +126,5 @@ public class RepositoryPermissionProvider {
|
|||||||
private String name;
|
private String name;
|
||||||
@XmlElement(name = "verbs")
|
@XmlElement(name = "verbs")
|
||||||
private VerbListDescriptor verbs = new VerbListDescriptor();
|
private VerbListDescriptor verbs = new VerbListDescriptor();
|
||||||
|
|
||||||
public Collection<String> getVerbs() {
|
|
||||||
return Collections.unmodifiableCollection(verbs.verbs);
|
|
||||||
}
|
|
||||||
|
|
||||||
public String toString() {
|
|
||||||
return "Role " + name + " (" + verbs.verbs.stream().collect(Collectors.joining(", ")) + ")";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,42 @@
|
|||||||
|
package sonia.scm.security;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
public class RepositoryRole {
|
||||||
|
|
||||||
|
private final String name;
|
||||||
|
private final Collection<String> verbs;
|
||||||
|
|
||||||
|
public RepositoryRole(String name, Collection<String> verbs) {
|
||||||
|
this.name = name;
|
||||||
|
this.verbs = verbs;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Collection<String> getVerbs() {
|
||||||
|
return Collections.unmodifiableCollection(verbs);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String toString() {
|
||||||
|
return "Role " + name + " (" + String.join(", ", verbs) + ")";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object o) {
|
||||||
|
if (this == o) return true;
|
||||||
|
if (!(o instanceof RepositoryRole)) return false;
|
||||||
|
RepositoryRole that = (RepositoryRole) o;
|
||||||
|
return name.equals(that.name) &&
|
||||||
|
verbs.equals(that.verbs);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return Objects.hash(name, verbs);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -26,7 +26,7 @@ class RepositoryPermissionProviderTest {
|
|||||||
PluginLoader pluginLoader = mock(PluginLoader.class);
|
PluginLoader pluginLoader = mock(PluginLoader.class);
|
||||||
when(pluginLoader.getUberClassLoader()).thenReturn(ClassLoaders.getContextClassLoader(DefaultSecuritySystem.class));
|
when(pluginLoader.getUberClassLoader()).thenReturn(ClassLoaders.getContextClassLoader(DefaultSecuritySystem.class));
|
||||||
ConfigurationEntryStoreFactory configurationEntryStoreFactory = mock(ConfigurationEntryStoreFactory.class);
|
ConfigurationEntryStoreFactory configurationEntryStoreFactory = mock(ConfigurationEntryStoreFactory.class);
|
||||||
repositoryPermissionProvider = new RepositoryPermissionProvider(configurationEntryStoreFactory, pluginLoader);
|
repositoryPermissionProvider = new RepositoryPermissionProvider(pluginLoader);
|
||||||
allVerbsFromRepositoryClass = Arrays.stream(RepositoryPermissions.class.getDeclaredFields())
|
allVerbsFromRepositoryClass = Arrays.stream(RepositoryPermissions.class.getDeclaredFields())
|
||||||
.filter(field -> field.getName().startsWith("ACTION_"))
|
.filter(field -> field.getName().startsWith("ACTION_"))
|
||||||
.map(this::getString)
|
.map(this::getString)
|
||||||
@@ -40,7 +40,7 @@ class RepositoryPermissionProviderTest {
|
|||||||
assertThat(repositoryPermissionProvider.availableRoles()).allSatisfy(this::eitherStarOrOnlyAvailableVerbs);
|
assertThat(repositoryPermissionProvider.availableRoles()).allSatisfy(this::eitherStarOrOnlyAvailableVerbs);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void eitherStarOrOnlyAvailableVerbs(RepositoryPermissionProvider.RoleDescriptor role) {
|
private void eitherStarOrOnlyAvailableVerbs(RepositoryRole role) {
|
||||||
if (!role.getVerbs().contains("*") || role.getVerbs().size() > 1) {
|
if (!role.getVerbs().contains("*") || role.getVerbs().size() > 1) {
|
||||||
assertThat(role.getVerbs()).isSubsetOf(allVerbsFromRepositoryClass);
|
assertThat(role.getVerbs()).isSubsetOf(allVerbsFromRepositoryClass);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user