From 7847af6e63e7adef6ec8d99a1809e91472d2bc2d Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Thu, 05 Sep 2013 09:14:22 -0400 Subject: [PATCH] Restore blockpush and localclone hooks to binaries (issue-303) --- src/main/java/com/gitblit/models/TeamModel.java | 44 ++++++++++++++++++++++++++++++++++++-------- 1 files changed, 36 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/gitblit/models/TeamModel.java b/src/main/java/com/gitblit/models/TeamModel.java index 8e0d5d5..dfbd45d 100644 --- a/src/main/java/com/gitblit/models/TeamModel.java +++ b/src/main/java/com/gitblit/models/TeamModel.java @@ -186,8 +186,15 @@ } 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) { @@ -197,16 +204,29 @@ ap.permission = AccessPermission.NONE; ap.mutable = false; + // determine maximum permission for the repository + final AccessPermission maxPermission = + (repository.isFrozen || !repository.isBare) ? + AccessPermission.CLONE : AccessPermission.REWIND; + if (AccessRestrictionType.NONE.equals(repository.accessRestriction)) { // anonymous rewind ap.permissionType = PermissionType.ANONYMOUS; - ap.permission = AccessPermission.REWIND; + if (AccessPermission.REWIND.atMost(maxPermission)) { + ap.permission = AccessPermission.REWIND; + } else { + ap.permission = maxPermission; + } return ap; } if (canAdmin) { ap.permissionType = PermissionType.ADMINISTRATOR; - ap.permission = AccessPermission.REWIND; + if (AccessPermission.REWIND.atMost(maxPermission)) { + ap.permission = AccessPermission.REWIND; + } else { + ap.permission = maxPermission; + } return ap; } @@ -215,7 +235,11 @@ AccessPermission p = permissions.get(repository.name.toLowerCase()); if (p != null && repository.accessRestriction.isValidPermission(p)) { ap.permissionType = PermissionType.EXPLICIT; - ap.permission = p; + if (p.atMost(maxPermission)) { + ap.permission = p; + } else { + ap.permission = maxPermission; + } ap.mutable = true; return ap; } @@ -227,7 +251,11 @@ if (p != null && repository.accessRestriction.isValidPermission(p)) { // take first match ap.permissionType = PermissionType.REGEX; - ap.permission = p; + if (p.atMost(maxPermission)) { + ap.permission = p; + } else { + ap.permission = maxPermission; + } ap.source = key; return ap; } @@ -252,8 +280,8 @@ ap.permissionType = PermissionType.ANONYMOUS; break; case NONE: - // implied REWIND or CLONE if frozen - ap.permission = repository.isFrozen ? AccessPermission.CLONE : AccessPermission.REWIND; + // implied REWIND or CLONE + ap.permission = maxPermission; ap.permissionType = PermissionType.ANONYMOUS; break; } -- Gitblit v1.9.1