Merge commit 'refs/tickets/08/8/3' of https://dev.gitblit.com/r/gitblit
3 files added
5 files modified
| | |
| | | - Reversed line links in blob view (issue-309) |
| | | - Dashboard and Activity pages now obey the web.generateActivityGraph setting (issue-310) |
| | | - Do not log passwords on failed authentication attempts (issue-316) |
| | | - Show displayname and username in palettes (issue-364) |
| | | - Updated default binary and Lucene ignore extensions |
| | | - Change the WAR baseFolder context parameter to a JNDI env-entry to improve enterprise deployments |
| | | - Removed internal Gitblit ref exclusions in the upload pack |
New file |
| | |
| | | /* |
| | | * Copyright 2014 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.utils.StringUtils; |
| | | |
| | | /** |
| | | * @author Alfred Schmid |
| | | * @author James Moger |
| | | * |
| | | */ |
| | | public class UserChoice implements Serializable { |
| | | |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | private final String displayName; |
| | | private final String userId; |
| | | private final String email; |
| | | |
| | | /** |
| | | * Create a UserChoice without email and displayName. |
| | | * |
| | | * @param userId |
| | | * the unique id of the user (in most cases the unique username |
| | | * from user store). Can never be null or empty string. |
| | | * |
| | | */ |
| | | public UserChoice(String userId) { |
| | | this(null, userId, null); |
| | | } |
| | | |
| | | /** |
| | | * Create a UserChoice without email. |
| | | * |
| | | * @param displayName |
| | | * the display name for the user. Can be null or empty string. |
| | | * @param userId |
| | | * the unique id of the user (in most cases the unique username |
| | | * from user store). Can never be null or empty string. |
| | | * |
| | | */ |
| | | public UserChoice(String displayName, String userId) { |
| | | this(displayName, userId, null); |
| | | } |
| | | |
| | | /** |
| | | * Create a UserChoice with email and displayName. |
| | | * |
| | | * @param displayName |
| | | * the display name for the user. Can be null or empty string. |
| | | * @param userId |
| | | * the unique id of the user (in most cases the unique username |
| | | * from user store). Can never be null or empty string. |
| | | * @param email |
| | | * the email from the user. Can be null or empty string. |
| | | * |
| | | */ |
| | | public UserChoice(String displayName, String userId, String email) { |
| | | if (userId == null) { |
| | | throw new IllegalArgumentException("The argument userId can't be null!"); |
| | | } |
| | | if ("".equals(userId)) { |
| | | throw new IllegalArgumentException("The argument userId can't be an empty String!"); |
| | | } |
| | | this.displayName = displayName; |
| | | this.userId = userId; |
| | | this.email = email; |
| | | } |
| | | |
| | | public String getDisplayName() { |
| | | return displayName; |
| | | } |
| | | |
| | | public String getDisplayNameOrUserId() { |
| | | if (StringUtils.isEmpty(displayName)) { |
| | | return userId; |
| | | } |
| | | return displayName; |
| | | } |
| | | |
| | | public String getUserId() { |
| | | return userId; |
| | | } |
| | | |
| | | public String getEmail() { |
| | | return email; |
| | | } |
| | | |
| | | @Override |
| | | public String toString() { |
| | | String dn = getDisplayNameOrUserId(); |
| | | if (dn.equals(userId)) { |
| | | return dn; |
| | | } |
| | | return dn + " (" + userId + ")"; |
| | | } |
| | | } |
| | |
| | | import org.apache.wicket.markup.html.basic.Label;
|
| | | import org.apache.wicket.markup.html.form.Button;
|
| | | import org.apache.wicket.markup.html.form.CheckBox;
|
| | | import org.apache.wicket.markup.html.form.ChoiceRenderer;
|
| | | 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 com.gitblit.Keys;
|
| | | import com.gitblit.models.RegistrantAccessPermission;
|
| | | import com.gitblit.models.RepositoryModel;
|
| | | import com.gitblit.models.UserChoice;
|
| | | import com.gitblit.models.UserModel;
|
| | | import com.gitblit.utils.ArrayUtils;
|
| | | import com.gitblit.utils.StringUtils;
|
| | |
| | | RegistrantType.TEAM, app().users().getAllTeamNames(), repositoryTeams, getAccessPermissions());
|
| | |
|
| | | // owners palette
|
| | | List<String> owners = new ArrayList<String>(repositoryModel.owners);
|
| | | List<String> persons = app().users().getAllUsernames();
|
| | | final Palette<String> ownersPalette = new Palette<String>("owners", new ListModel<String>(owners), new CollectionModel<String>(
|
| | | persons), new StringChoiceRenderer(), 12, true);
|
| | | List<UserChoice> owners = new ArrayList<UserChoice>();
|
| | | for (String owner : repositoryModel.owners) {
|
| | | UserModel o = app().users().getUserModel(owner);
|
| | | if (o != null) {
|
| | | owners.add(new UserChoice(o.getDisplayName(), o.username, o.emailAddress));
|
| | | } else {
|
| | | owners.add(new UserChoice(owner));
|
| | | }
|
| | | }
|
| | | List<UserChoice> persons = new ArrayList<UserChoice>();
|
| | | for (String person : app().users().getAllUsernames()) {
|
| | | UserModel o = app().users().getUserModel(person);
|
| | | if (o != null) {
|
| | | persons.add(new UserChoice(o.getDisplayName(), o.username, o.emailAddress));
|
| | | } else {
|
| | | persons.add(new UserChoice(person));
|
| | | }
|
| | | }
|
| | | final Palette<UserChoice> ownersPalette = new Palette<UserChoice>("owners", new ListModel<UserChoice>(owners), new CollectionModel<UserChoice>(
|
| | | persons), new ChoiceRenderer<UserChoice>(null, "userId"), 12, true);
|
| | |
|
| | | // indexed local branches palette
|
| | | List<String> allLocalBranches = new ArrayList<String>();
|
| | |
| | |
|
| | | // owners
|
| | | repositoryModel.owners.clear();
|
| | | Iterator<String> owners = ownersPalette.getSelectedChoices();
|
| | | Iterator<UserChoice> owners = ownersPalette.getSelectedChoices();
|
| | | while (owners.hasNext()) {
|
| | | repositoryModel.addOwner(owners.next());
|
| | | repositoryModel.addOwner(owners.next().getUserId());
|
| | | }
|
| | |
|
| | | // pre-receive scripts
|
| | |
| | | import java.text.MessageFormat;
|
| | | import java.util.ArrayList;
|
| | | import java.util.Collections;
|
| | | import java.util.Comparator;
|
| | | import java.util.HashSet;
|
| | | import java.util.Iterator;
|
| | | import java.util.List;
|
| | |
| | | import org.apache.wicket.extensions.markup.html.form.palette.Palette;
|
| | | import org.apache.wicket.markup.html.form.Button;
|
| | | import org.apache.wicket.markup.html.form.CheckBox;
|
| | | import org.apache.wicket.markup.html.form.ChoiceRenderer;
|
| | | import org.apache.wicket.markup.html.form.Form;
|
| | | import org.apache.wicket.markup.html.form.TextField;
|
| | | import org.apache.wicket.model.CompoundPropertyModel;
|
| | |
| | | import com.gitblit.Keys;
|
| | | import com.gitblit.models.RegistrantAccessPermission;
|
| | | import com.gitblit.models.TeamModel;
|
| | | import com.gitblit.models.UserChoice;
|
| | | import com.gitblit.models.UserModel;
|
| | | import com.gitblit.utils.StringUtils;
|
| | | import com.gitblit.wicket.RequiresAdminRole;
|
| | | import com.gitblit.wicket.StringChoiceRenderer;
|
| | |
| | | List<String> repos = getAccessRestrictedRepositoryList(true, null);
|
| | |
|
| | | List<String> teamUsers = new ArrayList<String>(teamModel.users);
|
| | | Collections.sort(teamUsers);
|
| | | List<String> preReceiveScripts = new ArrayList<String>();
|
| | | List<String> postReceiveScripts = new ArrayList<String>();
|
| | |
|
| | |
| | | final List<RegistrantAccessPermission> permissions = teamModel.getRepositoryPermissions();
|
| | |
|
| | | // users palette
|
| | | final Palette<String> users = new Palette<String>("users", new ListModel<String>(
|
| | | new ArrayList<String>(teamUsers)), new CollectionModel<String>(app().users()
|
| | | .getAllUsernames()), new StringChoiceRenderer(), 10, false);
|
| | | final Palette<UserChoice> users = new Palette<UserChoice>("users", new ListModel<UserChoice>(
|
| | | getTeamUsers(teamUsers)), new CollectionModel<UserChoice>(sortByDisplayName(getTeamUsers(app().users().getAllUsernames()))), new ChoiceRenderer<UserChoice>(null, "userId"), 10, false);
|
| | |
|
| | | // pre-receive palette
|
| | | if (teamModel.preReceiveScripts != null) {
|
| | |
| | | teamModel.setRepositoryPermission(repositoryPermission.registrant, repositoryPermission.permission);
|
| | | }
|
| | |
|
| | | Iterator<String> selectedUsers = users.getSelectedChoices();
|
| | | Iterator<UserChoice> selectedUsers = users.getSelectedChoices();
|
| | | List<String> members = new ArrayList<String>();
|
| | | while (selectedUsers.hasNext()) {
|
| | | members.add(selectedUsers.next().toLowerCase());
|
| | | members.add(selectedUsers.next().getUserId().toLowerCase());
|
| | | }
|
| | | teamModel.users.clear();
|
| | | teamModel.users.addAll(members);
|
| | |
| | |
|
| | | add(form);
|
| | | }
|
| | |
|
| | | private List<UserChoice> getTeamUsers(List<String> teamUserIds) {
|
| | | List<UserChoice> teamUsers = new ArrayList<UserChoice>();
|
| | | for (String teamUserId : teamUserIds) {
|
| | | UserModel userModel = app().users().getUserModel(teamUserId);
|
| | | if (userModel!=null) {
|
| | | teamUsers.add(new UserChoice(userModel.displayName, userModel.username, userModel.emailAddress));
|
| | | }
|
| | | }
|
| | | return sortByDisplayName(teamUsers);
|
| | | }
|
| | |
|
| | | private List<UserChoice> sortByDisplayName(List<UserChoice> teamUsers) {
|
| | | Collections.sort(teamUsers, new Comparator<UserChoice>() {
|
| | |
|
| | | @Override
|
| | | public int compare(UserChoice o1, UserChoice o2) {
|
| | | return o1.getDisplayNameOrUserId().compareTo(o2.getDisplayNameOrUserId());
|
| | | }
|
| | | });
|
| | | return teamUsers;
|
| | | }
|
| | | }
|
| | |
| | | }
|
| | | table.palette td.pane {
|
| | | padding: 0px;
|
| | | width: 250px !important;
|
| | | }
|
| | |
|
| | | table.palette td.pane select {
|
| | | width: 250px !important;
|
| | | }
|
| | |
|
| | | table.gitnotes {
|
| | |
| | | @RunWith(Suite.class)
|
| | | @SuiteClasses({ ArrayUtilsTest.class, FileUtilsTest.class, TimeUtilsTest.class,
|
| | | StringUtilsTest.class, Base64Test.class, JsonUtilsTest.class, ByteFormatTest.class,
|
| | | UserModelTest.class, UserChoiceTest.class,
|
| | | ObjectCacheTest.class, PermissionsTest.class, UserServiceTest.class, LdapAuthenticationTest.class,
|
| | | MarkdownUtilsTest.class, JGitUtilsTest.class, SyndicationUtilsTest.class,
|
| | | DiffUtilsTest.class, MetricUtilsTest.class, X509UtilsTest.class,
|
New file |
| | |
| | | /* |
| | | * Copyright 2014 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.tests; |
| | | |
| | | import org.junit.Test; |
| | | |
| | | import com.gitblit.models.UserChoice; |
| | | |
| | | /** |
| | | * Test behavior of UserChoice class. |
| | | * |
| | | * @author Alfred Schmid |
| | | * |
| | | */ |
| | | public class UserChoiceTest extends GitblitUnitTest { |
| | | |
| | | @Test(expected=IllegalArgumentException.class) |
| | | public void creatingUserChoiceWithNullAsUserIdIsImpossible() { |
| | | new UserChoice(null); |
| | | } |
| | | |
| | | @Test(expected=IllegalArgumentException.class) |
| | | public void creatingUserChoiceWithEmptyStringAsUserIdIsImpossible() { |
| | | new UserChoice(""); |
| | | } |
| | | |
| | | @Test |
| | | public void toStringPrintsPlainUserIdWhenDisplayNameIsNull() { |
| | | String userId = "runnerr"; |
| | | UserChoice userChoice = new UserChoice(userId); |
| | | assertEquals("", userId, userChoice.toString()); |
| | | } |
| | | |
| | | @Test |
| | | public void toStringPrintsPlainUserIdWhenDisplayNameIsEmpty() { |
| | | String userId = "runnerr"; |
| | | UserChoice userChoice = new UserChoice("", userId); |
| | | assertEquals("", userId, userChoice.toString()); |
| | | } |
| | | |
| | | @Test |
| | | public void toStringPrintsDisplaNameWithUserIdInBracketsWhenDisplayNameIsSet() { |
| | | String userId = "runnerr"; |
| | | String displayName = "The Road Runner"; |
| | | UserChoice userChoice = new UserChoice(displayName, userId); |
| | | assertEquals( |
| | | "displayName + userId have to be concatenated to: displayName (userId)", |
| | | displayName + " (" + userId + ")", userChoice.toString()); |
| | | } |
| | | } |
New file |
| | |
| | | /*
|
| | | * Copyright 2014 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.tests;
|
| | |
|
| | | import org.junit.Test;
|
| | |
|
| | | import com.gitblit.models.UserModel;
|
| | |
|
| | | /**
|
| | | * @author Alfred Schmid
|
| | | *
|
| | | */
|
| | | public class UserModelTest extends GitblitUnitTest {
|
| | |
|
| | | @Test
|
| | | public void whenDisplayNameIsEmptyUsernameIsUsed() {
|
| | | String username = "test";
|
| | | UserModel userModel = new UserModel(username);
|
| | | userModel.displayName = "";
|
| | | assertEquals("When displayName is empty the username has to be returnd from getDisplayName().", username, userModel.getDisplayName());
|
| | | }
|
| | |
|
| | | @Test
|
| | | public void whenDisplayNameIsNullUsernameIsUsed() {
|
| | | String username = "test";
|
| | | UserModel userModel = new UserModel(username);
|
| | | userModel.displayName = null;
|
| | | assertEquals("When displayName is null the username has to be returnd from getDisplayName().", username, userModel.getDisplayName());
|
| | | }
|
| | |
|
| | | @Test
|
| | | public void whenDisplayNameIsNotEmptyDisplayNameIsUsed() {
|
| | | String displayName = "Test User";
|
| | | UserModel userModel = new UserModel("test");
|
| | | userModel.displayName = displayName;
|
| | | assertEquals("When displayName is not empty its value has to be returnd from getDisplayName().", displayName, userModel.getDisplayName());
|
| | | }
|
| | |
|
| | | }
|