Skip to content

Commit

Permalink
EPMRPP-89095 || Add new scim related fields (#1037)
Browse files Browse the repository at this point in the history
* EPMRPP-89105, EPMRPP-89100, EPMRPP-92451 || Add additional uer fields for scim

* EPMRPP-89105, EPMRPP-89100, EPMRPP-92451 || Add active flag for user

* EPMRPP-89105, EPMRPP-89100, EPMRPP-92451 || Add active flag for user

* EPMRPP-89105, EPMRPP-89100, EPMRPP-92451 || Update user entity

* EPMRPP-89105, EPMRPP-89100, EPMRPP-92451 || Update ReportPortalUser

* EPMRPP-89105, EPMRPP-89100, EPMRPP-92451 || Add missed active fetcher

* EPMRPP-89105, EPMRPP-89100, EPMRPP-92451 || Add fields to base select query

* EPMRPP-89095 || Add db migration script

* EPMRPP-89095 || Fix unit tests

* EPMRPP-89095 || Fix unit tests
  • Loading branch information
pbortnik authored Sep 16, 2024
1 parent 5807fb1 commit ee8ed26
Show file tree
Hide file tree
Showing 33 changed files with 316 additions and 239 deletions.
1 change: 1 addition & 0 deletions project-properties.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,7 @@ project.ext {
(migrationsUrl + '/migrations/84_notication_update.up.sql') : 'V084__notication_update.sql',
(migrationsUrl + '/migrations/86_add_retention_policy_launch.up.sql') : 'V086__add_retention_policy_launch.sql',
(migrationsUrl + '/migrations/88_analytics_data_table.up.sql') : 'V088__analytics_data_table.sql',
(migrationsUrl + '/migrations/90_add_user_fields.up.sql') : 'V090__scim_user_fields.sql',

]
excludeTests = [
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,23 +16,22 @@

package com.epam.ta.reportportal.commons;

import static java.util.Optional.ofNullable;

import com.epam.reportportal.rules.exception.ErrorType;
import com.epam.reportportal.rules.exception.ReportPortalException;
import com.epam.ta.reportportal.entity.project.ProjectRole;
import com.epam.ta.reportportal.entity.user.UserRole;
import com.epam.reportportal.rules.exception.ErrorType;
import com.fasterxml.jackson.annotation.JsonProperty;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;

import java.io.Serializable;
import java.util.Collection;
import java.util.Collections;
import java.util.Map;
import java.util.stream.Collectors;

import static java.util.Optional.ofNullable;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;

/**
* ReportPortal user representation
Expand All @@ -41,6 +40,8 @@
*/
public class ReportPortalUser extends User {

private boolean active;

private Long userId;

private UserRole userRole;
Expand All @@ -51,18 +52,29 @@ public class ReportPortalUser extends User {

private ReportPortalUser(String username, String password,
Collection<? extends GrantedAuthority> authorities, Long userId,
UserRole role, Map<String, ProjectDetails> projectDetails, String email) {
UserRole role, Map<String, ProjectDetails> projectDetails, String email, boolean isActive) {
super(username, password, authorities);
this.userId = userId;
this.userRole = role;
this.projectDetails = projectDetails;
this.email = email;
this.active = isActive;
}

public static ReportPortalUserBuilder userBuilder() {
return new ReportPortalUserBuilder();
}

@Override
public boolean isEnabled() {
return active;
}

@Override
public boolean isAccountNonLocked() {
return active;
}

public Long getUserId() {
return userId;
}
Expand Down Expand Up @@ -161,6 +173,7 @@ public ProjectDetails build() {

public static class ReportPortalUserBuilder {

private boolean active;
private String username;
private String password;
private Long userId;
Expand All @@ -173,6 +186,11 @@ private ReportPortalUserBuilder() {

}

public ReportPortalUserBuilder withActive(boolean active) {
this.active = active;
return this;
}

public ReportPortalUserBuilder withUserName(String userName) {
this.username = userName;
return this;
Expand All @@ -193,6 +211,7 @@ public ReportPortalUserBuilder withUserDetails(UserDetails userDetails) {
this.username = userDetails.getUsername();
this.password = userDetails.getPassword();
this.authorities = userDetails.getAuthorities();
this.active = userDetails.isEnabled();
return this;
}

Expand All @@ -217,6 +236,7 @@ public ReportPortalUserBuilder withProjectDetails(Map<String, ProjectDetails> pr
}

public ReportPortalUser fromUser(com.epam.ta.reportportal.entity.user.User user) {
this.active = user.isActive();
this.username = user.getLogin();
this.email = user.getPassword();
this.userId = user.getId();
Expand All @@ -237,7 +257,7 @@ public ReportPortalUser fromUser(com.epam.ta.reportportal.entity.user.User user)

public ReportPortalUser build() {
return new ReportPortalUser(username, password, authorities, userId, userRole, projectDetails,
email);
email, active);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -93,8 +93,10 @@
import static com.epam.ta.reportportal.commons.querygen.constant.TestItemCriteriaConstant.CRITERIA_UNIQUE_ID;
import static com.epam.ta.reportportal.commons.querygen.constant.TestItemCriteriaConstant.CRITERIA_UUID;
import static com.epam.ta.reportportal.commons.querygen.constant.TestItemCriteriaConstant.RETRY_PARENT;
import static com.epam.ta.reportportal.commons.querygen.constant.UserCriteriaConstant.CRITERIA_ACTIVE;
import static com.epam.ta.reportportal.commons.querygen.constant.UserCriteriaConstant.CRITERIA_EMAIL;
import static com.epam.ta.reportportal.commons.querygen.constant.UserCriteriaConstant.CRITERIA_EXPIRED;
import static com.epam.ta.reportportal.commons.querygen.constant.UserCriteriaConstant.CRITERIA_EXTERNAL_ID;
import static com.epam.ta.reportportal.commons.querygen.constant.UserCriteriaConstant.CRITERIA_FULL_NAME;
import static com.epam.ta.reportportal.commons.querygen.constant.UserCriteriaConstant.CRITERIA_LAST_LOGIN;
import static com.epam.ta.reportportal.commons.querygen.constant.UserCriteriaConstant.CRITERIA_ROLE;
Expand Down Expand Up @@ -143,7 +145,6 @@
import com.epam.ta.reportportal.commons.querygen.query.JoinEntity;
import com.epam.ta.reportportal.commons.querygen.query.QuerySupplier;
import com.epam.ta.reportportal.entity.activity.Activity;
import com.epam.ta.reportportal.entity.activity.EventSubject;
import com.epam.ta.reportportal.entity.dashboard.Dashboard;
import com.epam.ta.reportportal.entity.enums.LogLevel;
import com.epam.ta.reportportal.entity.filter.UserFilter;
Expand All @@ -166,6 +167,7 @@
import java.util.Collection;
import java.util.List;
import java.util.Optional;
import java.util.UUID;
import java.util.stream.Collectors;
import org.jooq.Field;
import org.jooq.JoinType;
Expand Down Expand Up @@ -345,6 +347,11 @@ protected Field<Long> idField() {
USER_TARGET(User.class, Arrays.asList(

new CriteriaHolderBuilder().newBuilder(CRITERIA_ID, USERS.ID, Long.class).get(),
new CriteriaHolderBuilder().newBuilder(CRITERIA_UUID, USERS.UUID, UUID.class).get(),
new CriteriaHolderBuilder().newBuilder(CRITERIA_EXTERNAL_ID, USERS.EXTERNAL_ID, String.class)
.get(),
new CriteriaHolderBuilder().newBuilder(CRITERIA_ACTIVE, USERS.ACTIVE, Boolean.class)
.get(),
new CriteriaHolderBuilder().newBuilder(CRITERIA_USER, USERS.LOGIN, String.class).get(),
new CriteriaHolderBuilder().newBuilder(CRITERIA_EMAIL, USERS.EMAIL, String.class).get(),
new CriteriaHolderBuilder().newBuilder(CRITERIA_FULL_NAME, USERS.FULL_NAME, String.class)
Expand Down Expand Up @@ -372,6 +379,9 @@ protected Field<Long> idField() {
protected Collection<? extends SelectField> selectFields() {
return Lists.newArrayList(USERS.ID,
USERS.LOGIN,
USERS.UUID,
USERS.EXTERNAL_ID,
USERS.ACTIVE,
USERS.FULL_NAME,
USERS.TYPE,
USERS.ATTACHMENT,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@
public final class GeneralCriteriaConstant {

public static final String CRITERIA_ID = "id";

public static final String CRITERIA_UUID = "uuid";
public static final String CRITERIA_NAME = "name";
public static final String CRITERIA_SHARED = "shared";
public static final String CRITERIA_OWNER = "owner";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,10 @@
*/
public final class UserCriteriaConstant {

public static final String CRITERIA_EXTERNAL_ID = "externalId";

public static final String CRITERIA_ACTIVE = "active";

public static final String CRITERIA_USER = "user";
public static final String CRITERIA_ROLE = "role";
public static final String CRITERIA_TYPE = "type";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,14 +25,13 @@
import static com.epam.ta.reportportal.jooq.tables.JProjectUser.PROJECT_USER;
import static com.epam.ta.reportportal.jooq.tables.JUsers.USERS;

import com.epam.reportportal.rules.exception.ErrorType;
import com.epam.reportportal.rules.exception.ReportPortalException;
import com.epam.ta.reportportal.commons.ReportPortalUser;
import com.epam.ta.reportportal.commons.querygen.QueryBuilder;
import com.epam.ta.reportportal.commons.querygen.Queryable;
import com.epam.ta.reportportal.entity.project.ProjectRole;
import com.epam.ta.reportportal.entity.user.User;
import com.epam.reportportal.rules.exception.ReportPortalException;

import com.epam.reportportal.rules.exception.ErrorType;
import java.util.List;
import java.util.Map;
import java.util.Optional;
Expand Down Expand Up @@ -105,21 +104,21 @@ public Map<String, ProjectRole> findUsernamesWithProjectRolesByProjectId(Long pr
@Override
public Optional<ReportPortalUser> findUserDetails(String login) {
return Optional.ofNullable(REPORTPORTAL_USER_FETCHER.apply(
dsl.select(USERS.ID, USERS.LOGIN, USERS.PASSWORD, USERS.ROLE, USERS.EMAIL,
dsl.select(USERS.ID, USERS.LOGIN, USERS.PASSWORD, USERS.ROLE, USERS.EMAIL, USERS.ACTIVE,
PROJECT_USER.PROJECT_ID, PROJECT_USER.PROJECT_ROLE, PROJECT.NAME
).from(USERS).leftJoin(PROJECT_USER).on(USERS.ID.eq(PROJECT_USER.USER_ID)).leftJoin(PROJECT)
.on(PROJECT_USER.PROJECT_ID.eq(PROJECT.ID)).where(USERS.LOGIN.eq(login)).fetch()));
}

@Override
public Optional<ReportPortalUser> findReportPortalUser(String login) {
return dsl.select(USERS.ID, USERS.LOGIN, USERS.PASSWORD, USERS.ROLE, USERS.EMAIL).from(USERS)
return dsl.select(USERS.ID, USERS.LOGIN, USERS.PASSWORD, USERS.ROLE, USERS.EMAIL, USERS.ACTIVE).from(USERS)
.where(USERS.LOGIN.eq(login)).fetchOptional(REPORT_PORTAL_USER_MAPPER);
}

@Override
public Optional<ReportPortalUser> findReportPortalUser(Long userId) {
return dsl.select(USERS.ID, USERS.LOGIN, USERS.PASSWORD, USERS.ROLE, USERS.EMAIL).from(USERS)
return dsl.select(USERS.ID, USERS.LOGIN, USERS.PASSWORD, USERS.ROLE, USERS.EMAIL, USERS.ACTIVE).from(USERS)
.where(USERS.ID.eq(userId)).fetchOptional(REPORT_PORTAL_USER_MAPPER);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -359,6 +359,7 @@ public class RecordMappers {
};

public static final RecordMapper<Record, ReportPortalUser> REPORT_PORTAL_USER_MAPPER = r -> ReportPortalUser.userBuilder()
.withActive(r.get(USERS.ACTIVE))
.withUserName(r.get(USERS.LOGIN))
.withPassword(ofNullable(r.get(USERS.PASSWORD)).orElse(""))
.withAuthorities(Collections.emptyList())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -373,6 +373,7 @@ record -> users.computeIfAbsent(record.get(USERS.ID), key -> record.map(USER_MAP
if (!CollectionUtils.isEmpty(records)) {
ReportPortalUser user = ReportPortalUser.userBuilder()
.withUserName(records.get(0).get(USERS.LOGIN))
.withActive(records.get(0).get(USERS.ACTIVE))
.withPassword(ofNullable(records.get(0).get(USERS.PASSWORD)).orElse(""))
.withAuthorities(Collections.emptyList())
.withUserId(records.get(0).get(USERS.ID))
Expand Down
Loading

0 comments on commit ee8ed26

Please sign in to comment.