Search in sources :

Example 1 with UserNotInRoleException

use of cz.metacentrum.perun.core.api.exceptions.UserNotInRoleException in project perun by CESNET.

the class MembersManagerBlImpl method sponsorMember.

@Override
public Member sponsorMember(PerunSession session, Member sponsoredMember, User sponsor, LocalDate validityTo) throws MemberNotSponsoredException, AlreadySponsorException, UserNotInRoleException {
    // check that sponsoring user has role SPONSOR for the VO
    Vo vo = getMemberVo(session, sponsoredMember);
    if (!getPerunBl().getVosManagerBl().isUserInRoleForVo(session, sponsor, Role.SPONSOR, vo, true)) {
        throw new UserNotInRoleException("user " + sponsor.getId() + " is not in role SPONSOR for VO " + vo.getId());
    }
    if (!sponsoredMember.isSponsored()) {
        throw new MemberNotSponsoredException("member " + sponsoredMember.getId() + " is not marked as sponsored");
    }
    // check whether the user is already sponsor
    List<User> sponsors = getPerunBl().getUsersManagerBl().getSponsors(session, sponsoredMember);
    if (sponsors.stream().map(PerunBean::getId).anyMatch(id -> id == sponsor.getId())) {
        throw new AlreadySponsorException("member " + sponsoredMember.getId() + " is already sponsored by user " + sponsor.getId());
    }
    // add the sponsor
    getMembersManagerImpl().addSponsor(session, sponsoredMember, sponsor, validityTo);
    // remove expiration and validate member
    try {
        AttributeDefinition expiration = getPerunBl().getAttributesManagerBl().getAttributeDefinition(session, EXPIRATION);
        getPerunBl().getAttributesManagerBl().removeAttribute(session, sponsoredMember, expiration);
    } catch (WrongAttributeAssignmentException | AttributeNotExistsException | WrongAttributeValueException | WrongReferenceAttributeValueException ex) {
        throw new InternalErrorException("cannot remove expiration date for sponsored member " + sponsoredMember.getId(), ex);
    }
    try {
        validateMember(session, sponsoredMember);
    } catch (WrongReferenceAttributeValueException | WrongAttributeValueException ex) {
        throw new InternalErrorException("cannot validate sponsored member " + sponsoredMember.getId(), ex);
    }
    getPerunBl().getAuditer().log(session, new SponsorshipEstablished(sponsoredMember, sponsor, validityTo));
    return sponsoredMember;
}
Also used : User(cz.metacentrum.perun.core.api.User) RichUser(cz.metacentrum.perun.core.api.RichUser) WrongAttributeAssignmentException(cz.metacentrum.perun.core.api.exceptions.WrongAttributeAssignmentException) AttributeNotExistsException(cz.metacentrum.perun.core.api.exceptions.AttributeNotExistsException) AttributeDefinition(cz.metacentrum.perun.core.api.AttributeDefinition) InternalErrorException(cz.metacentrum.perun.core.api.exceptions.InternalErrorException) MemberNotSponsoredException(cz.metacentrum.perun.core.api.exceptions.MemberNotSponsoredException) UserNotInRoleException(cz.metacentrum.perun.core.api.exceptions.UserNotInRoleException) AlreadySponsorException(cz.metacentrum.perun.core.api.exceptions.AlreadySponsorException) SponsorshipEstablished(cz.metacentrum.perun.audit.events.MembersManagerEvents.SponsorshipEstablished) WrongReferenceAttributeValueException(cz.metacentrum.perun.core.api.exceptions.WrongReferenceAttributeValueException) Vo(cz.metacentrum.perun.core.api.Vo) BanOnVo(cz.metacentrum.perun.core.api.BanOnVo) WrongAttributeValueException(cz.metacentrum.perun.core.api.exceptions.WrongAttributeValueException)

Example 2 with UserNotInRoleException

use of cz.metacentrum.perun.core.api.exceptions.UserNotInRoleException in project perun by CESNET.

the class MembersManagerBlImpl method setSponsorshipForMember.

