use of org.alfresco.service.cmr.site.SiteInfo in project alfresco-remote-api by Alfresco.
the class SiteMembershipRequestsImpl method approveSiteMembershipRequest.
@Override
public void approveSiteMembershipRequest(String siteId, String inviteeId, SiteMembershipApproval siteMembershipApproval) {
SiteInfo siteInfo = sites.validateSite(siteId);
if (siteInfo == null) {
throw new EntityNotFoundException(siteId);
}
// Set the site id to the short name (to deal with case sensitivity issues with
// using the siteId from the url)
siteId = siteInfo.getShortName();
// Validate invitation.
Invitation invitation = getSiteInvitation(inviteeId, siteId);
if (invitation == null || !(invitation instanceof ModeratedInvitation)) {
throw new RelationshipResourceNotFoundException(siteId, inviteeId);
}
ModeratedInvitation moderatedInvitation = (ModeratedInvitation) invitation;
ResourceType resourceType = moderatedInvitation.getResourceType();
if (!resourceType.equals(ResourceType.WEB_SITE) || !SiteVisibility.MODERATED.equals(siteInfo.getVisibility())) {
// note: security, no indication that this has a different visibility
throw new RelationshipResourceNotFoundException(siteId, inviteeId);
}
try {
invitationService.approve(invitation.getInviteId(), "");
} catch (InvitationExceptionForbidden ex) {
throw new PermissionDeniedException();
}
// approval role differs from default one.
if (siteMembershipApproval != null && !(siteMembershipApproval.getRole() == null || siteMembershipApproval.getRole().isEmpty())) {
String role = siteMembershipApproval.getRole();
// Check if role chosen by moderator differs from the invite role.
if (!moderatedInvitation.getRoleName().equals(role)) {
String currentUserId = AuthenticationUtil.getFullyAuthenticatedUser();
// Update invitation with new role.
try {
addSiteMembership(invitation.getInviteeUserName(), siteId, role, currentUserId);
} catch (UnknownAuthorityException e) {
logger.debug("addSiteMember: UnknownAuthorityException " + siteId + " person " + invitation.getInviteId() + " role " + role);
throw new InvalidArgumentException("Unknown role '" + role + "'");
}
}
}
}
use of org.alfresco.service.cmr.site.SiteInfo in project alfresco-remote-api by Alfresco.
the class SiteMembershipRequestsImpl method cancelSiteMembershipRequest.
@Override
public void cancelSiteMembershipRequest(String inviteeId, String siteId) {
inviteeId = people.validatePerson(inviteeId);
SiteInfo siteInfo = sites.validateSite(siteId);
if (siteInfo == null) {
// site does not exist
throw new RelationshipResourceNotFoundException(inviteeId, siteId);
}
// set the site id to the short name (to deal with case sensitivity issues with using the siteId from the url)
siteId = siteInfo.getShortName();
Invitation invitation = getSiteInvitation(inviteeId, siteId);
if (invitation == null) {
// no such invitation
throw new RelationshipResourceNotFoundException(inviteeId, siteId);
}
invitationService.cancel(invitation.getInviteId());
}
use of org.alfresco.service.cmr.site.SiteInfo in project alfresco-remote-api by Alfresco.
the class SiteMembershipRequestsImpl method createSiteMembershipRequest.
@Override
public SiteMembershipRequest createSiteMembershipRequest(String inviteeId, final SiteMembershipRequest siteInvite) {
SiteMembershipRequest request = null;
inviteeId = people.validatePerson(inviteeId, true);
// Note that the order of error checking is important. The server first needs to check for the status 404
// conditions before checking for status 400 conditions. Otherwise the server is open to a probing attack.
String siteId = siteInvite.getId();
final SiteInfo siteInfo = sites.validateSite(siteId);
if (siteInfo == null) {
// site does not exist
throw new RelationshipResourceNotFoundException(inviteeId, siteId);
}
// set the site id to the short name (to deal with case sensitivity issues with using the siteId from the url)
siteId = siteInfo.getShortName();
final SiteVisibility siteVisibility = siteInfo.getVisibility();
if (siteVisibility.equals(SiteVisibility.PRIVATE)) {
// note: security, no indication that this is a private site
throw new RelationshipResourceNotFoundException(inviteeId, siteId);
}
// Is the invitee already a member of the site?
boolean isMember = siteService.isMember(siteId, inviteeId);
if (isMember) {
// yes
throw new InvalidArgumentException(inviteeId + " is already a member of site " + siteId);
}
// Is there an outstanding site invite request for the (invitee, site)?
Invitation invitation = getSiteInvitation(inviteeId, siteId);
if (invitation != null) {
// yes
throw new InvalidArgumentException(inviteeId + " is already invited to site " + siteId);
}
final String inviteeRole = DEFAULT_ROLE;
String message = siteInvite.getMessage();
if (message == null) {
// the invitation service ignores null messages so convert to an empty message.
message = "";
}
if (siteVisibility.equals(SiteVisibility.MODERATED)) {
request = inviteToModeratedSite(message, inviteeId, siteId, inviteeRole);
} else if (siteVisibility.equals(SiteVisibility.PUBLIC)) {
request = inviteToPublicSite(siteInfo, message, inviteeId, inviteeRole);
} else {
// note: security, no indication that this is a private site
throw new RelationshipResourceNotFoundException(inviteeId, siteId);
}
return request;
}
use of org.alfresco.service.cmr.site.SiteInfo in project alfresco-remote-api by Alfresco.
the class SiteMembershipRequestsImpl method getSiteMembershipRequest.
public SiteMembershipRequest getSiteMembershipRequest(String inviteeId, final String siteId) {
inviteeId = people.validatePerson(inviteeId);
SiteInfo siteInfo = AuthenticationUtil.runAsSystem(new RunAsWork<SiteInfo>() {
@Override
public SiteInfo doWork() throws Exception {
SiteInfo siteInfo = sites.validateSite(siteId);
return siteInfo;
}
});
if (siteInfo == null) {
// site does not exist
throw new RelationshipResourceNotFoundException(inviteeId, siteId);
}
if (siteInfo.getVisibility().equals(SiteVisibility.MODERATED)) {
// set the site id to the short name (to deal with case sensitivity issues with using the siteId from the url)
String normalizedSiteId = siteInfo.getShortName();
Invitation invitation = getSiteInvitation(inviteeId, normalizedSiteId);
if (invitation == null) {
// no such invitation
throw new RelationshipResourceNotFoundException(inviteeId, normalizedSiteId);
}
if (invitation instanceof ModeratedInvitation) {
ModeratedInvitation moderatedInvitation = (ModeratedInvitation) invitation;
SiteMembershipRequest siteInvite = getSiteMembershipRequest(moderatedInvitation);
return siteInvite;
} else {
throw new InvalidArgumentException("Expected moderated invitation");
}
} else {
// non-moderated sites cannot appear in a site membership request, so throw an exception
throw new RelationshipResourceNotFoundException(inviteeId, siteId);
}
}
use of org.alfresco.service.cmr.site.SiteInfo in project alfresco-remote-api by Alfresco.
the class SiteMembershipRequestsImpl method updateSiteMembershipRequest.
@Override
public SiteMembershipRequest updateSiteMembershipRequest(String inviteeId, final SiteMembershipRequest siteInvite) {
SiteMembershipRequest updatedSiteInvite = null;
inviteeId = people.validatePerson(inviteeId, true);
String siteId = siteInvite.getId();
SiteInfo siteInfo = sites.validateSite(siteId);
if (siteInfo == null) {
// site does not exist
throw new RelationshipResourceNotFoundException(inviteeId, siteId);
}
// set the site id to the short name (to deal with case sensitivity issues with using the siteId from the url)
siteId = siteInfo.getShortName();
String message = siteInvite.getMessage();
if (message == null) {
// the invitation service ignores null messages so convert to an empty message.
message = "";
}
try {
ModeratedInvitation updatedInvitation = invitationService.updateModeratedInvitation(inviteeId, siteId, message);
if (updatedInvitation == null) {
throw new RelationshipResourceNotFoundException(inviteeId, siteId);
}
updatedSiteInvite = getSiteMembershipRequest(updatedInvitation);
} catch (InvitationExceptionNotFound e) {
throw new RelationshipResourceNotFoundException(inviteeId, siteId);
}
if (updatedSiteInvite == null) {
throw new RelationshipResourceNotFoundException(inviteeId, siteId);
}
return updatedSiteInvite;
}
Aggregations