package org.geoserver.web.security; import java.io.IOException; import java.util.List; import org.springframework.security.core.userdetails.User; import org.apache.wicket.Component; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.markup.html.AjaxLink; import org.apache.wicket.model.StringResourceModel; import org.geoserver.security.impl.GeoserverUserDao; import org.geoserver.web.wicket.GeoServerDialog; import org.geoserver.web.wicket.GeoServerTablePanel; import org.geoserver.web.wicket.ParamResourceModel; public class SelectionUserRemovalLink extends AjaxLink { GeoServerTablePanel<User> users; GeoServerDialog dialog; public SelectionUserRemovalLink(String id, GeoServerTablePanel<User> users, GeoServerDialog dialog) { super(id); this.users = users; this.dialog = dialog; } @Override public void onClick(AjaxRequestTarget target) { final List<User> selection = users.getSelection(); if (selection.size() == 0) return; dialog.setTitle(new ParamResourceModel("confirmRemoval", this)); // if there is something to cancel, let's warn the user about what // could go wrong, and if the user accepts, let's delete what's needed dialog.showOkCancel(target, new GeoServerDialog.DialogDelegate() { protected Component getContents(String id) { // show a confirmation panel for all the objects we have to remove return new ConfirmRemovalUserPanel(id, selection) { @Override protected StringResourceModel canRemove(User user) { return SelectionUserRemovalLink.this.canRemove(user); } }; } protected boolean onSubmit(AjaxRequestTarget target, Component contents) { // cascade delete the whole selection GeoserverUserDao dao = GeoserverUserDao.get(); for (User user : selection) { if(!user.getUsername().equals("admin")) dao.removeUser(user.getUsername()); } try { dao.storeUsers(); } catch (IOException e) { e.printStackTrace(); } // the deletion will have changed what we see in the page // so better clear out the selection users.clearSelection(); return true; } @Override public void onClose(AjaxRequestTarget target) { // if the selection has been cleared out it's sign a deletion // occurred, so refresh the table if (users.getSelection().size() == 0) { setEnabled(false); target.addComponent(SelectionUserRemovalLink.this); target.addComponent(users); } } }); } protected StringResourceModel canRemove(User user) { return null; } }