@Override
public Member setSponsorshipForMember(PerunSession session, Member sponsoredMember, User sponsor, LocalDate validityTo) throws AlreadySponsoredMemberException, UserNotInRoleException, AlreadySponsorException {
    if (sponsoredMember.isSponsored()) {
        throw new AlreadySponsoredMemberException(sponsoredMember + " is already sponsored member!");
    }
    // Test if Vo exists and sponsor has the right role in it
    Vo membersVo;
    try {
        membersVo = getPerunBl().getVosManagerBl().getVoById(session, sponsoredMember.getVoId());
    } catch (VoNotExistsException ex) {
        throw new ConsistencyErrorException("Vo for " + sponsoredMember + " not exists!");
    }
    if (!getPerunBl().getVosManagerBl().isUserInRoleForVo(session, sponsor, Role.SPONSOR, membersVo, true)) {
        throw new UserNotInRoleException("User " + sponsor.getId() + " is not in role SPONSOR for VO " + membersVo.getId());
    }
    // set member to be sponsored
    sponsoredMember = getMembersManagerImpl().setSponsorshipForMember(session, sponsoredMember, sponsor, validityTo);
    getPerunBl().getAuditer().log(session, new SponsoredMemberSet(sponsoredMember));
    getPerunBl().getAuditer().log(session, new SponsorshipEstablished(sponsoredMember, sponsor, validityTo));
    // remove expiration and validate member
    try {
        AttributeDefinition expiration = getPerunBl().getAttributesManagerBl().getAttributeDefinition(session, EXPIRATION);
        getPerunBl().getAttributesManagerBl().removeAttribute(session, sponsoredMember, expiration);
    } catch (WrongAttributeAssignmentException | AttributeNotExistsException | WrongAttributeValueException | WrongReferenceAttributeValueException ex) {
        throw new InternalErrorException("cannot remove expiration date for sponsored member " + sponsoredMember.getId(), ex);
    }
    try {
        validateMember(session, sponsoredMember);
    } catch (WrongReferenceAttributeValueException | WrongAttributeValueException ex) {
        throw new InternalErrorException("cannot validate sponsored member " + sponsoredMember.getId(), ex);
    }
    return sponsoredMember;
}
Also used : SponsoredMemberSet(cz.metacentrum.perun.audit.events.MembersManagerEvents.SponsoredMemberSet) ConsistencyErrorException(cz.metacentrum.perun.core.api.exceptions.ConsistencyErrorException) WrongAttributeAssignmentException(cz.metacentrum.perun.core.api.exceptions.WrongAttributeAssignmentException) AttributeNotExistsException(cz.metacentrum.perun.core.api.exceptions.AttributeNotExistsException) AlreadySponsoredMemberException(cz.metacentrum.perun.core.api.exceptions.AlreadySponsoredMemberException) AttributeDefinition(cz.metacentrum.perun.core.api.AttributeDefinition) InternalErrorException(cz.metacentrum.perun.core.api.exceptions.InternalErrorException) VoNotExistsException(cz.metacentrum.perun.core.api.exceptions.VoNotExistsException) UserNotInRoleException(cz.metacentrum.perun.core.api.exceptions.UserNotInRoleException) SponsorshipEstablished(cz.metacentrum.perun.audit.events.MembersManagerEvents.SponsorshipEstablished) WrongReferenceAttributeValueException(cz.metacentrum.perun.core.api.exceptions.WrongReferenceAttributeValueException) Vo(cz.metacentrum.perun.core.api.Vo) BanOnVo(cz.metacentrum.perun.core.api.BanOnVo) WrongAttributeValueException(cz.metacentrum.perun.core.api.exceptions.WrongAttributeValueException)

Example 3 with UserNotInRoleException

use of cz.metacentrum.perun.core.api.exceptions.UserNotInRoleException in project perun by CESNET.

the class MembersManagerBlImpl method moveMembersSponsorships.

/**
 * Moves sponsorships in VO from source user to target user - moves sponsorships
 * where the source user is sponsor or where the source member is sponsored.
 *
 * @param sess
 * @param vo VO to move sponsorships in
 * @param sourceUser user to move sponsorships from
 * @param targetUser user to move sponsorships to
 * @param sourceMember member of the source user in the VO
 * @param targetMember member of the target user in the VO
 */
