Search in sources :

Example 1 with User

use of io.gravitee.management.model.providers.User in project gravitee-management-rest-api by gravitee-io.

the class MembershipServiceImpl method addOrUpdateMember.

@Override
public MemberEntity addOrUpdateMember(MembershipReference reference, MembershipUser user, MembershipRole role) {
    try {
        LOGGER.debug("Add a new member for {} {}", reference.getType(), reference.getId());
        RoleEntity roleEntity = roleService.findById(role.getScope(), role.getName());
        if (API.equals(reference.getType()) && !io.gravitee.management.model.permissions.RoleScope.API.equals(roleEntity.getScope())) {
            throw new NotAuthorizedMembershipException(role.getName());
        } else if (MembershipReferenceType.APPLICATION.equals(reference.getType()) && !io.gravitee.management.model.permissions.RoleScope.APPLICATION.equals(roleEntity.getScope())) {
            throw new NotAuthorizedMembershipException(role.getName());
        } else if (MembershipReferenceType.GROUP.equals(reference.getType()) && !io.gravitee.management.model.permissions.RoleScope.APPLICATION.equals(roleEntity.getScope()) && !io.gravitee.management.model.permissions.RoleScope.API.equals(roleEntity.getScope())) {
            throw new NotAuthorizedMembershipException(role.getName());
        }
        UserEntity userEntity;
        if (user.getId() != null) {
            userEntity = userService.findById(user.getId());
        } else {
            // We have a user reference, meaning that the user is coming from an external system
            // User does not exist so we are looking into defined providers
            Optional<io.gravitee.management.model.providers.User> providerUser = identityService.findByReference(user.getReference());
            if (providerUser.isPresent()) {
                try {
                    userEntity = userService.findByUsername(providerUser.get().getUsername(), false);
                } catch (UserNotFoundException unfe) {
                    User identityUser = providerUser.get();
                    // The user is not yet registered in repository
                    // Information will be updated after the first connection of the user
                    NewExternalUserEntity newUser = new NewExternalUserEntity();
                    newUser.setUsername(identityUser.getUsername());
                    newUser.setFirstname(identityUser.getFirstname());
                    newUser.setLastname(identityUser.getLastname());
                    newUser.setSource(identityUser.getSource());
                    newUser.setEmail(identityUser.getEmail());
                    newUser.setSourceId(identityUser.getSourceId());
                    userEntity = userService.create(newUser, true);
                }
            } else {
                throw new UserNotFoundException(user.getReference());
            }
        }
        Optional<Membership> optionalMembership = membershipRepository.findById(userEntity.getId(), reference.getType(), reference.getId());
        Date updateDate = new Date();
        Membership returnedMembership;
        if (optionalMembership.isPresent()) {
            Membership updatedMembership = optionalMembership.get();
            Membership previousMembership = new Membership(updatedMembership);
            updatedMembership.getRoles().put(role.getScope().getId(), role.getName());
            updatedMembership.setUpdatedAt(updateDate);
            returnedMembership = membershipRepository.update(optionalMembership.get());
            createAuditLog(MEMBERSHIP_UPDATED, updatedMembership.getUpdatedAt(), previousMembership, updatedMembership);
        } else {
            Membership membership = new Membership(userEntity.getId(), reference.getId(), reference.getType());
            membership.setRoles(Collections.singletonMap(role.getScope().getId(), role.getName()));
            membership.setCreatedAt(updateDate);
            membership.setUpdatedAt(updateDate);
            returnedMembership = membershipRepository.create(membership);
            createAuditLog(MEMBERSHIP_CREATED, membership.getCreatedAt(), null, membership);
            if (userEntity.getEmail() != null && !userEntity.getEmail().isEmpty()) {
                EmailNotification emailNotification = buildEmailNotification(userEntity, reference.getType(), reference.getId());
                if (emailNotification != null) {
                    emailService.sendAsyncEmailNotification(emailNotification);
                }
            }
        }
        return convert(returnedMembership, role.getScope());
    } catch (TechnicalException ex) {
        LOGGER.error("An error occurs while trying to add member for {} {}", reference.getType(), reference.getId(), ex);
        throw new TechnicalManagementException("An error occurs while trying to add member for " + reference.getType() + " " + reference.getId(), ex);
    }
}
Also used : User(io.gravitee.management.model.providers.User) TechnicalException(io.gravitee.repository.exceptions.TechnicalException) Membership(io.gravitee.repository.management.model.Membership) io.gravitee.management.model(io.gravitee.management.model)

Example 2 with User

use of io.gravitee.management.model.providers.User in project gravitee-management-rest-api by gravitee-io.

the class IdentityServiceImpl method convert.

private User convert(io.gravitee.management.idp.api.identity.User identity) {
    User user = new User();
    user.setId(identity.getId());
    user.setSourceId(identity.getReference());
    user.setSource(identity.getSource());
    user.setEmail(identity.getEmail());
    user.setUsername(identity.getUsername());
    user.setFirstname(identity.getFirstname());
    user.setLastname(identity.getLastname());
    user.setDisplayName(identity.getDisplayName());
    return user;
}
Also used : SearchableUser(io.gravitee.management.idp.api.identity.SearchableUser) User(io.gravitee.management.model.providers.User)

Aggregations

User (io.gravitee.management.model.providers.User)2 SearchableUser (io.gravitee.management.idp.api.identity.SearchableUser)1 io.gravitee.management.model (io.gravitee.management.model)1 TechnicalException (io.gravitee.repository.exceptions.TechnicalException)1 Membership (io.gravitee.repository.management.model.Membership)1