From d4e9b0dad4edf1c493c1eead0456041df897541a Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Wed, 16 Jan 2013 07:56:29 -0500
Subject: [PATCH] Updated docs for upgrade procedure
---
src/com/gitblit/client/EditUserDialog.java | 100 +++++++++++++++++++++++++++++++++++++++++++++++---
1 files changed, 94 insertions(+), 6 deletions(-)
diff --git a/src/com/gitblit/client/EditUserDialog.java b/src/com/gitblit/client/EditUserDialog.java
index da75867..0400f5c 100644
--- a/src/com/gitblit/client/EditUserDialog.java
+++ b/src/com/gitblit/client/EditUserDialog.java
@@ -27,8 +27,10 @@
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Collections;
+import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
+import java.util.Map;
import java.util.Set;
import javax.swing.ImageIcon;
@@ -46,6 +48,9 @@
import javax.swing.KeyStroke;
import com.gitblit.Constants.AccessRestrictionType;
+import com.gitblit.Constants.AuthorizationControl;
+import com.gitblit.Constants.PermissionType;
+import com.gitblit.Constants.RegistrantType;
import com.gitblit.Keys;
import com.gitblit.models.RegistrantAccessPermission;
import com.gitblit.models.RepositoryModel;
@@ -85,7 +90,17 @@
private JCheckBox canCreateCheckbox;
private JCheckBox notFederatedCheckbox;
+
+ private JTextField organizationalUnitField;
+
+ private JTextField organizationField;
+ private JTextField localityField;
+
+ private JTextField stateProvinceField;
+
+ private JTextField countryCodeField;
+
private RegistrantPermissionsPanel repositoryPalette;
private JPalette<TeamModel> teamsPalette;
@@ -137,6 +152,12 @@
Translation.get("gb.excludeFromFederationDescription"),
anUser.excludeFromFederation);
+ organizationalUnitField = new JTextField(anUser.organizationalUnit == null ? "" : anUser.organizationalUnit, 25);
+ organizationField = new JTextField(anUser.organization == null ? "" : anUser.organization, 25);
+ localityField = new JTextField(anUser.locality == null ? "" : anUser.locality, 25);
+ stateProvinceField = new JTextField(anUser.stateProvince == null ? "" : anUser.stateProvince, 25);
+ countryCodeField = new JTextField(anUser.countryCode == null ? "" : anUser.countryCode, 15);
+
// credentials are optionally controlled by 3rd-party authentication
usernameField.setEnabled(settings.supportsCredentialChanges);
passwordField.setEnabled(settings.supportsCredentialChanges);
@@ -144,6 +165,12 @@
displayNameField.setEnabled(settings.supportsDisplayNameChanges);
emailAddressField.setEnabled(settings.supportsEmailAddressChanges);
+
+ organizationalUnitField.setEnabled(settings.supportsDisplayNameChanges);
+ organizationField.setEnabled(settings.supportsDisplayNameChanges);
+ localityField.setEnabled(settings.supportsDisplayNameChanges);
+ stateProvinceField.setEnabled(settings.supportsDisplayNameChanges);
+ countryCodeField.setEnabled(settings.supportsDisplayNameChanges);
JPanel fieldsPanel = new JPanel(new GridLayout(0, 1));
fieldsPanel.add(newFieldPanel(Translation.get("gb.username"), usernameField));
@@ -157,13 +184,23 @@
fieldsPanel.add(newFieldPanel(Translation.get("gb.excludeFromFederation"),
notFederatedCheckbox));
+ JPanel attributesPanel = new JPanel(new GridLayout(0, 1, 5, 2));
+ attributesPanel.add(newFieldPanel(Translation.get("gb.organizationalUnit") + " (OU)", organizationalUnitField));
+ attributesPanel.add(newFieldPanel(Translation.get("gb.organization") + " (O)", organizationField));
+ attributesPanel.add(newFieldPanel(Translation.get("gb.locality") + " (L)", localityField));
+ attributesPanel.add(newFieldPanel(Translation.get("gb.stateProvince") + " (ST)", stateProvinceField));
+ attributesPanel.add(newFieldPanel(Translation.get("gb.countryCode") + " (C)", countryCodeField));
+
final Insets _insets = new Insets(5, 5, 5, 5);
- repositoryPalette = new RegistrantPermissionsPanel();
+ repositoryPalette = new RegistrantPermissionsPanel(RegistrantType.REPOSITORY);
teamsPalette = new JPalette<TeamModel>();
teamsPalette.setEnabled(settings.supportsTeamMembershipChanges);
JPanel fieldsPanelTop = new JPanel(new BorderLayout());
fieldsPanelTop.add(fieldsPanel, BorderLayout.NORTH);
+
+ JPanel attributesPanelTop = new JPanel(new BorderLayout());
+ attributesPanelTop.add(attributesPanel, BorderLayout.NORTH);
JPanel repositoriesPanel = new JPanel(new BorderLayout()) {
@@ -187,6 +224,7 @@
JTabbedPane panel = new JTabbedPane(JTabbedPane.TOP);
panel.addTab(Translation.get("gb.general"), fieldsPanelTop);
+ panel.addTab(Translation.get("gb.attributes"), attributesPanelTop);
if (protocolVersion > 1) {
panel.addTab(Translation.get("gb.teamMemberships"), teamsPanel);
}
@@ -319,6 +357,12 @@
user.canCreate = canCreateCheckbox.isSelected();
user.excludeFromFederation = notFederatedCheckbox.isSelected();
+ user.organizationalUnit = organizationalUnitField.getText().trim();
+ user.organization = organizationField.getText().trim();
+ user.locality = localityField.getText().trim();
+ user.stateProvince = stateProvinceField.getText().trim();
+ user.countryCode = countryCodeField.getText().trim();
+
for (RegistrantAccessPermission rp : repositoryPalette.getPermissions()) {
user.setRepositoryPermission(rp.registrant, rp.permission);
}
@@ -341,11 +385,36 @@
}
public void setRepositories(List<RepositoryModel> repositories, List<RegistrantAccessPermission> permissions) {
+ Map<String, RepositoryModel> repoMap = new HashMap<String, RepositoryModel>();
List<String> restricted = new ArrayList<String>();
for (RepositoryModel repo : repositories) {
- if (repo.accessRestriction.exceeds(AccessRestrictionType.NONE)) {
- restricted.add(repo.name);
+ // exclude Owner or personal repositories
+ if (!repo.isOwner(username) && !repo.isUsersPersonalRepository(username)) {
+ if (repo.accessRestriction.exceeds(AccessRestrictionType.NONE)
+ && repo.authorizationControl.equals(AuthorizationControl.NAMED)) {
+ restricted.add(repo.name);
+ }
}
+ repoMap.put(repo.name.toLowerCase(), repo);
+ }
+ StringUtils.sortRepositorynames(restricted);
+
+ List<String> list = new ArrayList<String>();
+ // repositories
+ list.add(".*");
+ // all repositories excluding personal repositories
+ list.add("[^~].*");
+ String lastProject = null;
+ for (String repo : restricted) {
+ String projectPath = StringUtils.getFirstPathElement(repo).toLowerCase();
+ if (lastProject == null || !lastProject.equalsIgnoreCase(projectPath)) {
+ lastProject = projectPath;
+ if (!StringUtils.isEmpty(projectPath)) {
+ // regex for all repositories within a project
+ list.add(projectPath + "/.*");
+ }
+ }
+ list.add(repo);
}
// remove repositories for which user already has a permission
@@ -353,12 +422,31 @@
permissions = new ArrayList<RegistrantAccessPermission>();
} else {
for (RegistrantAccessPermission rp : permissions) {
- restricted.remove(rp.registrant);
+ list.remove(rp.registrant.toLowerCase());
}
}
- StringUtils.sortRepositorynames(restricted);
- repositoryPalette.setObjects(restricted, permissions);
+ // update owner and missing permissions for editing
+ for (RegistrantAccessPermission permission : permissions) {
+ if (permission.mutable && PermissionType.EXPLICIT.equals(permission.permissionType)) {
+ // Ensure this is NOT an owner permission - which is non-editable
+ // We don't know this from within the usermodel, ownership is a
+ // property of a repository.
+ RepositoryModel rm = repoMap.get(permission.registrant.toLowerCase());
+ if (rm == null) {
+ permission.permissionType = PermissionType.MISSING;
+ permission.mutable = false;
+ continue;
+ }
+ boolean isOwner = rm.isOwner(username);
+ if (isOwner) {
+ permission.permissionType = PermissionType.OWNER;
+ permission.mutable = false;
+ }
+ }
+ }
+
+ repositoryPalette.setObjects(list, permissions);
}
public void setTeams(List<TeamModel> teams, List<TeamModel> selected) {
--
Gitblit v1.9.1