private void moveMembersSponsorships(PerunSession sess, Vo vo, User sourceUser, User targetUser, Member sourceMember, Member targetMember) {
    // move sponsorships where sourceUser is sponsor
    List<Member> sponsoredMembers = this.getSponsoredMembers(sess, vo, sourceUser);
    for (Member sponsoredMember : sponsoredMembers) {
        try {
            Sponsorship sponsorship = this.getSponsorship(sess, sponsoredMember, sourceUser);
            // if target user isn't in role SPONSOR for the VO, assign the role to him
            if (!getPerunBl().getVosManagerBl().isUserInRoleForVo(sess, targetUser, Role.SPONSOR, vo, true)) {
                AuthzResolverBlImpl.setRole(sess, targetUser, vo, Role.SPONSOR);
            }
            // first add sponsorship to targetUser
            this.sponsorMember(sess, sponsoredMember, targetUser, sponsorship.getValidityTo());
            // then remove sponsorship from sourceUser
            this.removeSponsor(sess, sponsoredMember, sourceUser);
        } catch (SponsorshipDoesNotExistException | MemberNotSponsoredException e) {
            throw new ConsistencyErrorException(e);
        } catch (AlreadySponsorException e) {
            log.warn("When moving sponsorships from sponsor {} to sponsor {}, the sponsor already sponsored " + "member {}. Exception: {}", sourceUser, targetUser, sponsoredMember, e);
        } catch (UserNotInRoleException | AlreadyAdminException | RoleCannotBeManagedException e) {
            throw new InternalErrorException(e);
        }
    }
    // move sponsorships where sourceMember is sponsored
    if (sourceMember.isSponsored()) {
        List<User> sponsors = getPerunBl().getUsersManagerBl().getSponsors(sess, sourceMember);
        try {
            for (int i = 0; i < sponsors.size(); i++) {
                User sponsor = sponsors.get(i);
                Sponsorship sponsorship = this.getSponsorship(sess, sourceMember, sponsor);
                // because the member needs to be marked as sponsored first
                if (i == 0) {
                    this.setSponsorshipForMember(sess, targetMember, sponsor, sponsorship.getValidityTo());
                } else {
                    this.sponsorMember(sess, targetMember, sponsor, sponsorship.getValidityTo());
                }
            }
        } catch (SponsorshipDoesNotExistException e) {
            throw new ConsistencyErrorException(e);
        } catch (AlreadySponsoredMemberException | MemberNotSponsoredException | AlreadySponsorException | UserNotInRoleException e) {
            throw new InternalErrorException(e);
        }
    }
}
Also used : ConsistencyErrorException(cz.metacentrum.perun.core.api.exceptions.ConsistencyErrorException) User(cz.metacentrum.perun.core.api.User) RichUser(cz.metacentrum.perun.core.api.RichUser) AlreadySponsoredMemberException(cz.metacentrum.perun.core.api.exceptions.AlreadySponsoredMemberException) InternalErrorException(cz.metacentrum.perun.core.api.exceptions.InternalErrorException) MemberNotSponsoredException(cz.metacentrum.perun.core.api.exceptions.MemberNotSponsoredException) AlreadyAdminException(cz.metacentrum.perun.core.api.exceptions.AlreadyAdminException) UserNotInRoleException(cz.metacentrum.perun.core.api.exceptions.UserNotInRoleException) Sponsorship(cz.metacentrum.perun.core.api.Sponsorship) AlreadySponsorException(cz.metacentrum.perun.core.api.exceptions.AlreadySponsorException) RoleCannotBeManagedException(cz.metacentrum.perun.core.api.exceptions.RoleCannotBeManagedException) SponsorshipDoesNotExistException(cz.metacentrum.perun.core.api.exceptions.SponsorshipDoesNotExistException) RichMember(cz.metacentrum.perun.core.api.RichMember) Member(cz.metacentrum.perun.core.api.Member)

Example 4 with UserNotInRoleException

use of cz.metacentrum.perun.core.api.exceptions.UserNotInRoleException in project perun by CESNET.

the class MembersManagerEntryIntegrationTest method addSponsor.

