Gracefully deal with missing repository in permissions ui (issue-155)
| | |
| | | * The access permissions available for a repository.
|
| | | */
|
| | | public static enum AccessPermission {
|
| | | NONE("N"), EXCLUDE("X"), VIEW("V"), CLONE("R"), PUSH("RW"), CREATE("RWC"), DELETE("RWD"), REWIND("RW+");
|
| | | NONE("N"), EXCLUDE("X"), VIEW("V"), CLONE("R"), PUSH("RW"), CREATE("RWC"), DELETE("RWD"), REWIND("RW+"), OWNER("RW+");
|
| | |
|
| | | public static final AccessPermission [] NEWPERMISSIONS = { EXCLUDE, VIEW, CLONE, PUSH, CREATE, DELETE, REWIND };
|
| | |
|
| | |
| | | }
|
| | |
|
| | | public static enum PermissionType {
|
| | | EXPLICIT, OWNER, ADMINISTRATOR, TEAM, REGEX;
|
| | | MISSING, EXPLICIT, TEAM, REGEX, OWNER, ADMINISTRATOR;
|
| | | }
|
| | |
|
| | | public static enum GCStatus {
|
| | |
| | | import com.gitblit.Constants.FederationRequest;
|
| | | import com.gitblit.Constants.FederationStrategy;
|
| | | import com.gitblit.Constants.FederationToken;
|
| | | import com.gitblit.Constants.PermissionType;
|
| | | import com.gitblit.models.FederationModel;
|
| | | import com.gitblit.models.FederationProposal;
|
| | | import com.gitblit.models.FederationSet;
|
| | |
| | | case PULL_SETTINGS:
|
| | | case PULL_SCRIPTS:
|
| | | return token.equals(all);
|
| | | default:
|
| | | break;
|
| | | }
|
| | | return false;
|
| | | }
|
| | |
| | | url = model.origin;
|
| | | }
|
| | | break;
|
| | | default:
|
| | | break;
|
| | | }
|
| | |
|
| | | if (federationSets.containsKey(token)) {
|
| | |
| | | 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;
|
| | |
| | |
|
| | | 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;
|
| | |
| | | }
|
| | |
|
| | | 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) {
|
| | | // exclude Owner or personal repositories
|
| | |
| | | restricted.add(repo.name);
|
| | | }
|
| | | }
|
| | | repoMap.put(repo.name.toLowerCase(), repo);
|
| | | }
|
| | | StringUtils.sortRepositorynames(restricted);
|
| | |
|
| | |
| | | list.remove(rp.registrant.toLowerCase());
|
| | | }
|
| | | }
|
| | | |
| | | // 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);
|
| | | }
|
| | |
|
| | |
| | | setToolTipText(MessageFormat.format(Translation.get("gb.regexPermission"), ap.source));
|
| | | break;
|
| | | default:
|
| | | setText("");
|
| | | setToolTipText(null);
|
| | | if (ap.isMissing()) {
|
| | | setText(Translation.get("gb.missing"));
|
| | | setToolTipText(Translation.get("gb.missingPermission"));
|
| | | } else {
|
| | | setText("");
|
| | | setToolTipText(null);
|
| | | }
|
| | | break;
|
| | | }
|
| | | }
|
| | |
| | | import java.awt.event.MouseAdapter;
|
| | | import java.awt.event.MouseEvent;
|
| | | import java.io.IOException;
|
| | | import java.text.MessageFormat;
|
| | | import java.util.ArrayList;
|
| | | import java.util.List;
|
| | |
|
| | |
| | | import javax.swing.event.ListSelectionListener;
|
| | | import javax.swing.table.TableRowSorter;
|
| | |
|
| | | import com.gitblit.Constants.AccessPermission;
|
| | | import com.gitblit.Constants.PermissionType;
|
| | | import com.gitblit.Constants.RpcRequest;
|
| | | import com.gitblit.models.RegistrantAccessPermission;
|
| | |
| | | gitblit.getSettings());
|
| | | dialog.setLocationRelativeTo(UsersPanel.this);
|
| | | dialog.setUsers(gitblit.getUsers());
|
| | | |
| | | List<RegistrantAccessPermission> permissions = user.getRepositoryPermissions();
|
| | | 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 = gitblit.getRepository(permission.registrant);
|
| | | if (rm == null) {
|
| | | System.out.println(MessageFormat.format("{0}: failed to find registrant repository {1}",
|
| | | getClass().getSimpleName(), permission.registrant));
|
| | | continue;
|
| | | }
|
| | | boolean isOwner = rm.isOwner(user.username);
|
| | | if (isOwner) {
|
| | | permission.permissionType = PermissionType.OWNER;
|
| | | permission.mutable = false;
|
| | | }
|
| | | }
|
| | | }
|
| | | |
| | | dialog.setRepositories(gitblit.getRepositories(), user.getRepositoryPermissions());
|
| | | dialog.setTeams(gitblit.getTeams(), user.teams == null ? null : new ArrayList<TeamModel>(
|
| | | user.teams));
|
| | |
| | | return PermissionType.OWNER.equals(permissionType); |
| | | } |
| | | |
| | | public boolean isMissing() { |
| | | return PermissionType.MISSING.equals(permissionType); |
| | | } |
| | | |
| | | @Override |
| | | public int compareTo(RegistrantAccessPermission p) { |
| | | switch (registrantType) { |
| | |
| | | pType = PermissionType.REGEX;
|
| | | source = registrant;
|
| | | }
|
| | | if (AccessPermission.MISSING.equals(entry.getValue())) {
|
| | | // repository can not be found, permission is not editable
|
| | | editable = false;
|
| | | }
|
| | | list.add(new RegistrantAccessPermission(registrant, entry.getValue(), pType, RegistrantType.REPOSITORY, source, editable));
|
| | | }
|
| | | Collections.sort(list);
|
| | |
| | | gb.administrator = admin
|
| | | gb.administratorPermission = Gitblit administrator
|
| | | gb.team = team
|
| | | gb.teamPermission = permission set by \"{0}\" team membership |
| | | gb.teamPermission = permission set by \"{0}\" team membership
|
| | | gb.missing = missing!
|
| | | gb.missingPermission = the repository for this permission is missing! |
| | |
| | | import org.apache.wicket.model.Model;
|
| | | import org.apache.wicket.model.util.CollectionModel;
|
| | | import org.apache.wicket.model.util.ListModel;
|
| | | import org.slf4j.LoggerFactory;
|
| | |
|
| | | import com.gitblit.Constants.PermissionType;
|
| | | import com.gitblit.Constants.RegistrantType;
|
| | |
| | | // property of a repository.
|
| | | RepositoryModel rm = GitBlit.self().getRepositoryModel(permission.registrant);
|
| | | if (rm == null) {
|
| | | LoggerFactory.getLogger(getClass()).error("Missing repository " + permission.registrant);
|
| | | permission.permissionType = PermissionType.MISSING;
|
| | | permission.mutable = false;
|
| | | continue;
|
| | | }
|
| | | boolean isOwner = rm.isOwner(oldName);
|
| | |
| | | final RegistrantAccessPermission entry = item.getModelObject(); |
| | | if (RegistrantType.REPOSITORY.equals(entry.registrantType)) { |
| | | String repoName = StringUtils.stripDotGit(entry.registrant); |
| | | if (StringUtils.findInvalidCharacter(repoName) == null) { |
| | | if (!entry.isMissing() && StringUtils.findInvalidCharacter(repoName) == null) { |
| | | // repository, strip .git and show swatch |
| | | Label registrant = new Label("registrant", repoName); |
| | | WicketUtils.setCssClass(registrant, "repositorySwatch"); |
| | | WicketUtils.setCssBackground(registrant, repoName); |
| | | item.add(registrant); |
| | | } else { |
| | | // likely a regex |
| | | // regex or missing |
| | | Label label = new Label("registrant", entry.registrant); |
| | | WicketUtils.setCssStyle(label, "font-weight: bold;"); |
| | | item.add(label); |
| | |
| | | item.add(regex); |
| | | break; |
| | | default: |
| | | item.add(new Label("pType", "").setVisible(false)); |
| | | if (entry.isMissing()) { |
| | | // repository is missing, this permission will be removed on save |
| | | Label missing = new Label("pType", getString("gb.missing")); |
| | | WicketUtils.setCssClass(missing, "label label-important"); |
| | | WicketUtils.setHtmlTooltip(missing, getString("gb.missingPermission")); |
| | | item.add(missing); |
| | | } else { |
| | | // standard permission |
| | | item.add(new Label("pType", "").setVisible(false)); |
| | | } |
| | | break; |
| | | } |
| | | |