Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
Creative commons Attribution-NonCommercial license. http://creativecommons.org/licenses/by-nc/2.5/au/deed.en_GB NO WARRANTY IS GIVEN OR IMPLIED, USE AT YOUR OWN RISK.
  
  package base.jee.servlet;
  
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
 import java.util.UUID;
 
 
 
 import base.KeyValue;
 
 public class PersonEditServlet extends BaseServlet {
 
 	private static final long serialVersionUID = 1L;
 
 	public PersonEditServlet(JeeBase jeethrows IOException {
 		super(jee);
 	}
 
 	@SuppressWarnings("unchecked")
 	public void doGet(String tokenUser uHttpServletRequest requestHttpServletResponse responsethrows ServletExceptionIOException {
 
 		UUID uuid = UUID.fromString(request.getParameter("id"));
 		String firstName = request.getParameter("first_name");
 		String lastName = request.getParameter("last_name");
 		String email = request.getParameter("email");
 		String expiry = request.getParameter("expiry");
 		String qp = request.getParameter("q");
 		String error = null;
 		if(qp == null) { qp = ""; }
 
 		String a = request.getParameter("a");
 		if(a != null && !a.equals(u.getFormAuthToken())) {
 			throw new IllegalArgumentException("Invalid authentication token.");
 		}
 
 		if(firstName != null) {
 			try {
 				if(a == null) {
 					throw new IllegalArgumentException("Invalid authentication token.");
 				}
 
 				// Update the person details
 				.getAPI().updatePerson(uuuidfirstNamelastNameemailexpiry);
 
 				// Update the (non resource based) roles.
 					if(request.getParameter("role_" + r.getRole()) != null && request.getParameter("role_" + r.getRole()).equals("true")) {
 						.getAPI().upsertRole(uuuidr.getRole());
 					} else {
 						.getAPI().deleteRole(uuuidr.getRole());
 					}
 				}
 
 				response.setHeader("Location".get("base.url""") + "/person.edit?id=" + uuid + "&q=" + StringHelper.urlEscape(qp) + "&saved=ok");
 				response.setStatus(302);
 				return;
 			} catch(IOException e) {
 				error = e.getMessage();
 			} catch(IllegalArgumentException e) {
 				error = e.getMessage();
 			} catch(IllegalStateException e) {
 				error = e.getMessage();
 			}
 		}
 
 		if(request.getParameter("add_role") != null && request.getParameter("role_resource") != null) {
 			if(a == null) {
 				throw new IllegalArgumentException("Invalid authentication token.");
 			}
 					request.getParameter("add_role"),
 					.getRoles().getRole(request.getParameter("add_role")).getResourceType(),
 					request.getParameter("role_resource"));
 			response.setHeader("Location".get("base.url""") + "/person.edit?id="+uuid+"&q="+StringHelper.urlEscape(qp)+"&saved=ok");
 			response.setStatus(302);
 		}
		if(request.getParameter("delete_role") != null && request.getParameter("resource") != null) {
			if(a == null) {
				throw new IllegalArgumentException("Invalid authentication token.");
			}
			Role role = .getRoles().getRole(request.getParameter("delete_role"));
					request.getParameter("resource"),
					uuid,
					request.getParameter("delete_role")
					);
			response.setHeader("Location".get("base.url""") + "/person.edit?id=" + uuid + "&q=" + StringHelper.urlEscape(qp) + "&saved=ok");
			response.setStatus(302);
		}
		if(request.getParameter("update_groups") != null) {
			if(a == null) {
				throw new IllegalArgumentException("Invalid authentication token.");
			}
			String[] selectedGroups = request.getParameterValues("group");
			if(selectedGroups == null) {
				selectedGroups = new String[]{};
			}
			List<GroupcurrentGroups = .getAPI().getPersonGroups(uuuid);
			for(Group g : currentGroups) {
				boolean found = false;
				for(String sg : selectedGroups) {
					if(sg.equals(g.getUuid().toString())) {
						found = true;
						break;
					}
				}
				if(!found) {
					.getAPI().leaveGroup(ug.getUuid(), uuid);
				}
			}
			for(String sg : selectedGroups) {
				UUID found = null;
				for(Group g : currentGroups) {
					if(sg.equals(g.getUuid().toString())) {
						found = g.getUuid();
						break;
					}
				}
				if(found == null) {
					.getAPI().joinGroup(u, UUID.fromString(sg), uuid);
				}
			}
			response.setHeader("Location".get("base.url""") + "/person.edit?id="+uuid+"&q="+StringHelper.urlEscape(qp)+"&saved=ok");
			response.setStatus(302);
		}
		Person p = .getAPI().getPerson(uuuid).get(0);
		if(firstName != null) { firstName = firstName.trim(); }
		if(lastName != null) { lastName = lastName.trim(); }
		if(email != null) { email = email.trim(); }
		if(firstName == null) { firstName = p.getFirstName(); }
		if(lastName == null) { lastName = p.getLastName(); }
		if(email == null) { email = p.getEmail(); }
		if(expiry == null) { expiry = p.getExpiry() == null?"":..format(p.getExpiry()); }
		List<base.security.PersonRolecurrentRoles = .getAPI().getPersonRoles(uuuid);
		String roleToAdd = null;
		String roleToAddName = null;
		List<KeyValuepossibleResourceBasedRoles = null;
		if(request.getParameter("add_role") != null && request.getParameter("role_resource") == null) {
			roleToAdd = request.getParameter("add_role");
			Role role = .getRoles().getRole(roleToAdd);
			roleToAddName = role.getName();
			possibleResourceBasedRoles = .getRoles().getResourceLookup(role.getResourceType()).list();
		}
		ST page = .getPage(u"person_edit");
		page.add("uuid"p.getUuid());
		page.add("q"qp);
		// Used in the person editing form
		page.add("p"p);
		page.add("first_name"firstName);
		page.add("last_name"lastName);
		page.add("email"email);
		page.add("expiry"expiry);
		page.add("has_username"p.getUsername() != null && p.getUsername().length() > 0);
		List<Map<StringObject>> adminRoles = buildNonResourceBasedRoleList(uuuidcurrentRolesrequest);
		page.add("roles"adminRoles);
		page.add("has_custom_role"adminRoles.size() > 0 && !(((Role)adminRoles.get(0).get("role")).isInternal()));
		page.add("error"error);
		List<GrouppersonGroups = .getAPI().getPersonGroups(uuuid);
		for(Group g : personGroups) {
			page.add("groups"g);
		}
			List<Groupgroups = .getAPI().getGroups(u);
			page.add("group_manager"groups.size() > 0);
			page.add("group_list"groups.size() > 0);
			for(Group g : groups) {
				Map<StringObjectgm = new Hashtable<>();
				gm.put("key"g.getUuid().toString());
				gm.put("value"g.getName());
				boolean isMember = false;
				for(Group pg : personGroups) {
					if(pg.getUuid().equals(g.getUuid())) {
						isMember = true;
						break;
					}
				}
				gm.put("selected"isMember);
				page.add("group_options"gm);
				page.add("show_groups"true);
			}
else {
			page.add("group_manager"false);
			page.add("show_groups"personGroups.size() > 0);
		}
		page.add("group_options"null);
		// Used in the role management form
			page.add("role_manager"false);
else {
			page.add("role_manager"true);
			page.add("possible_resource_based_roles"possibleResourceBasedRoles);
			page.add("role_to_add"roleToAdd);
			page.add("role_to_add_name"roleToAddName);
			page.add("current_resource_based_roles"buildResourceRoleList(currentRoles));
		}
		if(request.getParameter("saved") != null && p.getUpdated() != null && p.getUpdated().getTime() + 60000 > new Date().getTime()) {
			page.add("success""<p>Saved changes to " + StringHelper.escapeHtml(p.getDisplayName()) + "</p>");
else {
			page.add("success"null);
		}
		page.add("ldap_enabled".getSettings().get("ldap.enabled""false").equals("true"));
		page.add("breadcrumbs"new Breadcrumb("People""/people?q=" + StringHelper.urlEscape(qp)));
		page.add("breadcrumbs"new Breadcrumb(p.getDisplayName(), null));
		page.add("auth"u.getFormAuthToken());
		response.getWriter().write(page.render());
	}

User roles filtered by ones that are resource restricted.
		List<Map<StringString>> currentResourceBasedRoles = new LinkedList<>();
		for(base.security.PersonRole r : currentRoles) {
			if(r.getUid() != null) {
				Map<StringStringinfo = new Hashtable<>();
				info.put("role"r.getRole());
				info.put("uid"r.getUid());
				Role role = .getRoles().getRole(r.getRole());
				if(role == null) {
					continue;
				}
				info.put("name"role.getName());
				if(rs != null) {
					info.put("resource"rs.getValue());
else {
					info.put("resource""Unknown/missing record: " + r.getUid());
				}
				currentResourceBasedRoles.add(info);
			}
		}
		return currentResourceBasedRoles;
	}

Build the list of available roles, associated with a "selected" indicator for this person
	public static List<Map<StringObject>> buildNonResourceBasedRoleList(JeeBase jeeUser userUUID uuidList<base.security.PersonRolecurerntRolesHttpServletRequest requestthrows IOException {
		List<Map<StringObject>> roles = new LinkedList<>();
		//TODO: What is the use rand uuid used for?!?
		for(Role role : jee.getRoles().) {
			Map<StringObjecti = new Hashtable<>();
			i.put("role"role);
			if(request.getParameter("first_name") != null) {
				i.put("selected"request.getParameter("role_" + role.getRole()) != null && request.getParameter("role_" + role.getRole()).equals("true"));
else {
				for(base.security.PersonRole rl : curerntRoles) {
					if(rl.getRole().equals(role.getRole())) {
						i.put("selected"true);
						break;
					}
				}
			}
			if(!i.containsKey("selected")) {
				i.put("selected"false);
			}
			roles.add(i);
		}
		return roles;
	}
New to GrepCode? Check out our FAQ X