James Moger
2011-05-11 dfb88962fdbd29f59abe92178bb042738d57c3e1
commit | author | age
dfb889 1 package com.gitblit.wicket.pages;
JM 2
3 import java.util.ArrayList;
4 import java.util.Iterator;
5 import java.util.List;
6
7 import org.apache.wicket.PageParameters;
8 import org.apache.wicket.extensions.markup.html.form.palette.Palette;
9 import org.apache.wicket.markup.html.form.CheckBox;
10 import org.apache.wicket.markup.html.form.ChoiceRenderer;
11 import org.apache.wicket.markup.html.form.Form;
12 import org.apache.wicket.markup.html.form.PasswordTextField;
13 import org.apache.wicket.markup.html.form.TextField;
14 import org.apache.wicket.model.CompoundPropertyModel;
15 import org.apache.wicket.model.Model;
16 import org.apache.wicket.model.util.CollectionModel;
17 import org.apache.wicket.model.util.ListModel;
18 import org.eclipse.jetty.http.security.Credential.MD5;
19
20 import com.gitblit.GitBlit;
21 import com.gitblit.GitBlitException;
22 import com.gitblit.wicket.AdminPage;
23 import com.gitblit.wicket.BasePage;
24 import com.gitblit.wicket.WicketUtils;
25 import com.gitblit.wicket.models.User;
26
27 @AdminPage
28 public class EditUserPage extends BasePage {
29
30     private final boolean isCreate;
31
32     public EditUserPage() {
33         // create constructor
34         super();
35         isCreate = true;
36         setupPage(new User(""));
37     }
38
39     public EditUserPage(PageParameters params) {
40         // edit constructor
41         super(params);
42         isCreate = false;
43         String name = WicketUtils.getUsername(params);
44         User model = GitBlit.self().getUser(name);
45         setupPage(model);
46     }
47
48     protected void setupPage(final User userModel) {
49         if (isCreate) {
50             super.setupPage("", getString("gb.newUser"));
51         } else {
52             super.setupPage("", getString("gb.edit"));
53         }
54         final Model<String> confirmPassword = new Model<String>();
55         CompoundPropertyModel<User> model = new CompoundPropertyModel<User>(userModel);
56
57         List<String> repos = GitBlit.self().getRepositoryList();
58         repos.add(0, "*"); // all repositories wildcard
59         final Palette<String> repositories = new Palette<String>("repositories", new ListModel<String>(userModel.getRepositories()), new CollectionModel<String>(repos), new ChoiceRenderer<String>("", ""), 10, false);        
60         Form<User> form = new Form<User>("editForm", model) {
61
62             private static final long serialVersionUID = 1L;
63
64             @Override
65             protected void onSubmit() {
66                 if (!userModel.getPassword().equals(confirmPassword.getObject())) {
67                     error("Passwords do not match!");
68                     return;
69                 }
70                 userModel.setPassword(MD5.digest(userModel.getPassword()));
71                 
72                 Iterator<String> selectedRepositories = repositories.getSelectedChoices();
73                 List<String> repos = new ArrayList<String>();
74                 while (selectedRepositories.hasNext()) {
75                     repos.add(selectedRepositories.next());
76                 }
77                 userModel.setRepositories(repos);
78                 try {
79                     GitBlit.self().editUserModel(userModel, isCreate);
80                 } catch (GitBlitException e) {
81                     error(e.getMessage());
82                     return;
83                 }
84                 setRedirect(true);
85                 setResponsePage(EditUserPage.class);
86             }
87         };
88
89         // field names reflective match UserModel fields
90         form.add(new TextField<String>("username").setEnabled(isCreate));
91         form.add(new PasswordTextField("password"));
92         form.add(new PasswordTextField("confirmPassword", confirmPassword));
93         form.add(new CheckBox("canAdmin"));
94         form.add(repositories);
95         add(form);
96     }
97 }