in teamcity-invitations-plugin-server/src/main/java/org/jetbrains/teamcity/invitations/InvitationAdminController.java [112:177]
protected void doPost(@NotNull final HttpServletRequest request, @NotNull final HttpServletResponse response, @NotNull final Element xmlResponse) {
try {
SProject project = teamCityCoreFacade.findProjectByExtId(request.getParameter("projectId"));
if (project == null) {
throw new ValidationException("projectId", "Project must be specified");
}
String token = request.getParameter("token");
if (request.getParameter("saveInvitation") != null) {
if (StringUtil.isEmptyOrSpaces(token)) {
//new
token = StringUtil.generateUniqueHash();
Invitation invitation = createFromRequest(token, project, request);
invitations.addInvitation(invitation);
xmlResponse.setAttribute("token", invitation.getToken());
xmlResponse.setAttribute("token", invitation.getToken());
ActionMessages.getOrCreateMessages(request).addRawMessage(MESSAGES_KEY,
"Invitation created. Copy and send the following link to the user you want to invite: " +
"<span id=\"justCreatedInvitation\">" + invitationsController.getInvitationsPath() + "?token=" + invitation.getToken() + "<span/> " +
"<span class=\"clipboard-btn tc-icon icon16 tc-icon_copy\" data-clipboard-action=\"copy\"data-clipboard-target=\"#justCreatedInvitation\"></span>");
} else {
//edit
Invitation updated = createFromRequest(token, project, request);
Invitation current = invitations.getInvitation(token);
if (current != null) {
updated.setEnabled(current.isEnabled());
invitations.updateInvitation(updated, "Invitation '" + updated.getName() + "' updated.");
ActionMessages.getOrCreateMessages(request).addMessage(MESSAGES_KEY, "Invitation '" + updated.getName() + "' updated.");
}
}
} else if (request.getParameter("removeInvitation") != null && token != null) {
//delete
Invitation invitation = invitations.getInvitation(token);
if (invitation != null && !invitation.isAvailableFor(SessionUser.getUser(request))) {
throw new AccessDeniedException(SessionUser.getUser(request), "You don't have permissions to remove invitation " + token);
}
Invitation deleted = invitations.removeInvitation(project, token);
if (deleted != null) {
ActionMessages.getOrCreateMessages(request).addMessage(MESSAGES_KEY, "Invitation '" + deleted.getName() + "' removed.");
} else {
ActionMessages.getOrCreateMessages(request).addMessage(MESSAGES_KEY, "Invitation '" + token + "' doesn't exist.");
}
} else if (request.getParameter("setEnabled") != null && token != null) {
//disable
Invitation invitation = invitations.getInvitation(token);
if (invitation != null && !invitation.isAvailableFor(SessionUser.getUser(request))) {
throw new AccessDeniedException(SessionUser.getUser(request), "You don't have permissions to edit the invitation " + token);
}
if (invitation != null) {
Boolean enabled = Boolean.valueOf(request.getParameter("setEnabled"));
invitation.setEnabled(enabled);
String comment = enabled ? "Invitation '" + invitation.getName() + "' enabled." : "Invitation '" + invitation.getName() + "' disabled.";
invitations.updateInvitation(invitation, comment);
ActionMessages.getOrCreateMessages(request).addMessage(MESSAGES_KEY, comment);
} else {
ActionMessages.getOrCreateMessages(request).addMessage(MESSAGES_KEY, "Invitation '" + token + "' doesn't exist.");
}
} else {
Loggers.SERVER.warn("Unrecognized invitation request: " + WebUtil.getRequestDump(request));
}
} catch (ValidationException e) {
e.getActionErrors().serialize(xmlResponse);
}
}