update svnkit to version 1.7.9-scm1

This commit is contained in:
Sebastian Sdorra
2013-05-29 20:22:34 +02:00
parent baf5681849
commit 235b3322fe
5 changed files with 144 additions and 70 deletions

View File

@@ -431,7 +431,7 @@
<!-- repostitory libraries --> <!-- repostitory libraries -->
<jgit.version>2.3.1.201302201838-r</jgit.version> <jgit.version>2.3.1.201302201838-r</jgit.version>
<svnkit.version>1.7.8-scm1</svnkit.version> <svnkit.version>1.7.9-scm1</svnkit.version>
<!-- build properties --> <!-- build properties -->
<project.build.javaLevel>1.6</project.build.javaLevel> <project.build.javaLevel>1.6</project.build.javaLevel>

View File

@@ -338,7 +338,7 @@ public class AuthenticationResource
Builder<String> builder = ImmutableList.builder(); Builder<String> builder = ImmutableList.builder();
for (Permission p : permissionCollector.collect(user, groups)) for (Permission p : permissionCollector.collect())
{ {
if (p instanceof StringablePermission) if (p instanceof StringablePermission)
{ {

View File

@@ -36,24 +36,32 @@ package sonia.scm.security;
import com.google.common.base.Predicate; import com.google.common.base.Predicate;
import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableList.Builder; import com.google.common.collect.ImmutableList.Builder;
import com.google.common.eventbus.Subscribe;
import com.google.inject.Inject; import com.google.inject.Inject;
import com.google.inject.Singleton; import com.google.inject.Singleton;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authz.Permission; import org.apache.shiro.authz.Permission;
import org.apache.shiro.authz.permission.PermissionResolver; import org.apache.shiro.authz.permission.PermissionResolver;
import org.apache.shiro.subject.PrincipalCollection;
import org.apache.shiro.subject.Subject;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import sonia.scm.cache.Cache;
import sonia.scm.cache.CacheManager;
import sonia.scm.group.GroupNames; import sonia.scm.group.GroupNames;
import sonia.scm.repository.PermissionType; import sonia.scm.repository.PermissionType;
import sonia.scm.repository.Repository; import sonia.scm.repository.Repository;
import sonia.scm.repository.RepositoryDAO; import sonia.scm.repository.RepositoryDAO;
import sonia.scm.repository.RepositoryEvent;
import sonia.scm.user.User; import sonia.scm.user.User;
import sonia.scm.util.Util; import sonia.scm.util.Util;
//~--- JDK imports ------------------------------------------------------------ //~--- JDK imports ------------------------------------------------------------
import java.util.Collections;
import java.util.List; import java.util.List;
/** /**
@@ -64,6 +72,11 @@ import java.util.List;
public class PermissionCollector public class PermissionCollector
{ {
// CACHE Authorization info ???
/** Field description */
private static final String NAME = "sonia.cache.permissions";
/** /**
* the logger for PermissionCollector * the logger for PermissionCollector
*/ */
@@ -76,14 +89,18 @@ public class PermissionCollector
* Constructs ... * Constructs ...
* *
* *
*
* @param cacheManager
* @param repositoryDAO * @param repositoryDAO
* @param securitySystem * @param securitySystem
* @param resolver * @param resolver
*/ */
@Inject @Inject
public PermissionCollector(RepositoryDAO repositoryDAO, public PermissionCollector(CacheManager cacheManager,
SecuritySystem securitySystem, PermissionResolver resolver) RepositoryDAO repositoryDAO, SecuritySystem securitySystem,
PermissionResolver resolver)
{ {
this.cache = cacheManager.getCache(String.class, List.class, NAME);
this.repositoryDAO = repositoryDAO; this.repositoryDAO = repositoryDAO;
this.securitySystem = securitySystem; this.securitySystem = securitySystem;
this.resolver = resolver; this.resolver = resolver;
@@ -91,6 +108,74 @@ public class PermissionCollector
//~--- methods -------------------------------------------------------------- //~--- methods --------------------------------------------------------------
/**
* Method description
*
*
* @return
*/
public List<Permission> collect()
{
List<Permission> permissions;
Subject subject = SecurityUtils.getSubject();
if (subject.hasRole(Role.USER))
{
PrincipalCollection pc = subject.getPrincipals();
permissions = collect(pc.oneByType(User.class),
pc.oneByType(GroupNames.class));
}
else
{
permissions = Collections.EMPTY_LIST;
}
return permissions;
}
/**
* Method description
*
*
* @param event
*/
@Subscribe
public void onEvent(RepositoryEvent event)
{
if (event.getEventType().isPost())
{
if (logger.isDebugEnabled())
{
logger.debug("clear cache, because repository {} has changed",
event.getItem().getName());
}
cache.clear();
}
}
/**
* Method description
*
*
* @param event
*/
@Subscribe
public void onEvent(StoredAssignedPermissionEvent event)
{
if (event.getEventType().isPost())
{
if (logger.isDebugEnabled())
{
logger.debug("clear cache, because permission {} has changed",
event.getPermission().getId());
}
cache.clear();
}
}
/** /**
* Method description * Method description
* *
@@ -100,31 +185,17 @@ public class PermissionCollector
* *
* @return * @return
*/ */
public List<Permission> collect(User user, GroupNames groups) List<Permission> collect(User user, GroupNames groups)
{ {
Builder<Permission> builder = ImmutableList.builder(); List<Permission> permissions = cache.get(user.getName());
if (user.isActive()) if (permissions == null)
{ {
if (user.isAdmin()) permissions = doCollect(user, groups);
{ cache.put(user.getName(), permissions);
//J-
builder.add(
new RepositoryPermission(
RepositoryPermission.WILDCARD,
PermissionType.OWNER
)
);
//J+
}
else
{
collectRepositoryPermissions(builder, user, groups);
collectGlobalPermissions(builder, user, groups);
}
} }
return builder.build(); return permissions;
} }
/** /**
@@ -244,6 +315,42 @@ public class PermissionCollector
} }
} }
/**
* Method description
*
*
* @param user
* @param groups
*
* @return
*/
private List<Permission> doCollect(User user, GroupNames groups)
{
Builder<Permission> builder = ImmutableList.builder();
if (user.isActive())
{
if (user.isAdmin())
{
//J-
builder.add(
new RepositoryPermission(
RepositoryPermission.WILDCARD,
PermissionType.OWNER
)
);
//J+
}
else
{
collectRepositoryPermissions(builder, user, groups);
collectGlobalPermissions(builder, user, groups);
}
}
return builder.build();
}
//~--- get methods ---------------------------------------------------------- //~--- get methods ----------------------------------------------------------
/** /**
@@ -267,6 +374,9 @@ public class PermissionCollector
//~--- fields --------------------------------------------------------------- //~--- fields ---------------------------------------------------------------
/** Field description */
private Cache<String, List> cache;
/** Field description */ /** Field description */
private RepositoryDAO repositoryDAO; private RepositoryDAO repositoryDAO;

View File

@@ -68,7 +68,6 @@ import sonia.scm.event.Subscriber;
import sonia.scm.group.Group; import sonia.scm.group.Group;
import sonia.scm.group.GroupManager; import sonia.scm.group.GroupManager;
import sonia.scm.group.GroupNames; import sonia.scm.group.GroupNames;
import sonia.scm.repository.RepositoryEvent;
import sonia.scm.repository.RepositoryManager; import sonia.scm.repository.RepositoryManager;
import sonia.scm.user.User; import sonia.scm.user.User;
import sonia.scm.user.UserDAO; import sonia.scm.user.UserDAO;
@@ -169,48 +168,6 @@ public class ScmRealm extends AuthorizingRealm
//~--- methods -------------------------------------------------------------- //~--- methods --------------------------------------------------------------
/**
* Method description
*
*
* @param event
*/
@Subscribe
public void onEvent(RepositoryEvent event)
{
if (event.getEventType().isPost())
{
if (logger.isDebugEnabled())
{
logger.debug("clear cache, because repository {} has changed",
event.getItem().getName());
}
cache.clear();
}
}
/**
* Method description
*
*
* @param event
*/
@Subscribe
public void onEvent(StoredAssignedPermissionEvent event)
{
if (event.getEventType().isPost())
{
if (logger.isDebugEnabled())
{
logger.debug("clear cache, because permission {} has changed",
event.getPermission().getId());
}
cache.clear();
}
}
/** /**
* Method description * Method description
* *

View File

@@ -53,6 +53,7 @@ import org.junit.Test;
import org.mockito.Mockito; import org.mockito.Mockito;
import sonia.scm.cache.CacheManager;
import sonia.scm.cache.MapCacheManager; import sonia.scm.cache.MapCacheManager;
import sonia.scm.config.ScmConfiguration; import sonia.scm.config.ScmConfiguration;
import sonia.scm.group.Group; import sonia.scm.group.Group;
@@ -475,13 +476,19 @@ public class ScmRealmTest
Collections.EMPTY_LIST Collections.EMPTY_LIST
); );
PermissionCollector collector = new PermissionCollector(repositoryDAO, CacheManager cacheManager = new MapCacheManager();
securitySystem, new RepositoryPermissionResolver());
PermissionCollector collector = new PermissionCollector(
cacheManager,
repositoryDAO,
securitySystem,
new RepositoryPermissionResolver()
);
return new ScmRealm( return new ScmRealm(
new ScmConfiguration(), new ScmConfiguration(),
collector, collector,
new MapCacheManager(), cacheManager,
userManager, userManager,
groupManager, groupManager,
userDAO, userDAO,