Search in sources :

Example 11 with User

use of com.epam.ta.reportportal.entity.user.User in project service-authorization by reportportal.

the class GitHubUserReplicator method synchronizeUser.

public User synchronizeUser(String accessToken) {
    GitHubClient gitHubClient = GitHubClient.withAccessToken(accessToken);
    UserResource userResource = gitHubClient.getUser();
    Optional<User> userOptional = userRepository.findByLogin(normalizeId(userResource.getLogin()));
    BusinessRule.expect(userOptional, Optional::isPresent).verify(ErrorType.USER_NOT_FOUND, userResource.getLogin());
    User user = userOptional.get();
    BusinessRule.expect(user.getUserType(), userType -> Objects.equals(userType, UserType.GITHUB)).verify(ErrorType.INCORRECT_AUTHENTICATION_TYPE, "User '" + userResource.getLogin() + "' is not GitHUB user");
    if (StringUtils.isNotBlank(userResource.getName())) {
        user.setFullName(userResource.getName());
    }
    String email = userResource.getEmail();
    if (Strings.isNullOrEmpty(email)) {
        email = retrieveEmail(gitHubClient).orElseThrow(() -> new UserSynchronizationException("User 'email' has not been provided"));
    }
    email = normalizeId(email);
    if (!user.getEmail().equals(email)) {
        checkEmail(email);
        user.setEmail(email);
    }
    Metadata metadata = ofNullable(user.getMetadata()).orElse(new Metadata(Maps.newHashMap()));
    metadata.getMetadata().put("synchronizationDate", Date.from(ZonedDateTime.now(ZoneOffset.UTC).toInstant()));
    user.setMetadata(metadata);
    uploadAvatar(gitHubClient, user, userResource.getAvatarUrl());
    userRepository.save(user);
    return user;
}
Also used : Project(com.epam.ta.reportportal.entity.project.Project) PersonalProjectService(com.epam.ta.reportportal.util.PersonalProjectService) Date(java.util.Date) ZonedDateTime(java.time.ZonedDateTime) Strings.isNullOrEmpty(com.google.common.base.Strings.isNullOrEmpty) ErrorType(com.epam.ta.reportportal.ws.model.ErrorType) StringUtils(org.apache.commons.lang3.StringUtils) Strings(com.google.common.base.Strings) ReportPortalUser(com.epam.ta.reportportal.commons.ReportPortalUser) UserRole(com.epam.ta.reportportal.entity.user.UserRole) ZoneOffset(java.time.ZoneOffset) UserType(com.epam.ta.reportportal.entity.user.UserType) UserSynchronizationException(com.epam.reportportal.auth.oauth.UserSynchronizationException) Resource(org.springframework.core.io.Resource) BinaryData(com.epam.ta.reportportal.entity.attachment.BinaryData) AbstractUserReplicator(com.epam.reportportal.auth.integration.AbstractUserReplicator) ContentTypeResolver(com.epam.reportportal.commons.ContentTypeResolver) BusinessRule(com.epam.ta.reportportal.commons.validation.BusinessRule) Optional.ofNullable(java.util.Optional.ofNullable) User(com.epam.ta.reportportal.entity.user.User) UserRepository(com.epam.ta.reportportal.dao.UserRepository) IOException(java.io.IOException) Maps(com.google.common.collect.Maps) Objects(java.util.Objects) Metadata(com.epam.ta.reportportal.entity.Metadata) Component(org.springframework.stereotype.Component) EntityUtils.normalizeId(com.epam.ta.reportportal.commons.EntityUtils.normalizeId) ProjectRepository(com.epam.ta.reportportal.dao.ProjectRepository) Optional(java.util.Optional) ResponseEntity(org.springframework.http.ResponseEntity) UserBinaryDataService(com.epam.ta.reportportal.binary.UserBinaryDataService) Transactional(org.springframework.transaction.annotation.Transactional) InputStream(java.io.InputStream) ReportPortalUser(com.epam.ta.reportportal.commons.ReportPortalUser) User(com.epam.ta.reportportal.entity.user.User) UserSynchronizationException(com.epam.reportportal.auth.oauth.UserSynchronizationException) Metadata(com.epam.ta.reportportal.entity.Metadata)