@Test
public void addSponsor() throws Exception {
    System.out.println(CLASS_NAME + "addSponsor");
    // create user which can sponsor
    User sponsorUser = perun.getUsersManagerBl().getUserByMember(sess, setUpSponsor(createdVo));
    AuthzResolverBlImpl.setRole(sess, sponsorUser, createdVo, Role.SPONSOR);
    assertTrue("user must have SPONSOR role", perun.getVosManagerBl().isUserInRoleForVo(sess, sponsorUser, Role.SPONSOR, createdVo, true));
    // create another user which can sponsor
    User sponsorUser2 = perun.getUsersManagerBl().getUserByMember(sess, setUpSponsor2(createdVo));
    AuthzResolverBlImpl.setRole(sess, sponsorUser2, createdVo, Role.SPONSOR);
    assertTrue("user must have SPONSOR role", perun.getVosManagerBl().isUserInRoleForVo(sess, sponsorUser2, Role.SPONSOR, createdVo, true));
    // create user that cannot sponsor
    User notsponsorUser = perun.getUsersManagerBl().getUserByMember(sess, setUpNotSponsor(createdVo));
    assertFalse("user must not have SPONSOR role", perun.getVosManagerBl().isUserInRoleForVo(sess, notsponsorUser, Role.SPONSOR, createdVo, true));
    // create sponsored member
    Map<String, String> nameOfUser1 = new HashMap<>();
    nameOfUser1.put("guestName", "Ing. Jiří Novák, CSc.");
    Member sponsoredMember = createSponsoredMember(sess, createdVo, "dummy", nameOfUser1, "secret", null, sponsorUser);
    assertNotNull("sponsored member must not be null", sponsoredMember);
    assertTrue("sponsored memer must have flag 'sponsored' set", sponsoredMember.isSponsored());
    assertTrue("sponsored member should have status VALID", sponsoredMember.getStatus() == Status.VALID);
    // try add user that cannot sponsor, should fail
    try {
        perun.getMembersManager().sponsorMember(sess, sponsoredMember, notsponsorUser, null);
        fail("user cannot sponsor but was added as sponsor");
    } catch (UserNotInRoleException ex) {
    // expected
    }
    // try to add user that already is sponsor, should fail
    try {
        perun.getMembersManager().sponsorMember(sess, sponsoredMember, sponsorUser, null);
        fail("user cannot sponsor twice a single member");
    } catch (AlreadySponsorException ex) {
    // expected
    }
    // try to add sponsor, should succeed
    perun.getMembersManager().sponsorMember(sess, sponsoredMember, sponsorUser2, null);
    List<User> sponsors = perun.getUsersManagerBl().getSponsors(sess, sponsoredMember);
    assertTrue("sponsor 1 is not reported as sponsor", sponsors.contains(sponsorUser));
    assertTrue("sponsor 2 is not reported as sponsor", sponsors.contains(sponsorUser2));
    assertTrue("unexpected sponsors", sponsors.size() == 2);
    // check that it is reported
    List<RichMember> sponsoredMembers1 = perun.getMembersManager().getSponsoredMembers(sess, createdVo, sponsorUser);
    assertTrue("member is not in list of sponsored members for sponsor 1", sponsoredMembers1.stream().map(PerunBean::getId).anyMatch(id -> id == sponsoredMember.getId()));
    List<RichMember> sponsoredMembers2 = perun.getMembersManager().getSponsoredMembers(sess, createdVo, sponsorUser2);
    assertTrue("member is not in list of sponsored members for sponsor 2", sponsoredMembers2.stream().map(PerunBean::getId).anyMatch(id -> id == sponsoredMember.getId()));
    // remove sponsor and add him again, sponsorship should reactivate
    Sponsorship sponsorship = perun.getMembersManagerBl().getSponsorship(sess, sponsoredMember, sponsorUser);
    assertTrue(sponsorship.isActive());
    perun.getMembersManager().removeSponsor(sess, sponsoredMember, sponsorUser);
    sponsorship = perun.getMembersManagerBl().getSponsorship(sess, sponsoredMember, sponsorUser);
    assertFalse(sponsorship.isActive());
    perun.getMembersManager().sponsorMember(sess, sponsoredMember, sponsorUser, null);
    sponsorship = perun.getMembersManagerBl().getSponsorship(sess, sponsoredMember, sponsorUser);
    assertTrue(sponsorship.isActive());
}
Also used : InternalErrorException(cz.metacentrum.perun.core.api.exceptions.InternalErrorException) Arrays(java.util.Arrays) Validation(cz.metacentrum.perun.core.api.Validation) Candidate(cz.metacentrum.perun.core.api.Candidate) Vo(cz.metacentrum.perun.core.api.Vo) Date(java.util.Date) Assertions.assertThat(org.assertj.core.api.Assertions.assertThat) MemberNotExistsException(cz.metacentrum.perun.core.api.exceptions.MemberNotExistsException) SpecificUserType(cz.metacentrum.perun.core.api.SpecificUserType) MembersManager(cz.metacentrum.perun.core.api.MembersManager) ExtSource(cz.metacentrum.perun.core.api.ExtSource) AlreadySponsoredMemberException(cz.metacentrum.perun.core.api.exceptions.AlreadySponsoredMemberException) cz.metacentrum.perun.core.impl.modules.attributes.urn_perun_vo_attribute_def_def_membershipExpirationRules.expireSponsoredMembers(cz.metacentrum.perun.core.impl.modules.attributes.urn_perun_vo_attribute_def_def_membershipExpirationRules.expireSponsoredMembers) NamespaceRulesNotExistsException(cz.metacentrum.perun.core.api.exceptions.NamespaceRulesNotExistsException) ExtSourcesManager(cz.metacentrum.perun.core.api.ExtSourcesManager) PerunBean(cz.metacentrum.perun.core.api.PerunBean) Map(java.util.Map) Role(cz.metacentrum.perun.core.api.Role) GroupsManager(cz.metacentrum.perun.core.api.GroupsManager) MemberGroupStatus(cz.metacentrum.perun.core.api.MemberGroupStatus) Attribute(cz.metacentrum.perun.core.api.Attribute) Facility(cz.metacentrum.perun.core.api.Facility) MembersPageQuery(cz.metacentrum.perun.core.api.MembersPageQuery) MemberWithSponsors(cz.metacentrum.perun.core.api.MemberWithSponsors) Sponsorship(cz.metacentrum.perun.core.api.Sponsorship) BeansUtils(cz.metacentrum.perun.core.api.BeansUtils) UserExtSource(cz.metacentrum.perun.core.api.UserExtSource) AttributeDefinition(cz.metacentrum.perun.core.api.AttributeDefinition) ZoneId(java.time.ZoneId) User(cz.metacentrum.perun.core.api.User) ParseUserNameException(cz.metacentrum.perun.core.api.exceptions.ParseUserNameException) VosManager(cz.metacentrum.perun.core.api.VosManager) Sponsor(cz.metacentrum.perun.core.api.Sponsor) List(java.util.List) LocalDate(java.time.LocalDate) AlreadySponsorException(cz.metacentrum.perun.core.api.exceptions.AlreadySponsorException) RichMember(cz.metacentrum.perun.core.api.RichMember) VO_EXPIRATION_RULES_ATTR(cz.metacentrum.perun.core.impl.modules.attributes.urn_perun_vo_attribute_def_def_membershipExpirationRules.VO_EXPIRATION_RULES_ATTR) SortingOrder(cz.metacentrum.perun.core.api.SortingOrder) SponsoredUserData(cz.metacentrum.perun.core.api.SponsoredUserData) Resource(cz.metacentrum.perun.core.api.Resource) AssertionsForClassTypes.assertThatExceptionOfType(org.assertj.core.api.AssertionsForClassTypes.assertThatExceptionOfType) BanOnVo(cz.metacentrum.perun.core.api.BanOnVo) PerunSession(cz.metacentrum.perun.core.api.PerunSession) AbstractPerunIntegrationTest(cz.metacentrum.perun.core.AbstractPerunIntegrationTest) NamespaceRules(cz.metacentrum.perun.core.api.NamespaceRules) Paginated(cz.metacentrum.perun.core.api.Paginated) HashMap(java.util.HashMap) Group(cz.metacentrum.perun.core.api.Group) ArrayList(java.util.ArrayList) LinkedHashMap(java.util.LinkedHashMap) MembersOrderColumn(cz.metacentrum.perun.core.api.MembersOrderColumn) AuthzResolverBlImpl(cz.metacentrum.perun.core.blImpl.AuthzResolverBlImpl) UsersManager(cz.metacentrum.perun.core.api.UsersManager) SponsorshipDoesNotExistException(cz.metacentrum.perun.core.api.exceptions.SponsorshipDoesNotExistException) Before(org.junit.Before) BanOnResource(cz.metacentrum.perun.core.api.BanOnResource) Member(cz.metacentrum.perun.core.api.Member) UserNotInRoleException(cz.metacentrum.perun.core.api.exceptions.UserNotInRoleException) AbstractMembershipExpirationRulesModule(cz.metacentrum.perun.core.implApi.modules.attributes.AbstractMembershipExpirationRulesModule) Test(org.junit.Test) AlreadyMemberException(cz.metacentrum.perun.core.api.exceptions.AlreadyMemberException) AttributesManager(cz.metacentrum.perun.core.api.AttributesManager) MembershipType(cz.metacentrum.perun.core.api.MembershipType) ExtendMembershipException(cz.metacentrum.perun.core.api.exceptions.ExtendMembershipException) VoNotExistsException(cz.metacentrum.perun.core.api.exceptions.VoNotExistsException) Collectors.toList(java.util.stream.Collectors.toList) Ignore(org.junit.Ignore) UserNotExistsException(cz.metacentrum.perun.core.api.exceptions.UserNotExistsException) Assert(org.junit.Assert) Collections(java.util.Collections) Status(cz.metacentrum.perun.core.api.Status) Assert.assertEquals(org.junit.Assert.assertEquals) User(cz.metacentrum.perun.core.api.User) HashMap(java.util.HashMap) LinkedHashMap(java.util.LinkedHashMap) RichMember(cz.metacentrum.perun.core.api.RichMember) UserNotInRoleException(cz.metacentrum.perun.core.api.exceptions.UserNotInRoleException) AlreadySponsorException(cz.metacentrum.perun.core.api.exceptions.AlreadySponsorException) Sponsorship(cz.metacentrum.perun.core.api.Sponsorship) PerunBean(cz.metacentrum.perun.core.api.PerunBean) RichMember(cz.metacentrum.perun.core.api.RichMember) Member(cz.metacentrum.perun.core.api.Member) AbstractPerunIntegrationTest(cz.metacentrum.perun.core.AbstractPerunIntegrationTest) Test(org.junit.Test)

