From 69b64948a0a3aadfca70f7139cc14b03ce69335d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Wed, 23 Jan 2019 12:33:34 +0100 Subject: [PATCH] Remove duplicates --- .../RepositoryPermissionProvider.java | 34 +++++++-------- .../sonia/scm/security/RepositoryRole.java | 42 +++++++++++++++++++ .../RepositoryPermissionProviderTest.java | 4 +- 3 files changed, 58 insertions(+), 22 deletions(-) create mode 100644 scm-webapp/src/main/java/sonia/scm/security/RepositoryRole.java diff --git a/scm-webapp/src/main/java/sonia/scm/security/RepositoryPermissionProvider.java b/scm-webapp/src/main/java/sonia/scm/security/RepositoryPermissionProvider.java index f02c31b0ed..d11da777e3 100644 --- a/scm-webapp/src/main/java/sonia/scm/security/RepositoryPermissionProvider.java +++ b/scm-webapp/src/main/java/sonia/scm/security/RepositoryPermissionProvider.java @@ -4,7 +4,6 @@ import com.google.inject.Inject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.plugin.PluginLoader; -import sonia.scm.store.ConfigurationEntryStoreFactory; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; @@ -16,30 +15,33 @@ import java.io.IOException; import java.net.URL; import java.util.ArrayList; import java.util.Collection; -import java.util.Collections; import java.util.Enumeration; +import java.util.HashSet; import java.util.List; import java.util.stream.Collectors; +import static java.util.Collections.unmodifiableCollection; + public class RepositoryPermissionProvider { 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; + private final Collection availableVerbs; + private final Collection availableRoles; @Inject - public RepositoryPermissionProvider(ConfigurationEntryStoreFactory storeFactory, PluginLoader pluginLoader) { - this.storeFactory = storeFactory; - this.availablePermissions = readAvailablePermissions(pluginLoader); + public RepositoryPermissionProvider(PluginLoader pluginLoader) { + AvailableRepositoryPermissions 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 availableVerbs() { - return availablePermissions.availableVerbs; + return availableVerbs; } - public Collection availableRoles() { - return availablePermissions.availableRoles; + public Collection availableRoles() { + return availableRoles; } private static AvailableRepositoryPermissions readAvailablePermissions(PluginLoader pluginLoader) { @@ -93,8 +95,8 @@ public class RepositoryPermissionProvider { private final Collection availableRoles; private AvailableRepositoryPermissions(Collection availableVerbs, Collection availableRoles) { - this.availableVerbs = Collections.unmodifiableCollection(availableVerbs); - this.availableRoles = Collections.unmodifiableCollection(availableRoles); + this.availableVerbs = unmodifiableCollection(availableVerbs); + this.availableRoles = unmodifiableCollection(availableRoles); } } @@ -124,13 +126,5 @@ public class RepositoryPermissionProvider { private String name; @XmlElement(name = "verbs") private VerbListDescriptor verbs = new VerbListDescriptor(); - - public Collection getVerbs() { - return Collections.unmodifiableCollection(verbs.verbs); - } - - public String toString() { - return "Role " + name + " (" + verbs.verbs.stream().collect(Collectors.joining(", ")) + ")"; - } } } diff --git a/scm-webapp/src/main/java/sonia/scm/security/RepositoryRole.java b/scm-webapp/src/main/java/sonia/scm/security/RepositoryRole.java new file mode 100644 index 0000000000..12170e3cf4 --- /dev/null +++ b/scm-webapp/src/main/java/sonia/scm/security/RepositoryRole.java @@ -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 verbs; + + public RepositoryRole(String name, Collection verbs) { + this.name = name; + this.verbs = verbs; + } + + public String getName() { + return name; + } + + public Collection 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); + } +} diff --git a/scm-webapp/src/test/java/sonia/scm/security/RepositoryPermissionProviderTest.java b/scm-webapp/src/test/java/sonia/scm/security/RepositoryPermissionProviderTest.java index f1aa62f5b1..487d8b71c8 100644 --- a/scm-webapp/src/test/java/sonia/scm/security/RepositoryPermissionProviderTest.java +++ b/scm-webapp/src/test/java/sonia/scm/security/RepositoryPermissionProviderTest.java @@ -26,7 +26,7 @@ class RepositoryPermissionProviderTest { PluginLoader pluginLoader = mock(PluginLoader.class); when(pluginLoader.getUberClassLoader()).thenReturn(ClassLoaders.getContextClassLoader(DefaultSecuritySystem.class)); ConfigurationEntryStoreFactory configurationEntryStoreFactory = mock(ConfigurationEntryStoreFactory.class); - repositoryPermissionProvider = new RepositoryPermissionProvider(configurationEntryStoreFactory, pluginLoader); + repositoryPermissionProvider = new RepositoryPermissionProvider(pluginLoader); allVerbsFromRepositoryClass = Arrays.stream(RepositoryPermissions.class.getDeclaredFields()) .filter(field -> field.getName().startsWith("ACTION_")) .map(this::getString) @@ -40,7 +40,7 @@ class RepositoryPermissionProviderTest { 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) { assertThat(role.getVerbs()).isSubsetOf(allVerbsFromRepositoryClass); }