Example 12 with User

use of com.epam.ta.reportportal.entity.user.User in project service-authorization by reportportal.

the class UiAuthenticationSuccessEventHandler method onApplicationEvent.

@EventListener
@Transactional
public void onApplicationEvent(UiUserSignedInEvent event) {
    String username = event.getAuthentication().getName();
    userRepository.updateLastLoginDate(LocalDateTime.ofInstant(Instant.ofEpochMilli(event.getTimestamp()), ZoneOffset.UTC), username);
    if (MapUtils.isEmpty(acquireUser(event.getAuthentication()).getProjectDetails())) {
        User user = userRepository.findByLogin(username).orElseThrow(() -> new ReportPortalException(ErrorType.USER_NOT_FOUND, username));
        Project project = personalProjectService.generatePersonalProject(user);
        user.getProjects().addAll(project.getUsers());
    }
}
Also used : Project(com.epam.ta.reportportal.entity.project.Project) User(com.epam.ta.reportportal.entity.user.User) ReportPortalUser(com.epam.ta.reportportal.commons.ReportPortalUser) ReportPortalException(com.epam.ta.reportportal.exception.ReportPortalException) EventListener(org.springframework.context.event.EventListener) Transactional(org.springframework.transaction.annotation.Transactional)

Example 13 with User

use of com.epam.ta.reportportal.entity.user.User in project service-authorization by reportportal.

the class LdapUserReplicator method replicateUser.

/**
 * Replicates LDAP user to internal database (if does NOT exist). Creates personal project for that user
 *
 * @param name           Username
 * @param ctx            LDAP context
 * @param syncAttributes Synchronization Attributes
 * @return Internal User representation
 */
@Transactional
public User replicateUser(String name, DirContextOperations ctx, Map<String, String> syncAttributes) {
    String emailAttribute = ofNullable(syncAttributes.get(LdapParameter.EMAIL_ATTRIBUTE.getParameterName())).orElseThrow(() -> new UserSynchronizationException("Email attribute not provided"));
    String email = (String) ctx.getObjectAttribute(emailAttribute);
    if (isNullOrEmpty(email)) {
        throw new UserSynchronizationException("Email not provided");
    }
    email = normalizeId(email);
    String login = CROP_DOMAIN.apply(name);
    Optional<User> userOptional = userRepository.findByLogin(login);
    if (userOptional.isEmpty()) {
        User newUser = new User();
        newUser.setLogin(login);
        ofNullable(syncAttributes.get(LdapParameter.FULL_NAME_ATTRIBUTE.getParameterName())).filter(StringUtils::isNotBlank).flatMap(it -> ofNullable(ctx.getStringAttribute(it))).ifPresent(newUser::setFullName);
        ofNullable(syncAttributes.get(LdapParameter.PHOTO_ATTRIBUTE.getParameterName())).filter(StringUtils::isNotBlank).flatMap(it -> ofNullable(ctx.getObjectAttribute(it)));
        checkEmail(email);
        newUser.setEmail(email);
        newUser.setMetadata(defaultMetaData());
        newUser.setUserType(UserType.LDAP);
        newUser.setRole(UserRole.USER);
        newUser.setExpired(false);
        final Project project = generatePersonalProject(newUser);
        newUser.getProjects().add(project.getUsers().iterator().next());
        userRepository.save(newUser);
        return newUser;
    } else if (!UserType.LDAP.equals(userOptional.get().getUserType())) {
        // if user with such login exists, but it's not GitHub user than throw an exception
        throw new UserSynchronizationException("User with login '" + userOptional.get().getLogin() + "' already exists");
    }
    return userOptional.get();
}
Also used : AbstractUserReplicator(com.epam.reportportal.auth.integration.AbstractUserReplicator) ContentTypeResolver(com.epam.reportportal.commons.ContentTypeResolver) DirContextOperations(org.springframework.ldap.core.DirContextOperations) StringUtils(org.apache.commons.lang.StringUtils) Project(com.epam.ta.reportportal.entity.project.Project) PersonalProjectService(com.epam.ta.reportportal.util.PersonalProjectService) Optional.ofNullable(java.util.Optional.ofNullable) User(com.epam.ta.reportportal.entity.user.User) UserRepository(com.epam.ta.reportportal.dao.UserRepository) Autowired(org.springframework.beans.factory.annotation.Autowired) Strings.isNullOrEmpty(com.google.common.base.Strings.isNullOrEmpty) LdapParameter(com.epam.reportportal.auth.integration.parameter.LdapParameter) Component(org.springframework.stereotype.Component) EntityUtils.normalizeId(com.epam.ta.reportportal.commons.EntityUtils.normalizeId) ProjectRepository(com.epam.ta.reportportal.dao.ProjectRepository) UserRole(com.epam.ta.reportportal.entity.user.UserRole) Map(java.util.Map) Optional(java.util.Optional) UserType(com.epam.ta.reportportal.entity.user.UserType) UserBinaryDataService(com.epam.ta.reportportal.binary.UserBinaryDataService) UserSynchronizationException(com.epam.reportportal.auth.oauth.UserSynchronizationException) CROP_DOMAIN(com.epam.reportportal.auth.util.AuthUtils.CROP_DOMAIN) Transactional(org.springframework.transaction.annotation.Transactional) Project(com.epam.ta.reportportal.entity.project.Project) User(com.epam.ta.reportportal.entity.user.User) StringUtils(org.apache.commons.lang.StringUtils) UserSynchronizationException(com.epam.reportportal.auth.oauth.UserSynchronizationException) Transactional(org.springframework.transaction.annotation.Transactional)

