You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

EditUserPage.java 6.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. /*
  2. * Copyright 2011 gitblit.com.
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. package com.gitblit.wicket.pages;
  17. import java.text.MessageFormat;
  18. import java.util.ArrayList;
  19. import java.util.Iterator;
  20. import java.util.List;
  21. import org.apache.wicket.PageParameters;
  22. import org.apache.wicket.extensions.markup.html.form.palette.Palette;
  23. import org.apache.wicket.markup.html.form.Button;
  24. import org.apache.wicket.markup.html.form.CheckBox;
  25. import org.apache.wicket.markup.html.form.ChoiceRenderer;
  26. import org.apache.wicket.markup.html.form.Form;
  27. import org.apache.wicket.markup.html.form.PasswordTextField;
  28. import org.apache.wicket.markup.html.form.TextField;
  29. import org.apache.wicket.model.CompoundPropertyModel;
  30. import org.apache.wicket.model.Model;
  31. import org.apache.wicket.model.util.CollectionModel;
  32. import org.apache.wicket.model.util.ListModel;
  33. import com.gitblit.Constants.AccessRestrictionType;
  34. import com.gitblit.GitBlit;
  35. import com.gitblit.GitBlitException;
  36. import com.gitblit.Keys;
  37. import com.gitblit.models.RepositoryModel;
  38. import com.gitblit.models.UserModel;
  39. import com.gitblit.utils.StringUtils;
  40. import com.gitblit.wicket.RequiresAdminRole;
  41. import com.gitblit.wicket.WicketUtils;
  42. @RequiresAdminRole
  43. public class EditUserPage extends RootSubPage {
  44. private final boolean isCreate;
  45. public EditUserPage() {
  46. // create constructor
  47. super();
  48. isCreate = true;
  49. setupPage(new UserModel(""));
  50. }
  51. public EditUserPage(PageParameters params) {
  52. // edit constructor
  53. super(params);
  54. isCreate = false;
  55. String name = WicketUtils.getUsername(params);
  56. UserModel model = GitBlit.self().getUserModel(name);
  57. setupPage(model);
  58. }
  59. protected void setupPage(final UserModel userModel) {
  60. if (isCreate) {
  61. super.setupPage(getString("gb.newUser"), "");
  62. } else {
  63. super.setupPage(getString("gb.edit"), userModel.username);
  64. }
  65. final Model<String> confirmPassword = new Model<String>(
  66. StringUtils.isEmpty(userModel.password) ? "" : userModel.password);
  67. CompoundPropertyModel<UserModel> model = new CompoundPropertyModel<UserModel>(userModel);
  68. List<String> repos = new ArrayList<String>();
  69. for (String repo : GitBlit.self().getRepositoryList()) {
  70. RepositoryModel repositoryModel = GitBlit.self().getRepositoryModel(repo);
  71. if (repositoryModel.accessRestriction.exceeds(AccessRestrictionType.NONE)) {
  72. repos.add(repo);
  73. }
  74. }
  75. final String oldName = userModel.username;
  76. final Palette<String> repositories = new Palette<String>("repositories",
  77. new ListModel<String>(new ArrayList<String>(userModel.repositories)),
  78. new CollectionModel<String>(repos), new ChoiceRenderer<String>("", ""), 10, false);
  79. Form<UserModel> form = new Form<UserModel>("editForm", model) {
  80. private static final long serialVersionUID = 1L;
  81. /*
  82. * (non-Javadoc)
  83. *
  84. * @see org.apache.wicket.markup.html.form.Form#onSubmit()
  85. */
  86. @Override
  87. protected void onSubmit() {
  88. String username = userModel.username;
  89. if (StringUtils.isEmpty(username)) {
  90. error("Please enter a username!");
  91. return;
  92. }
  93. if (isCreate) {
  94. UserModel model = GitBlit.self().getUserModel(username);
  95. if (model != null) {
  96. error(MessageFormat.format("Username ''{0}'' is unavailable.", username));
  97. return;
  98. }
  99. }
  100. if (!userModel.password.equals(confirmPassword.getObject())) {
  101. error("Passwords do not match!");
  102. return;
  103. }
  104. String password = userModel.password;
  105. if (!password.toUpperCase().startsWith(StringUtils.MD5_TYPE)) {
  106. // This is a plain text password.
  107. // Check length.
  108. int minLength = GitBlit.getInteger(Keys.realm.minPasswordLength, 5);
  109. if (minLength < 4) {
  110. minLength = 4;
  111. }
  112. if (password.trim().length() < minLength) {
  113. error(MessageFormat.format(
  114. "Password is too short. Minimum length is {0} characters.",
  115. minLength));
  116. return;
  117. }
  118. // Optionally store the password MD5 digest.
  119. String type = GitBlit.getString(Keys.realm.passwordStorage, "md5");
  120. if (type.equalsIgnoreCase("md5")) {
  121. // store MD5 digest of password
  122. userModel.password = StringUtils.MD5_TYPE
  123. + StringUtils.getMD5(userModel.password);
  124. }
  125. }
  126. Iterator<String> selectedRepositories = repositories.getSelectedChoices();
  127. List<String> repos = new ArrayList<String>();
  128. while (selectedRepositories.hasNext()) {
  129. repos.add(selectedRepositories.next().toLowerCase());
  130. }
  131. userModel.repositories.clear();
  132. userModel.repositories.addAll(repos);
  133. try {
  134. GitBlit.self().updateUserModel(oldName, userModel, isCreate);
  135. } catch (GitBlitException e) {
  136. error(e.getMessage());
  137. return;
  138. }
  139. setRedirect(false);
  140. if (isCreate) {
  141. // create another user
  142. info(MessageFormat.format("New user ''{0}'' successfully created.",
  143. userModel.username));
  144. setResponsePage(EditUserPage.class);
  145. } else {
  146. // back to users page
  147. setResponsePage(UsersPage.class);
  148. }
  149. }
  150. };
  151. // field names reflective match UserModel fields
  152. form.add(new TextField<String>("username"));
  153. PasswordTextField passwordField = new PasswordTextField("password");
  154. passwordField.setResetPassword(false);
  155. form.add(passwordField);
  156. PasswordTextField confirmPasswordField = new PasswordTextField("confirmPassword",
  157. confirmPassword);
  158. confirmPasswordField.setResetPassword(false);
  159. form.add(confirmPasswordField);
  160. form.add(new CheckBox("canAdmin"));
  161. form.add(new CheckBox("excludeFromFederation"));
  162. form.add(repositories);
  163. form.add(new Button("save"));
  164. Button cancel = new Button("cancel") {
  165. private static final long serialVersionUID = 1L;
  166. @Override
  167. public void onSubmit() {
  168. setResponsePage(UsersPage.class);
  169. }
  170. };
  171. cancel.setDefaultFormProcessing(false);
  172. form.add(cancel);
  173. add(form);
  174. }
  175. }