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);
}
}
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;
}
Aggregations