Aggregations

InternalErrorException (cz.metacentrum.perun.core.api.exceptions.InternalErrorException)4 UserNotInRoleException (cz.metacentrum.perun.core.api.exceptions.UserNotInRoleException)4 AttributeDefinition (cz.metacentrum.perun.core.api.AttributeDefinition)3 BanOnVo (cz.metacentrum.perun.core.api.BanOnVo)3 User (cz.metacentrum.perun.core.api.User)3 Vo (cz.metacentrum.perun.core.api.Vo)3 AlreadySponsorException (cz.metacentrum.perun.core.api.exceptions.AlreadySponsorException)3 AlreadySponsoredMemberException (cz.metacentrum.perun.core.api.exceptions.AlreadySponsoredMemberException)3 SponsorshipEstablished (cz.metacentrum.perun.audit.events.MembersManagerEvents.SponsorshipEstablished)2 Member (cz.metacentrum.perun.core.api.Member)2 RichMember (cz.metacentrum.perun.core.api.RichMember)2 RichUser (cz.metacentrum.perun.core.api.RichUser)2 Sponsorship (cz.metacentrum.perun.core.api.Sponsorship)2 ConsistencyErrorException (cz.metacentrum.perun.core.api.exceptions.ConsistencyErrorException)2 SponsorshipDoesNotExistException (cz.metacentrum.perun.core.api.exceptions.SponsorshipDoesNotExistException)2 VoNotExistsException (cz.metacentrum.perun.core.api.exceptions.VoNotExistsException)2 SponsoredMemberSet (cz.metacentrum.perun.audit.events.MembersManagerEvents.SponsoredMemberSet)1 AbstractPerunIntegrationTest (cz.metacentrum.perun.core.AbstractPerunIntegrationTest)1 Attribute (cz.metacentrum.perun.core.api.Attribute)1 AttributesManager (cz.metacentrum.perun.core.api.AttributesManager)1