From 06fa257080ab8de7986ad5debbf317eddf5608e7 Mon Sep 17 00:00:00 2001 From: Alex Lewis <alex.lewis001@gmail.com> Date: Tue, 10 Dec 2013 11:41:36 -0500 Subject: [PATCH] issue-350: Fixes issue when an apostrophe is present in a User's name --- src/main/java/com/gitblit/models/TeamModel.java | 60 +++++++++++++++++++++++++++++++++++++----------------------- 1 files changed, 37 insertions(+), 23 deletions(-) diff --git a/src/main/java/com/gitblit/models/TeamModel.java b/src/main/java/com/gitblit/models/TeamModel.java index e0499f7..aaa3d54 100644 --- a/src/main/java/com/gitblit/models/TeamModel.java +++ b/src/main/java/com/gitblit/models/TeamModel.java @@ -27,6 +27,7 @@ import com.gitblit.Constants.AccessPermission; import com.gitblit.Constants.AccessRestrictionType; +import com.gitblit.Constants.AccountType; import com.gitblit.Constants.PermissionType; import com.gitblit.Constants.RegistrantType; import com.gitblit.Constants.Unused; @@ -35,9 +36,9 @@ /** * TeamModel is a serializable model class that represents a group of users and * a list of accessible repositories. - * + * * @author James Moger - * + * */ public class TeamModel implements Serializable, Comparable<TeamModel> { @@ -48,6 +49,7 @@ public boolean canAdmin; public boolean canFork; public boolean canCreate; + public AccountType accountType; public final Set<String> users = new HashSet<String>(); // retained for backwards-compatibility with RPC clients @Deprecated @@ -59,6 +61,7 @@ public TeamModel(String name) { this.name = name; + this.accountType = AccountType.LOCAL; } /** @@ -77,7 +80,7 @@ public void addRepository(String name) { addRepositoryPermission(name); } - + @Deprecated @Unused public void addRepositories(Collection<String> names) { @@ -90,10 +93,10 @@ removeRepositoryPermission(name); } - + /** * Returns a list of repository permissions for this team. - * + * * @return the team's list of permissions */ public List<RegistrantAccessPermission> getRepositoryPermissions() { @@ -117,11 +120,11 @@ Collections.sort(list); return list; } - + /** * Returns true if the team has any type of specified access permission for * this repository. - * + * * @param name * @return true if team has a specified access permission for the repository */ @@ -143,11 +146,11 @@ } return false; } - + /** * Returns true if the team has an explicitly specified access permission for * this repository. - * + * * @param name * @return if the team has an explicitly specified access permission */ @@ -155,7 +158,7 @@ String repository = AccessPermission.repositoryFromRole(name).toLowerCase(); return permissions.containsKey(repository); } - + /** * Adds a repository permission to the team. * <p> @@ -178,28 +181,35 @@ addRepositoryPermission(role); } } - + public AccessPermission removeRepositoryPermission(String name) { String repository = AccessPermission.repositoryFromRole(name).toLowerCase(); repositories.remove(repository); return permissions.remove(repository); } - + public void setRepositoryPermission(String repository, AccessPermission permission) { - permissions.put(repository.toLowerCase(), permission); - repositories.add(repository.toLowerCase()); + if (permission == null) { + // remove the permission + permissions.remove(repository.toLowerCase()); + repositories.remove(repository.toLowerCase()); + } else { + // set the new permission + permissions.put(repository.toLowerCase(), permission); + repositories.add(repository.toLowerCase()); + } } - + public RegistrantAccessPermission getRepositoryPermission(RepositoryModel repository) { RegistrantAccessPermission ap = new RegistrantAccessPermission(); ap.registrant = name; ap.registrantType = RegistrantType.TEAM; ap.permission = AccessPermission.NONE; ap.mutable = false; - + // determine maximum permission for the repository - final AccessPermission maxPermission = - (repository.isFrozen || !repository.isBare) ? + final AccessPermission maxPermission = + (repository.isFrozen || !repository.isBare || repository.isMirror) ? AccessPermission.CLONE : AccessPermission.REWIND; if (AccessRestrictionType.NONE.equals(repository.accessRestriction)) { @@ -212,7 +222,7 @@ } return ap; } - + if (canAdmin) { ap.permissionType = PermissionType.ADMINISTRATOR; if (AccessPermission.REWIND.atMost(maxPermission)) { @@ -222,7 +232,7 @@ } return ap; } - + if (permissions.containsKey(repository.name.toLowerCase())) { // exact repository permission specified AccessPermission p = permissions.get(repository.name.toLowerCase()); @@ -255,7 +265,7 @@ } } } - + // still no explicit or regex, check for implicit permissions if (AccessPermission.NONE == ap.permission) { switch (repository.accessRestriction) { @@ -282,7 +292,7 @@ return ap; } - + protected boolean canAccess(RepositoryModel repository, AccessRestrictionType ifRestriction, AccessPermission requirePermission) { if (repository.accessRestriction.atLeast(ifRestriction)) { RegistrantAccessPermission ap = getRepositoryPermission(repository); @@ -290,7 +300,7 @@ } return true; } - + public boolean canView(RepositoryModel repository) { return canAccess(repository, AccessRestrictionType.VIEW, AccessPermission.VIEW); } @@ -351,6 +361,10 @@ } } + public boolean isLocalTeam() { + return accountType.isLocal(); + } + @Override public String toString() { return name; -- Gitblit v1.9.1