From 3e44b65e329c199f95488f9429c1a20362c70b4d Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Mon, 22 Oct 2012 08:55:44 -0400 Subject: [PATCH] Ensure illegal repository names are rejected in create-on-push --- src/com/gitblit/models/UserModel.java | 33 ++++++++++++++++++++++++++++----- 1 files changed, 28 insertions(+), 5 deletions(-) diff --git a/src/com/gitblit/models/UserModel.java b/src/com/gitblit/models/UserModel.java index 38a7aae..7995f7e 100644 --- a/src/com/gitblit/models/UserModel.java +++ b/src/com/gitblit/models/UserModel.java @@ -28,6 +28,7 @@ import com.gitblit.Constants.AccessPermission; import com.gitblit.Constants.AccessRestrictionType; import com.gitblit.Constants.AuthorizationControl; +import com.gitblit.Constants.RegistrantType; import com.gitblit.Constants.Unused; import com.gitblit.utils.ArrayUtils; import com.gitblit.utils.StringUtils; @@ -133,10 +134,10 @@ * * @return the user's list of permissions */ - public List<RepositoryAccessPermission> getRepositoryPermissions() { - List<RepositoryAccessPermission> list = new ArrayList<RepositoryAccessPermission>(); + public List<RegistrantAccessPermission> getRepositoryPermissions() { + List<RegistrantAccessPermission> list = new ArrayList<RegistrantAccessPermission>(); for (Map.Entry<String, AccessPermission> entry : permissions.entrySet()) { - list.add(new RepositoryAccessPermission(entry.getKey(), entry.getValue())); + list.add(new RegistrantAccessPermission(entry.getKey(), entry.getValue(), RegistrantType.REPOSITORY)); } Collections.sort(list); return list; @@ -208,10 +209,10 @@ // and the permissions of teams of which the user belongs AccessPermission permission = AccessPermission.NONE; if (permissions.containsKey(repository.name.toLowerCase())) { - // exact repository permission specified + // exact repository permission specified, use it AccessPermission p = permissions.get(repository.name.toLowerCase()); if (p != null) { - permission = p; + return p; } } else { // search for regex permission match @@ -363,6 +364,28 @@ } return false; } + + /** + * Returns true if the user is allowed to create the specified repository + * on-push if the repository does not already exist. + * + * @param repository + * @return true if the user can create the repository + */ + public boolean canCreateOnPush(String repository) { + if (canAdmin()) { + // admins can create any repository + return true; + } + if (canCreate) { + String projectPath = StringUtils.getFirstPathElement(repository); + if (!StringUtils.isEmpty(projectPath) && projectPath.equalsIgnoreCase("~" + username)) { + // personal repository + return true; + } + } + return false; + } public boolean isTeamMember(String teamname) { for (TeamModel team : teams) { -- Gitblit v1.9.1