001 package net.databinder.auth.components.ao;
002
003 import java.util.Map;
004
005 import net.databinder.auth.components.DataUserStatusPanelBase;
006 import net.databinder.auth.components.UserAdminPageBase;
007 import net.databinder.auth.data.DataUser;
008 import net.databinder.auth.data.ao.UserHelper;
009 import net.databinder.components.ao.DataForm;
010 import net.databinder.models.ao.EntityListModel;
011 import net.databinder.models.ao.EntityModel;
012
013 import org.apache.wicket.authorization.strategies.role.Roles;
014 import org.apache.wicket.markup.html.form.Button;
015 import org.apache.wicket.markup.html.form.Form;
016 import org.apache.wicket.model.IModel;
017
018 /**
019 * User administration page. Lists all users, allows editing usernames, passwords, and roles.
020 * Must have Role.ADMIN to view. Replaceable String resources: <pre>
021 * data.auth.user_admin
022 * data.auth.user_add
023 * data.auth.username
024 * data.auth.password
025 * data.auth.passwordConfirm
026 * data.auth.roles
027 * data.auth.save
028 * data.auth.delete</pre>
029 * @see net.databinder.auth.AuthSession
030 */
031 public class UserAdminPage extends UserAdminPageBase {
032 private DataForm form;
033
034 @Override
035 protected Form adminForm(String id, Class<? extends DataUser> userClass) {
036 return form = new DataForm(id, new EntityModel(userClass) {
037 @Override
038 protected void putDefaultProperties(
039 Map<String, Object> propertyStore) {
040 propertyStore.put("roles", new Roles(Roles.USER));
041 }
042 }) {
043 @SuppressWarnings("unchecked")
044 @Override
045 protected void onSubmit() {
046 if (!getEntityModel().isBound()) {
047 Map<String, Object> map = (Map) getModelObject();
048 map.put("roleString", ((Roles)map.remove("roles")).toString());
049 }
050 super.onSubmit();
051 }
052 };
053 }
054
055 @SuppressWarnings("unchecked")
056 @Override
057 protected void setPassword(String password) {
058 if (form.getEntityModel().isBound())
059 super.setPassword(password);
060 else
061 ((Map)form.getModelObject()).put("passwordHash", UserHelper.getHash(password));
062 }
063
064 @Override
065 protected Button deleteButton(String id) {
066 return form.new DeleteButton(id);
067 }
068
069 @Override
070 protected DataUserStatusPanelBase statusPanel(String id) {
071 return new DataUserStatusPanel(id);
072 }
073
074 @Override
075 protected IModel userList(Class<? extends DataUser> userClass) {
076 return new EntityListModel(userClass);
077 }
078
079 }