| | |
| | | - Can't set reset settings with $ or { characters through Gitblit Manager because they are not properly escaped
|
| | |
|
| | | #### additions
|
| | |
|
| | | - Chinese translation (github/dapengme)
|
| | | |
| | | - Implemented multiple repository owners (github/akquinet)
|
| | | - Chinese translation (github/dapengme, github/yin8086)
|
| | |
|
| | | ### Older Releases
|
| | |
|
| | |
| | | for (RepositoryModel model : getRepositoryModels(user)) {
|
| | | if (model.isUsersPersonalRepository(username)) {
|
| | | // personal repository
|
| | | model.owner = user.username;
|
| | | model.addOwner(user.username);
|
| | | String oldRepositoryName = model.name;
|
| | | model.name = "~" + user.username + model.name.substring(model.projectPath.length());
|
| | | model.projectPath = "~" + user.username;
|
| | | updateRepositoryModel(oldRepositoryName, model, false);
|
| | | } else if (model.isOwner(username)) {
|
| | | // common/shared repo
|
| | | model.owner = user.username;
|
| | | model.addOwner(user.username);
|
| | | updateRepositoryModel(model.name, model, false);
|
| | | }
|
| | | }
|
| | |
| | |
|
| | | if (config != null) {
|
| | | model.description = getConfig(config, "description", "");
|
| | | model.owner = getConfig(config, "owner", "");
|
| | | model.addOwners(ArrayUtils.fromString(getConfig(config, "owner", "")));
|
| | | model.useTickets = getConfig(config, "useTickets", false);
|
| | | model.useDocs = getConfig(config, "useDocs", false);
|
| | | model.allowForks = getConfig(config, "allowForks", true);
|
| | |
| | | public void updateConfiguration(Repository r, RepositoryModel repository) {
|
| | | StoredConfig config = r.getConfig();
|
| | | config.setString(Constants.CONFIG_GITBLIT, null, "description", repository.description);
|
| | | config.setString(Constants.CONFIG_GITBLIT, null, "owner", repository.owner);
|
| | | config.setString(Constants.CONFIG_GITBLIT, null, "owner", ArrayUtils.toString(repository.owners));
|
| | | config.setBoolean(Constants.CONFIG_GITBLIT, null, "useTickets", repository.useTickets);
|
| | | config.setBoolean(Constants.CONFIG_GITBLIT, null, "useDocs", repository.useDocs);
|
| | | config.setBoolean(Constants.CONFIG_GITBLIT, null, "allowForks", repository.allowForks);
|
| | |
| | | // create a Gitblit repository model for the clone
|
| | | RepositoryModel cloneModel = repository.cloneAs(cloneName);
|
| | | // owner has REWIND/RW+ permissions
|
| | | cloneModel.owner = user.username;
|
| | | cloneModel.addOwner(user.username);
|
| | | updateRepositoryModel(cloneName, cloneModel, false);
|
| | |
|
| | | // add the owner of the source repository to the clone's access list
|
| | | if (!StringUtils.isEmpty(repository.owner)) {
|
| | | UserModel originOwner = getUserModel(repository.owner);
|
| | | if (originOwner != null) {
|
| | | originOwner.setRepositoryPermission(cloneName, AccessPermission.CLONE);
|
| | | updateUserModel(originOwner.username, originOwner, false);
|
| | | if (!ArrayUtils.isEmpty(repository.owners)) {
|
| | | for (String owner : repository.owners) {
|
| | | UserModel originOwner = getUserModel(owner);
|
| | | if (originOwner != null) {
|
| | | originOwner.setRepositoryPermission(cloneName, AccessPermission.CLONE);
|
| | | updateUserModel(originOwner.username, originOwner, false);
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | |
| | | // create repository
|
| | | RepositoryModel model = new RepositoryModel();
|
| | | model.name = repository;
|
| | | model.owner = user.username;
|
| | | model.addOwner(user.username);
|
| | | model.projectPath = StringUtils.getFirstPathElement(repository);
|
| | | if (model.isUsersPersonalRepository(user.username)) {
|
| | | // personal repository, default to private for user
|
| | |
| | |
|
| | | import javax.swing.BoxLayout;
|
| | | import javax.swing.ButtonGroup;
|
| | | import javax.swing.DefaultComboBoxModel;
|
| | | import javax.swing.DefaultListCellRenderer;
|
| | | import javax.swing.ImageIcon;
|
| | | import javax.swing.JButton;
|
| | |
| | |
|
| | | private JComboBox federationStrategy;
|
| | |
|
| | | private JComboBox ownerField;
|
| | | private JPalette<String> ownersPalette;
|
| | |
|
| | | private JComboBox headRefField;
|
| | |
|
| | |
| | | private JTextField gcThreshold;
|
| | |
|
| | | private JComboBox maxActivityCommits;
|
| | |
|
| | | |
| | | private RegistrantPermissionsPanel usersPalette;
|
| | |
|
| | | private JPalette<String> setsPalette;
|
| | |
| | | gcThreshold = new JTextField(8);
|
| | | gcThreshold.setText(anRepository.gcThreshold);
|
| | |
|
| | | ownerField = new JComboBox();
|
| | | ownersPalette = new JPalette<String>(true);
|
| | |
|
| | | useTickets = new JCheckBox(Translation.get("gb.useTicketsDescription"),
|
| | | anRepository.useTickets);
|
| | |
| | |
|
| | | usersPalette = new RegistrantPermissionsPanel(RegistrantType.USER);
|
| | |
|
| | | JPanel northFieldsPanel = new JPanel(new GridLayout(0, 1, 0, 5));
|
| | | northFieldsPanel.add(newFieldPanel(Translation.get("gb.owner"), ownerField));
|
| | | JPanel northFieldsPanel = new JPanel(new BorderLayout(0, 5));
|
| | | northFieldsPanel.add(newFieldPanel(Translation.get("gb.owners"), ownersPalette), BorderLayout.NORTH);
|
| | | northFieldsPanel.add(newFieldPanel(Translation.get("gb.accessRestriction"),
|
| | | accessRestriction), BorderLayout.NORTH);
|
| | | accessRestriction), BorderLayout.CENTER);
|
| | |
|
| | | JPanel northAccessPanel = new JPanel(new BorderLayout(5, 5));
|
| | | northAccessPanel.add(northFieldsPanel, BorderLayout.NORTH);
|
| | |
| | |
|
| | | repository.name = rname;
|
| | | repository.description = descriptionField.getText();
|
| | | repository.owner = ownerField.getSelectedItem() == null ? null
|
| | | : ownerField.getSelectedItem().toString();
|
| | | repository.owners.clear();
|
| | | repository.owners.addAll(ownersPalette.getSelections());
|
| | | repository.HEAD = headRefField.getSelectedItem() == null ? null
|
| | | : headRefField.getSelectedItem().toString();
|
| | | repository.gcPeriod = (Integer) gcPeriod.getSelectedItem();
|
| | |
| | | this.allowNamed.setSelected(!authenticated);
|
| | | }
|
| | |
|
| | | public void setUsers(String owner, List<String> all, List<RegistrantAccessPermission> permissions) {
|
| | | ownerField.setModel(new DefaultComboBoxModel(all.toArray()));
|
| | | if (!StringUtils.isEmpty(owner)) {
|
| | | ownerField.setSelectedItem(owner);
|
| | | }
|
| | | public void setUsers(List<String> owners, List<String> all, List<RegistrantAccessPermission> permissions) {
|
| | | ownersPalette.setObjects(all, owners);
|
| | | usersPalette.setObjects(all, permissions);
|
| | | }
|
| | |
|
| | |
| | | }
|
| | |
|
| | | public boolean isOwner(RepositoryModel model) {
|
| | | return account != null && account.equalsIgnoreCase(model.owner);
|
| | | return model.isOwner(account);
|
| | | }
|
| | |
|
| | | public String getURL(String action, String repository, String objectId) {
|
| | |
| | | table.getColumn(table.getColumnName(0)).setCellRenderer(nameRenderer);
|
| | |
|
| | | JScrollPane jsp = new JScrollPane(table);
|
| | | jsp.setPreferredSize(new Dimension(225, 175));
|
| | | jsp.setPreferredSize(new Dimension(225, 160));
|
| | | JPanel panel = new JPanel(new BorderLayout());
|
| | | JLabel jlabel = new JLabel(label);
|
| | | jlabel.setFont(jlabel.getFont().deriveFont(Font.BOLD));
|
| | |
| | | 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.RegistrantAccessPermission;
|
| | | import com.gitblit.models.RepositoryModel;
|
| | | import com.gitblit.utils.StringUtils;
|
| | |
|
| | |
| | | dialog.setLocationRelativeTo(RepositoriesPanel.this);
|
| | | List<String> usernames = gitblit.getUsernames();
|
| | | List<RegistrantAccessPermission> members = gitblit.getUserAccessPermissions(repository);
|
| | | dialog.setUsers(repository.owner, usernames, members);
|
| | | dialog.setUsers(new ArrayList<String>(repository.owners), usernames, members);
|
| | | dialog.setTeams(gitblit.getTeamnames(), gitblit.getTeamAccessPermissions(repository));
|
| | | dialog.setRepositories(gitblit.getRepositories());
|
| | | dialog.setFederationSets(gitblit.getFederationSets(), repository.federationSets);
|
| | |
| | | import javax.swing.table.AbstractTableModel;
|
| | |
|
| | | import com.gitblit.models.RepositoryModel;
|
| | | import com.gitblit.utils.ArrayUtils;
|
| | |
|
| | | /**
|
| | | * Table model of a list of repositories.
|
| | |
| | | case Description:
|
| | | return model.description;
|
| | | case Owner:
|
| | | return model.owner;
|
| | | return ArrayUtils.toString(model.owners);
|
| | | case Indicators:
|
| | | return model;
|
| | | case Last_Change:
|
| | |
| | |
|
| | | import java.io.Serializable;
|
| | | import java.util.ArrayList;
|
| | | import java.util.Collection;
|
| | | import java.util.Date;
|
| | | import java.util.List;
|
| | | import java.util.Map;
|
| | |
| | | // field names are reflectively mapped in EditRepository page
|
| | | public String name;
|
| | | public String description;
|
| | | public String owner;
|
| | | public List<String> owners;
|
| | | public Date lastChange;
|
| | | public boolean hasCommits;
|
| | | public boolean showRemoteBranches;
|
| | |
| | | public RepositoryModel(String name, String description, String owner, Date lastchange) {
|
| | | this.name = name;
|
| | | this.description = description;
|
| | | this.owner = owner;
|
| | | this.lastChange = lastchange;
|
| | | this.accessRestriction = AccessRestrictionType.NONE;
|
| | | this.authorizationControl = AuthorizationControl.NAMED;
|
| | | this.federationSets = new ArrayList<String>();
|
| | | this.federationStrategy = FederationStrategy.FEDERATE_THIS;
|
| | | this.projectPath = StringUtils.getFirstPathElement(name);
|
| | | this.owners = new ArrayList<String>();
|
| | | |
| | | addOwner(owner);
|
| | | }
|
| | |
|
| | | public List<String> getLocalBranches() {
|
| | |
| | | }
|
| | |
|
| | | public boolean isOwner(String username) {
|
| | | return owner != null && username != null && owner.equalsIgnoreCase(username);
|
| | | if (StringUtils.isEmpty(username) || ArrayUtils.isEmpty(owners)) {
|
| | | return false;
|
| | | }
|
| | | return owners.contains(username.toLowerCase());
|
| | | }
|
| | |
|
| | | public boolean isPersonalRepository() {
|
| | |
| | | clone.sparkleshareId = sparkleshareId;
|
| | | return clone;
|
| | | }
|
| | | } |
| | |
|
| | | public void addOwner(String username) {
|
| | | if (!StringUtils.isEmpty(username)) {
|
| | | String name = username.toLowerCase();
|
| | | // a set would be more efficient, but this complicates JSON
|
| | | // deserialization so we enforce uniqueness with an arraylist
|
| | | if (!owners.contains(name)) {
|
| | | owners.add(name);
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | public void removeOwner(String username) {
|
| | | if (!StringUtils.isEmpty(username)) {
|
| | | owners.remove(username.toLowerCase());
|
| | | }
|
| | | }
|
| | |
|
| | | public void addOwners(Collection<String> usernames) {
|
| | | if (!ArrayUtils.isEmpty(usernames)) {
|
| | | for (String username : usernames) {
|
| | | addOwner(username);
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | public void removeOwners(Collection<String> usernames) {
|
| | | if (!ArrayUtils.isEmpty(owners)) {
|
| | | for (String username : usernames) {
|
| | | removeOwner(username);
|
| | | }
|
| | | }
|
| | | }
|
| | | } |
| | |
| | | @Deprecated
|
| | | @Unused
|
| | | public boolean canAccessRepository(RepositoryModel repository) {
|
| | | boolean isOwner = !StringUtils.isEmpty(repository.owner)
|
| | | && repository.owner.equals(username);
|
| | | boolean isOwner = repository.isOwner(username);
|
| | | boolean allowAuthenticated = isAuthenticated && AuthorizationControl.AUTHENTICATED.equals(repository.authorizationControl);
|
| | | return canAdmin() || isOwner || repositories.contains(repository.name.toLowerCase())
|
| | | || hasTeamAccess(repository.name) || allowAuthenticated;
|
| | |
| | | */
|
| | | package com.gitblit.utils;
|
| | |
|
| | | import java.util.ArrayList;
|
| | | import java.util.Collection;
|
| | | import java.util.List;
|
| | |
|
| | |
|
| | | /**
|
| | |
| | | public static boolean isEmpty(Collection<?> collection) {
|
| | | return collection == null || collection.size() == 0;
|
| | | }
|
| | | |
| | | public static String toString(Collection<?> collection) {
|
| | | if (isEmpty(collection)) {
|
| | | return "";
|
| | | }
|
| | | StringBuilder sb = new StringBuilder();
|
| | | for (Object o : collection) {
|
| | | sb.append(o.toString()).append(", ");
|
| | | }
|
| | | // trim trailing comma-space
|
| | | sb.setLength(sb.length() - 2);
|
| | | return sb.toString();
|
| | | }
|
| | | |
| | | public static Collection<String> fromString(String value) {
|
| | | if (StringUtils.isEmpty(value)) {
|
| | | value = "";
|
| | | }
|
| | | List<String> list = new ArrayList<String>();
|
| | | String [] values = value.split(",|;");
|
| | | for (String v : values) {
|
| | | String string = v.trim();
|
| | | if (!StringUtils.isEmpty(string)) {
|
| | | list.add(string);
|
| | | }
|
| | | }
|
| | | return list;
|
| | | }
|
| | | }
|
| | |
| | | gb.siteName = site name
|
| | | gb.siteNameDescription = short, descriptive name of your server
|
| | | gb.excludeFromActivity = exclude from activity page
|
| | | gb.isSparkleshared = repository is Sparkleshared |
| | | gb.isSparkleshared = repository is Sparkleshared
|
| | | gb.owners = owners |
| | |
| | | <div class="tab-pane" id="permissions">
|
| | | <table class="plain">
|
| | | <tbody class="settings">
|
| | | <tr><th><wicket:message key="gb.owner"></wicket:message></th><td class="edit"><select class="span2" wicket:id="owner" tabindex="15" /> <span class="help-inline"><wicket:message key="gb.ownerDescription"></wicket:message></span></td></tr>
|
| | | <tr><th><wicket:message key="gb.owners"></wicket:message></th><td class="edit"><span wicket:id="owners" tabindex="15" /> </td></tr>
|
| | | <tr><th colspan="2"><hr/></th></tr>
|
| | | <tr><th><wicket:message key="gb.accessRestriction"></wicket:message></th><td class="edit"><select class="span4" wicket:id="accessRestriction" tabindex="16" /></td></tr>
|
| | | <tr><th colspan="2"><hr/></th></tr>
|
| | |
| | | // personal create permissions, inject personal repository path
|
| | | model.name = user.getPersonalPath() + "/";
|
| | | model.projectPath = user.getPersonalPath();
|
| | | model.owner = user.username;
|
| | | model.addOwner(user.username);
|
| | | // personal repositories are private by default
|
| | | model.accessRestriction = AccessRestrictionType.VIEW;
|
| | | model.authorizationControl = AuthorizationControl.NAMED;
|
| | |
| | | final RegistrantPermissionsPanel teamsPalette = new RegistrantPermissionsPanel("teams",
|
| | | RegistrantType.TEAM, GitBlit.self().getAllTeamnames(), repositoryTeams, getAccessPermissions());
|
| | |
|
| | | // owners palette
|
| | | List<String> owners = new ArrayList<String>(repositoryModel.owners);
|
| | | List<String> persons = GitBlit.self().getAllUsernames();
|
| | | final Palette<String> ownersPalette = new Palette<String>("owners", new ListModel<String>(owners), new CollectionModel<String>(
|
| | | persons), new StringChoiceRenderer(), 12, true);
|
| | | |
| | | // indexed local branches palette
|
| | | List<String> allLocalBranches = new ArrayList<String>();
|
| | | allLocalBranches.add(Constants.DEFAULT_BRANCH);
|
| | |
| | | }
|
| | | repositoryModel.indexedBranches = indexedBranches;
|
| | |
|
| | | // owners
|
| | | repositoryModel.owners.clear();
|
| | | Iterator<String> owners = ownersPalette.getSelectedChoices();
|
| | | while (owners.hasNext()) {
|
| | | repositoryModel.addOwner(owners.next());
|
| | | }
|
| | | |
| | | // pre-receive scripts
|
| | | List<String> preReceiveScripts = new ArrayList<String>();
|
| | | Iterator<String> pres = preReceivePalette.getSelectedChoices();
|
| | |
| | | // field names reflective match RepositoryModel fields
|
| | | form.add(new TextField<String>("name").setEnabled(allowEditName));
|
| | | form.add(new TextField<String>("description"));
|
| | | form.add(new DropDownChoice<String>("owner", GitBlit.self().getAllUsernames())
|
| | | .setEnabled(GitBlitWebSession.get().canAdmin() && !repositoryModel.isPersonalRepository()));
|
| | | form.add(ownersPalette);
|
| | | form.add(new CheckBox("allowForks").setEnabled(GitBlit.getBoolean(Keys.web.allowForking, true)));
|
| | | DropDownChoice<AccessRestrictionType> accessRestriction = new DropDownChoice<AccessRestrictionType>("accessRestriction", Arrays
|
| | | .asList(AccessRestrictionType.values()), new AccessRestrictionRenderer());
|
| | |
| | | isAdmin = true;
|
| | | return;
|
| | | } else {
|
| | | if (!model.owner.equalsIgnoreCase(user.username)) {
|
| | | if (!model.isOwner(user.username)) {
|
| | | // User is not an Admin nor Owner
|
| | | error(getString("gb.errorOnlyAdminOrOwnerMayEditRepository"), true);
|
| | | }
|
| | |
| | | showAdmin = GitBlit.getBoolean(Keys.web.allowAdministration, false);
|
| | | }
|
| | | isOwner = GitBlitWebSession.get().isLoggedIn()
|
| | | && (model.owner != null && model.owner.equalsIgnoreCase(GitBlitWebSession.get()
|
| | | && (model.isOwner(GitBlitWebSession.get()
|
| | | .getUsername()));
|
| | | if (showAdmin || isOwner) {
|
| | | pages.put("edit", new PageRegistration("gb.edit", EditRepositoryPage.class, params));
|
| | |
| | | <div class="hidden-phone" style="padding-bottom: 10px;">
|
| | | <table class="plain">
|
| | | <tr><th><wicket:message key="gb.description">[description]</wicket:message></th><td><span wicket:id="repositoryDescription">[repository description]</span></td></tr>
|
| | | <tr><th><wicket:message key="gb.owner">[owner]</wicket:message></th><td><span wicket:id="repositoryOwner">[repository owner]</span></td></tr>
|
| | | <tr><th><wicket:message key="gb.owners">[owner]</wicket:message></th><td><span wicket:id="repositoryOwners"><span wicket:id="owner"></span><span wicket:id="comma"></span></span></td></tr>
|
| | | <tr><th><wicket:message key="gb.lastChange">[last change]</wicket:message></th><td><span wicket:id="repositoryLastChange">[repository last change]</span></td></tr>
|
| | | <tr><th><wicket:message key="gb.stats">[stats]</wicket:message></th><td><span wicket:id="branchStats">[branch stats]</span> <span class="link"><a wicket:id="metrics"><wicket:message key="gb.metrics">[metrics]</wicket:message></a></span></td></tr>
|
| | | <tr><th style="vertical-align:top;"><wicket:message key="gb.repositoryUrl">[URL]</wicket:message> <img style="vertical-align: top;padding-left:3px;" wicket:id="accessRestrictionIcon" /></th><td><span wicket:id="repositoryCloneUrl">[repository clone url]</span><div wicket:id="otherUrls"></div></td></tr>
|
| | |
| | | <div style="border:1px solid #ddd;border-radius: 0 0 3px 3px;padding: 20px;">
|
| | | <div wicket:id="readmeContent" class="markdown"></div>
|
| | | </div>
|
| | | </wicket:fragment> |
| | | </wicket:fragment>
|
| | | |
| | | <wicket:fragment wicket:id="ownersFragment">
|
| | | |
| | | </wicket:fragment>
|
| | | </wicket:extend>
|
| | | </body>
|
| | | </html> |
| | |
| | | import org.apache.wicket.markup.html.basic.Label;
|
| | | import org.apache.wicket.markup.html.link.BookmarkablePageLink;
|
| | | import org.apache.wicket.markup.html.panel.Fragment;
|
| | | import org.apache.wicket.markup.repeater.Item;
|
| | | import org.apache.wicket.markup.repeater.data.DataView;
|
| | | import org.apache.wicket.markup.repeater.data.ListDataProvider;
|
| | | import org.eclipse.jgit.lib.Repository;
|
| | | import org.eclipse.jgit.revwalk.RevCommit;
|
| | | import org.wicketstuff.googlecharts.Chart;
|
| | |
| | |
|
| | | // repository description
|
| | | add(new Label("repositoryDescription", getRepositoryModel().description));
|
| | | String owner = getRepositoryModel().owner;
|
| | | if (StringUtils.isEmpty(owner)) {
|
| | | add(new Label("repositoryOwner").setVisible(false));
|
| | | } else {
|
| | | UserModel ownerModel = GitBlit.self().getUserModel(owner);
|
| | | if (ownerModel != null) {
|
| | | add(new LinkPanel("repositoryOwner", null, ownerModel.getDisplayName(), UserPage.class, WicketUtils.newUsernameParameter(owner)));
|
| | | } else {
|
| | | add(new Label("repositoryOwner", owner));
|
| | | |
| | | // owner links
|
| | | final List<String> owners = new ArrayList<String>(getRepositoryModel().owners);
|
| | | ListDataProvider<String> ownersDp = new ListDataProvider<String>(owners);
|
| | | DataView<String> ownersView = new DataView<String>("repositoryOwners", ownersDp) {
|
| | | private static final long serialVersionUID = 1L;
|
| | | int counter = 0;
|
| | | public void populateItem(final Item<String> item) {
|
| | | UserModel ownerModel = GitBlit.self().getUserModel(item.getModelObject());
|
| | | if (ownerModel != null) {
|
| | | item.add(new LinkPanel("owner", null, ownerModel.getDisplayName(), UserPage.class,
|
| | | WicketUtils.newUsernameParameter(ownerModel.username)).setRenderBodyOnly(true));
|
| | | } else {
|
| | | item.add(new Label("owner").setVisible(false));
|
| | | }
|
| | | counter++;
|
| | | item.add(new Label("comma", ",").setVisible(counter < owners.size()));
|
| | | item.setRenderBodyOnly(true);
|
| | | }
|
| | | }
|
| | |
|
| | | };
|
| | | ownersView.setRenderBodyOnly(true);
|
| | | add(ownersView);
|
| | | |
| | | add(WicketUtils.createTimestampLabel("repositoryLastChange",
|
| | | JGitUtils.getLastChange(r), getTimeZone(), getTimeUtils()));
|
| | | if (metricsTotal == null) {
|
| | |
| | | add(WicketUtils.newBlankImage("accessRestrictionIcon"));
|
| | | }
|
| | |
|
| | | if (StringUtils.isEmpty(entry.owner)) {
|
| | | if (ArrayUtils.isEmpty(entry.owners)) {
|
| | | add(new Label("repositoryOwner").setVisible(false));
|
| | | } else {
|
| | | UserModel ownerModel = GitBlit.self().getUserModel(entry.owner);
|
| | | String owner = entry.owner;
|
| | | if (ownerModel != null) {
|
| | | owner = ownerModel.getDisplayName();
|
| | | String owner = "";
|
| | | for (String username : entry.owners) {
|
| | | UserModel ownerModel = GitBlit.self().getUserModel(username);
|
| | | |
| | | if (ownerModel != null) {
|
| | | owner = ownerModel.getDisplayName();
|
| | | } |
| | | }
|
| | | add(new Label("repositoryOwner", owner + " (" +
|
| | | if (entry.owners.size() > 1) {
|
| | | owner += ", ...";
|
| | | }
|
| | | Label ownerLabel = (new Label("repositoryOwner", owner + " (" +
|
| | | localizer.getString("gb.owner", parent) + ")"));
|
| | | WicketUtils.setHtmlTooltip(ownerLabel, ArrayUtils.toString(entry.owners));
|
| | | add(ownerLabel);
|
| | | }
|
| | |
|
| | | UserModel user = GitBlitWebSession.get().getUser();
|
| | |
| | | import com.gitblit.models.ProjectModel;
|
| | | import com.gitblit.models.RepositoryModel;
|
| | | import com.gitblit.models.UserModel;
|
| | | import com.gitblit.utils.ArrayUtils;
|
| | | import com.gitblit.utils.StringUtils;
|
| | | import com.gitblit.wicket.GitBlitWebSession;
|
| | | import com.gitblit.wicket.WicketUtils;
|
| | |
| | | row.add(WicketUtils.newBlankImage("accessRestrictionIcon"));
|
| | | }
|
| | |
|
| | | String owner = entry.owner;
|
| | | if (!StringUtils.isEmpty(owner)) {
|
| | | UserModel ownerModel = GitBlit.self().getUserModel(owner);
|
| | | if (ownerModel != null) {
|
| | | owner = ownerModel.getDisplayName();
|
| | | String owner = "";
|
| | | if (!ArrayUtils.isEmpty(entry.owners)) {
|
| | | // display first owner
|
| | | for (String username : entry.owners) {
|
| | | UserModel ownerModel = GitBlit.self().getUserModel(username);
|
| | | if (ownerModel != null) {
|
| | | owner = ownerModel.getDisplayName();
|
| | | break;
|
| | | }
|
| | | }
|
| | | if (entry.owners.size() > 1) {
|
| | | owner += ", ...";
|
| | | }
|
| | | }
|
| | | row.add(new Label("repositoryOwner", owner));
|
| | | Label ownerLabel = new Label("repositoryOwner", owner);
|
| | | WicketUtils.setHtmlTooltip(ownerLabel, ArrayUtils.toString(entry.owners));
|
| | | row.add(ownerLabel);
|
| | |
|
| | | String lastChange;
|
| | | if (entry.lastChange.getTime() == 0) {
|
| | |
| | | Collections.sort(list, new Comparator<RepositoryModel>() {
|
| | | @Override
|
| | | public int compare(RepositoryModel o1, RepositoryModel o2) {
|
| | | String own1 = ArrayUtils.toString(o1.owners);
|
| | | String own2 = ArrayUtils.toString(o2.owners);
|
| | | if (asc) {
|
| | | return o1.owner.compareTo(o2.owner);
|
| | | return own1.compareTo(own2);
|
| | | }
|
| | | return o2.owner.compareTo(o1.owner);
|
| | | return own2.compareTo(own1);
|
| | | }
|
| | | });
|
| | | } else if (prop.equals(SortBy.description.name())) {
|
| | |
| | | model.accessRestriction = AccessRestrictionType.VIEW;
|
| | | model.description = "cloneable repository " + i;
|
| | | model.lastChange = new Date();
|
| | | model.owner = "adminuser";
|
| | | model.addOwner("adminuser");
|
| | | model.name = "repo" + i + ".git";
|
| | | model.size = "5 MB";
|
| | | model.hasCommits = true;
|
| | |
| | | import com.gitblit.models.PushLogEntry;
|
| | | import com.gitblit.models.RepositoryModel;
|
| | | import com.gitblit.models.UserModel;
|
| | | import com.gitblit.utils.ArrayUtils;
|
| | | import com.gitblit.utils.JGitUtils;
|
| | | import com.gitblit.utils.PushLogUtils;
|
| | |
|
| | |
| | |
|
| | | // confirm default personal repository permissions
|
| | | RepositoryModel model = GitBlit.self().getRepositoryModel(MessageFormat.format("~{0}/ticgit.git", user.username));
|
| | | assertEquals("Unexpected owner", user.username, model.owner);
|
| | | assertEquals("Unexpected owner", user.username, ArrayUtils.toString(model.owners));
|
| | | assertEquals("Unexpected authorization control", AuthorizationControl.NAMED, model.authorizationControl);
|
| | | assertEquals("Unexpected access restriction", AccessRestrictionType.VIEW, model.accessRestriction);
|
| | |
|
| | |
| | |
|
| | | // confirm default project repository permissions
|
| | | RepositoryModel model = GitBlit.self().getRepositoryModel("project/ticgit.git");
|
| | | assertEquals("Unexpected owner", user.username, model.owner);
|
| | | assertEquals("Unexpected owner", user.username, ArrayUtils.toString(model.owners));
|
| | | assertEquals("Unexpected authorization control", AuthorizationControl.fromName(GitBlit.getString(Keys.git.defaultAuthorizationControl, "NAMED")), model.authorizationControl);
|
| | | assertEquals("Unexpected access restriction", AccessRestrictionType.fromName(GitBlit.getString(Keys.git.defaultAccessRestriction, "NONE")), model.accessRestriction);
|
| | |
|
| | |
| | | repository.accessRestriction = AccessRestrictionType.VIEW; |
| | | |
| | | UserModel user = new UserModel("test"); |
| | | repository.owner = user.username; |
| | | repository.addOwner(user.username); |
| | | |
| | | assertFalse("user SHOULD NOT HAVE a repository permission!", user.hasRepositoryPermission(repository.name)); |
| | | assertTrue("owner CAN NOT view!", user.canView(repository)); |
| | |
| | | } |
| | | |
| | | @Test |
| | | public void testMultipleOwners() throws Exception { |
| | | RepositoryModel repository = new RepositoryModel("myrepo.git", null, null, new Date()); |
| | | repository.authorizationControl = AuthorizationControl.NAMED; |
| | | repository.accessRestriction = AccessRestrictionType.VIEW; |
| | | |
| | | UserModel user = new UserModel("test"); |
| | | repository.addOwner(user.username); |
| | | UserModel user2 = new UserModel("test2"); |
| | | repository.addOwner(user2.username); |
| | | |
| | | // first owner |
| | | assertFalse("user SHOULD NOT HAVE a repository permission!", user.hasRepositoryPermission(repository.name)); |
| | | assertTrue("owner CAN NOT view!", user.canView(repository)); |
| | | assertTrue("owner CAN NOT clone!", user.canClone(repository)); |
| | | assertTrue("owner CAN NOT push!", user.canPush(repository)); |
| | | |
| | | assertTrue("owner CAN NOT create ref!", user.canCreateRef(repository)); |
| | | assertTrue("owner CAN NOT delete ref!", user.canDeleteRef(repository)); |
| | | assertTrue("owner CAN NOT rewind ref!", user.canRewindRef(repository)); |
| | | |
| | | assertTrue("owner CAN NOT fork!", user.canFork(repository)); |
| | | |
| | | assertFalse("owner CAN NOT delete!", user.canDelete(repository)); |
| | | assertTrue("owner CAN NOT edit!", user.canEdit(repository)); |
| | | |
| | | // second owner |
| | | assertFalse("user SHOULD NOT HAVE a repository permission!", user2.hasRepositoryPermission(repository.name)); |
| | | assertTrue("owner CAN NOT view!", user2.canView(repository)); |
| | | assertTrue("owner CAN NOT clone!", user2.canClone(repository)); |
| | | assertTrue("owner CAN NOT push!", user2.canPush(repository)); |
| | | |
| | | assertTrue("owner CAN NOT create ref!", user2.canCreateRef(repository)); |
| | | assertTrue("owner CAN NOT delete ref!", user2.canDeleteRef(repository)); |
| | | assertTrue("owner CAN NOT rewind ref!", user2.canRewindRef(repository)); |
| | | |
| | | assertTrue("owner CAN NOT fork!", user2.canFork(repository)); |
| | | |
| | | assertFalse("owner CAN NOT delete!", user2.canDelete(repository)); |
| | | assertTrue("owner CAN NOT edit!", user2.canEdit(repository)); |
| | | |
| | | assertTrue(repository.isOwner(user.username)); |
| | | assertTrue(repository.isOwner(user2.username)); |
| | | } |
| | | |
| | | @Test |
| | | public void testOwnerPersonalRepository() throws Exception { |
| | | RepositoryModel repository = new RepositoryModel("~test/myrepo.git", null, null, new Date()); |
| | | repository.authorizationControl = AuthorizationControl.NAMED; |
| | | repository.accessRestriction = AccessRestrictionType.VIEW; |
| | | |
| | | UserModel user = new UserModel("test"); |
| | | repository.owner = user.username; |
| | | repository.addOwner(user.username); |
| | | |
| | | assertFalse("user SHOULD NOT HAVE a repository permission!", user.hasRepositoryPermission(repository.name)); |
| | | assertTrue("user CAN NOT view!", user.canView(repository)); |
| | |
| | | repository.accessRestriction = AccessRestrictionType.VIEW; |
| | | |
| | | UserModel user = new UserModel("visitor"); |
| | | repository.owner = "test"; |
| | | repository.addOwner("test"); |
| | | |
| | | assertFalse("user HAS a repository permission!", user.hasRepositoryPermission(repository.name)); |
| | | assertFalse("user CAN view!", user.canView(repository)); |
| | |
| | | RepositoryModel model = new RepositoryModel();
|
| | | model.name = "garbagerepo.git";
|
| | | model.description = "created by RpcUtils";
|
| | | model.owner = "garbage";
|
| | | model.addOwner("garbage");
|
| | | model.accessRestriction = AccessRestrictionType.VIEW;
|
| | | model.authorizationControl = AuthorizationControl.AUTHENTICATED;
|
| | |
|