/** * RequestMapping to show the accept invitation page. * * @param modelMap {@link ModelMap} * @param request {@link HttpServletRequest} * @return accept invitation page * @throws UnsupportedEncodingException if the server does not support utf-8 */ @RequestMapping(value = "/acceptInvitation.shtml") public String accept(ModelMap modelMap, HttpServletRequest request) throws UnsupportedEncodingException { Invitation invitation = getInvitationByRequest(request); if (invitation == null) { modelMap.addAttribute("action", "missing"); return "invitationexception"; } if (invitation.isDeclined()) { modelMap.addAttribute("action", "declined"); return "invitationexception"; } if (invitation.isAccepted()) { modelMap.addAttribute("action", "accepted"); String teamId = invitation.getTeamId(); String teamUrl = "detailteam.shtml?team=" + URLEncoder.encode(teamId, "utf-8") + "&view=" + ViewUtil.getView(request); modelMap.addAttribute("teamUrl", teamUrl); return "invitationexception"; } String teamId = invitation.getTeamId(); if (!StringUtils.hasText(teamId)) { throw new RuntimeException("Invalid invitation"); } Team team = controllerUtil.getTeamById(teamId); modelMap.addAttribute("invitation", invitation); modelMap.addAttribute("team", team); modelMap.addAttribute("date", new Date(invitation.getTimestamp())); ViewUtil.addViewToModelMap(request, modelMap); return "acceptinvitation"; }
/** * RequestMapping to accept an invitation. If everything is okay, it redirects to your new team * detail view. * * @param request {@link HttpServletRequest} * @return detail view of your new team * @throws UnsupportedEncodingException if the server does not support utf-8 */ @RequestMapping(value = "/doAcceptInvitation.shtml") public RedirectView doAccept(HttpServletRequest request) throws UnsupportedEncodingException { Person person = (Person) request.getSession().getAttribute(LoginInterceptor.PERSON_SESSION_KEY); Invitation invitation = getInvitationByRequest(request); if (invitation == null) { throw new IllegalArgumentException( "Cannot find your invitation. Invitations expire after 14 days."); } if (invitation.isDeclined()) { throw new RuntimeException("Invitation is Declined"); } if (invitation.isAccepted()) { throw new IllegalStateException("Invitation is already Accepted"); } String teamId = invitation.getTeamId(); if (!StringUtils.hasText(teamId)) { throw new RuntimeException("Invalid invitation"); } controllerUtil.getTeamById(teamId); String memberId = person.getId(); grouperTeamService.addMember(teamId, person); Role intendedRole = invitation.getIntendedRole(); if (isGuest(person) && Role.Admin.equals(intendedRole)) { // cannot make a guest Admin invitation.setIntendedRole(Role.Manager); } intendedRole = invitation.getIntendedRole(); grouperTeamService.addMemberRole( teamId, memberId, intendedRole, teamEnvironment.getGrouperPowerUser()); AuditLog.log( "User {} accepted invitation for team {} with intended role {}", person.getId(), teamId, intendedRole); invitation.setAccepted(true); teamInviteService.saveOrUpdate(invitation); return new RedirectView( "detailteam.shtml?team=" + URLEncoder.encode(teamId, "utf-8") + "&view=" + ViewUtil.getView(request)); }