Example 14 with User

use of com.epam.ta.reportportal.entity.user.User in project service-authorization by reportportal.

the class SamlUserReplicator method replicateUser.

public User replicateUser(ReportPortalSamlAuthentication samlAuthentication) {
    String userName = CROP_DOMAIN.apply(samlAuthentication.getPrincipal());
    Optional<User> userOptional = userRepository.findByLogin(userName);
    if (userOptional.isPresent()) {
        return userOptional.get();
    }
    IntegrationType samlIntegrationType = integrationTypeRepository.findByName(AuthIntegrationType.SAML.getName()).orElseThrow(() -> new ReportPortalException(ErrorType.AUTH_INTEGRATION_NOT_FOUND, AuthIntegrationType.SAML.getName()));
    List<Integration> providers = integrationRepository.findAllGlobalByType(samlIntegrationType);
    Optional<Integration> samlProvider = providers.stream().filter(provider -> {
        Optional<String> idpUrlOptional = SamlParameter.IDP_URL.getParameter(provider);
        return idpUrlOptional.isPresent() && idpUrlOptional.get().equalsIgnoreCase(samlAuthentication.getIssuer());
    }).findFirst();
    User user = new User();
    user.setLogin(userName);
    List<Attribute> details = samlAuthentication.getDetails();
    if (samlProvider.isPresent()) {
        populateUserDetailsIfSettingsArePresent(user, samlProvider.get(), details);
    } else {
        populateUserDetails(user, details);
    }
    user.setUserType(UserType.SAML);
    user.setRole(UserRole.USER);
    user.setExpired(false);
    Project project = generatePersonalProject(user);
    user.getProjects().add(project.getUsers().iterator().next());
    user.setMetadata(defaultMetaData());
    userRepository.save(user);
    return user;
}
Also used : Project(com.epam.ta.reportportal.entity.project.Project) PersonalProjectService(com.epam.ta.reportportal.util.PersonalProjectService) Autowired(org.springframework.beans.factory.annotation.Autowired) ErrorType(com.epam.ta.reportportal.ws.model.ErrorType) IntegrationType(com.epam.ta.reportportal.entity.integration.IntegrationType) UserRole(com.epam.ta.reportportal.entity.user.UserRole) IntegrationRepository(com.epam.ta.reportportal.dao.IntegrationRepository) UserType(com.epam.ta.reportportal.entity.user.UserType) AbstractUserReplicator(com.epam.reportportal.auth.integration.AbstractUserReplicator) ContentTypeResolver(com.epam.reportportal.commons.ContentTypeResolver) AuthIntegrationType(com.epam.reportportal.auth.integration.AuthIntegrationType) User(com.epam.ta.reportportal.entity.user.User) Integration(com.epam.ta.reportportal.entity.integration.Integration) UserRepository(com.epam.ta.reportportal.dao.UserRepository) ReportPortalException(com.epam.ta.reportportal.exception.ReportPortalException) IntegrationTypeRepository(com.epam.ta.reportportal.dao.IntegrationTypeRepository) Collectors(java.util.stream.Collectors) Objects(java.util.Objects) Component(org.springframework.stereotype.Component) List(java.util.List) ProjectRepository(com.epam.ta.reportportal.dao.ProjectRepository) CollectionUtils(org.springframework.util.CollectionUtils) Optional(java.util.Optional) UserBinaryDataService(com.epam.ta.reportportal.binary.UserBinaryDataService) CROP_DOMAIN(com.epam.reportportal.auth.util.AuthUtils.CROP_DOMAIN) SamlParameter(com.epam.reportportal.auth.integration.parameter.SamlParameter) Transactional(org.springframework.transaction.annotation.Transactional) Integration(com.epam.ta.reportportal.entity.integration.Integration) User(com.epam.ta.reportportal.entity.user.User) Optional(java.util.Optional) Project(com.epam.ta.reportportal.entity.project.Project) ReportPortalException(com.epam.ta.reportportal.exception.ReportPortalException) IntegrationType(com.epam.ta.reportportal.entity.integration.IntegrationType) AuthIntegrationType(com.epam.reportportal.auth.integration.AuthIntegrationType)

