From a4231d30c4d2765c80f57df79cd1d4d39a9795ea Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Tue, 30 Oct 2012 17:05:30 -0400 Subject: [PATCH] Added null checkinng and logging for edit user permissions (issue 155) --- src/com/gitblit/client/GitblitClient.java | 69 +++++++++++++++++++++++++++++++--- 1 files changed, 62 insertions(+), 7 deletions(-) diff --git a/src/com/gitblit/client/GitblitClient.java b/src/com/gitblit/client/GitblitClient.java index 9e31c79..b7047d7 100644 --- a/src/com/gitblit/client/GitblitClient.java +++ b/src/com/gitblit/client/GitblitClient.java @@ -28,18 +28,20 @@ import java.util.TreeSet; import com.gitblit.Constants; +import com.gitblit.Constants.AccessPermission; import com.gitblit.Constants.AccessRestrictionType; import com.gitblit.Constants.AuthorizationControl; +import com.gitblit.Constants.PermissionType; import com.gitblit.Constants.RegistrantType; import com.gitblit.GitBlitException.ForbiddenException; import com.gitblit.GitBlitException.NotAllowedException; import com.gitblit.GitBlitException.UnauthorizedException; import com.gitblit.GitBlitException.UnknownRequestException; import com.gitblit.Keys; -import com.gitblit.models.RegistrantAccessPermission; import com.gitblit.models.FederationModel; import com.gitblit.models.FeedEntryModel; import com.gitblit.models.FeedModel; +import com.gitblit.models.RegistrantAccessPermission; import com.gitblit.models.RepositoryModel; import com.gitblit.models.ServerSettings; import com.gitblit.models.ServerStatus; @@ -339,6 +341,7 @@ List<UserModel> users = RpcUtils.getUsers(url, account, password); allUsers.clear(); allUsers.addAll(users); + Collections.sort(users); return allUsers; } @@ -346,6 +349,7 @@ List<TeamModel> teams = RpcUtils.getTeams(url, account, password); allTeams.clear(); allTeams.addAll(teams); + Collections.sort(teams); return allTeams; } @@ -474,6 +478,15 @@ public List<UserModel> getUsers() { return allUsers; } + + public UserModel getUser(String username) { + for (UserModel user : getUsers()) { + if (user.username.equalsIgnoreCase(username)) { + return user; + } + } + return null; + } public List<String> getUsernames() { List<String> usernames = new ArrayList<String>(); @@ -495,13 +508,38 @@ } public List<RegistrantAccessPermission> getUserAccessPermissions(RepositoryModel repository) { - List<RegistrantAccessPermission> list = new ArrayList<RegistrantAccessPermission>(); - for (UserModel user : allUsers) { - if (user.hasRepositoryPermission(repository.name)) { - list.add(new RegistrantAccessPermission(user.username, user.permissions.get(repository.name), RegistrantType.USER)); + Set<RegistrantAccessPermission> list = new LinkedHashSet<RegistrantAccessPermission>(); + if (!StringUtils.isEmpty(repository.owner)) { + UserModel owner = getUser(repository.owner); + if (owner != null) { + list.add(new RegistrantAccessPermission(owner.username, AccessPermission.REWIND, PermissionType.OWNER, RegistrantType.USER, false)); } } - return list; + if (repository.isPersonalRepository()) { + UserModel owner = getUser(repository.projectPath.substring(1)); + if (owner != null) { + list.add(new RegistrantAccessPermission(owner.username, AccessPermission.REWIND, PermissionType.OWNER, RegistrantType.USER, false)); + } + } + for (UserModel user : getUsers()) { + if (user.hasRepositoryPermission(repository.name)) { + AccessPermission ap = user.getRepositoryPermission(repository); + PermissionType pType = PermissionType.REGEX; + boolean editable = false; + if (repository.isOwner(user.username)) { + pType = PermissionType.OWNER; + } else if (repository.isUsersPersonalRepository(user.username)) { + pType = PermissionType.OWNER; + } else if (user.hasExplicitRepositoryPermission(repository.name)) { + pType = PermissionType.EXPLICIT; + editable = true; + } + list.add(new RegistrantAccessPermission(user.username, ap, pType, RegistrantType.USER, editable)); + } + } + List<RegistrantAccessPermission> raps = new ArrayList<RegistrantAccessPermission>(list); + Collections.sort(raps); + return raps; } public boolean setUserAccessPermissions(RepositoryModel repository, List<RegistrantAccessPermission> permissions) throws IOException { @@ -535,9 +573,17 @@ List<RegistrantAccessPermission> list = new ArrayList<RegistrantAccessPermission>(); for (TeamModel team : allTeams) { if (team.hasRepositoryPermission(repository.name)) { - list.add(new RegistrantAccessPermission(team.name, team.permissions.get(repository.name), RegistrantType.TEAM)); + AccessPermission ap = team.getRepositoryPermission(repository); + PermissionType pType = PermissionType.REGEX; + boolean editable = false; + if (team.hasExplicitRepositoryPermission(repository.name)) { + pType = PermissionType.EXPLICIT; + editable = true; + } + list.add(new RegistrantAccessPermission(team.name, ap, pType, RegistrantType.TEAM, editable)); } } + Collections.sort(list); return list; } @@ -561,6 +607,15 @@ public List<RepositoryModel> getRepositories() { return allRepositories; } + + public RepositoryModel getRepository(String name) { + for (RepositoryModel repository : allRepositories) { + if (repository.name.equalsIgnoreCase(name)) { + return repository; + } + } + return null; + } public boolean createRepository(RepositoryModel repository, List<RegistrantAccessPermission> userPermissions) throws IOException { -- Gitblit v1.9.1