summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/com/gitblit/ConfigUserService.java12
-rw-r--r--src/com/gitblit/Constants.java5
-rw-r--r--src/com/gitblit/FederationPullExecutor.java4
-rw-r--r--src/com/gitblit/FileUserService.java3
-rw-r--r--src/com/gitblit/GitBlit.java43
-rw-r--r--src/com/gitblit/RpcServlet.java35
-rw-r--r--src/com/gitblit/client/EditRepositoryDialog.java29
-rw-r--r--src/com/gitblit/client/EditTeamDialog.java23
-rw-r--r--src/com/gitblit/client/EditUserDialog.java22
-rw-r--r--src/com/gitblit/client/GitblitClient.java51
-rw-r--r--src/com/gitblit/client/RegistrantPermissionsPanel.java140
-rw-r--r--src/com/gitblit/client/RegistrantPermissionsTableModel.java120
-rw-r--r--src/com/gitblit/client/RepositoriesPanel.java21
-rw-r--r--src/com/gitblit/client/TeamsPanel.java2
-rw-r--r--src/com/gitblit/client/UsersPanel.java2
-rw-r--r--src/com/gitblit/client/UsersTableModel.java4
-rw-r--r--src/com/gitblit/models/RegistrantAccessPermission.java (renamed from src/com/gitblit/models/RepositoryAccessPermission.java)26
-rw-r--r--src/com/gitblit/models/TeamAccessPermission.java51
-rw-r--r--src/com/gitblit/models/TeamModel.java7
-rw-r--r--src/com/gitblit/models/UserAccessPermission.java51
-rw-r--r--src/com/gitblit/models/UserModel.java11
-rw-r--r--src/com/gitblit/utils/RpcUtils.java62
-rw-r--r--src/com/gitblit/wicket/GitBlitWebApp.properties3
-rw-r--r--src/com/gitblit/wicket/pages/EditRepositoryPage.java16
-rw-r--r--src/com/gitblit/wicket/pages/EditTeamPage.java12
-rw-r--r--src/com/gitblit/wicket/pages/EditUserPage.java14
-rw-r--r--src/com/gitblit/wicket/panels/RegistrantPermissionsPanel.html (renamed from src/com/gitblit/wicket/panels/RepositoryPermissionsPanel.html)4
-rw-r--r--src/com/gitblit/wicket/panels/RegistrantPermissionsPanel.java (renamed from src/com/gitblit/wicket/panels/RepositoryPermissionsPanel.java)56
-rw-r--r--src/com/gitblit/wicket/panels/TeamPermissionsPanel.html24
-rw-r--r--src/com/gitblit/wicket/panels/TeamPermissionsPanel.java157
-rw-r--r--src/com/gitblit/wicket/panels/UserPermissionsPanel.html24
-rw-r--r--src/com/gitblit/wicket/panels/UserPermissionsPanel.java157
-rw-r--r--src/com/gitblit/wicket/panels/UsersPanel.java2
33 files changed, 540 insertions, 653 deletions
diff --git a/src/com/gitblit/ConfigUserService.java b/src/com/gitblit/ConfigUserService.java
index 82cd33e3..015cef76 100644
--- a/src/com/gitblit/ConfigUserService.java
+++ b/src/com/gitblit/ConfigUserService.java
@@ -840,16 +840,8 @@ public class ConfigUserService implements IUserService {
}
config.setStringList(USER, model.username, ROLE, roles);
- // repository memberships
- if (model.permissions == null) {
- // null check on "final" repositories because JSON-sourced UserModel
- // can have a null repositories object
- if (!ArrayUtils.isEmpty(model.repositories)) {
- config.setStringList(USER, model.username, REPOSITORY, new ArrayList<String>(
- model.repositories));
- }
- } else {
- // discrete repository permissions
+ // discrete repository permissions
+ if (model.permissions != null) {
List<String> permissions = new ArrayList<String>();
for (Map.Entry<String, AccessPermission> entry : model.permissions.entrySet()) {
if (entry.getValue().exceeds(AccessPermission.NONE)) {
diff --git a/src/com/gitblit/Constants.java b/src/com/gitblit/Constants.java
index 0e68355e..970c3db5 100644
--- a/src/com/gitblit/Constants.java
+++ b/src/com/gitblit/Constants.java
@@ -255,6 +255,7 @@ public class Constants {
LIST_USERS, CREATE_USER, EDIT_USER, DELETE_USER,
LIST_TEAMS, CREATE_TEAM, EDIT_TEAM, DELETE_TEAM,
LIST_REPOSITORY_MEMBERS, SET_REPOSITORY_MEMBERS, LIST_REPOSITORY_TEAMS, SET_REPOSITORY_TEAMS,
+ LIST_REPOSITORY_MEMBER_PERMISSIONS, SET_REPOSITORY_MEMBER_PERMISSIONS, LIST_REPOSITORY_TEAM_PERMISSIONS, SET_REPOSITORY_TEAM_PERMISSIONS,
LIST_FEDERATION_REGISTRATIONS, LIST_FEDERATION_RESULTS, LIST_FEDERATION_PROPOSALS, LIST_FEDERATION_SETS,
EDIT_SETTINGS, LIST_STATUS;
@@ -379,6 +380,10 @@ public class Constants {
}
}
+ public static enum RegistrantType {
+ REPOSITORY, USER, TEAM;
+ }
+
@Documented
@Retention(RetentionPolicy.RUNTIME)
public @interface Unused {
diff --git a/src/com/gitblit/FederationPullExecutor.java b/src/com/gitblit/FederationPullExecutor.java
index 03109dea..19afacc7 100644
--- a/src/com/gitblit/FederationPullExecutor.java
+++ b/src/com/gitblit/FederationPullExecutor.java
@@ -335,7 +335,7 @@ public class FederationPullExecutor implements Runnable {
// reparent all repository permissions if the local
// repositories are stored within subfolders
if (!StringUtils.isEmpty(registrationFolder)) {
- if (user.permissions != null && user.permissions.size() > 0) {
+ if (user.permissions != null) {
// pulling from >= 1.2 version
Map<String, AccessPermission> copy = new HashMap<String, AccessPermission>(user.permissions);
user.permissions.clear();
@@ -359,7 +359,7 @@ public class FederationPullExecutor implements Runnable {
GitBlit.self().updateUserModel(user.username, user, true);
} else {
// update repository permissions of local user
- if (user.permissions != null && user.permissions.size() > 0) {
+ if (user.permissions != null) {
// pulling from >= 1.2 version
Map<String, AccessPermission> copy = new HashMap<String, AccessPermission>(user.permissions);
for (Map.Entry<String, AccessPermission> entry : copy.entrySet()) {
diff --git a/src/com/gitblit/FileUserService.java b/src/com/gitblit/FileUserService.java
index d411b68f..39c9a5dc 100644
--- a/src/com/gitblit/FileUserService.java
+++ b/src/com/gitblit/FileUserService.java
@@ -329,8 +329,7 @@ public class FileUserService extends FileSettings implements IUserService {
UserModel oldUser = getUserModel(username);
List<String> roles;
if (model.permissions == null) {
- // legacy, use repository list
- roles = new ArrayList<String>(model.repositories);
+ roles = new ArrayList<String>();
} else {
// discrete repository permissions
roles = new ArrayList<String>();
diff --git a/src/com/gitblit/GitBlit.java b/src/com/gitblit/GitBlit.java
index af13e02d..ce556b6e 100644
--- a/src/com/gitblit/GitBlit.java
+++ b/src/com/gitblit/GitBlit.java
@@ -78,20 +78,20 @@ import com.gitblit.Constants.AuthorizationControl;
import com.gitblit.Constants.FederationRequest;
import com.gitblit.Constants.FederationStrategy;
import com.gitblit.Constants.FederationToken;
+import com.gitblit.Constants.RegistrantType;
import com.gitblit.models.FederationModel;
import com.gitblit.models.FederationProposal;
import com.gitblit.models.FederationSet;
import com.gitblit.models.ForkModel;
import com.gitblit.models.Metric;
import com.gitblit.models.ProjectModel;
+import com.gitblit.models.RegistrantAccessPermission;
import com.gitblit.models.RepositoryModel;
import com.gitblit.models.SearchResult;
import com.gitblit.models.ServerSettings;
import com.gitblit.models.ServerStatus;
import com.gitblit.models.SettingModel;
-import com.gitblit.models.TeamAccessPermission;
import com.gitblit.models.TeamModel;
-import com.gitblit.models.UserAccessPermission;
import com.gitblit.models.UserModel;
import com.gitblit.utils.ArrayUtils;
import com.gitblit.utils.ByteFormat;
@@ -637,11 +637,11 @@ public class GitBlit implements ServletContextListener {
* @param repository
* @return a list of User-AccessPermission tuples
*/
- public List<UserAccessPermission> getUserAccessPermissions(RepositoryModel repository) {
- List<UserAccessPermission> permissions = new ArrayList<UserAccessPermission>();
+ public List<RegistrantAccessPermission> getUserAccessPermissions(RepositoryModel repository) {
+ List<RegistrantAccessPermission> permissions = new ArrayList<RegistrantAccessPermission>();
for (String user : userService.getUsernamesForRepositoryRole(repository.name)) {
AccessPermission ap = userService.getUserModel(user).getRepositoryPermission(repository);
- permissions.add(new UserAccessPermission(user, ap));
+ permissions.add(new RegistrantAccessPermission(user, ap, RegistrantType.USER));
}
return permissions;
}
@@ -653,10 +653,10 @@ public class GitBlit implements ServletContextListener {
* @param permissions
* @return true if the user models have been updated
*/
- public boolean setUserAccessPermissions(RepositoryModel repository, List<UserAccessPermission> permissions) {
+ public boolean setUserAccessPermissions(RepositoryModel repository, Collection<RegistrantAccessPermission> permissions) {
List<UserModel> users = new ArrayList<UserModel>();
- for (UserAccessPermission up : permissions) {
- UserModel user = userService.getUserModel(up.user);
+ for (RegistrantAccessPermission up : permissions) {
+ UserModel user = userService.getUserModel(up.registrant);
user.setRepositoryPermission(repository.name, up.permission);
users.add(user);
}
@@ -686,7 +686,9 @@ public class GitBlit implements ServletContextListener {
*/
@Deprecated
public boolean setRepositoryUsers(RepositoryModel repository, List<String> repositoryUsers) {
- return userService.setUsernamesForRepositoryRole(repository.name, repositoryUsers);
+ // rejects all changes since 1.2.0 because this would elevate
+ // all discrete access permissions to RW+
+ return false;
}
/**
@@ -767,11 +769,11 @@ public class GitBlit implements ServletContextListener {
* @param repository
* @return a list of Team-AccessPermission tuples
*/
- public List<TeamAccessPermission> getTeamAccessPermissions(RepositoryModel repository) {
- List<TeamAccessPermission> permissions = new ArrayList<TeamAccessPermission>();
+ public List<RegistrantAccessPermission> getTeamAccessPermissions(RepositoryModel repository) {
+ List<RegistrantAccessPermission> permissions = new ArrayList<RegistrantAccessPermission>();
for (String team : userService.getTeamnamesForRepositoryRole(repository.name)) {
AccessPermission ap = userService.getTeamModel(team).getRepositoryPermission(repository);
- permissions.add(new TeamAccessPermission(team, ap));
+ permissions.add(new RegistrantAccessPermission(team, ap, RegistrantType.TEAM));
}
return permissions;
}
@@ -783,10 +785,10 @@ public class GitBlit implements ServletContextListener {
* @param permissions
* @return true if the team models have been updated
*/
- public boolean setTeamAccessPermissions(RepositoryModel repository, List<TeamAccessPermission> permissions) {
+ public boolean setTeamAccessPermissions(RepositoryModel repository, Collection<RegistrantAccessPermission> permissions) {
List<TeamModel> teams = new ArrayList<TeamModel>();
- for (TeamAccessPermission tp : permissions) {
- TeamModel team = userService.getTeamModel(tp.team);
+ for (RegistrantAccessPermission tp : permissions) {
+ TeamModel team = userService.getTeamModel(tp.registrant);
team.setRepositoryPermission(repository.name, tp.permission);
teams.add(team);
}
@@ -794,14 +796,13 @@ public class GitBlit implements ServletContextListener {
}
/**
- * Returns the list of all teams who are allowed to bypass the access
- * restriction placed on the specified repository.
+ * Returns the list of all teams who have an explicit access permission for
+ * the specified repository.
*
* @see IUserService.getTeamnamesForRepositoryRole(String)
* @param repository
- * @return list of all teamnames that can bypass the access restriction
+ * @return list of all teamnames with explicit access permissions to the repository
*/
- @Deprecated
public List<String> getRepositoryTeams(RepositoryModel repository) {
return userService.getTeamnamesForRepositoryRole(repository.name);
}
@@ -817,7 +818,9 @@ public class GitBlit implements ServletContextListener {
*/
@Deprecated
public boolean setRepositoryTeams(RepositoryModel repository, List<String> repositoryTeams) {
- return userService.setTeamnamesForRepositoryRole(repository.name, repositoryTeams);
+ // rejects all changes since 1.2.0 because this would elevate
+ // all discrete access permissions to RW+
+ return false;
}
/**
diff --git a/src/com/gitblit/RpcServlet.java b/src/com/gitblit/RpcServlet.java
index 2a6ba26c..0c9ac379 100644
--- a/src/com/gitblit/RpcServlet.java
+++ b/src/com/gitblit/RpcServlet.java
@@ -30,6 +30,7 @@ import javax.servlet.http.HttpServletResponse;
import org.eclipse.jgit.lib.Repository;
import com.gitblit.Constants.RpcRequest;
+import com.gitblit.models.RegistrantAccessPermission;
import com.gitblit.models.RefModel;
import com.gitblit.models.RepositoryModel;
import com.gitblit.models.ServerSettings;
@@ -49,7 +50,7 @@ public class RpcServlet extends JsonServlet {
private static final long serialVersionUID = 1L;
- public static final int PROTOCOL_VERSION = 4;
+ public static final int PROTOCOL_VERSION = 5;
public RpcServlet() {
super();
@@ -226,25 +227,33 @@ public class RpcServlet extends JsonServlet {
RepositoryModel model = GitBlit.self().getRepositoryModel(objectName);
result = GitBlit.self().getRepositoryUsers(model);
} else if (RpcRequest.SET_REPOSITORY_MEMBERS.equals(reqType)) {
- // update repository access list
+ // rejected since 1.2.0
+ response.setStatus(failureCode);
+ } else if (RpcRequest.LIST_REPOSITORY_MEMBER_PERMISSIONS.equals(reqType)) {
+ // get repository member permissions
RepositoryModel model = GitBlit.self().getRepositoryModel(objectName);
- Collection<String> names = deserialize(request, response, RpcUtils.NAMES_TYPE);
- List<String> users = new ArrayList<String>(names);
- if (!GitBlit.self().setRepositoryUsers(model, users)) {
- response.setStatus(failureCode);
- }
+ result = GitBlit.self().getUserAccessPermissions(model);
+ } else if (RpcRequest.SET_REPOSITORY_MEMBER_PERMISSIONS.equals(reqType)) {
+ // set the repository permissions for the specified users
+ RepositoryModel model = GitBlit.self().getRepositoryModel(objectName);
+ Collection<RegistrantAccessPermission> permissions = deserialize(request, response, RpcUtils.REGISTRANT_PERMISSIONS_TYPE);
+ result = GitBlit.self().setUserAccessPermissions(model, permissions);
} else if (RpcRequest.LIST_REPOSITORY_TEAMS.equals(reqType)) {
// get repository teams
RepositoryModel model = GitBlit.self().getRepositoryModel(objectName);
result = GitBlit.self().getRepositoryTeams(model);
} else if (RpcRequest.SET_REPOSITORY_TEAMS.equals(reqType)) {
- // update repository team access list
+ // rejected since 1.2.0
+ response.setStatus(failureCode);
+ } else if (RpcRequest.LIST_REPOSITORY_TEAM_PERMISSIONS.equals(reqType)) {
+ // get repository team permissions
RepositoryModel model = GitBlit.self().getRepositoryModel(objectName);
- Collection<String> names = deserialize(request, response, RpcUtils.NAMES_TYPE);
- List<String> teams = new ArrayList<String>(names);
- if (!GitBlit.self().setRepositoryTeams(model, teams)) {
- response.setStatus(failureCode);
- }
+ result = GitBlit.self().getTeamAccessPermissions(model);
+ } else if (RpcRequest.SET_REPOSITORY_TEAM_PERMISSIONS.equals(reqType)) {
+ // set the repository permissions for the specified teams
+ RepositoryModel model = GitBlit.self().getRepositoryModel(objectName);
+ Collection<RegistrantAccessPermission> permissions = deserialize(request, response, RpcUtils.REGISTRANT_PERMISSIONS_TYPE);
+ result = GitBlit.self().setTeamAccessPermissions(model, permissions);
} else if (RpcRequest.LIST_FEDERATION_REGISTRATIONS.equals(reqType)) {
// return the list of federation registrations
if (allowAdmin) {
diff --git a/src/com/gitblit/client/EditRepositoryDialog.java b/src/com/gitblit/client/EditRepositoryDialog.java
index e15b1546..0adf8a80 100644
--- a/src/com/gitblit/client/EditRepositoryDialog.java
+++ b/src/com/gitblit/client/EditRepositoryDialog.java
@@ -59,6 +59,7 @@ import javax.swing.ScrollPaneConstants;
import com.gitblit.Constants.AccessRestrictionType;
import com.gitblit.Constants.AuthorizationControl;
import com.gitblit.Constants.FederationStrategy;
+import com.gitblit.models.RegistrantAccessPermission;
import com.gitblit.models.RepositoryModel;
import com.gitblit.utils.ArrayUtils;
import com.gitblit.utils.StringUtils;
@@ -116,11 +117,11 @@ public class EditRepositoryDialog extends JDialog {
private JComboBox headRefField;
- private JPalette<String> usersPalette;
+ private RegistrantPermissionsPanel usersPalette;
private JPalette<String> setsPalette;
- private JPalette<String> teamsPalette;
+ private RegistrantPermissionsPanel teamsPalette;
private JPalette<String> indexedBranchesPalette;
@@ -280,7 +281,7 @@ public class EditRepositoryDialog extends JDialog {
clonePushPanel
.add(newFieldPanel(Translation.get("gb.verifyCommitter"), verifyCommitter));
- usersPalette = new JPalette<String>();
+ usersPalette = new RegistrantPermissionsPanel();
JPanel northAccessPanel = new JPanel(new BorderLayout(5, 5));
northAccessPanel.add(newFieldPanel(Translation.get("gb.accessRestriction"),
accessRestriction), BorderLayout.NORTH);
@@ -290,13 +291,13 @@ public class EditRepositoryDialog extends JDialog {
JPanel accessPanel = new JPanel(new BorderLayout(5, 5));
accessPanel.add(northAccessPanel, BorderLayout.NORTH);
- accessPanel.add(newFieldPanel(Translation.get("gb.permittedUsers"),
+ accessPanel.add(newFieldPanel(Translation.get("gb.userPermissions"),
usersPalette), BorderLayout.CENTER);
- teamsPalette = new JPalette<String>();
+ teamsPalette = new RegistrantPermissionsPanel();
JPanel teamsPanel = new JPanel(new BorderLayout(5, 5));
teamsPanel.add(
- newFieldPanel(Translation.get("gb.permittedTeams"),
+ newFieldPanel(Translation.get("gb.teamPermissions"),
teamsPalette), BorderLayout.CENTER);
setsPalette = new JPalette<String>();
@@ -545,16 +546,16 @@ public class EditRepositoryDialog extends JDialog {
this.allowNamed.setSelected(!authenticated);
}
- public void setUsers(String owner, List<String> all, List<String> selected) {
+ public void setUsers(String owner, List<String> all, List<RegistrantAccessPermission> permissions) {
ownerField.setModel(new DefaultComboBoxModel(all.toArray()));
if (!StringUtils.isEmpty(owner)) {
ownerField.setSelectedItem(owner);
}
- usersPalette.setObjects(all, selected);
+ usersPalette.setObjects(all, permissions);
}
- public void setTeams(List<String> all, List<String> selected) {
- teamsPalette.setObjects(all, selected);
+ public void setTeams(List<String> all, List<RegistrantAccessPermission> permissions) {
+ teamsPalette.setObjects(all, permissions);
}
public void setRepositories(List<RepositoryModel> repositories) {
@@ -607,12 +608,12 @@ public class EditRepositoryDialog extends JDialog {
return repository;
}
- public List<String> getPermittedUsers() {
- return usersPalette.getSelections();
+ public List<RegistrantAccessPermission> getUserAccessPermissions() {
+ return usersPalette.getPermissions();
}
- public List<String> getPermittedTeams() {
- return teamsPalette.getSelections();
+ public List<RegistrantAccessPermission> getTeamAccessPermissions() {
+ return teamsPalette.getPermissions();
}
public void setCustomFields(RepositoryModel repository, Map<String, String> customFields) {
diff --git a/src/com/gitblit/client/EditTeamDialog.java b/src/com/gitblit/client/EditTeamDialog.java
index 57d6bcfb..4eb07295 100644
--- a/src/com/gitblit/client/EditTeamDialog.java
+++ b/src/com/gitblit/client/EditTeamDialog.java
@@ -45,6 +45,7 @@ import javax.swing.JTextField;
import javax.swing.KeyStroke;
import com.gitblit.Constants.AccessRestrictionType;
+import com.gitblit.models.RegistrantAccessPermission;
import com.gitblit.models.RepositoryModel;
import com.gitblit.models.ServerSettings;
import com.gitblit.models.TeamModel;
@@ -74,7 +75,7 @@ public class EditTeamDialog extends JDialog {
private JTextField mailingListsField;
- private JPalette<String> repositoryPalette;
+ private RegistrantPermissionsPanel repositoryPalette;
private JPalette<String> userPalette;
@@ -138,7 +139,7 @@ public class EditTeamDialog extends JDialog {
fieldsPanel.add(newFieldPanel(Translation.get("gb.mailingLists"), mailingListsField));
final Insets _insets = new Insets(5, 5, 5, 5);
- repositoryPalette = new JPalette<String>();
+ repositoryPalette = new RegistrantPermissionsPanel();
userPalette = new JPalette<String>();
userPalette.setEnabled(settings.supportsTeamMembershipChanges);
@@ -278,8 +279,9 @@ public class EditTeamDialog extends JDialog {
team.mailingLists.addAll(list);
}
- team.repositories.clear();
- team.repositories.addAll(repositoryPalette.getSelections());
+ for (RegistrantAccessPermission rp : repositoryPalette.getPermissions()) {
+ team.setRepositoryPermission(rp.registrant, rp.permission);
+ }
team.users.clear();
team.users.addAll(userPalette.getSelections());
@@ -305,18 +307,21 @@ public class EditTeamDialog extends JDialog {
}
}
- public void setRepositories(List<RepositoryModel> repositories, List<String> selected) {
+ public void setRepositories(List<RepositoryModel> repositories, List<RegistrantAccessPermission> permissions) {
List<String> restricted = new ArrayList<String>();
for (RepositoryModel repo : repositories) {
if (repo.accessRestriction.exceeds(AccessRestrictionType.NONE)) {
restricted.add(repo.name);
}
}
- StringUtils.sortRepositorynames(restricted);
- if (selected != null) {
- StringUtils.sortRepositorynames(selected);
+
+ // remove repositories for which team already has a permission
+ for (RegistrantAccessPermission rp : permissions) {
+ restricted.remove(rp.registrant);
}
- repositoryPalette.setObjects(restricted, selected);
+
+ StringUtils.sortRepositorynames(restricted);
+ repositoryPalette.setObjects(restricted, permissions);
}
public void setUsers(List<String> users, List<String> selected) {
diff --git a/src/com/gitblit/client/EditUserDialog.java b/src/com/gitblit/client/EditUserDialog.java
index 4ef036e8..5b789da5 100644
--- a/src/com/gitblit/client/EditUserDialog.java
+++ b/src/com/gitblit/client/EditUserDialog.java
@@ -47,6 +47,7 @@ import javax.swing.KeyStroke;
import com.gitblit.Constants.AccessRestrictionType;
import com.gitblit.Keys;
+import com.gitblit.models.RegistrantAccessPermission;
import com.gitblit.models.RepositoryModel;
import com.gitblit.models.ServerSettings;
import com.gitblit.models.TeamModel;
@@ -85,7 +86,7 @@ public class EditUserDialog extends JDialog {
private JCheckBox notFederatedCheckbox;
- private JPalette<String> repositoryPalette;
+ private RegistrantPermissionsPanel repositoryPalette;
private JPalette<TeamModel> teamsPalette;
@@ -157,7 +158,7 @@ public class EditUserDialog extends JDialog {
notFederatedCheckbox));
final Insets _insets = new Insets(5, 5, 5, 5);
- repositoryPalette = new JPalette<String>();
+ repositoryPalette = new RegistrantPermissionsPanel();
teamsPalette = new JPalette<TeamModel>();
teamsPalette.setEnabled(settings.supportsTeamMembershipChanges);
@@ -318,8 +319,9 @@ public class EditUserDialog extends JDialog {
user.canCreate = canCreateCheckbox.isSelected();
user.excludeFromFederation = notFederatedCheckbox.isSelected();
- user.repositories.clear();
- user.repositories.addAll(repositoryPalette.getSelections());
+ for (RegistrantAccessPermission rp : repositoryPalette.getPermissions()) {
+ user.setRepositoryPermission(rp.registrant, rp.permission);
+ }
user.teams.clear();
user.teams.addAll(teamsPalette.getSelections());
@@ -338,18 +340,20 @@ public class EditUserDialog extends JDialog {
}
}
- public void setRepositories(List<RepositoryModel> repositories, List<String> selected) {
+ public void setRepositories(List<RepositoryModel> repositories, List<RegistrantAccessPermission> permissions) {
List<String> restricted = new ArrayList<String>();
for (RepositoryModel repo : repositories) {
if (repo.accessRestriction.exceeds(AccessRestrictionType.NONE)) {
restricted.add(repo.name);
}
}
- StringUtils.sortRepositorynames(restricted);
- if (selected != null) {
- StringUtils.sortRepositorynames(selected);
+ // remove repositories for which user already has a permission
+ for (RegistrantAccessPermission rp : permissions) {
+ restricted.remove(rp.registrant);
}
- repositoryPalette.setObjects(restricted, selected);
+
+ StringUtils.sortRepositorynames(restricted);
+ repositoryPalette.setObjects(restricted, permissions);
}
public void setTeams(List<TeamModel> teams, List<TeamModel> selected) {
diff --git a/src/com/gitblit/client/GitblitClient.java b/src/com/gitblit/client/GitblitClient.java
index 52d4e06d..9815cbe8 100644
--- a/src/com/gitblit/client/GitblitClient.java
+++ b/src/com/gitblit/client/GitblitClient.java
@@ -35,6 +35,7 @@ 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;
@@ -485,12 +486,20 @@ public class GitblitClient implements Serializable {
public List<String> getPermittedUsernames(RepositoryModel repository) {
List<String> usernames = new ArrayList<String>();
for (UserModel user : this.allUsers) {
- if (user.repositories.contains(repository.name)) {
+ if (user.hasRepositoryPermission(repository.name)) {
usernames.add(user.username);
}
}
return usernames;
}
+
+ public List<RegistrantAccessPermission> getUserAccessPermissions(RepositoryModel repository) throws IOException {
+ return RpcUtils.getRepositoryMemberPermissions(repository, url, account, password);
+ }
+
+ public boolean setUserAccessPermissions(RepositoryModel repository, List<RegistrantAccessPermission> permissions) throws IOException {
+ return RpcUtils.setRepositoryMemberPermissions(repository, permissions, url, account, password);
+ }
public List<TeamModel> getTeams() {
return allTeams;
@@ -508,12 +517,20 @@ public class GitblitClient implements Serializable {
public List<String> getPermittedTeamnames(RepositoryModel repository) {
List<String> teamnames = new ArrayList<String>();
for (TeamModel team : this.allTeams) {
- if (team.repositories.contains(repository.name)) {
+ if (team.hasRepositoryPermission(repository.name)) {
teamnames.add(team.name);
}
}
return teamnames;
}
+
+ public List<RegistrantAccessPermission> getTeamAccessPermissions(RepositoryModel repository) throws IOException {
+ return RpcUtils.getRepositoryTeamPermissions(repository, url, account, password);
+ }
+
+ public boolean setTeamAccessPermissions(RepositoryModel repository, List<RegistrantAccessPermission> permissions) throws IOException {
+ return RpcUtils.setRepositoryTeamPermissions(repository, permissions, url, account, password);
+ }
public TeamModel getTeamModel(String name) {
for (TeamModel team : allTeams) {
@@ -532,44 +549,44 @@ public class GitblitClient implements Serializable {
return allRepositories;
}
- public boolean createRepository(RepositoryModel repository, List<String> permittedUsers)
+ public boolean createRepository(RepositoryModel repository, List<RegistrantAccessPermission> userPermissions)
throws IOException {
- return createRepository(repository, permittedUsers, null);
+ return createRepository(repository, userPermissions, null);
}
- public boolean createRepository(RepositoryModel repository, List<String> permittedUsers,
- List<String> permittedTeams) throws IOException {
+ public boolean createRepository(RepositoryModel repository, List<RegistrantAccessPermission> userPermissions,
+ List<RegistrantAccessPermission> teamPermissions) throws IOException {
boolean success = true;
success &= RpcUtils.createRepository(repository, url, account, password);
- if (permittedUsers != null && permittedUsers.size() > 0) {
+ if (userPermissions != null && userPermissions.size() > 0) {
// if new repository has named members, set them
- success &= RpcUtils.setRepositoryMembers(repository, permittedUsers, url, account,
+ success &= RpcUtils.setRepositoryMemberPermissions(repository, userPermissions, url, account,
password);
}
- if (permittedTeams != null && permittedTeams.size() > 0) {
+ if (teamPermissions != null && teamPermissions.size() > 0) {
// if new repository has named teams, set them
- success &= RpcUtils.setRepositoryTeams(repository, permittedTeams, url, account,
+ success &= RpcUtils.setRepositoryTeamPermissions(repository, teamPermissions, url, account,
password);
}
return success;
}
public boolean updateRepository(String name, RepositoryModel repository,
- List<String> permittedUsers) throws IOException {
- return updateRepository(name, repository, permittedUsers, null);
+ List<RegistrantAccessPermission> userPermissions) throws IOException {
+ return updateRepository(name, repository, userPermissions, null);
}
public boolean updateRepository(String name, RepositoryModel repository,
- List<String> permittedUsers, List<String> permittedTeams) throws IOException {
+ List<RegistrantAccessPermission> userPermissions, List<RegistrantAccessPermission> teamPermissions) throws IOException {
boolean success = true;
success &= RpcUtils.updateRepository(name, repository, url, account, password);
// set the repository members
- if (permittedUsers != null) {
- success &= RpcUtils.setRepositoryMembers(repository, permittedUsers, url, account,
+ if (userPermissions != null) {
+ success &= RpcUtils.setRepositoryMemberPermissions(repository, userPermissions, url, account,
password);
}
- if (permittedTeams != null) {
- success &= RpcUtils.setRepositoryTeams(repository, permittedTeams, url, account,
+ if (teamPermissions != null) {
+ success &= RpcUtils.setRepositoryTeamPermissions(repository, teamPermissions, url, account,
password);
}
return success;
diff --git a/src/com/gitblit/client/RegistrantPermissionsPanel.java b/src/com/gitblit/client/RegistrantPermissionsPanel.java
new file mode 100644
index 00000000..fa7ff5a8
--- /dev/null
+++ b/src/com/gitblit/client/RegistrantPermissionsPanel.java
@@ -0,0 +1,140 @@
+/*
+ * Copyright 2012 gitblit.com.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.gitblit.client;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.swing.DefaultCellEditor;
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.JButton;
+import javax.swing.JComboBox;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTable;
+
+import com.gitblit.Constants.AccessPermission;
+import com.gitblit.models.RegistrantAccessPermission;
+
+public class RegistrantPermissionsPanel extends JPanel {
+
+ private static final long serialVersionUID = 1L;
+
+ private JTable permissionsTable;
+
+ private RegistrantPermissionsTableModel tableModel;
+
+ private DefaultComboBoxModel registrantModel;
+
+ private JComboBox registrantSelector;
+
+ private JComboBox permissionSelector;
+
+ private JButton addButton;
+
+ private JPanel addPanel;
+
+ public RegistrantPermissionsPanel() {
+ super(new BorderLayout(5, 5));
+ tableModel = new RegistrantPermissionsTableModel();
+ permissionsTable = new JTable(tableModel);
+ permissionsTable.setPreferredScrollableViewportSize(new Dimension(400, 150));
+ JScrollPane jsp = new JScrollPane(permissionsTable);
+ add(jsp, BorderLayout.CENTER);
+
+ permissionsTable.getColumnModel().getColumn(RegistrantPermissionsTableModel.Columns.Permission.ordinal())
+ .setCellEditor(new AccessPermissionEditor());
+
+ registrantModel = new DefaultComboBoxModel();
+ registrantSelector = new JComboBox(registrantModel);
+ permissionSelector = new JComboBox(AccessPermission.NEWPERMISSIONS);
+ addButton = new JButton(Translation.get("gb.add"));
+ addButton.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ if (registrantSelector.getSelectedIndex() < 0) {
+ return;
+ }
+ if (permissionSelector.getSelectedIndex() < 0) {
+ return;
+ }
+
+ RegistrantAccessPermission rp = new RegistrantAccessPermission();
+ rp.registrant = registrantSelector.getSelectedItem().toString();
+ rp.permission = (AccessPermission) permissionSelector.getSelectedItem();
+ tableModel.permissions.add(rp);
+
+ registrantModel.removeElement(rp.registrant);
+ registrantSelector.setSelectedIndex(-1);
+ registrantSelector.invalidate();
+ addPanel.setVisible(registrantModel.getSize() > 0);
+
+ tableModel.fireTableDataChanged();
+ }
+ });
+
+ addPanel = new JPanel();
+ addPanel.add(registrantSelector);
+ addPanel.add(permissionSelector);
+ addPanel.add(addButton);
+ add(addPanel, BorderLayout.SOUTH);
+ }
+
+ @Override
+ public void setEnabled(boolean enabled) {
+ super.setEnabled(enabled);
+ permissionsTable.setEnabled(false);
+ }
+
+ public void setObjects(List<String> registrants, List<RegistrantAccessPermission> permissions) {
+ List<String> filtered;
+ if (registrants == null) {
+ filtered = new ArrayList<String>();
+ } else {
+ filtered = new ArrayList<String>(registrants);
+ }
+ if (permissions == null) {
+ permissions = new ArrayList<RegistrantAccessPermission>();
+ }
+ for (RegistrantAccessPermission rp : permissions) {
+ filtered.remove(rp.registrant);
+ }
+ for (String registrant : filtered) {
+ registrantModel.addElement(registrant);
+ }
+ tableModel.setPermissions(permissions);
+
+ registrantSelector.setSelectedIndex(-1);
+ permissionSelector.setSelectedIndex(-1);
+ addPanel.setVisible(filtered.size() > 0);
+ }
+
+ public List<RegistrantAccessPermission> getPermissions() {
+ return tableModel.permissions;
+ }
+
+ private class AccessPermissionEditor extends DefaultCellEditor {
+
+ private static final long serialVersionUID = 1L;
+
+ public AccessPermissionEditor() {
+ super(new JComboBox(AccessPermission.values()));
+ }
+ }
+}
diff --git a/src/com/gitblit/client/RegistrantPermissionsTableModel.java b/src/com/gitblit/client/RegistrantPermissionsTableModel.java
new file mode 100644
index 00000000..91acec8b
--- /dev/null
+++ b/src/com/gitblit/client/RegistrantPermissionsTableModel.java
@@ -0,0 +1,120 @@
+/*
+ * Copyright 2012 gitblit.com.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.gitblit.client;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.swing.table.AbstractTableModel;
+
+import com.gitblit.Constants.AccessPermission;
+import com.gitblit.models.RegistrantAccessPermission;
+
+/**
+ * Table model of a registrant permissions.
+ *
+ * @author James Moger
+ *
+ */
+public class RegistrantPermissionsTableModel extends AbstractTableModel {
+
+ private static final long serialVersionUID = 1L;
+
+ List<RegistrantAccessPermission> permissions;
+
+ enum Columns {
+ Registrant, Permission;
+
+ @Override
+ public String toString() {
+ return name().replace('_', ' ');
+ }
+ }
+
+ public RegistrantPermissionsTableModel() {
+ this(new ArrayList<RegistrantAccessPermission>());
+ }
+
+ public RegistrantPermissionsTableModel(List<RegistrantAccessPermission> list) {
+ setPermissions(list);
+ }
+
+ public void setPermissions(List<RegistrantAccessPermission> list) {
+ this.permissions = list;
+ }
+
+ @Override
+ public int getRowCount() {
+ return permissions.size();
+ }
+
+ @Override
+ public int getColumnCount() {
+ return Columns.values().length;
+ }
+
+ @Override
+ public String getColumnName(int column) {
+ Columns col = Columns.values()[column];
+ switch (col) {
+ case Registrant:
+ return Translation.get("gb.name");
+ case Permission:
+ return Translation.get("gb.permission");
+ }
+ return "";
+ }
+
+ /**
+ * Returns <code>Object.class</code> regardless of <code>columnIndex</code>.
+ *
+ * @param columnIndex
+ * the column being queried
+ * @return the Object.class
+ */
+ public Class<?> getColumnClass(int columnIndex) {
+ if (columnIndex == Columns.Permission.ordinal()) {
+ return AccessPermission.class;
+ }
+ return String.class;
+ }
+
+ @Override
+ public boolean isCellEditable(int rowIndex, int columnIndex) {
+ return columnIndex == Columns.Permission.ordinal();
+ }
+
+ @Override
+ public Object getValueAt(int rowIndex, int columnIndex) {
+ RegistrantAccessPermission rp = permissions.get(rowIndex);
+ Columns col = Columns.values()[columnIndex];
+ switch (col) {
+ case Registrant:
+ return rp.registrant;
+ case Permission:
+ return rp.permission;
+ }
+ return null;
+ }
+
+ @Override
+ public void setValueAt(Object o, int rowIndex, int columnIndex) {
+ RegistrantAccessPermission rp = permissions.get(rowIndex);
+ if (columnIndex == Columns.Permission.ordinal()) {
+ rp.permission = (AccessPermission) o;
+ }
+ }
+}
diff --git a/src/com/gitblit/client/RepositoriesPanel.java b/src/com/gitblit/client/RepositoriesPanel.java
index 54158e8e..972dda19 100644
--- a/src/com/gitblit/client/RepositoriesPanel.java
+++ b/src/com/gitblit/client/RepositoriesPanel.java
@@ -49,6 +49,7 @@ import javax.swing.table.TableRowSorter;
import com.gitblit.Constants;
import com.gitblit.Constants.RpcRequest;
import com.gitblit.Keys;
+import com.gitblit.models.RegistrantAccessPermission;
import com.gitblit.models.FeedModel;
import com.gitblit.models.RepositoryModel;
import com.gitblit.utils.StringUtils;
@@ -401,8 +402,8 @@ public abstract class RepositoriesPanel extends JPanel {
gitblit.getPostReceiveScriptsInherited(null), null);
dialog.setVisible(true);
final RepositoryModel newRepository = dialog.getRepository();
- final List<String> permittedUsers = dialog.getPermittedUsers();
- final List<String> permittedTeams = dialog.getPermittedTeams();
+ final List<RegistrantAccessPermission> permittedUsers = dialog.getUserAccessPermissions();
+ final List<RegistrantAccessPermission> permittedTeams = dialog.getTeamAccessPermissions();
if (newRepository == null) {
return;
}
@@ -452,10 +453,14 @@ public abstract class RepositoriesPanel extends JPanel {
repository);
dialog.setLocationRelativeTo(RepositoriesPanel.this);
List<String> usernames = gitblit.getUsernames();
- List<String> members = gitblit.getPermittedUsernames(repository);
- dialog.setUsers(repository.owner, usernames, members);
- dialog.setTeams(gitblit.getTeamnames(), gitblit.getPermittedTeamnames(repository));
- dialog.setRepositories(gitblit.getRepositories());
+ try {
+ List<RegistrantAccessPermission> members = gitblit.getUserAccessPermissions(repository);
+ dialog.setUsers(repository.owner, usernames, members);
+ dialog.setTeams(gitblit.getTeamnames(), gitblit.getTeamAccessPermissions(repository));
+ dialog.setRepositories(gitblit.getRepositories());
+ } catch (IOException e) {
+ // TODO
+ }
dialog.setFederationSets(gitblit.getFederationSets(), repository.federationSets);
List<String> allLocalBranches = new ArrayList<String>();
allLocalBranches.add(Constants.DEFAULT_BRANCH);
@@ -471,8 +476,8 @@ public abstract class RepositoriesPanel extends JPanel {
}
dialog.setVisible(true);
final RepositoryModel revisedRepository = dialog.getRepository();
- final List<String> permittedUsers = dialog.getPermittedUsers();
- final List<String> permittedTeams = dialog.getPermittedTeams();
+ final List<RegistrantAccessPermission> permittedUsers = dialog.getUserAccessPermissions();
+ final List<RegistrantAccessPermission> permittedTeams = dialog.getTeamAccessPermissions();
if (revisedRepository == null) {
return;
}
diff --git a/src/com/gitblit/client/TeamsPanel.java b/src/com/gitblit/client/TeamsPanel.java
index 71825665..6539d1c5 100644
--- a/src/com/gitblit/client/TeamsPanel.java
+++ b/src/com/gitblit/client/TeamsPanel.java
@@ -305,7 +305,7 @@ public abstract class TeamsPanel extends JPanel {
gitblit.getSettings());
dialog.setLocationRelativeTo(TeamsPanel.this);
dialog.setTeams(gitblit.getTeams());
- dialog.setRepositories(gitblit.getRepositories(), new ArrayList<String>(team.repositories));
+ dialog.setRepositories(gitblit.getRepositories(), team.getRepositoryPermissions());
dialog.setUsers(gitblit.getUsernames(), team.users == null ? null : new ArrayList<String>(
team.users));
dialog.setPreReceiveScripts(gitblit.getPreReceiveScriptsUnused(null),
diff --git a/src/com/gitblit/client/UsersPanel.java b/src/com/gitblit/client/UsersPanel.java
index 0dfa0434..9fcad7bc 100644
--- a/src/com/gitblit/client/UsersPanel.java
+++ b/src/com/gitblit/client/UsersPanel.java
@@ -309,7 +309,7 @@ public abstract class UsersPanel extends JPanel {
gitblit.getSettings());
dialog.setLocationRelativeTo(UsersPanel.this);
dialog.setUsers(gitblit.getUsers());
- dialog.setRepositories(gitblit.getRepositories(), new ArrayList<String>(user.repositories));
+ dialog.setRepositories(gitblit.getRepositories(), user.getRepositoryPermissions());
dialog.setTeams(gitblit.getTeams(), user.teams == null ? null : new ArrayList<TeamModel>(
user.teams));
dialog.setVisible(true);
diff --git a/src/com/gitblit/client/UsersTableModel.java b/src/com/gitblit/client/UsersTableModel.java
index f635f7e8..b8ce45d4 100644
--- a/src/com/gitblit/client/UsersTableModel.java
+++ b/src/com/gitblit/client/UsersTableModel.java
@@ -110,8 +110,8 @@ public class UsersTableModel extends AbstractTableModel {
return (model.teams == null || model.teams.size() == 0) ? "" : String
.valueOf(model.teams.size());
case Repositories:
- return (model.repositories == null || model.repositories.size() == 0) ? "" : String
- .valueOf(model.repositories.size());
+ return (model.permissions == null || model.permissions.size() == 0) ? "" : String
+ .valueOf(model.permissions.size());
}
return null;
}
diff --git a/src/com/gitblit/models/RepositoryAccessPermission.java b/src/com/gitblit/models/RegistrantAccessPermission.java
index 06f5c053..93027450 100644
--- a/src/com/gitblit/models/RepositoryAccessPermission.java
+++ b/src/com/gitblit/models/RegistrantAccessPermission.java
@@ -18,35 +18,43 @@ package com.gitblit.models;
import java.io.Serializable;
import com.gitblit.Constants.AccessPermission;
+import com.gitblit.Constants.RegistrantType;
import com.gitblit.utils.StringUtils;
/**
- * Represents a Repository-AccessPermission tuple.
+ * Represents a Registrant-AccessPermission tuple.
*
* @author James Moger
*/
-public class RepositoryAccessPermission implements Serializable, Comparable<RepositoryAccessPermission> {
+public class RegistrantAccessPermission implements Serializable, Comparable<RegistrantAccessPermission> {
private static final long serialVersionUID = 1L;
- public String repository;
+ public String registrant;
public AccessPermission permission;
+ public RegistrantType type;
- public RepositoryAccessPermission() {
+ public RegistrantAccessPermission() {
}
- public RepositoryAccessPermission(String repository, AccessPermission permission) {
- this.repository = repository;
+ public RegistrantAccessPermission(String registrant, AccessPermission permission, RegistrantType type) {
+ this.registrant = registrant;
this.permission = permission;
+ this.type = type;
}
@Override
- public int compareTo(RepositoryAccessPermission p) {
- return StringUtils.compareRepositoryNames(repository, p.repository);
+ public int compareTo(RegistrantAccessPermission p) {
+ switch (type) {
+ case REPOSITORY:
+ return StringUtils.compareRepositoryNames(registrant, p.registrant);
+ default:
+ return registrant.toLowerCase().compareTo(p.registrant.toLowerCase());
+ }
}
@Override
public String toString() {
- return permission.asRole(repository);
+ return permission.asRole(registrant);
}
} \ No newline at end of file
diff --git a/src/com/gitblit/models/TeamAccessPermission.java b/src/com/gitblit/models/TeamAccessPermission.java
deleted file mode 100644
index 23468c6d..00000000
--- a/src/com/gitblit/models/TeamAccessPermission.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright 2012 gitblit.com.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.gitblit.models;
-
-import java.io.Serializable;
-
-import com.gitblit.Constants.AccessPermission;
-
-/**
- * Represents a Team-AccessPermission tuple.
- *
- * @author James Moger
- */
-public class TeamAccessPermission implements Serializable, Comparable<TeamAccessPermission> {
-
- private static final long serialVersionUID = 1L;
-
- public String team;
- public AccessPermission permission;
-
- public TeamAccessPermission() {
- }
-
- public TeamAccessPermission(String team, AccessPermission permission) {
- this.team = team;
- this.permission = permission;
- }
-
- @Override
- public int compareTo(TeamAccessPermission p) {
- return team.compareTo(p.team);
- }
-
- @Override
- public String toString() {
- return permission.asRole("@" + team);
- }
-} \ No newline at end of file
diff --git a/src/com/gitblit/models/TeamModel.java b/src/com/gitblit/models/TeamModel.java
index 95e6ef4e..4c3a8427 100644
--- a/src/com/gitblit/models/TeamModel.java
+++ b/src/com/gitblit/models/TeamModel.java
@@ -27,6 +27,7 @@ import java.util.Set;
import com.gitblit.Constants.AccessPermission;
import com.gitblit.Constants.AccessRestrictionType;
+import com.gitblit.Constants.RegistrantType;
import com.gitblit.Constants.Unused;
/**
@@ -93,10 +94,10 @@ public class TeamModel implements Serializable, Comparable<TeamModel> {
*
* @return the team'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;
diff --git a/src/com/gitblit/models/UserAccessPermission.java b/src/com/gitblit/models/UserAccessPermission.java
deleted file mode 100644
index a77fff29..00000000
--- a/src/com/gitblit/models/UserAccessPermission.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright 2012 gitblit.com.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.gitblit.models;
-
-import java.io.Serializable;
-
-import com.gitblit.Constants.AccessPermission;
-
-/**
- * Represents a User-AccessPermission tuple.
- *
- * @author James Moger
- */
-public class UserAccessPermission implements Serializable, Comparable<UserAccessPermission> {
-
- private static final long serialVersionUID = 1L;
-
- public String user;
- public AccessPermission permission;
-
- public UserAccessPermission() {
- }
-
- public UserAccessPermission(String user, AccessPermission permission) {
- this.user = user;
- this.permission = permission;
- }
-
- @Override
- public int compareTo(UserAccessPermission p) {
- return user.compareTo(p.user);
- }
-
- @Override
- public String toString() {
- return permission.asRole(user);
- }
-} \ No newline at end of file
diff --git a/src/com/gitblit/models/UserModel.java b/src/com/gitblit/models/UserModel.java
index 38a7aaed..fc9cbfba 100644
--- a/src/com/gitblit/models/UserModel.java
+++ b/src/com/gitblit/models/UserModel.java
@@ -28,6 +28,7 @@ import java.util.Set;
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 @@ public class UserModel implements Principal, Serializable, Comparable<UserModel>
*
* @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 @@ public class UserModel implements Principal, Serializable, Comparable<UserModel>
// 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
diff --git a/src/com/gitblit/utils/RpcUtils.java b/src/com/gitblit/utils/RpcUtils.java
index 2b80e2af..ed23dab6 100644
--- a/src/com/gitblit/utils/RpcUtils.java
+++ b/src/com/gitblit/utils/RpcUtils.java
@@ -25,6 +25,7 @@ import java.util.Map;
import com.gitblit.Constants;
import com.gitblit.Constants.RpcRequest;
import com.gitblit.GitBlitException.UnknownRequestException;
+import com.gitblit.models.RegistrantAccessPermission;
import com.gitblit.models.FederationModel;
import com.gitblit.models.FederationProposal;
import com.gitblit.models.FederationSet;
@@ -71,6 +72,9 @@ public class RpcUtils {
private static final Type BRANCHES_TYPE = new TypeToken<Map<String, Collection<String>>>() {
}.getType();
+ public static final Type REGISTRANT_PERMISSIONS_TYPE = new TypeToken<Collection<RegistrantAccessPermission>>() {
+ }.getType();
+
/**
*
* @param remoteURL
@@ -357,25 +361,42 @@ public class RpcUtils {
Collection<String> list = JsonUtils.retrieveJson(url, NAMES_TYPE, account, password);
return new ArrayList<String>(list);
}
+
+ /**
+ * Retrieves the list of user access permissions for the specified repository.
+ *
+ * @param repository
+ * @param serverUrl
+ * @param account
+ * @param password
+ * @return list of User-AccessPermission tuples
+ * @throws IOException
+ */
+ public static List<RegistrantAccessPermission> getRepositoryMemberPermissions(RepositoryModel repository,
+ String serverUrl, String account, char [] password) throws IOException {
+ String url = asLink(serverUrl, RpcRequest.LIST_REPOSITORY_MEMBER_PERMISSIONS, repository.name);
+ Collection<RegistrantAccessPermission> list = JsonUtils.retrieveJson(url, REGISTRANT_PERMISSIONS_TYPE, account, password);
+ return new ArrayList<RegistrantAccessPermission>(list);
+ }
/**
- * Sets the repository user membership list.
+ * Sets the repository user access permissions
*
* @param repository
- * @param memberships
+ * @param permissions
* @param serverUrl
* @param account
* @param password
* @return true if the action succeeded
* @throws IOException
*/
- public static boolean setRepositoryMembers(RepositoryModel repository,
- List<String> memberships, String serverUrl, String account, char[] password)
+ public static boolean setRepositoryMemberPermissions(RepositoryModel repository,
+ List<RegistrantAccessPermission> permissions, String serverUrl, String account, char[] password)
throws IOException {
- return doAction(RpcRequest.SET_REPOSITORY_MEMBERS, repository.name, memberships, serverUrl,
+ return doAction(RpcRequest.SET_REPOSITORY_MEMBER_PERMISSIONS, repository.name, permissions, serverUrl,
account, password);
}
-
+
/**
* Retrieves the list of teams that can access the specified repository.
*
@@ -392,25 +413,42 @@ public class RpcUtils {
Collection<String> list = JsonUtils.retrieveJson(url, NAMES_TYPE, account, password);
return new ArrayList<String>(list);
}
+
+ /**
+ * Retrieves the list of team access permissions for the specified repository.
+ *
+ * @param repository
+ * @param serverUrl
+ * @param account
+ * @param password
+ * @return list of Team-AccessPermission tuples
+ * @throws IOException
+ */
+ public static List<RegistrantAccessPermission> getRepositoryTeamPermissions(RepositoryModel repository,
+ String serverUrl, String account, char [] password) throws IOException {
+ String url = asLink(serverUrl, RpcRequest.LIST_REPOSITORY_TEAM_PERMISSIONS, repository.name);
+ Collection<RegistrantAccessPermission> list = JsonUtils.retrieveJson(url, REGISTRANT_PERMISSIONS_TYPE, account, password);
+ return new ArrayList<RegistrantAccessPermission>(list);
+ }
/**
- * Sets the repository team membership list.
+ * Sets the repository team access permissions
*
* @param repository
- * @param teams
+ * @param permissions
* @param serverUrl
* @param account
* @param password
* @return true if the action succeeded
* @throws IOException
*/
- public static boolean setRepositoryTeams(RepositoryModel repository,
- List<String> teams, String serverUrl, String account, char[] password)
+ public static boolean setRepositoryTeamPermissions(RepositoryModel repository,
+ List<RegistrantAccessPermission> permissions, String serverUrl, String account, char[] password)
throws IOException {
- return doAction(RpcRequest.SET_REPOSITORY_TEAMS, repository.name, teams, serverUrl,
+ return doAction(RpcRequest.SET_REPOSITORY_TEAM_PERMISSIONS, repository.name, permissions, serverUrl,
account, password);
}
-
+
/**
* Retrieves the list of federation registrations. These are the list of
* registrations that this Gitblit instance is pulling from.
diff --git a/src/com/gitblit/wicket/GitBlitWebApp.properties b/src/com/gitblit/wicket/GitBlitWebApp.properties
index eb7d7725..e46bb0ed 100644
--- a/src/com/gitblit/wicket/GitBlitWebApp.properties
+++ b/src/com/gitblit/wicket/GitBlitWebApp.properties
@@ -353,4 +353,5 @@ gb.clonePermission = {0} (clone)
gb.pushPermission = {0} (push)
gb.createPermission = {0} (push, ref creation)
gb.deletePermission = {0} (push, ref creation+deletion)
-gb.rewindPermission = {0} (push, ref creation+deletion+rewind) \ No newline at end of file
+gb.rewindPermission = {0} (push, ref creation+deletion+rewind)
+gb.permission = permission
diff --git a/src/com/gitblit/wicket/pages/EditRepositoryPage.java b/src/com/gitblit/wicket/pages/EditRepositoryPage.java
index 4e34d898..200a50e0 100644
--- a/src/com/gitblit/wicket/pages/EditRepositoryPage.java
+++ b/src/com/gitblit/wicket/pages/EditRepositoryPage.java
@@ -54,9 +54,8 @@ import com.gitblit.Constants.FederationStrategy;
import com.gitblit.GitBlit;
import com.gitblit.GitBlitException;
import com.gitblit.Keys;
+import com.gitblit.models.RegistrantAccessPermission;
import com.gitblit.models.RepositoryModel;
-import com.gitblit.models.TeamAccessPermission;
-import com.gitblit.models.UserAccessPermission;
import com.gitblit.models.UserModel;
import com.gitblit.utils.ArrayUtils;
import com.gitblit.utils.StringUtils;
@@ -64,8 +63,7 @@ import com.gitblit.wicket.GitBlitWebSession;
import com.gitblit.wicket.StringChoiceRenderer;
import com.gitblit.wicket.WicketUtils;
import com.gitblit.wicket.panels.BulletListPanel;
-import com.gitblit.wicket.panels.TeamPermissionsPanel;
-import com.gitblit.wicket.panels.UserPermissionsPanel;
+import com.gitblit.wicket.panels.RegistrantPermissionsPanel;
public class EditRepositoryPage extends RootSubPage {
@@ -117,8 +115,8 @@ public class EditRepositoryPage extends RootSubPage {
List<String> indexedBranches = new ArrayList<String>();
List<String> federationSets = new ArrayList<String>();
- final List<UserAccessPermission> repositoryUsers = new ArrayList<UserAccessPermission>();
- final List<TeamAccessPermission> repositoryTeams = new ArrayList<TeamAccessPermission>();
+ final List<RegistrantAccessPermission> repositoryUsers = new ArrayList<RegistrantAccessPermission>();
+ final List<RegistrantAccessPermission> repositoryTeams = new ArrayList<RegistrantAccessPermission>();
List<String> preReceiveScripts = new ArrayList<String>();
List<String> postReceiveScripts = new ArrayList<String>();
@@ -146,8 +144,10 @@ public class EditRepositoryPage extends RootSubPage {
final String oldName = repositoryModel.name;
- UserPermissionsPanel usersPalette = new UserPermissionsPanel("users", repositoryUsers, getAccessPermissions());
- TeamPermissionsPanel teamsPalette = new TeamPermissionsPanel("teams", repositoryTeams, getAccessPermissions());
+ RegistrantPermissionsPanel usersPalette = new RegistrantPermissionsPanel("users",
+ GitBlit.self().getAllUsernames(), repositoryUsers, getAccessPermissions());
+ RegistrantPermissionsPanel teamsPalette = new RegistrantPermissionsPanel("teams",
+ GitBlit.self().getAllTeamnames(), repositoryTeams, getAccessPermissions());
// indexed local branches palette
List<String> allLocalBranches = new ArrayList<String>();
diff --git a/src/com/gitblit/wicket/pages/EditTeamPage.java b/src/com/gitblit/wicket/pages/EditTeamPage.java
index 05c91215..a4e2c5e2 100644
--- a/src/com/gitblit/wicket/pages/EditTeamPage.java
+++ b/src/com/gitblit/wicket/pages/EditTeamPage.java
@@ -39,15 +39,15 @@ import org.apache.wicket.model.util.ListModel;
import com.gitblit.Constants.AccessRestrictionType;
import com.gitblit.GitBlit;
import com.gitblit.GitBlitException;
+import com.gitblit.models.RegistrantAccessPermission;
import com.gitblit.models.RepositoryModel;
-import com.gitblit.models.RepositoryAccessPermission;
import com.gitblit.models.TeamModel;
import com.gitblit.utils.StringUtils;
import com.gitblit.wicket.RequiresAdminRole;
import com.gitblit.wicket.StringChoiceRenderer;
import com.gitblit.wicket.WicketUtils;
import com.gitblit.wicket.panels.BulletListPanel;
-import com.gitblit.wicket.panels.RepositoryPermissionsPanel;
+import com.gitblit.wicket.panels.RegistrantPermissionsPanel;
@RequiresAdminRole
public class EditTeamPage extends RootSubPage {
@@ -98,7 +98,7 @@ public class EditTeamPage extends RootSubPage {
List<String> postReceiveScripts = new ArrayList<String>();
final String oldName = teamModel.name;
- final List<RepositoryAccessPermission> permissions = teamModel.getRepositoryPermissions();
+ final List<RegistrantAccessPermission> permissions = teamModel.getRepositoryPermissions();
// users palette
final Palette<String> users = new Palette<String>("users", new ListModel<String>(
@@ -147,8 +147,8 @@ public class EditTeamPage extends RootSubPage {
}
}
// update team permissions
- for (RepositoryAccessPermission repositoryPermission : permissions) {
- teamModel.setRepositoryPermission(repositoryPermission.repository, repositoryPermission.permission);
+ for (RegistrantAccessPermission repositoryPermission : permissions) {
+ teamModel.setRepositoryPermission(repositoryPermission.registrant, repositoryPermission.permission);
}
Iterator<String> selectedUsers = users.getSelectedChoices();
@@ -224,7 +224,7 @@ public class EditTeamPage extends RootSubPage {
: StringUtils.flattenStrings(teamModel.mailingLists, " "));
form.add(new TextField<String>("mailingLists", mailingLists));
- form.add(new RepositoryPermissionsPanel("repositories", permissions, getAccessPermissions()));
+ form.add(new RegistrantPermissionsPanel("repositories", repos, permissions, getAccessPermissions()));
form.add(preReceivePalette);
form.add(new BulletListPanel("inheritedPreReceive", "inherited", GitBlit.self()
.getPreReceiveScriptsInherited(null)));
diff --git a/src/com/gitblit/wicket/pages/EditUserPage.java b/src/com/gitblit/wicket/pages/EditUserPage.java
index 6e353543..3fc1eab1 100644
--- a/src/com/gitblit/wicket/pages/EditUserPage.java
+++ b/src/com/gitblit/wicket/pages/EditUserPage.java
@@ -38,15 +38,15 @@ import com.gitblit.Constants.AccessRestrictionType;
import com.gitblit.GitBlit;
import com.gitblit.GitBlitException;
import com.gitblit.Keys;
+import com.gitblit.models.RegistrantAccessPermission;
import com.gitblit.models.RepositoryModel;
-import com.gitblit.models.RepositoryAccessPermission;
import com.gitblit.models.TeamModel;
import com.gitblit.models.UserModel;
import com.gitblit.utils.StringUtils;
import com.gitblit.wicket.RequiresAdminRole;
import com.gitblit.wicket.StringChoiceRenderer;
import com.gitblit.wicket.WicketUtils;
-import com.gitblit.wicket.panels.RepositoryPermissionsPanel;
+import com.gitblit.wicket.panels.RegistrantPermissionsPanel;
@RequiresAdminRole
public class EditUserPage extends RootSubPage {
@@ -93,6 +93,8 @@ public class EditUserPage extends RootSubPage {
repos.add(repo);
}
}
+ StringUtils.sortRepositorynames(repos);
+
List<String> userTeams = new ArrayList<String>();
for (TeamModel team : userModel.teams) {
userTeams.add(team.name);
@@ -100,7 +102,7 @@ public class EditUserPage extends RootSubPage {
Collections.sort(userTeams);
final String oldName = userModel.username;
- final List<RepositoryAccessPermission> permissions = userModel.getRepositoryPermissions();
+ final List<RegistrantAccessPermission> permissions = userModel.getRepositoryPermissions();
final Palette<String> teams = new Palette<String>("teams", new ListModel<String>(
new ArrayList<String>(userTeams)), new CollectionModel<String>(GitBlit.self()
@@ -171,8 +173,8 @@ public class EditUserPage extends RootSubPage {
}
// update user permissions
- for (RepositoryAccessPermission repositoryPermission : permissions) {
- userModel.setRepositoryPermission(repositoryPermission.repository, repositoryPermission.permission);
+ for (RegistrantAccessPermission repositoryPermission : permissions) {
+ userModel.setRepositoryPermission(repositoryPermission.registrant, repositoryPermission.permission);
}
Iterator<String> selectedTeams = teams.getSelectedChoices();
@@ -234,7 +236,7 @@ public class EditUserPage extends RootSubPage {
form.add(new CheckBox("canFork"));
form.add(new CheckBox("canCreate"));
form.add(new CheckBox("excludeFromFederation"));
- form.add(new RepositoryPermissionsPanel("repositories", permissions, getAccessPermissions()));
+ form.add(new RegistrantPermissionsPanel("repositories", repos, permissions, getAccessPermissions()));
form.add(teams.setEnabled(editTeams));
form.add(new Button("save"));
diff --git a/src/com/gitblit/wicket/panels/RepositoryPermissionsPanel.html b/src/com/gitblit/wicket/panels/RegistrantPermissionsPanel.html
index 1c7e44ef..dd76d9fd 100644
--- a/src/com/gitblit/wicket/panels/RepositoryPermissionsPanel.html
+++ b/src/com/gitblit/wicket/panels/RegistrantPermissionsPanel.html
@@ -9,13 +9,13 @@
<div wicket:id="permissionRow">
<div style="padding-top:10px" class="row-fluid">
- <span class="span8" wicket:id="repository"></span> <select class="input-medium" wicket:id="permission"></select>
+ <span class="span8" wicket:id="registrant"></span> <select class="input-medium" wicket:id="permission"></select>
</div>
</div>
<div style="padding-top:15px;" class="row-fluid">
<form class="well form-inline" wicket:id="addPermissionForm">
- <select class="input-large" wicket:id="repository"></select> <select class="input-medium" wicket:id="permission"></select> <input class="btn btn-success" type="submit" value="Add" wicket:message="value:gb.add" wicket:id="addPermissionButton"/>
+ <select class="input-large" wicket:id="registrant"></select> <select class="input-medium" wicket:id="permission"></select> <input class="btn btn-success" type="submit" value="Add" wicket:message="value:gb.add" wicket:id="addPermissionButton"/>
</form>
</div>
diff --git a/src/com/gitblit/wicket/panels/RepositoryPermissionsPanel.java b/src/com/gitblit/wicket/panels/RegistrantPermissionsPanel.java
index 3d967d36..936659d2 100644
--- a/src/com/gitblit/wicket/panels/RepositoryPermissionsPanel.java
+++ b/src/com/gitblit/wicket/panels/RegistrantPermissionsPanel.java
@@ -15,6 +15,7 @@
*/
package com.gitblit.wicket.panels;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
@@ -35,49 +36,48 @@ import org.apache.wicket.model.CompoundPropertyModel;
import org.apache.wicket.model.IModel;
import com.gitblit.Constants.AccessPermission;
-import com.gitblit.GitBlit;
-import com.gitblit.models.RepositoryAccessPermission;
+import com.gitblit.models.RegistrantAccessPermission;
import com.gitblit.utils.DeepCopier;
/**
- * Allows user to manipulate repository access permissions.
+ * Allows user to manipulate registrant access permissions.
*
* @author James Moger
*
*/
-public class RepositoryPermissionsPanel extends BasePanel {
+public class RegistrantPermissionsPanel extends BasePanel {
private static final long serialVersionUID = 1L;
- public RepositoryPermissionsPanel(String wicketId, final List<RepositoryAccessPermission> permissions, final Map<AccessPermission, String> translations) {
+ public RegistrantPermissionsPanel(String wicketId, List<String> allRegistrants, final List<RegistrantAccessPermission> permissions, final Map<AccessPermission, String> translations) {
super(wicketId);
// update existing permissions repeater
- RefreshingView<RepositoryAccessPermission> dataView = new RefreshingView<RepositoryAccessPermission>("permissionRow") {
+ RefreshingView<RegistrantAccessPermission> dataView = new RefreshingView<RegistrantAccessPermission>("permissionRow") {
private static final long serialVersionUID = 1L;
@Override
- protected Iterator<IModel<RepositoryAccessPermission>> getItemModels() {
+ protected Iterator<IModel<RegistrantAccessPermission>> getItemModels() {
// the iterator returns RepositoryPermission objects, but we need it to
// return models
- return new ModelIteratorAdapter<RepositoryAccessPermission>(permissions.iterator()) {
+ return new ModelIteratorAdapter<RegistrantAccessPermission>(permissions.iterator()) {
@Override
- protected IModel<RepositoryAccessPermission> model(RepositoryAccessPermission permission) {
- return new CompoundPropertyModel<RepositoryAccessPermission>(permission);
+ protected IModel<RegistrantAccessPermission> model(RegistrantAccessPermission permission) {
+ return new CompoundPropertyModel<RegistrantAccessPermission>(permission);
}
};
}
@Override
- protected Item<RepositoryAccessPermission> newItem(String id, int index, IModel<RepositoryAccessPermission> model) {
+ protected Item<RegistrantAccessPermission> newItem(String id, int index, IModel<RegistrantAccessPermission> model) {
// this item sets markup class attribute to either 'odd' or
// 'even' for decoration
- return new OddEvenItem<RepositoryAccessPermission>(id, index, model);
+ return new OddEvenItem<RegistrantAccessPermission>(id, index, model);
}
- public void populateItem(final Item<RepositoryAccessPermission> item) {
- final RepositoryAccessPermission entry = item.getModelObject();
- item.add(new Label("repository", entry.repository));
+ public void populateItem(final Item<RegistrantAccessPermission> item) {
+ final RegistrantAccessPermission entry = item.getModelObject();
+ item.add(new Label("registrant", entry.registrant));
// use ajax to get immediate update of permission level change
// otherwise we can lose it if they change levels and then add
@@ -99,16 +99,16 @@ public class RepositoryPermissionsPanel extends BasePanel {
add(dataView);
setOutputMarkupId(true);
- // filter out repositories we already have permissions for
- final List<String> repositories = GitBlit.self().getRepositoryList();
- for (RepositoryAccessPermission rp : permissions) {
- repositories.remove(rp.repository);
+ // filter out registrants we already have permissions for
+ final List<String> registrants = new ArrayList<String>(allRegistrants);
+ for (RegistrantAccessPermission rp : permissions) {
+ registrants.remove(rp.registrant);
}
// add new permission form
- IModel<RepositoryAccessPermission> addPermissionModel = new CompoundPropertyModel<RepositoryAccessPermission>(new RepositoryAccessPermission());
- Form<RepositoryAccessPermission> addPermissionForm = new Form<RepositoryAccessPermission>("addPermissionForm", addPermissionModel);
- addPermissionForm.add(new DropDownChoice<String>("repository", repositories));
+ IModel<RegistrantAccessPermission> addPermissionModel = new CompoundPropertyModel<RegistrantAccessPermission>(new RegistrantAccessPermission());
+ Form<RegistrantAccessPermission> addPermissionForm = new Form<RegistrantAccessPermission>("addPermissionForm", addPermissionModel);
+ addPermissionForm.add(new DropDownChoice<String>("registrant", registrants));
addPermissionForm.add(new DropDownChoice<AccessPermission>("permission", Arrays
.asList(AccessPermission.NEWPERMISSIONS), new AccessPermissionRenderer(translations)));
AjaxButton button = new AjaxButton("addPermissionButton", addPermissionForm) {
@@ -118,20 +118,20 @@ public class RepositoryPermissionsPanel extends BasePanel {
@Override
protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
// add permission to our list
- RepositoryAccessPermission rp = (RepositoryAccessPermission) form.getModel().getObject();
+ RegistrantAccessPermission rp = (RegistrantAccessPermission) form.getModel().getObject();
permissions.add(DeepCopier.copy(rp));
- // remove repository from available choices
- repositories.remove(rp.repository);
+ // remove registrant from available choices
+ registrants.remove(rp.registrant);
// force the panel to refresh
- target.addComponent(RepositoryPermissionsPanel.this);
+ target.addComponent(RegistrantPermissionsPanel.this);
}
};
addPermissionForm.add(button);
- // only show add permission form if we have a repository choice
- add(addPermissionForm.setVisible(repositories.size() > 0));
+ // only show add permission form if we have a registrant choice
+ add(addPermissionForm.setVisible(registrants.size() > 0));
}
private class AccessPermissionRenderer implements IChoiceRenderer<AccessPermission> {
diff --git a/src/com/gitblit/wicket/panels/TeamPermissionsPanel.html b/src/com/gitblit/wicket/panels/TeamPermissionsPanel.html
deleted file mode 100644
index d728f651..00000000
--- a/src/com/gitblit/wicket/panels/TeamPermissionsPanel.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
- xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.3-strict.dtd"
- xml:lang="en"
- lang="en">
-
-<body>
-<wicket:panel>
-
- <div wicket:id="permissionRow">
- <div style="padding-top:10px" class="row-fluid">
- <span class="span8" wicket:id="team"></span> <select class="input-medium" wicket:id="permission"></select>
- </div>
- </div>
-
- <div style="padding-top:15px;" class="row-fluid">
- <form class="well form-inline" wicket:id="addPermissionForm">
- <select class="input-large" wicket:id="team"></select> <select class="input-medium" wicket:id="permission"></select> <input class="btn btn-success" type="submit" value="Add" wicket:message="value:gb.add" wicket:id="addPermissionButton"/>
- </form>
- </div>
-
-</wicket:panel>
-</body>
-</html> \ No newline at end of file
diff --git a/src/com/gitblit/wicket/panels/TeamPermissionsPanel.java b/src/com/gitblit/wicket/panels/TeamPermissionsPanel.java
deleted file mode 100644
index e51aab47..00000000
--- a/src/com/gitblit/wicket/panels/TeamPermissionsPanel.java
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- * Copyright 2012 gitblit.com.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.gitblit.wicket.panels;
-
-import java.util.Arrays;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
-import org.apache.wicket.ajax.markup.html.form.AjaxButton;
-import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.markup.html.form.DropDownChoice;
-import org.apache.wicket.markup.html.form.Form;
-import org.apache.wicket.markup.html.form.IChoiceRenderer;
-import org.apache.wicket.markup.repeater.Item;
-import org.apache.wicket.markup.repeater.OddEvenItem;
-import org.apache.wicket.markup.repeater.RefreshingView;
-import org.apache.wicket.markup.repeater.util.ModelIteratorAdapter;
-import org.apache.wicket.model.CompoundPropertyModel;
-import org.apache.wicket.model.IModel;
-
-import com.gitblit.Constants.AccessPermission;
-import com.gitblit.GitBlit;
-import com.gitblit.models.TeamAccessPermission;
-import com.gitblit.utils.DeepCopier;
-
-/**
- * Allows user to manipulate user access permissions.
- *
- * @author James Moger
- *
- */
-public class TeamPermissionsPanel extends BasePanel {
-
- private static final long serialVersionUID = 1L;
-
- public TeamPermissionsPanel(String wicketId, final List<TeamAccessPermission> permissions, final Map<AccessPermission, String> translations) {
- super(wicketId);
-
- // update existing permissions repeater
- RefreshingView<TeamAccessPermission> dataView = new RefreshingView<TeamAccessPermission>("permissionRow") {
- private static final long serialVersionUID = 1L;
-
- @Override
- protected Iterator<IModel<TeamAccessPermission>> getItemModels() {
- // the iterator returns RepositoryPermission objects, but we need it to
- // return models
- return new ModelIteratorAdapter<TeamAccessPermission>(permissions.iterator()) {
- @Override
- protected IModel<TeamAccessPermission> model(TeamAccessPermission permission) {
- return new CompoundPropertyModel<TeamAccessPermission>(permission);
- }
- };
- }
-
- @Override
- protected Item<TeamAccessPermission> newItem(String id, int index, IModel<TeamAccessPermission> model) {
- // this item sets markup class attribute to either 'odd' or
- // 'even' for decoration
- return new OddEvenItem<TeamAccessPermission>(id, index, model);
- }
-
- public void populateItem(final Item<TeamAccessPermission> item) {
- final TeamAccessPermission entry = item.getModelObject();
- item.add(new Label("team", entry.team));
-
- // use ajax to get immediate update of permission level change
- // otherwise we can lose it if they change levels and then add
- // a new repository permission
- final DropDownChoice<AccessPermission> permissionChoice = new DropDownChoice<AccessPermission>(
- "permission", Arrays.asList(AccessPermission.values()), new AccessPermissionRenderer(translations));
- permissionChoice.add(new AjaxFormComponentUpdatingBehavior("onchange") {
-
- private static final long serialVersionUID = 1L;
-
- protected void onUpdate(AjaxRequestTarget target) {
- target.addComponent(permissionChoice);
- }
- });
-
- item.add(permissionChoice);
- }
- };
- add(dataView);
- setOutputMarkupId(true);
-
- // filter out teams we already have permissions for
- final List<String> teams = GitBlit.self().getAllTeamnames();
- for (TeamAccessPermission tp : permissions) {
- teams.remove(tp.team);
- }
-
- // add new permission form
- IModel<TeamAccessPermission> addPermissionModel = new CompoundPropertyModel<TeamAccessPermission>(new TeamAccessPermission());
- Form<TeamAccessPermission> addPermissionForm = new Form<TeamAccessPermission>("addPermissionForm", addPermissionModel);
- addPermissionForm.add(new DropDownChoice<String>("team", teams));
- addPermissionForm.add(new DropDownChoice<AccessPermission>("permission", Arrays
- .asList(AccessPermission.NEWPERMISSIONS), new AccessPermissionRenderer(translations)));
- AjaxButton button = new AjaxButton("addPermissionButton", addPermissionForm) {
-
- private static final long serialVersionUID = 1L;
-
- @Override
- protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
- // add permission to our list
- TeamAccessPermission tp = (TeamAccessPermission) form.getModel().getObject();
- permissions.add(DeepCopier.copy(tp));
-
- // remove team from available choices
- teams.remove(tp.team);
-
- // force the panel to refresh
- target.addComponent(TeamPermissionsPanel.this);
- }
- };
- addPermissionForm.add(button);
-
- // only show add permission form if we have a team choice
- add(addPermissionForm.setVisible(teams.size() > 0));
- }
-
- private class AccessPermissionRenderer implements IChoiceRenderer<AccessPermission> {
-
- private static final long serialVersionUID = 1L;
-
- private final Map<AccessPermission, String> map;
-
- public AccessPermissionRenderer(Map<AccessPermission, String> map) {
- this.map = map;
- }
-
- @Override
- public String getDisplayValue(AccessPermission type) {
- return map.get(type);
- }
-
- @Override
- public String getIdValue(AccessPermission type, int index) {
- return Integer.toString(index);
- }
- }
-}
diff --git a/src/com/gitblit/wicket/panels/UserPermissionsPanel.html b/src/com/gitblit/wicket/panels/UserPermissionsPanel.html
deleted file mode 100644
index 14d43055..00000000
--- a/src/com/gitblit/wicket/panels/UserPermissionsPanel.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
- xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.3-strict.dtd"
- xml:lang="en"
- lang="en">
-
-<body>
-<wicket:panel>
-
- <div wicket:id="permissionRow">
- <div style="padding-top:10px" class="row-fluid">
- <span class="span8" wicket:id="user"></span> <select class="input-medium" wicket:id="permission"></select>
- </div>
- </div>
-
- <div style="padding-top:15px;" class="row-fluid">
- <form class="well form-inline" wicket:id="addPermissionForm">
- <select class="input-large" wicket:id="user"></select> <select class="input-medium" wicket:id="permission"></select> <input class="btn btn-success" type="submit" value="Add" wicket:message="value:gb.add" wicket:id="addPermissionButton"/>
- </form>
- </div>
-
-</wicket:panel>
-</body>
-</html> \ No newline at end of file
diff --git a/src/com/gitblit/wicket/panels/UserPermissionsPanel.java b/src/com/gitblit/wicket/panels/UserPermissionsPanel.java
deleted file mode 100644
index 6d0ae588..00000000
--- a/src/com/gitblit/wicket/panels/UserPermissionsPanel.java
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- * Copyright 2012 gitblit.com.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.gitblit.wicket.panels;
-
-import java.util.Arrays;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
-import org.apache.wicket.ajax.markup.html.form.AjaxButton;
-import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.markup.html.form.DropDownChoice;
-import org.apache.wicket.markup.html.form.Form;
-import org.apache.wicket.markup.html.form.IChoiceRenderer;
-import org.apache.wicket.markup.repeater.Item;
-import org.apache.wicket.markup.repeater.OddEvenItem;
-import org.apache.wicket.markup.repeater.RefreshingView;
-import org.apache.wicket.markup.repeater.util.ModelIteratorAdapter;
-import org.apache.wicket.model.CompoundPropertyModel;
-import org.apache.wicket.model.IModel;
-
-import com.gitblit.Constants.AccessPermission;
-import com.gitblit.GitBlit;
-import com.gitblit.models.UserAccessPermission;
-import com.gitblit.utils.DeepCopier;
-
-/**
- * Allows user to manipulate user access permissions.
- *
- * @author James Moger
- *
- */
-public class UserPermissionsPanel extends BasePanel {
-
- private static final long serialVersionUID = 1L;
-
- public UserPermissionsPanel(String wicketId, final List<UserAccessPermission> permissions, final Map<AccessPermission, String> translations) {
- super(wicketId);
-
- // update existing permissions repeater
- RefreshingView<UserAccessPermission> dataView = new RefreshingView<UserAccessPermission>("permissionRow") {
- private static final long serialVersionUID = 1L;
-
- @Override
- protected Iterator<IModel<UserAccessPermission>> getItemModels() {
- // the iterator returns RepositoryPermission objects, but we need it to
- // return models
- return new ModelIteratorAdapter<UserAccessPermission>(permissions.iterator()) {
- @Override
- protected IModel<UserAccessPermission> model(UserAccessPermission permission) {
- return new CompoundPropertyModel<UserAccessPermission>(permission);
- }
- };
- }
-
- @Override
- protected Item<UserAccessPermission> newItem(String id, int index, IModel<UserAccessPermission> model) {
- // this item sets markup class attribute to either 'odd' or
- // 'even' for decoration
- return new OddEvenItem<UserAccessPermission>(id, index, model);
- }
-
- public void populateItem(final Item<UserAccessPermission> item) {
- final UserAccessPermission entry = item.getModelObject();
- item.add(new Label("user", entry.user));
-
- // use ajax to get immediate update of permission level change
- // otherwise we can lose it if they change levels and then add
- // a new repository permission
- final DropDownChoice<AccessPermission> permissionChoice = new DropDownChoice<AccessPermission>(
- "permission", Arrays.asList(AccessPermission.values()), new AccessPermissionRenderer(translations));
- permissionChoice.add(new AjaxFormComponentUpdatingBehavior("onchange") {
-
- private static final long serialVersionUID = 1L;
-
- protected void onUpdate(AjaxRequestTarget target) {
- target.addComponent(permissionChoice);
- }
- });
-
- item.add(permissionChoice);
- }
- };
- add(dataView);
- setOutputMarkupId(true);
-
- // filter out users we already have permissions for
- final List<String> users = GitBlit.self().getAllUsernames();
- for (UserAccessPermission up : permissions) {
- users.remove(up.user);
- }
-
- // add new permission form
- IModel<UserAccessPermission> addPermissionModel = new CompoundPropertyModel<UserAccessPermission>(new UserAccessPermission());
- Form<UserAccessPermission> addPermissionForm = new Form<UserAccessPermission>("addPermissionForm", addPermissionModel);
- addPermissionForm.add(new DropDownChoice<String>("user", users));
- addPermissionForm.add(new DropDownChoice<AccessPermission>("permission", Arrays
- .asList(AccessPermission.NEWPERMISSIONS), new AccessPermissionRenderer(translations)));
- AjaxButton button = new AjaxButton("addPermissionButton", addPermissionForm) {
-
- private static final long serialVersionUID = 1L;
-
- @Override
- protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
- // add permission to our list
- UserAccessPermission up = (UserAccessPermission) form.getModel().getObject();
- permissions.add(DeepCopier.copy(up));
-
- // remove user from available choices
- users.remove(up.user);
-
- // force the panel to refresh
- target.addComponent(UserPermissionsPanel.this);
- }
- };
- addPermissionForm.add(button);
-
- // only show add permission form if we have a user choice
- add(addPermissionForm.setVisible(users.size() > 0));
- }
-
- private class AccessPermissionRenderer implements IChoiceRenderer<AccessPermission> {
-
- private static final long serialVersionUID = 1L;
-
- private final Map<AccessPermission, String> map;
-
- public AccessPermissionRenderer(Map<AccessPermission, String> map) {
- this.map = map;
- }
-
- @Override
- public String getDisplayValue(AccessPermission type) {
- return map.get(type);
- }
-
- @Override
- public String getIdValue(AccessPermission type, int index) {
- return Integer.toString(index);
- }
- }
-}
diff --git a/src/com/gitblit/wicket/panels/UsersPanel.java b/src/com/gitblit/wicket/panels/UsersPanel.java
index c5dba847..46c502e5 100644
--- a/src/com/gitblit/wicket/panels/UsersPanel.java
+++ b/src/com/gitblit/wicket/panels/UsersPanel.java
@@ -84,7 +84,7 @@ public class UsersPanel extends BasePanel {
item.add(new Label("accesslevel", entry.canAdmin() ? "administrator" : ""));
item.add(new Label("teams", entry.teams.size() > 0 ? ("" + entry.teams.size()) : ""));
item.add(new Label("repositories",
- entry.repositories.size() > 0 ? ("" + entry.repositories.size()) : ""));
+ entry.permissions.size() > 0 ? ("" + entry.permissions.size()) : ""));
Fragment userLinks = new Fragment("userLinks", "userAdminLinks", this);
userLinks.add(new BookmarkablePageLink<Void>("editUser", EditUserPage.class,
WicketUtils.newUsernameParameter(entry.username)));