summaryrefslogtreecommitdiffstats
path: root/src/com/gitblit/wicket/pages/EditUserPage.java
blob: 84bf7bc95fb7392f5a83b345d56b68e4452c6b64 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
package com.gitblit.wicket.pages;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.apache.wicket.PageParameters;
import org.apache.wicket.extensions.markup.html.form.palette.Palette;
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.PasswordTextField;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.model.CompoundPropertyModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.util.CollectionModel;
import org.apache.wicket.model.util.ListModel;
import org.eclipse.jetty.http.security.Credential.MD5;

import com.gitblit.GitBlit;
import com.gitblit.GitBlitException;
import com.gitblit.wicket.AdminPage;
import com.gitblit.wicket.BasePage;
import com.gitblit.wicket.WicketUtils;
import com.gitblit.wicket.models.User;

@AdminPage
public class EditUserPage extends BasePage {

	private final boolean isCreate;

	public EditUserPage() {
		// create constructor
		super();
		isCreate = true;
		setupPage(new User(""));
	}

	public EditUserPage(PageParameters params) {
		// edit constructor
		super(params);
		isCreate = false;
		String name = WicketUtils.getUsername(params);
		User model = GitBlit.self().getUser(name);
		setupPage(model);
	}

	protected void setupPage(final User userModel) {
		if (isCreate) {
			super.setupPage("", getString("gb.newUser"));
		} else {
			super.setupPage("", getString("gb.edit"));
		}
		final Model<String> confirmPassword = new Model<String>();
		CompoundPropertyModel<User> model = new CompoundPropertyModel<User>(userModel);

		List<String> repos = GitBlit.self().getRepositoryList();
		repos.add(0, "*"); // all repositories wildcard
		final Palette<String> repositories = new Palette<String>("repositories", new ListModel<String>(userModel.getRepositories()), new CollectionModel<String>(repos), new ChoiceRenderer<String>("", ""), 10, false);		
		Form<User> form = new Form<User>("editForm", model) {

			private static final long serialVersionUID = 1L;

			@Override
			protected void onSubmit() {
				if (!userModel.getPassword().equals(confirmPassword.getObject())) {
					error("Passwords do not match!");
					return;
				}
				userModel.setPassword(MD5.digest(userModel.getPassword()));
				
				Iterator<String> selectedRepositories = repositories.getSelectedChoices();
				List<String> repos = new ArrayList<String>();
				while (selectedRepositories.hasNext()) {
					repos.add(selectedRepositories.next());
				}
				userModel.setRepositories(repos);
				try {
					GitBlit.self().editUserModel(userModel, isCreate);
				} catch (GitBlitException e) {
					error(e.getMessage());
					return;
				}
				setRedirect(true);
				setResponsePage(EditUserPage.class);
			}
		};

		// field names reflective match UserModel fields
		form.add(new TextField<String>("username").setEnabled(isCreate));
		form.add(new PasswordTextField("password"));
		form.add(new PasswordTextField("confirmPassword", confirmPassword));
		form.add(new CheckBox("canAdmin"));
		form.add(repositories);
		add(form);
	}
}