use of cz.metacentrum.perun.core.api.exceptions.RelationExistsException in project perun by CESNET.
the class UsersManagerBlImpl method addSpecificUserOwner.
@Override
public void addSpecificUserOwner(PerunSession sess, User user, User specificUser) throws RelationExistsException {
if (specificUser.isServiceUser() && specificUser.isSponsoredUser())
throw new InternalErrorException("We don't support specific and sponsored users together yet.");
if (specificUser.getMajorSpecificType().equals(SpecificUserType.NORMAL))
throw new InternalErrorException("Incorrect type of specification for specific user!" + specificUser);
if (user.getMajorSpecificType().equals(SpecificUserType.SERVICE))
throw new InternalErrorException("Service user can`t own another account (service or guest)!" + user);
List<User> specificUserOwners = this.getUsersBySpecificUser(sess, specificUser);
if (specificUserOwners.remove(user))
throw new RelationExistsException("User is already the active owner of specific user.");
if (getUsersManagerImpl().specificUserOwnershipExists(sess, user, specificUser)) {
getUsersManagerImpl().enableOwnership(sess, user, specificUser);
getPerunBl().getAuditer().log(sess, new OwnershipEnabledForSpecificUser(user, specificUser));
} else {
getPerunBl().getAuditer().log(sess, new UserAddedToOwnersOfSpecificUser(user, specificUser));
getUsersManagerImpl().addSpecificUserOwner(sess, user, specificUser);
}
try {
// refresh authz for sponsors
if (specificUser.isSponsoredUser())
AuthzResolverBlImpl.addSpecificUserOwner(sess, specificUser, user);
// refresh authz for service user owners
if (specificUser.isServiceUser() && sess.getPerunPrincipal() != null) {
if (user.getId() == sess.getPerunPrincipal().getUserId()) {
AuthzResolverBlImpl.refreshAuthz(sess);
}
}
} catch (AlreadyAdminException ex) {
throw new InternalErrorException("User " + user + " is already sponsor of sponsored user " + specificUser);
}
}
use of cz.metacentrum.perun.core.api.exceptions.RelationExistsException in project perun by CESNET.
the class UsersManagerBlImpl method createServiceUser.
@Override
public User createServiceUser(PerunSession sess, Candidate candidate, List<User> owners) throws WrongAttributeAssignmentException, UserExtSourceExistsException, WrongReferenceAttributeValueException, WrongAttributeValueException, AttributeNotExistsException {
candidate.setServiceUser(true);
User serviceUser = createUser(sess, candidate);
for (User owner : owners) {
try {
getPerunBl().getUsersManagerBl().addSpecificUserOwner(sess, owner, serviceUser);
} catch (RelationExistsException ex) {
throw new InternalErrorException(ex);
}
}
log.info("Created service user: {}", serviceUser);
return serviceUser;
}
use of cz.metacentrum.perun.core.api.exceptions.RelationExistsException in project perun by CESNET.
the class MembersManagerBlImpl method createServiceMember.
@Override
public Member createServiceMember(PerunSession sess, Vo vo, Candidate candidate, List<User> specificUserOwners, List<Group> groups) throws WrongAttributeValueException, WrongReferenceAttributeValueException, AlreadyMemberException, ExtendMembershipException {
candidate.setFirstName("(Service)");
// Set organization only if user in sessione exists (in tests there is no user in sess)
if (sess.getPerunPrincipal().getUser() != null) {
String userOrganization = AttributesManager.NS_USER_ATTR_DEF + ":organization";
String memberOrganization = AttributesManager.NS_MEMBER_ATTR_DEF + ":organization";
Map<String, String> candidateAttributes = new HashMap<>();
if (candidate.getAttributes() != null)
candidateAttributes.putAll(candidate.getAttributes());
if (candidateAttributes.get(memberOrganization) == null) {
Attribute actorUserOrganization;
String actorUserOrganizationValue;
try {
actorUserOrganization = perunBl.getAttributesManagerBl().getAttribute(sess, sess.getPerunPrincipal().getUser(), userOrganization);
actorUserOrganizationValue = (String) actorUserOrganization.getValue();
} catch (WrongAttributeAssignmentException | AttributeNotExistsException ex) {
throw new InternalErrorException(ex);
}
if (actorUserOrganizationValue != null) {
candidateAttributes.put(memberOrganization, actorUserOrganizationValue);
candidate.setAttributes(candidateAttributes);
}
}
}
// create member for service user from candidate
Member member = createMember(sess, vo, SpecificUserType.SERVICE, candidate, groups, null);
// set specific user owners or sponsors
User specificUser = getPerunBl().getUsersManagerBl().getUserByMember(sess, member);
for (User u : specificUserOwners) {
try {
getPerunBl().getUsersManagerBl().addSpecificUserOwner(sess, u, specificUser);
} catch (RelationExistsException ex) {
throw new InternalErrorException(ex);
}
}
return member;
}
Aggregations