Example 15 with User

use of com.epam.ta.reportportal.entity.user.User in project service-authorization by reportportal.

the class GitHubUserReplicator method createUser.

private User createUser(UserResource userResource, GitHubClient gitHubClient) {
    User user = new User();
    String login = normalizeId(userResource.getLogin());
    user.setLogin(login);
    updateUser(user, userResource, gitHubClient);
    user.setUserType(UserType.GITHUB);
    user.setRole(UserRole.USER);
    user.setExpired(false);
    final Project project = generatePersonalProject(user);
    user.getProjects().addAll(project.getUsers());
    return user;
}
Also used : Project(com.epam.ta.reportportal.entity.project.Project) ReportPortalUser(com.epam.ta.reportportal.commons.ReportPortalUser) User(com.epam.ta.reportportal.entity.user.User)

Aggregations

User (com.epam.ta.reportportal.entity.user.User)22 ReportPortalUser (com.epam.ta.reportportal.commons.ReportPortalUser)14 ProjectUser (com.epam.ta.reportportal.entity.user.ProjectUser)13 Test (org.junit.jupiter.api.Test)13 BaseTest (com.epam.ta.reportportal.BaseTest)10 Filter (com.epam.ta.reportportal.commons.querygen.Filter)7 Project (com.epam.ta.reportportal.entity.project.Project)7 CompositeFilterCondition (com.epam.ta.reportportal.commons.querygen.CompositeFilterCondition)6 FilterCondition (com.epam.ta.reportportal.commons.querygen.FilterCondition)6 Transactional (org.springframework.transaction.annotation.Transactional)6 AbstractUserReplicator (com.epam.reportportal.auth.integration.AbstractUserReplicator)4 ContentTypeResolver (com.epam.reportportal.commons.ContentTypeResolver)4 UserBinaryDataService (com.epam.ta.reportportal.binary.UserBinaryDataService)4 ProjectRepository (com.epam.ta.reportportal.dao.ProjectRepository)4 UserRepository (com.epam.ta.reportportal.dao.UserRepository)4 UserRole (com.epam.ta.reportportal.entity.user.UserRole)4 UserType (com.epam.ta.reportportal.entity.user.UserType)4 PersonalProjectService (com.epam.ta.reportportal.util.PersonalProjectService)4 Optional (java.util.Optional)4 Component (org.springframework.stereotype.Component)4