From a97976296b977c058d584c9e4af6a53fb5d23590 Mon Sep 17 00:00:00 2001 From: sgiannopoulos Date: Fri, 17 Nov 2023 19:01:44 +0200 Subject: [PATCH] user refactor --- .../authorization/AuthorizationFlags.java | 4 +- .../eu/eudat/authorization/Permission.java | 7 + .../eudat/commons/enums/ContactInfoType.java | 30 ++ .../eudat/commons/lock/LockByKeyManager.java | 58 +++ .../types/user/AdditionalInfoEntity.java | 40 ++ .../java/eu/eudat/data/CredentialEntity.java | 186 --------- .../eu/eudat/data/UserContactInfoEntity.java | 95 +++++ .../eu/eudat/data/UserCredentialEntity.java | 84 ++++ .../main/java/eu/eudat/data/UserEntity.java | 116 ++++++ .../java/eu/eudat/data/UserRoleEntity.java | 84 ++++ .../enums/ContactInfoTypeConverter.java | 12 + .../eu/eudat/data/old/DataRepository.java | 7 +- .../eu/eudat/data/old/ExternalDataset.java | 7 +- .../java/eu/eudat/data/old/FileUpload.java | 9 +- .../main/java/eu/eudat/data/old/Funder.java | 7 +- .../main/java/eu/eudat/data/old/Grant.java | 9 +- .../java/eu/eudat/data/old/Invitation.java | 7 +- .../src/main/java/eu/eudat/data/old/Lock.java | 7 +- .../java/eu/eudat/data/old/Notification.java | 7 +- .../main/java/eu/eudat/data/old/Project.java | 9 +- .../main/java/eu/eudat/data/old/Registry.java | 7 +- .../java/eu/eudat/data/old/Researcher.java | 8 +- .../main/java/eu/eudat/data/old/Service.java | 7 +- .../main/java/eu/eudat/data/old/UserInfo.java | 230 ----------- .../main/java/eu/eudat/data/old/UserRole.java | 67 ---- .../src/main/java/eu/eudat/model/DmpUser.java | 8 +- .../java/eu/eudat/model/PublicDmpUser.java | 6 +- .../{PublicUserInfo.java => PublicUser.java} | 2 +- .../src/main/java/eu/eudat/model/User.java | 129 ++++++ .../eu/eudat/model/UserAdditionalInfo.java | 52 +++ .../java/eu/eudat/model/UserContactInfo.java | 75 ++++ .../java/eu/eudat/model/UserCredential.java | 51 +++ .../main/java/eu/eudat/model/UserRole.java | 52 +++ .../eudat/model/builder/DmpUserBuilder.java | 14 +- .../model/builder/PublicDmpUserBuilder.java | 5 +- .../model/censorship/PublicDmpUserCensor.java | 5 +- ...rInfoCensor.java => PublicUserCensor.java} | 12 +- .../censorship/UserAdditionalInfoCensor.java | 42 ++ .../eu/eudat/model/censorship/UserCensor.java | 58 +++ .../censorship/UserContactInfoCensor.java | 46 +++ .../censorship/UserCredentialCensor.java | 46 +++ .../model/censorship/UserRoleCensor.java | 48 +++ .../mapper/deposit/DMPToDepositMapper.java | 7 +- .../deposit/DmpEntityDepositMapper.java | 7 +- .../java/eu/eudat/query/CredentialQuery.java | 125 ------ .../java/eu/eudat/query/DescriptionQuery.java | 1 + .../eudat/query/DescriptionTemplateQuery.java | 1 + .../query/DescriptionTemplateTypeQuery.java | 3 + .../eu/eudat/query/DmpBlueprintQuery.java | 3 + .../query/DmpDescriptionTemplateQuery.java | 2 + .../main/java/eu/eudat/query/DmpQuery.java | 1 + .../java/eu/eudat/query/EntityDoiQuery.java | 3 + .../java/eu/eudat/query/ReferenceQuery.java | 2 + .../main/java/eu/eudat/query/TagQuery.java | 1 + .../eu/eudat/query/UserContactInfoQuery.java | 236 +++++++++++ .../eu/eudat/query/UserCredentialQuery.java | 193 +++++++++ .../main/java/eu/eudat/query/UserQuery.java | 188 +++++++++ .../java/eu/eudat/query/UserRoleQuery.java | 192 +++++++++ .../query/lookup/UserContantInfoLookup.java | 72 ++++ .../query/lookup/UserCredentialLookup.java | 63 +++ .../eu/eudat/query/lookup/UserLookup.java | 69 ++++ .../eu/eudat/query/lookup/UserRoleLookup.java | 64 +++ .../description/DescriptionServiceImpl.java | 2 +- .../DescriptionTemplateServiceImpl.java | 16 +- .../DescriptionTemplateTypeServiceImpl.java | 2 +- .../eu/eudat/service/dmp/DmpServiceImpl.java | 6 +- .../dmpblueprint/DmpBlueprintServiceImpl.java | 6 +- .../entitydoi/EntityDoiServiceImpl.java | 2 +- .../ReferenceTypeServiceImpl.java | 2 +- .../SupportiveMaterialServiceImpl.java | 4 +- .../settings/UserSettingsServiceImpl.java | 2 +- .../DatasetWizardUserDmpCriteria.java | 8 +- .../eudat/data/dao/criteria/LockCriteria.java | 8 +- .../data/dao/criteria/UserInfoCriteria.java | 4 +- .../data/dao/criteria/UserRoleCriteria.java | 4 +- .../eu/eudat/data/dao/entities/DMPDao.java | 4 +- .../eudat/data/dao/entities/DMPDaoImpl.java | 4 +- .../eudat/data/dao/entities/DatasetDao.java | 4 +- .../data/dao/entities/DatasetDaoImpl.java | 5 +- .../eu/eudat/data/dao/entities/FunderDao.java | 4 +- .../data/dao/entities/FunderDaoImpl.java | 4 +- .../eu/eudat/data/dao/entities/GrantDao.java | 4 +- .../eudat/data/dao/entities/GrantDaoImpl.java | 4 +- .../data/dao/entities/OrganisationDao.java | 4 +- .../dao/entities/OrganisationDaoImpl.java | 4 +- .../eudat/data/dao/entities/ProjectDao.java | 4 +- .../data/dao/entities/ProjectDaoImpl.java | 4 +- .../eudat/data/dao/entities/UserInfoDao.java | 8 +- .../data/dao/entities/UserInfoDaoImpl.java | 30 +- .../eudat/data/dao/entities/UserRoleDao.java | 10 +- .../data/dao/entities/UserRoleDaoImpl.java | 34 +- .../dao/entities/security/CredentialDao.java | 6 +- .../entities/security/CredentialDaoImpl.java | 28 +- .../item/userinfo/UserInfoRequestItem.java | 8 +- .../userinfo/UserInfoTableRequestItem.java | 10 +- .../main/java/eu/eudat/query/DMPQuery.java | 10 +- .../eu/eudat/query/DatasetProfileQuery.java | 8 +- .../main/java/eu/eudat/query/GrantQuery.java | 10 +- .../main/java/eu/eudat/query/LockQuery.java | 10 +- .../{UserQuery.java => UserQueryOld.java} | 12 +- .../controllers/DashBoardController.java | 1 - .../eu/eudat/controllers/FileController.java | 3 +- .../controllers/ManagementController.java | 2 - .../controllers/v2/DescriptionController.java | 6 +- .../v2/DescriptionTemplateController.java | 8 +- .../v2/DescriptionTemplateTypeController.java | 8 +- .../v2/DmpBlueprintController.java | 17 +- .../eudat/controllers/v2/DmpController.java | 8 +- .../controllers/v2/EntityDoiController.java | 8 +- .../controllers/v2/ReferenceController.java | 8 +- .../v2/ReferenceTypeController.java | 8 +- .../v2/SupportiveMaterialController.java | 10 +- .../v2/UserSettingsController.java | 8 +- .../java/eu/eudat/criteria/UserCriteria.java | 6 +- .../eudat/interceptors/UserInterceptor.java | 371 ++++++++++-------- .../UserInterceptorCacheService.java | 29 +- .../builders/entity/UserInfoBuilder.java | 80 +--- .../builders/entity/UserRoleBuilder.java | 22 +- .../builders/model/models/GrantBuilder.java | 6 +- .../builders/model/models/ProjectBuilder.java | 6 +- .../logic/managers/ContactEmailManager.java | 8 +- .../logic/managers/DashBoardManager.java | 10 +- .../managers/DataManagementPlanManager.java | 45 +-- .../eudat/logic/managers/DatasetManager.java | 14 +- .../logic/managers/DatasetWizardManager.java | 4 +- .../managers/EmailConfirmationManager.java | 38 +- .../eu/eudat/logic/managers/FileManager.java | 4 +- .../eudat/logic/managers/FunderManager.java | 4 +- .../eu/eudat/logic/managers/GrantManager.java | 7 +- .../logic/managers/InvitationsManager.java | 32 +- .../MergeEmailConfirmationManager.java | 43 +- .../logic/managers/NotificationManager.java | 8 +- .../logic/managers/OrganisationsManager.java | 6 +- .../eudat/logic/managers/ProjectManager.java | 4 +- .../logic/managers/QuickWizardManager.java | 15 +- .../UnlinkEmailConfirmationManager.java | 29 +- .../eu/eudat/logic/managers/UserManager.java | 47 +-- .../services/references/ReferenceService.java | 10 +- .../utilities/ConfirmationEmailService.java | 6 +- .../ConfirmationEmailServiceImpl.java | 8 +- .../services/utilities/InvitationService.java | 5 +- .../utilities/InvitationServiceImpl.java | 9 +- .../datarepository/DataRepositoryModel.java | 4 +- .../externaldataset/ExternalDatasetModel.java | 4 +- .../eu/eudat/models/data/grant/Grant.java | 8 +- .../models/data/grant/GrantListingModel.java | 9 +- .../models/data/license/LicenseModel.java | 4 +- .../listingmodels/UserInfoListingModel.java | 14 +- .../eu/eudat/models/data/project/Project.java | 8 +- .../data/publication/PublicationModel.java | 4 +- .../data/rda/ContactRDAExportModel.java | 6 +- .../rda/DmpContributorRDAExportModel.java | 6 +- .../models/data/registries/RegistryModel.java | 4 +- .../models/data/services/ServiceModel.java | 4 +- .../models/data/taxonomy/TaxonomyModel.java | 4 +- .../eudat/models/data/userinfo/UserInfo.java | 75 +--- .../userinfo/UserInfoInvitationModel.java | 21 +- .../data/userinfo/UserListingModel.java | 88 ++--- .../models/data/userinfo/UserProfile.java | 40 +- .../models/rda/mapper/ContactRDAMapper.java | 19 +- .../main/java/eu/eudat/models/v2/Account.java | 6 +- .../eu/eudat/models/v2/AccountBuilder.java | 19 +- .../models/user/UserInfoPublicModel.java | 14 +- .../main/java/eu/eudat/types/Authorities.java | 40 -- .../web/src/main/resources/config/cache.yml | 6 +- .../src/main/resources/config/permissions.yml | 20 + .../src/app/core/common/enum/app-role.ts | 8 +- .../dataset-wizard.component.ts | 6 +- 168 files changed, 3061 insertions(+), 1638 deletions(-) create mode 100644 dmp-backend/core/src/main/java/eu/eudat/commons/enums/ContactInfoType.java create mode 100644 dmp-backend/core/src/main/java/eu/eudat/commons/lock/LockByKeyManager.java create mode 100644 dmp-backend/core/src/main/java/eu/eudat/commons/types/user/AdditionalInfoEntity.java delete mode 100644 dmp-backend/core/src/main/java/eu/eudat/data/CredentialEntity.java create mode 100644 dmp-backend/core/src/main/java/eu/eudat/data/UserContactInfoEntity.java create mode 100644 dmp-backend/core/src/main/java/eu/eudat/data/UserCredentialEntity.java create mode 100644 dmp-backend/core/src/main/java/eu/eudat/data/UserEntity.java create mode 100644 dmp-backend/core/src/main/java/eu/eudat/data/UserRoleEntity.java create mode 100644 dmp-backend/core/src/main/java/eu/eudat/data/converters/enums/ContactInfoTypeConverter.java delete mode 100644 dmp-backend/core/src/main/java/eu/eudat/data/old/UserInfo.java delete mode 100644 dmp-backend/core/src/main/java/eu/eudat/data/old/UserRole.java rename dmp-backend/core/src/main/java/eu/eudat/model/{PublicUserInfo.java => PublicUser.java} (92%) create mode 100644 dmp-backend/core/src/main/java/eu/eudat/model/User.java create mode 100644 dmp-backend/core/src/main/java/eu/eudat/model/UserAdditionalInfo.java create mode 100644 dmp-backend/core/src/main/java/eu/eudat/model/UserContactInfo.java create mode 100644 dmp-backend/core/src/main/java/eu/eudat/model/UserCredential.java create mode 100644 dmp-backend/core/src/main/java/eu/eudat/model/UserRole.java rename dmp-backend/core/src/main/java/eu/eudat/model/censorship/{PublicUserInfoCensor.java => PublicUserCensor.java} (78%) create mode 100644 dmp-backend/core/src/main/java/eu/eudat/model/censorship/UserAdditionalInfoCensor.java create mode 100644 dmp-backend/core/src/main/java/eu/eudat/model/censorship/UserCensor.java create mode 100644 dmp-backend/core/src/main/java/eu/eudat/model/censorship/UserContactInfoCensor.java create mode 100644 dmp-backend/core/src/main/java/eu/eudat/model/censorship/UserCredentialCensor.java create mode 100644 dmp-backend/core/src/main/java/eu/eudat/model/censorship/UserRoleCensor.java delete mode 100644 dmp-backend/core/src/main/java/eu/eudat/query/CredentialQuery.java create mode 100644 dmp-backend/core/src/main/java/eu/eudat/query/UserContactInfoQuery.java create mode 100644 dmp-backend/core/src/main/java/eu/eudat/query/UserCredentialQuery.java create mode 100644 dmp-backend/core/src/main/java/eu/eudat/query/UserQuery.java create mode 100644 dmp-backend/core/src/main/java/eu/eudat/query/UserRoleQuery.java create mode 100644 dmp-backend/core/src/main/java/eu/eudat/query/lookup/UserContantInfoLookup.java create mode 100644 dmp-backend/core/src/main/java/eu/eudat/query/lookup/UserCredentialLookup.java create mode 100644 dmp-backend/core/src/main/java/eu/eudat/query/lookup/UserLookup.java create mode 100644 dmp-backend/core/src/main/java/eu/eudat/query/lookup/UserRoleLookup.java rename dmp-backend/data/src/main/java/eu/eudat/query/{UserQuery.java => UserQueryOld.java} (54%) delete mode 100644 dmp-backend/web/src/main/java/eu/eudat/types/Authorities.java diff --git a/dmp-backend/core/src/main/java/eu/eudat/authorization/AuthorizationFlags.java b/dmp-backend/core/src/main/java/eu/eudat/authorization/AuthorizationFlags.java index e519cf260..afb9654b0 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/authorization/AuthorizationFlags.java +++ b/dmp-backend/core/src/main/java/eu/eudat/authorization/AuthorizationFlags.java @@ -3,6 +3,6 @@ package eu.eudat.authorization; import java.util.EnumSet; public enum AuthorizationFlags { - None, Permission, DmpAssociated, Public; - public static final EnumSet OwnerOrPermissionOrMemberOrPublic = EnumSet.of(DmpAssociated, Permission, Public); + None, Permission, DmpAssociated, Public, Owner; + public static final EnumSet OwnerOrDmpAssociatedOrPermissionOrPublic = EnumSet.of(DmpAssociated, Permission, Public, Owner); } diff --git a/dmp-backend/core/src/main/java/eu/eudat/authorization/Permission.java b/dmp-backend/core/src/main/java/eu/eudat/authorization/Permission.java index fec9a1da9..bd2b828c1 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/authorization/Permission.java +++ b/dmp-backend/core/src/main/java/eu/eudat/authorization/Permission.java @@ -40,6 +40,13 @@ public final class Permission { public static String CreateNewVersionDescriptionTemplate = "CreateNewVersionDescriptionTemplate"; public static String ImportDescriptionTemplate = "ImportDescriptionTemplate"; public static String ExportDescriptionTemplate = "ExportDescriptionTemplate"; + + + + //User + public static String BrowseUser = "BrowseUser"; + public static String EditUser = "EditUser"; + public static String DeleteUser = "DeleteUser"; //DescriptionTemplateType public static String BrowseDescriptionTemplateType = "BrowseDescriptionTemplateType"; diff --git a/dmp-backend/core/src/main/java/eu/eudat/commons/enums/ContactInfoType.java b/dmp-backend/core/src/main/java/eu/eudat/commons/enums/ContactInfoType.java new file mode 100644 index 000000000..f2a0fa1d8 --- /dev/null +++ b/dmp-backend/core/src/main/java/eu/eudat/commons/enums/ContactInfoType.java @@ -0,0 +1,30 @@ +package eu.eudat.commons.enums; + +import com.fasterxml.jackson.annotation.JsonValue; +import eu.eudat.data.converters.enums.DatabaseEnum; + +import java.util.Map; + +public enum ContactInfoType implements DatabaseEnum { + + Email((short) 0); + + private final Short value; + + ContactInfoType(Short value) { + this.value = value; + } + + @Override + @JsonValue + public Short getValue() { + return value; + } + + private static final Map map = EnumUtils.getEnumValueMap(ContactInfoType.class); + + public static ContactInfoType of(Short i) { + return map.get(i); + } + +} diff --git a/dmp-backend/core/src/main/java/eu/eudat/commons/lock/LockByKeyManager.java b/dmp-backend/core/src/main/java/eu/eudat/commons/lock/LockByKeyManager.java new file mode 100644 index 000000000..6f8e322e3 --- /dev/null +++ b/dmp-backend/core/src/main/java/eu/eudat/commons/lock/LockByKeyManager.java @@ -0,0 +1,58 @@ +package eu.eudat.commons.lock; + +import org.springframework.stereotype.Service; + +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.locks.ReentrantLock; + +@Service +public class LockByKeyManager { + + private static class LockWrapper { + private final ReentrantLock lock = new ReentrantLock(); + private final AtomicInteger numberOfThreadsInQueue = new AtomicInteger(1); + + private LockWrapper addThreadInQueue() { + numberOfThreadsInQueue.incrementAndGet(); + return this; + } + + private int removeThreadFromQueue() { + return numberOfThreadsInQueue.decrementAndGet(); + } + + } + + private static ConcurrentHashMap locks = new ConcurrentHashMap(); + + public void lock(String key) { + LockWrapper lockWrapper = locks.compute(key, (k, v) -> v == null ? new LockWrapper() : v.addThreadInQueue()); + lockWrapper.lock.lock(); + } + + public boolean tryLock(String key, long timeout, TimeUnit unit) throws InterruptedException { + LockWrapper lockWrapper = null; + try { + lockWrapper = locks.compute(key, (k, v) -> v == null ? new LockWrapper() : v.addThreadInQueue()); + return lockWrapper.lock.tryLock(timeout, unit); + } catch (Exception ex){ + if (lockWrapper != null && lockWrapper.removeThreadFromQueue() == 0) { + // NB : We pass in the specific value to remove to handle the case where another thread would queue right before the removal + locks.remove(key, lockWrapper); + } + throw ex; + } + } + + public void unlock(String key) { + LockWrapper lockWrapper = locks.get(key); + lockWrapper.lock.unlock(); + if (lockWrapper.removeThreadFromQueue() == 0) { + // NB : We pass in the specific value to remove to handle the case where another thread would queue right before the removal + locks.remove(key, lockWrapper); + } + } + +} diff --git a/dmp-backend/core/src/main/java/eu/eudat/commons/types/user/AdditionalInfoEntity.java b/dmp-backend/core/src/main/java/eu/eudat/commons/types/user/AdditionalInfoEntity.java new file mode 100644 index 000000000..fd45eb24b --- /dev/null +++ b/dmp-backend/core/src/main/java/eu/eudat/commons/types/user/AdditionalInfoEntity.java @@ -0,0 +1,40 @@ +package eu.eudat.commons.types.user; + +public class AdditionalInfoEntity { + private String avatarUrl; + private String timezone; + private String culture; + private String language; + + public String getAvatarUrl() { + return avatarUrl; + } + + public void setAvatarUrl(String avatarUrl) { + this.avatarUrl = avatarUrl; + } + + public String getTimezone() { + return timezone; + } + + public void setTimezone(String timezone) { + this.timezone = timezone; + } + + public String getCulture() { + return culture; + } + + public void setCulture(String culture) { + this.culture = culture; + } + + public String getLanguage() { + return language; + } + + public void setLanguage(String language) { + this.language = language; + } +} diff --git a/dmp-backend/core/src/main/java/eu/eudat/data/CredentialEntity.java b/dmp-backend/core/src/main/java/eu/eudat/data/CredentialEntity.java deleted file mode 100644 index 062ac9029..000000000 --- a/dmp-backend/core/src/main/java/eu/eudat/data/CredentialEntity.java +++ /dev/null @@ -1,186 +0,0 @@ -package eu.eudat.data; - -import eu.eudat.commons.enums.ProviderType; -import eu.eudat.commons.enums.IsActive; -import eu.eudat.data.converters.DateToUTCConverter; - -import eu.eudat.data.converters.enums.ProviderTypeConverter; -import eu.eudat.data.converters.enums.IsActiveConverter; -import eu.eudat.data.old.helpers.EntityBinder; -import eu.eudat.data.old.queryableentity.DataEntity; -import jakarta.persistence.*; -import java.util.Date; -import java.util.List; -import java.util.UUID; - - -@Entity -@Table(name = "\"Credential\"") -//@NamedEntityGraphs({ -// @NamedEntityGraph( -// name = "credentialUserInfo", -// attributeNodes = {@NamedAttributeNode("userInfo")}) -//}) -public class CredentialEntity implements DataEntity { - - @Id - @Column(name = "\"Id\"", updatable = false, nullable = false, columnDefinition = "BINARY(16)") - private UUID id; - public final static String _id = "id"; - - @Column(name = "\"UserId\"", columnDefinition = "uuid", nullable = false) - private UUID userId; - public final static String _userId = "userId"; - - @Column(name = "\"Status\"", nullable = false) - @Convert(converter = IsActiveConverter.class) - private IsActive isActive; - public final static String _isActive = "isActive"; - - @Column(name = "\"Provider\"", nullable = false) - @Convert(converter = ProviderTypeConverter.class) - private ProviderType provider; - public final static String _provider = "provider"; - - @Column(name = "\"Public\"", nullable = false) - private String publicValue; - public final static String _publicValue = "public"; - - @Column(name = "\"Email\"") - private String email; - public final static String _email = "email"; - - @Column(name = "\"Secret\"", nullable = false) - private String secret; - public final static String _secret = "secret"; - - @Column(name = "\"CreationTime\"", nullable = false) - @Convert(converter = DateToUTCConverter.class) - private Date creationTime; - public final static String _creationTime = "creationTime"; - - @Column(name = "\"LastUpdateTime\"", nullable = false) - @Convert(converter = DateToUTCConverter.class) - private Date lastUpdateTime; - public final static String _lastUpdateTime = "lastUpdateTime"; - - @Column(name = "\"ExternalId\"", nullable = false) - private String externalId; - public final static String _externalId = "externalId"; - - public UUID getId() { - return id; - } - - public void setId(UUID id) { - this.id = id; - } - - public UUID getUserId() { - return userId; - } - - public void setUserId(UUID userId) { - this.userId = userId; - } - - public IsActive getIsActive() { - return isActive; - } - - public void setIsActive(IsActive isActive) { - this.isActive = isActive; - } - - public ProviderType getProvider() { - return provider; - } - - public void setProvider(ProviderType provider) { - this.provider = provider; - } - - public String getPublicValue() { - return publicValue; - } - - public void setPublicValue(String publicValue) { - this.publicValue = publicValue; - } - - public String getEmail() { - return email; - } - - public void setEmail(String email) { - this.email = email; - } - - public String getSecret() { - return secret; - } - - public void setSecret(String secret) { - this.secret = secret; - } - - public Date getCreationTime() { - return creationTime; - } - - public void setCreationTime(Date creationTime) { - this.creationTime = creationTime; - } - - public Date getLastUpdateTime() { - return lastUpdateTime; - } - - public void setLastUpdateTime(Date lastUpdateTime) { - this.lastUpdateTime = lastUpdateTime; - } - - public String getExternalId() { - return externalId; - } - - public void setExternalId(String externalId) { - this.externalId = externalId; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - CredentialEntity that = (CredentialEntity) o; - - return provider.getValue() == that.provider.getValue(); - } - - @Override - public int hashCode() { - return provider.getValue(); - } - - @Override - public void update(CredentialEntity entity) { - this.isActive = entity.isActive; - this.publicValue = entity.getPublicValue(); - this.email = entity.getEmail(); - this.secret = entity.getSecret(); - this.lastUpdateTime = new Date(); - } - - @Override - public UUID getKeys() { - return this.id; - } - - @Override - public CredentialEntity buildFromTuple(List tuple, List fields, String base) { - String currentBase = base.isEmpty() ? "" : base + "."; - if (fields.contains(currentBase + "id")) this.id = EntityBinder.fromTuple(tuple, currentBase + "id"); - return this; - } -} diff --git a/dmp-backend/core/src/main/java/eu/eudat/data/UserContactInfoEntity.java b/dmp-backend/core/src/main/java/eu/eudat/data/UserContactInfoEntity.java new file mode 100644 index 000000000..b4c0beecf --- /dev/null +++ b/dmp-backend/core/src/main/java/eu/eudat/data/UserContactInfoEntity.java @@ -0,0 +1,95 @@ +package eu.eudat.data; + +import eu.eudat.commons.enums.ContactInfoType; +import eu.eudat.commons.enums.DescriptionStatus; +import eu.eudat.data.converters.enums.ContactInfoTypeConverter; +import eu.eudat.data.converters.enums.DescriptionStatusConverter; +import eu.eudat.data.old.helpers.EntityBinder; +import eu.eudat.data.old.queryableentity.DataEntity; +import jakarta.persistence.*; + +import java.time.Instant; +import java.util.List; +import java.util.UUID; + + +@Entity +@Table(name = "\"UserContactInfo\"") +public class UserContactInfoEntity { + @Id + @Column(name = "id", columnDefinition = "uuid", updatable = false, nullable = false) + private UUID id; + public static final String _id = "id"; + + @Column(name = "\"user\"", nullable = false) + private UUID userId; + public static final String _userId = "userId"; + + @Column(name = "\"ordinal\"", nullable = false) + private Integer ordinal; + public static final String _ordinal = "ordinal"; + + @Column(name = "type", nullable = false) + @Convert(converter = ContactInfoTypeConverter.class) + private ContactInfoType type; + public static final String _type = "type"; + + @Column(name = "value", length = UserContactInfoEntity._valueLength, nullable = false) + private String value; + public static final int _valueLength = 512; + + public static final String _value = "value"; + + @Column(name = "created_at", nullable = false) + private Instant createdAt; + + public static final String _createdAt = "createdAt"; + + public UUID getId() { + return id; + } + + public void setId(UUID id) { + this.id = id; + } + + public UUID getUserId() { + return userId; + } + + public void setUserId(UUID userId) { + this.userId = userId; + } + + public Instant getCreatedAt() { + return createdAt; + } + + public void setCreatedAt(Instant createdAt) { + this.createdAt = createdAt; + } + + public ContactInfoType getType() { + return type; + } + + public void setType(ContactInfoType type) { + this.type = type; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + public Integer getOrdinal() { + return ordinal; + } + + public void setOrdinal(Integer ordinal) { + this.ordinal = ordinal; + } +} diff --git a/dmp-backend/core/src/main/java/eu/eudat/data/UserCredentialEntity.java b/dmp-backend/core/src/main/java/eu/eudat/data/UserCredentialEntity.java new file mode 100644 index 000000000..eafc129cb --- /dev/null +++ b/dmp-backend/core/src/main/java/eu/eudat/data/UserCredentialEntity.java @@ -0,0 +1,84 @@ +package eu.eudat.data; + +import eu.eudat.data.old.helpers.EntityBinder; +import eu.eudat.data.old.queryableentity.DataEntity; +import jakarta.persistence.*; + +import java.time.Instant; +import java.util.List; +import java.util.UUID; + + +@Entity +@Table(name = "\"UserCredential\"") +public class UserCredentialEntity implements DataEntity { + + @Id + @Column(name = "id", columnDefinition = "uuid", updatable = false, nullable = false) + private UUID id; + public final static String _id = "id"; + + @Column(name = "\"user\"", columnDefinition = "uuid", nullable = false) + private UUID userId; + public final static String _userId = "userId"; + + @Column(name = "\"external_id\"", length = UserCredentialEntity._externalIdLength, nullable = false) + private String externalId; + public final static String _externalId = "externalId"; + public final static int _externalIdLength = 512; + + @Column(name = "created_at", nullable = false) + private Instant createdAt; + + public static final String _createdAt = "createdAt"; + + public UUID getId() { + return id; + } + + public void setId(UUID id) { + this.id = id; + } + + public UUID getUserId() { + return userId; + } + + public void setUserId(UUID userId) { + this.userId = userId; + } + + public String getExternalId() { + return externalId; + } + + public void setExternalId(String externalId) { + this.externalId = externalId; + } + + public Instant getCreatedAt() { + return createdAt; + } + + public void setCreatedAt(Instant createdAt) { + this.createdAt = createdAt; + } + + + @Override + public void update(UserCredentialEntity entity) { + this.externalId = entity.getExternalId(); + } + + @Override + public UUID getKeys() { + return this.id; + } + + @Override + public UserCredentialEntity buildFromTuple(List tuple, List fields, String base) { + String currentBase = base.isEmpty() ? "" : base + "."; + if (fields.contains(currentBase + "id")) this.id = EntityBinder.fromTuple(tuple, currentBase + "id"); + return this; + } +} diff --git a/dmp-backend/core/src/main/java/eu/eudat/data/UserEntity.java b/dmp-backend/core/src/main/java/eu/eudat/data/UserEntity.java new file mode 100644 index 000000000..0cee2ccd9 --- /dev/null +++ b/dmp-backend/core/src/main/java/eu/eudat/data/UserEntity.java @@ -0,0 +1,116 @@ +package eu.eudat.data; + +import eu.eudat.commons.enums.IsActive; +import eu.eudat.data.converters.enums.IsActiveConverter; +import eu.eudat.data.old.helpers.EntityBinder; +import eu.eudat.data.old.queryableentity.DataEntity; + +import jakarta.persistence.*; + +import java.time.Instant; +import java.util.*; + + +@Entity +@Table(name = "\"User\"") +public class UserEntity implements DataEntity { + + @Id + @Column(name = "id", columnDefinition = "uuid", updatable = false, nullable = false) + private UUID id; + public final static String _id = "id"; + + @Column(name = "name", length = UserEntity._nameLength, nullable = true) + private String name = null; + public final static String _name = "name"; + public final static int _nameLength = 250; + + + @Column(name = "created_at", nullable = false) + private Instant createdAt; + + public static final String _createdAt = "createdAt"; + + @Column(name = "updated_at", nullable = false) + private Instant updatedAt; + + public static final String _updatedAt = "updatedAt"; + + @Column(name = "is_active", nullable = false) + @Convert(converter = IsActiveConverter.class) + private IsActive isActive; + public static final String _isActive = "isActive"; + + @Column(name = "additional_info", nullable = true) + private String additionalInfo; + public final static String _additionalInfo = "additionalInfo"; + + public UUID getId() { + return id; + } + + public void setId(UUID id) { + this.id = id; + } + + public Instant getCreatedAt() { + return createdAt; + } + + public void setCreatedAt(Instant createdAt) { + this.createdAt = createdAt; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getAdditionalInfo() { + return additionalInfo; + } + + public void setAdditionalInfo(String additionalInfo) { + this.additionalInfo = additionalInfo; + } + + public IsActive getIsActive() { + return isActive; + } + + public void setIsActive(IsActive isActive) { + this.isActive = isActive; + } + + public Instant getUpdatedAt() { + return updatedAt; + } + + public void setUpdatedAt(Instant updatedAt) { + this.updatedAt = updatedAt; + } + + + + + @Override + public void update(UserEntity entity) { + this.name = entity.getName(); + this.additionalInfo = entity.getAdditionalInfo(); + } + + @Override + public UUID getKeys() { + return this.id; + } + + @Override + public UserEntity buildFromTuple(List tuple, List fields, String base) { + String currentBase = base.isEmpty() ? "" : base + "."; + if (fields.contains(currentBase + "id")) this.id = EntityBinder.fromTuple(tuple, currentBase + "id"); + return this; + } +} diff --git a/dmp-backend/core/src/main/java/eu/eudat/data/UserRoleEntity.java b/dmp-backend/core/src/main/java/eu/eudat/data/UserRoleEntity.java new file mode 100644 index 000000000..e43b44985 --- /dev/null +++ b/dmp-backend/core/src/main/java/eu/eudat/data/UserRoleEntity.java @@ -0,0 +1,84 @@ +package eu.eudat.data; + +import eu.eudat.data.old.helpers.EntityBinder; +import eu.eudat.data.old.queryableentity.DataEntity; + +import jakarta.persistence.*; + +import java.time.Instant; +import java.util.List; +import java.util.UUID; + + +@Entity +@Table(name = "\"UserRole\"") +public class UserRoleEntity implements DataEntity { + @Id + @Column(name = "id", columnDefinition = "uuid", updatable = false, nullable = false) + private UUID id; + public static final String _id = "id"; + + @Column(name = "\"role\"", length = UserRoleEntity._roleLength, nullable = false) + private String role; + public static final String _role = "role"; + public static final int _roleLength = 512; + + @Column(name = "\"user\"", nullable = false) + private UUID userId; + public static final String _userId = "userId"; + + + @Column(name = "created_at", nullable = false) + private Instant createdAt; + + public static final String _createdAt = "createdAt"; + + public UUID getId() { + return id; + } + + public void setId(UUID id) { + this.id = id; + } + + public String getRole() { + return role; + } + + public void setRole(String role) { + this.role = role; + } + + public UUID getUserId() { + return userId; + } + + public void setUserId(UUID userId) { + this.userId = userId; + } + + public Instant getCreatedAt() { + return createdAt; + } + + public void setCreatedAt(Instant createdAt) { + this.createdAt = createdAt; + } + + @Override + public void update(UserRoleEntity entity) { + + } + + @Override + public UUID getKeys() { + return this.id; + } + + @Override + public UserRoleEntity buildFromTuple(List tuple, List fields, String base) { + String currentBase = base.isEmpty() ? "" : base + "."; + if (fields.contains(currentBase + "id")) this.id = EntityBinder.fromTuple(tuple, currentBase + "id"); + return this; + } +} diff --git a/dmp-backend/core/src/main/java/eu/eudat/data/converters/enums/ContactInfoTypeConverter.java b/dmp-backend/core/src/main/java/eu/eudat/data/converters/enums/ContactInfoTypeConverter.java new file mode 100644 index 000000000..4d10c75c0 --- /dev/null +++ b/dmp-backend/core/src/main/java/eu/eudat/data/converters/enums/ContactInfoTypeConverter.java @@ -0,0 +1,12 @@ +package eu.eudat.data.converters.enums; + +import eu.eudat.commons.enums.ContactInfoType; +import eu.eudat.commons.enums.DescriptionStatus; +import jakarta.persistence.Converter; + +@Converter +public class ContactInfoTypeConverter extends DatabaseEnumConverter{ + protected ContactInfoType of(Short i) { + return ContactInfoType.of(i); + } +} diff --git a/dmp-backend/core/src/main/java/eu/eudat/data/old/DataRepository.java b/dmp-backend/core/src/main/java/eu/eudat/data/old/DataRepository.java index 1ebe24bad..cbedd066f 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/data/old/DataRepository.java +++ b/dmp-backend/core/src/main/java/eu/eudat/data/old/DataRepository.java @@ -1,6 +1,7 @@ package eu.eudat.data.old; +import eu.eudat.data.UserEntity; import eu.eudat.data.old.helpers.EntityBinder; import eu.eudat.data.old.queryableentity.DataEntity; @@ -44,7 +45,7 @@ public class DataRepository implements Serializable, DataEntity { @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "\"CreationUser\"", nullable = true) - private UserInfo creationUser; + private UserEntity creationUser; public UUID getId() { @@ -82,10 +83,10 @@ public class ExternalDataset implements DataEntity { this.modified = modified; } - public UserInfo getCreationUser() { + public UserEntity getCreationUser() { return creationUser; } - public void setCreationUser(UserInfo creationUser) { + public void setCreationUser(UserEntity creationUser) { this.creationUser = creationUser; } diff --git a/dmp-backend/core/src/main/java/eu/eudat/data/old/FileUpload.java b/dmp-backend/core/src/main/java/eu/eudat/data/old/FileUpload.java index 524c9b804..609a62354 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/data/old/FileUpload.java +++ b/dmp-backend/core/src/main/java/eu/eudat/data/old/FileUpload.java @@ -1,5 +1,6 @@ package eu.eudat.data.old; +import eu.eudat.data.UserEntity; import eu.eudat.data.converters.DateToUTCConverter; import eu.eudat.data.old.helpers.EntityBinder; import eu.eudat.data.old.queryableentity.DataEntity; @@ -43,7 +44,7 @@ public class FileUpload implements DataEntity { @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "\"Creator\"") - private UserInfo creator; + private UserEntity creator; public UUID getId() { return id; @@ -94,10 +95,10 @@ public class FileUpload implements DataEntity { this.isDeleted = isDeleted; } - public UserInfo getCreator() { + public UserEntity getCreator() { return creator; } - public void setCreator(UserInfo creator) { + public void setCreator(UserEntity creator) { this.creator = creator; } @@ -121,7 +122,7 @@ public class FileUpload implements DataEntity { public FileUpload buildFromTuple(List tuple, List fields, String base) { String currentBase = base.isEmpty() ? "" : base + "."; if (fields.contains(currentBase + "id")) this.id = EntityBinder.fromTuple(tuple, currentBase + "id"); - this.creator = tuple.stream().map(x -> new UserInfo().buildFromTuple(tuple, fields , base.isEmpty() ? "creator" : base + "." + "creator")).collect(Collectors.toList()).get(0); + this.creator = tuple.stream().map(x -> new UserEntity().buildFromTuple(tuple, fields , base.isEmpty() ? "creator" : base + "." + "creator")).collect(Collectors.toList()).get(0); return this; } } diff --git a/dmp-backend/core/src/main/java/eu/eudat/data/old/Funder.java b/dmp-backend/core/src/main/java/eu/eudat/data/old/Funder.java index b99a0eeb9..0119da5eb 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/data/old/Funder.java +++ b/dmp-backend/core/src/main/java/eu/eudat/data/old/Funder.java @@ -1,5 +1,6 @@ package eu.eudat.data.old; +import eu.eudat.data.UserEntity; import eu.eudat.data.old.queryableentity.DataEntity; import jakarta.persistence.*; @@ -92,7 +93,7 @@ public class Funder implements DataEntity { @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "\"CreationUser\"", nullable = true) - private UserInfo creationUser; + private UserEntity creationUser; public UUID getId() { @@ -151,10 +152,10 @@ public class Funder implements DataEntity { this.type = type; } - public UserInfo getCreationUser() { + public UserEntity getCreationUser() { return creationUser; } - public void setCreationUser(UserInfo creationUser) { + public void setCreationUser(UserEntity creationUser) { this.creationUser = creationUser; } diff --git a/dmp-backend/core/src/main/java/eu/eudat/data/old/Grant.java b/dmp-backend/core/src/main/java/eu/eudat/data/old/Grant.java index 4ca962b6e..85231dfe0 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/data/old/Grant.java +++ b/dmp-backend/core/src/main/java/eu/eudat/data/old/Grant.java @@ -1,6 +1,7 @@ package eu.eudat.data.old; +import eu.eudat.data.UserEntity; import eu.eudat.data.converters.DateToUTCConverter; import eu.eudat.data.old.helpers.EntityBinder; import eu.eudat.data.old.queryableentity.DataEntity; @@ -116,7 +117,7 @@ public class Grant implements DataEntity { @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "\"CreationUser\"", nullable = true) - private UserInfo creationUser; + private UserEntity creationUser; @Column(name = "\"Created\"") private Date created = null; @@ -236,10 +237,10 @@ public class Grant implements DataEntity { // this.dmps = dmps; // } - public UserInfo getCreationUser() { + public UserEntity getCreationUser() { return creationUser; } - public void setCreationUser(UserInfo creationUser) { + public void setCreationUser(UserEntity creationUser) { this.creationUser = creationUser; } @@ -292,7 +293,7 @@ public class Grant implements DataEntity { // if (fields.contains(currentBase + "dmps")) // this.dmps = tuple.stream().map(x -> new DMP().buildFromTuple(Arrays.asList(x), fields, currentBase + "dmps")).collect(Collectors.toSet()); if (fields.contains(currentBase + "creationUser")) - this.creationUser = tuple.stream().map(x -> new UserInfo().buildFromTuple(Arrays.asList(x), fields, currentBase + "creationUser")).collect(Collectors.toList()).get(0); + this.creationUser = tuple.stream().map(x -> new UserEntity().buildFromTuple(Arrays.asList(x), fields, currentBase + "creationUser")).collect(Collectors.toList()).get(0); return this; } } diff --git a/dmp-backend/core/src/main/java/eu/eudat/data/old/Invitation.java b/dmp-backend/core/src/main/java/eu/eudat/data/old/Invitation.java index 0bc0b1d29..bb90f938d 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/data/old/Invitation.java +++ b/dmp-backend/core/src/main/java/eu/eudat/data/old/Invitation.java @@ -1,5 +1,6 @@ package eu.eudat.data.old; +import eu.eudat.data.UserEntity; import eu.eudat.data.old.helpers.EntityBinder; import eu.eudat.data.old.queryableentity.DataEntity; @@ -22,7 +23,7 @@ public class Invitation implements DataEntity { @OneToOne(fetch = FetchType.EAGER) @JoinColumn(name = "\"CreationUser\"", nullable = false) - private UserInfo user; + private UserEntity user; // @OneToOne(fetch = FetchType.EAGER) // @JoinColumn(name = "\"Dmp\"", nullable = false) @@ -53,11 +54,11 @@ public class Invitation implements DataEntity { this.invitationEmail = invitationEmail; } - public UserInfo getUser() { + public UserEntity getUser() { return user; } - public void setUser(UserInfo user) { + public void setUser(UserEntity user) { this.user = user; } diff --git a/dmp-backend/core/src/main/java/eu/eudat/data/old/Lock.java b/dmp-backend/core/src/main/java/eu/eudat/data/old/Lock.java index 84c397d3c..c1a0b2ba2 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/data/old/Lock.java +++ b/dmp-backend/core/src/main/java/eu/eudat/data/old/Lock.java @@ -1,5 +1,6 @@ package eu.eudat.data.old; +import eu.eudat.data.UserEntity; import eu.eudat.data.converters.DateToUTCConverter; import eu.eudat.data.old.helpers.EntityBinder; import eu.eudat.data.old.queryableentity.DataEntity; @@ -23,7 +24,7 @@ public class Lock implements DataEntity { @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "\"LockedBy\"", nullable = false) - private UserInfo lockedBy; + private UserEntity lockedBy; @Column(name = "\"LockedAt\"") @Convert(converter = DateToUTCConverter.class) @@ -50,11 +51,11 @@ public class Lock implements DataEntity { this.target = target; } - public UserInfo getLockedBy() { + public UserEntity getLockedBy() { return lockedBy; } - public void setLockedBy(UserInfo lockedBy) { + public void setLockedBy(UserEntity lockedBy) { this.lockedBy = lockedBy; } diff --git a/dmp-backend/core/src/main/java/eu/eudat/data/old/Notification.java b/dmp-backend/core/src/main/java/eu/eudat/data/old/Notification.java index 2131ec35d..0a3ed6ee5 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/data/old/Notification.java +++ b/dmp-backend/core/src/main/java/eu/eudat/data/old/Notification.java @@ -4,6 +4,7 @@ import eu.eudat.commons.enums.old.notification.ActiveStatus; import eu.eudat.commons.enums.old.notification.ContactType; import eu.eudat.commons.enums.old.notification.NotificationType; import eu.eudat.commons.enums.old.notification.NotifyState; +import eu.eudat.data.UserEntity; import eu.eudat.data.old.queryableentity.DataEntity; import jakarta.persistence.*; @@ -22,7 +23,7 @@ public class Notification implements DataEntity { @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "\"UserId\"") - private UserInfo userId; + private UserEntity userId; @Enumerated @Column(name = "\"IsActive\"", nullable = false) @@ -67,11 +68,11 @@ public class Notification implements DataEntity { this.id = id; } - public UserInfo getUserId() { + public UserEntity getUserId() { return userId; } - public void setUserId(UserInfo userId) { + public void setUserId(UserEntity userId) { this.userId = userId; } diff --git a/dmp-backend/core/src/main/java/eu/eudat/data/old/Project.java b/dmp-backend/core/src/main/java/eu/eudat/data/old/Project.java index 130b4c28d..b2c211140 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/data/old/Project.java +++ b/dmp-backend/core/src/main/java/eu/eudat/data/old/Project.java @@ -1,5 +1,6 @@ package eu.eudat.data.old; +import eu.eudat.data.UserEntity; import eu.eudat.data.converters.DateToUTCConverter; import eu.eudat.data.old.helpers.EntityBinder; import eu.eudat.data.old.queryableentity.DataEntity; @@ -101,7 +102,7 @@ public class Project implements DataEntity { @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "\"CreationUser\"", nullable = true) - private UserInfo creationUser; + private UserEntity creationUser; @Column(name = "\"Created\"") private Date created = null; @@ -194,10 +195,10 @@ public class Project implements DataEntity { this.status = status; } - public UserInfo getCreationUser() { + public UserEntity getCreationUser() { return creationUser; } - public void setCreationUser(UserInfo creationUser) { + public void setCreationUser(UserEntity creationUser) { this.creationUser = creationUser; } @@ -282,7 +283,7 @@ public class Project implements DataEntity { // if (fields.contains(currentBase + "dmps")) // this.dmps = tuple.stream().map(x -> new DMP().buildFromTuple(Arrays.asList(x), fields, currentBase + "dmps")).collect(Collectors.toSet()); if (fields.contains(currentBase + "creationUser")) - this.creationUser = tuple.stream().map(x -> new UserInfo().buildFromTuple(Arrays.asList(x), fields, currentBase + "creationUser")).collect(Collectors.toList()).get(0); + this.creationUser = tuple.stream().map(x -> new UserEntity().buildFromTuple(Arrays.asList(x), fields, currentBase + "creationUser")).collect(Collectors.toList()).get(0); return this; } } diff --git a/dmp-backend/core/src/main/java/eu/eudat/data/old/Registry.java b/dmp-backend/core/src/main/java/eu/eudat/data/old/Registry.java index 2ef591896..15614a495 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/data/old/Registry.java +++ b/dmp-backend/core/src/main/java/eu/eudat/data/old/Registry.java @@ -2,6 +2,7 @@ package eu.eudat.data.old; import eu.eudat.data.DescriptionEntity; +import eu.eudat.data.UserEntity; import eu.eudat.data.converters.DateToUTCConverter; import eu.eudat.data.old.helpers.EntityBinder; import eu.eudat.data.old.queryableentity.DataEntity; @@ -52,7 +53,7 @@ public class Registry implements DataEntity { @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "\"CreationUser\"", nullable = true) - private UserInfo creationUser; + private UserEntity creationUser; public Short getStatus() { @@ -125,10 +126,10 @@ public class Registry implements DataEntity { this.descriptionEntities = descriptionEntities; } - public UserInfo getCreationUser() { + public UserEntity getCreationUser() { return creationUser; } - public void setCreationUser(UserInfo creationUser) { + public void setCreationUser(UserEntity creationUser) { this.creationUser = creationUser; } diff --git a/dmp-backend/core/src/main/java/eu/eudat/data/old/Researcher.java b/dmp-backend/core/src/main/java/eu/eudat/data/old/Researcher.java index a04e35a30..88a94f094 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/data/old/Researcher.java +++ b/dmp-backend/core/src/main/java/eu/eudat/data/old/Researcher.java @@ -1,6 +1,7 @@ package eu.eudat.data.old; +import eu.eudat.data.UserEntity; import eu.eudat.data.converters.DateToUTCConverter; import eu.eudat.data.old.helpers.EntityBinder; import eu.eudat.data.old.queryableentity.DataEntity; @@ -8,7 +9,6 @@ import eu.eudat.data.old.queryableentity.DataEntity; import jakarta.persistence.*; import java.util.Date; import java.util.List; -import java.util.Set; import java.util.UUID; @@ -58,7 +58,7 @@ public class Researcher implements DataEntity { @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "\"CreationUser\"", nullable = true) - private UserInfo creationUser; + private UserEntity creationUser; public Short getStatus() { return status; @@ -130,10 +130,10 @@ public class Researcher implements DataEntity { // this.dMPs = dMPs; // } - public UserInfo getCreationUser() { + public UserEntity getCreationUser() { return creationUser; } - public void setCreationUser(UserInfo creationUser) { + public void setCreationUser(UserEntity creationUser) { this.creationUser = creationUser; } diff --git a/dmp-backend/core/src/main/java/eu/eudat/data/old/Service.java b/dmp-backend/core/src/main/java/eu/eudat/data/old/Service.java index 61fa36e1e..066b34054 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/data/old/Service.java +++ b/dmp-backend/core/src/main/java/eu/eudat/data/old/Service.java @@ -1,6 +1,7 @@ package eu.eudat.data.old; +import eu.eudat.data.UserEntity; import eu.eudat.data.converters.DateToUTCConverter; import eu.eudat.data.old.queryableentity.DataEntity; @@ -46,7 +47,7 @@ public class Service implements DataEntity { @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "\"CreationUser\"", nullable = true) - private UserInfo creationUser; + private UserEntity creationUser; public Short getStatus() { @@ -112,10 +113,10 @@ public class Service implements DataEntity { this.definition = definition; } - public UserInfo getCreationUser() { + public UserEntity getCreationUser() { return creationUser; } - public void setCreationUser(UserInfo creationUser) { + public void setCreationUser(UserEntity creationUser) { this.creationUser = creationUser; } diff --git a/dmp-backend/core/src/main/java/eu/eudat/data/old/UserInfo.java b/dmp-backend/core/src/main/java/eu/eudat/data/old/UserInfo.java deleted file mode 100644 index e1f5d3b96..000000000 --- a/dmp-backend/core/src/main/java/eu/eudat/data/old/UserInfo.java +++ /dev/null @@ -1,230 +0,0 @@ -package eu.eudat.data.old; - -import eu.eudat.data.CredentialEntity; -import eu.eudat.data.converters.DateToUTCConverter; -import eu.eudat.data.old.helpers.EntityBinder; -import eu.eudat.data.old.queryableentity.DataEntity; - -import jakarta.persistence.*; -import java.util.*; - - -@Entity -@Table(name = "\"UserInfo\"") -@NamedEntityGraphs({ - @NamedEntityGraph( - name = "userInfo", - attributeNodes = {@NamedAttributeNode("userRoles"), @NamedAttributeNode("additionalinfo")}), -}) -public class UserInfo implements DataEntity { - - @Id - @GeneratedValue - @Column(name = "id", updatable = false, nullable = false, columnDefinition = "BINARY(16)") - private UUID id; - public final static String _id = "id"; - - - @Column(name = "email") - private String email = null; - public final static String _email = "email"; - - @Column(name = "authorization_level", nullable = false) - private Short authorization_level; //0 admin, 1 user - public final static String _authorization_level = "authorization_level"; - - @Column(name = "usertype", nullable = false) - private Short usertype; // 0 internal, 1 external - public final static String _usertype = "usertype"; - - @Column(name = "userstatus", nullable = false) - private Short userStatus; // 0 active, 1 inactive - public final static String _userStatus = "userStatus"; - - @Column(name = "verified_email", nullable = true) - private Boolean verified_email = null; - public final static String _verified_email = "verified_email"; - - @Column(name = "name", nullable = true) - private String name = null; - public final static String _name = "name"; - - - @Column(name = "created", nullable = false) - @Convert(converter = DateToUTCConverter.class) - private Date created = null; - public final static String _created = "created"; - - - @Column(name = "lastloggedin", nullable = true) - @Convert(converter = DateToUTCConverter.class) - private Date lastloggedin = null; - public final static String _lastloggedin = "lastloggedin"; - - - @Column(name = "additionalinfo", nullable = true) - private String additionalinfo; - public final static String _additionalinfo = "additionalinfo"; - -// @OneToMany(fetch = FetchType.LAZY) -// @JoinTable(name = "\"UserDMP\"", -// joinColumns = {@JoinColumn(name = "usr", referencedColumnName = "id")}, -// inverseJoinColumns = {@JoinColumn(name = "dmp", referencedColumnName = "\"ID\"")} -// ) -// private Set dmps; - - @OneToMany(fetch = FetchType.LAZY) - @JoinColumn(name = "Id") - private Set credentialEntities = new HashSet<>(); - - @OneToMany(mappedBy = "userInfo", fetch = FetchType.LAZY) - private Set userRoles = new HashSet<>(); - - @OneToMany(mappedBy = "lockedBy", fetch = FetchType.LAZY) - private Set locks = new HashSet<>(); - - @OneToMany(mappedBy = "userId", fetch = FetchType.LAZY) - private Set notifications = new HashSet<>(); - -// public Set getDmps() { -// return dmps; -// } -// -// public void setDmps(Set dmps) { -// this.dmps = dmps; -// } - - public UUID getId() { - return id; - } - - public void setId(UUID id) { - this.id = id; - } - - public Date getCreated() { - return created; - } - - public void setCreated(Date created) { - this.created = created; - } - - public Date getLastloggedin() { - return lastloggedin; - } - - public void setLastloggedin(Date lastloggedin) { - this.lastloggedin = lastloggedin; - } - - public String getEmail() { - return email; - } - - public void setEmail(String email) { - this.email = email; - } - - public Short getAuthorization_level() { - return authorization_level; - } - - public void setAuthorization_level(Short authorization_level) { - this.authorization_level = authorization_level; - } - - public Short getUsertype() { - return usertype; - } - - public void setUsertype(Short usertype) { - this.usertype = usertype; - } - - public Boolean getVerified_email() { - return verified_email; - } - - public void setVerified_email(Boolean verified_email) { - this.verified_email = verified_email; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getAdditionalinfo() { - return additionalinfo; - } - - public void setAdditionalinfo(String additionalinfo) { - this.additionalinfo = additionalinfo; - } - - public Set getCredentials() { - return credentialEntities; - } - - public void setCredentials(Set credentialEntities) { - this.credentialEntities = credentialEntities; - } - - public Set getUserRoles() { - return userRoles; - } - - public void setUserRoles(Set userRoles) { - this.userRoles = userRoles; - } - - public Set getLocks() { - return locks; - } - - public void setLocks(Set locks) { - this.locks = locks; - } - - public Set getNotifications() { - return notifications; - } - - public void setNotifications(Set notifications) { - this.notifications = notifications; - } - - public Short getUserStatus() { - return userStatus; - } - - public void setUserStatus(Short userStatus) { - this.userStatus = userStatus; - } - - @Override - public void update(UserInfo entity) { - this.name = entity.getName(); - this.email = entity.getEmail(); - this.additionalinfo = entity.getAdditionalinfo(); - this.lastloggedin = entity.getLastloggedin(); - this.userRoles = entity.getUserRoles(); - this.userStatus = entity.getUserStatus(); - } - - @Override - public UUID getKeys() { - return this.id; - } - - @Override - public UserInfo buildFromTuple(List tuple, List fields, String base) { - String currentBase = base.isEmpty() ? "" : base + "."; - if (fields.contains(currentBase + "id")) this.id = EntityBinder.fromTuple(tuple, currentBase + "id"); - return this; - } -} diff --git a/dmp-backend/core/src/main/java/eu/eudat/data/old/UserRole.java b/dmp-backend/core/src/main/java/eu/eudat/data/old/UserRole.java deleted file mode 100644 index 719556c1e..000000000 --- a/dmp-backend/core/src/main/java/eu/eudat/data/old/UserRole.java +++ /dev/null @@ -1,67 +0,0 @@ -package eu.eudat.data.old; - -import eu.eudat.data.old.helpers.EntityBinder; -import eu.eudat.data.old.queryableentity.DataEntity; - -import jakarta.persistence.*; -import java.util.List; -import java.util.UUID; - - -@Entity -@Table(name = "\"UserRole\"") -public class UserRole implements DataEntity { - - @Id - @GeneratedValue - @Column(name = "\"Id\"", updatable = false, nullable = false, columnDefinition = "BINARY(16)") - private UUID id; - - @Column(name = "\"Role\"", nullable = false) - private int role; - - @ManyToOne(fetch = FetchType.EAGER) - @JoinColumn(name = "\"UserId\"", nullable = false) - private UserInfo userInfo; - - public UUID getId() { - return id; - } - - public void setId(UUID id) { - this.id = id; - } - - public int getRole() { - return role; - } - - public void setRole(int role) { - this.role = role; - } - - public UserInfo getUserInfo() { - return userInfo; - } - - public void setUserInfo(UserInfo userInfo) { - this.userInfo = userInfo; - } - - @Override - public void update(UserRole entity) { - - } - - @Override - public UUID getKeys() { - return this.id; - } - - @Override - public UserRole buildFromTuple(List tuple, List fields, String base) { - String currentBase = base.isEmpty() ? "" : base + "."; - if (fields.contains(currentBase + "id")) this.id = EntityBinder.fromTuple(tuple, currentBase + "id"); - return this; - } -} diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/DmpUser.java b/dmp-backend/core/src/main/java/eu/eudat/model/DmpUser.java index d2d22b2ca..68edd833d 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/model/DmpUser.java +++ b/dmp-backend/core/src/main/java/eu/eudat/model/DmpUser.java @@ -3,7 +3,7 @@ package eu.eudat.model; import eu.eudat.commons.enums.DmpUserRole; import eu.eudat.commons.enums.IsActive; import eu.eudat.data.converters.enums.IsActiveConverter; -import eu.eudat.data.old.UserInfo; +import eu.eudat.data.UserEntity; import jakarta.persistence.*; import java.time.Instant; @@ -20,7 +20,7 @@ public class DmpUser { public static final String _dmp = "dmp"; @Column(name = "user", columnDefinition = "uuid", nullable = false) - private UserInfo user; + private UserEntity user; public static final String _user = "user"; @@ -60,11 +60,11 @@ public class DmpUser { this.dmp = dmp; } - public UserInfo getUser() { + public UserEntity getUser() { return user; } - public void setUser(UserInfo user) { + public void setUser(UserEntity user) { this.user = user; } diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/PublicDmpUser.java b/dmp-backend/core/src/main/java/eu/eudat/model/PublicDmpUser.java index b8db57b71..e189c9379 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/model/PublicDmpUser.java +++ b/dmp-backend/core/src/main/java/eu/eudat/model/PublicDmpUser.java @@ -14,7 +14,7 @@ public class PublicDmpUser { public static final String _user = "user"; - private PublicUserInfo user; + private PublicUser user; public static final String _role = "role"; @@ -36,11 +36,11 @@ public class PublicDmpUser { this.dmp = dmp; } - public PublicUserInfo getUser() { + public PublicUser getUser() { return user; } - public void setUser(PublicUserInfo user) { + public void setUser(PublicUser user) { this.user = user; } diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/PublicUserInfo.java b/dmp-backend/core/src/main/java/eu/eudat/model/PublicUser.java similarity index 92% rename from dmp-backend/core/src/main/java/eu/eudat/model/PublicUserInfo.java rename to dmp-backend/core/src/main/java/eu/eudat/model/PublicUser.java index b89fa8d9f..7d7739773 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/model/PublicUserInfo.java +++ b/dmp-backend/core/src/main/java/eu/eudat/model/PublicUser.java @@ -3,7 +3,7 @@ package eu.eudat.model; import java.util.UUID; -public class PublicUserInfo { +public class PublicUser { public final static String _id = "id"; private UUID id; diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/User.java b/dmp-backend/core/src/main/java/eu/eudat/model/User.java new file mode 100644 index 000000000..6fd190877 --- /dev/null +++ b/dmp-backend/core/src/main/java/eu/eudat/model/User.java @@ -0,0 +1,129 @@ +package eu.eudat.model; + +import eu.eudat.commons.enums.IsActive; +import eu.eudat.commons.enums.UserSettingsType; + +import java.time.Instant; +import java.util.List; +import java.util.UUID; + +public class User { + + private UUID id; + public static final String _id = "id"; + + private String name; + public static final String _name = "name"; + + private Instant createdAt; + + public static final String _createdAt = "createdAt"; + + private Instant updatedAt; + + public static final String _updatedAt = "updatedAt"; + + private IsActive isActive; + + public static final String _isActive = "isActive"; + + private String hash; + + public static final String _hash = "hash"; + + private UserAdditionalInfo additionalInfo; + + public static final String _additionalInfo = "additionalInfo"; + + private List contacts; + + public static final String _contacts = "contacts"; + + private List roles; + + public static final String _roles = "roles"; + + private List credentials; + + public static final String _credentials = "credentials"; + + public UUID getId() { + return id; + } + + public void setId(UUID id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Instant getCreatedAt() { + return createdAt; + } + + public void setCreatedAt(Instant createdAt) { + this.createdAt = createdAt; + } + + public Instant getUpdatedAt() { + return updatedAt; + } + + public void setUpdatedAt(Instant updatedAt) { + this.updatedAt = updatedAt; + } + + public IsActive getIsActive() { + return isActive; + } + + public void setIsActive(IsActive isActive) { + this.isActive = isActive; + } + + public String getHash() { + return hash; + } + + public void setHash(String hash) { + this.hash = hash; + } + + public UserAdditionalInfo getAdditionalInfo() { + return additionalInfo; + } + + public void setAdditionalInfo(UserAdditionalInfo additionalInfo) { + this.additionalInfo = additionalInfo; + } + + public List getContacts() { + return contacts; + } + + public void setContacts(List contacts) { + this.contacts = contacts; + } + + public List getRoles() { + return roles; + } + + public void setRoles(List roles) { + this.roles = roles; + } + + public List getCredentials() { + return credentials; + } + + public void setCredentials(List credentials) { + this.credentials = credentials; + } +} diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/UserAdditionalInfo.java b/dmp-backend/core/src/main/java/eu/eudat/model/UserAdditionalInfo.java new file mode 100644 index 000000000..c9a1d7128 --- /dev/null +++ b/dmp-backend/core/src/main/java/eu/eudat/model/UserAdditionalInfo.java @@ -0,0 +1,52 @@ +package eu.eudat.model; + +import eu.eudat.commons.enums.ContactInfoType; + +import java.time.Instant; +import java.util.UUID; + +public class UserAdditionalInfo { + private String avatarUrl; + public static final String _avatarUrl = "avatarUrl"; + + private String timezone; + public static final String _timezone = "timezone"; + + private String culture; + public static final String _culture = "culture"; + + private String language; + public static final String _language = "language"; + + public String getAvatarUrl() { + return avatarUrl; + } + + public void setAvatarUrl(String avatarUrl) { + this.avatarUrl = avatarUrl; + } + + public String getTimezone() { + return timezone; + } + + public void setTimezone(String timezone) { + this.timezone = timezone; + } + + public String getCulture() { + return culture; + } + + public void setCulture(String culture) { + this.culture = culture; + } + + public String getLanguage() { + return language; + } + + public void setLanguage(String language) { + this.language = language; + } +} diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/UserContactInfo.java b/dmp-backend/core/src/main/java/eu/eudat/model/UserContactInfo.java new file mode 100644 index 000000000..59690f654 --- /dev/null +++ b/dmp-backend/core/src/main/java/eu/eudat/model/UserContactInfo.java @@ -0,0 +1,75 @@ +package eu.eudat.model; + +import eu.eudat.commons.enums.ContactInfoType; + +import java.time.Instant; +import java.util.UUID; + +public class UserContactInfo { + private UUID id; + public static final String _id = "id"; + + private String value; + public static final String _value = "value"; + + private ContactInfoType type; + public static final String _type = "type"; + + private int ordinal; + public static final String _ordinal = "ordinal"; + + private User user; + public static final String _user = "user"; + + private Instant createdAt; + + public static final String _createdAt = "createdAt"; + + public UUID getId() { + return id; + } + + public void setId(UUID id) { + this.id = id; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + public ContactInfoType getType() { + return type; + } + + public void setType(ContactInfoType type) { + this.type = type; + } + + public int getOrdinal() { + return ordinal; + } + + public void setOrdinal(int ordinal) { + this.ordinal = ordinal; + } + + public User getUser() { + return user; + } + + public void setUser(User user) { + this.user = user; + } + + public Instant getCreatedAt() { + return createdAt; + } + + public void setCreatedAt(Instant createdAt) { + this.createdAt = createdAt; + } +} diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/UserCredential.java b/dmp-backend/core/src/main/java/eu/eudat/model/UserCredential.java new file mode 100644 index 000000000..94adbe697 --- /dev/null +++ b/dmp-backend/core/src/main/java/eu/eudat/model/UserCredential.java @@ -0,0 +1,51 @@ +package eu.eudat.model; + +import java.time.Instant; +import java.util.UUID; + +public class UserCredential { + private UUID id; + public static final String _id = "id"; + + private String externalId; + public static final String _externalId = "externalId"; + + private User user; + public static final String _user = "user"; + + private Instant createdAt; + + public static final String _createdAt = "createdAt"; + + public UUID getId() { + return id; + } + + public void setId(UUID id) { + this.id = id; + } + + public String getExternalId() { + return externalId; + } + + public void setExternalId(String externalId) { + this.externalId = externalId; + } + + public User getUser() { + return user; + } + + public void setUser(User user) { + this.user = user; + } + + public Instant getCreatedAt() { + return createdAt; + } + + public void setCreatedAt(Instant createdAt) { + this.createdAt = createdAt; + } +} diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/UserRole.java b/dmp-backend/core/src/main/java/eu/eudat/model/UserRole.java new file mode 100644 index 000000000..15c327668 --- /dev/null +++ b/dmp-backend/core/src/main/java/eu/eudat/model/UserRole.java @@ -0,0 +1,52 @@ +package eu.eudat.model; + +import java.time.Instant; +import java.util.UUID; + +public class UserRole { + private UUID id; + public static final String _id = "id"; + + private String role; + public static final String _role = "role"; + + private User user; + public static final String _user = "user"; + + private Instant createdAt; + + public static final String _createdAt = "createdAt"; + + public UUID getId() { + return id; + } + + public void setId(UUID id) { + this.id = id; + } + + public String getRole() { + return role; + } + + public void setRole(String role) { + this.role = role; + } + + public User getUser() { + return user; + } + + public void setUser(User user) { + this.user = user; + } + + public Instant getCreatedAt() { + return createdAt; + } + + public void setCreatedAt(Instant createdAt) { + this.createdAt = createdAt; + } +} + diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/builder/DmpUserBuilder.java b/dmp-backend/core/src/main/java/eu/eudat/model/builder/DmpUserBuilder.java index a0d34b4c5..270d3b622 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/model/builder/DmpUserBuilder.java +++ b/dmp-backend/core/src/main/java/eu/eudat/model/builder/DmpUserBuilder.java @@ -3,7 +3,7 @@ package eu.eudat.model.builder; import eu.eudat.authorization.AuthorizationFlags; import eu.eudat.convention.ConventionService; import eu.eudat.data.DmpUserEntity; -import eu.eudat.data.old.UserInfo; +import eu.eudat.data.UserEntity; import eu.eudat.model.Dmp; import eu.eudat.model.DmpUser; import eu.eudat.model.Reference; @@ -56,7 +56,7 @@ public class DmpUserBuilder extends BaseBuilder{ return new ArrayList<>(); FieldSet userFields = fields.extractPrefixed(this.asPrefix(DmpUser._user)); - Map userItemsMap = this.collectUsers(userFields, data); + Map userItemsMap = this.collectUsers(userFields, data); FieldSet dmpFields = fields.extractPrefixed(this.asPrefix(DmpUser._dmp)); Map dmpItemsMap = this.collectDmps(dmpFields, data); @@ -85,21 +85,21 @@ public class DmpUserBuilder extends BaseBuilder{ } //TODO: Hookup user info when refactored - private Map collectUsers(FieldSet fields, List data) throws MyApplicationException { + private Map collectUsers(FieldSet fields, List data) throws MyApplicationException { if (fields.isEmpty() || data.isEmpty()) return null; - this.logger.debug("checking related - {}", UserInfo.class.getSimpleName()); + this.logger.debug("checking related - {}", UserEntity.class.getSimpleName()); - Map itemMap; + Map itemMap; if (!fields.hasOtherField(this.asIndexer("id"))) { itemMap = this.asEmpty( data.stream().map(DmpUserEntity::getUser).distinct().collect(Collectors.toList()), x -> { - UserInfo item = new UserInfo(); + UserEntity item = new UserEntity(); item.setId(x); return item; }, - UserInfo::getId); + UserEntity::getId); } else { FieldSet clone = new BaseFieldSet(fields.getFields()).ensure("id"); // ReferenceQuery q = this.queryFactory.query(ReferenceQuery.class).authorize(this.authorize).ids(data.stream().map(DmpReferenceEntity::getReferenceId).distinct().collect(Collectors.toList())); diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/builder/PublicDmpUserBuilder.java b/dmp-backend/core/src/main/java/eu/eudat/model/builder/PublicDmpUserBuilder.java index 12dff0b53..971ff2c48 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/model/builder/PublicDmpUserBuilder.java +++ b/dmp-backend/core/src/main/java/eu/eudat/model/builder/PublicDmpUserBuilder.java @@ -3,10 +3,9 @@ package eu.eudat.model.builder; import eu.eudat.authorization.AuthorizationFlags; import eu.eudat.convention.ConventionService; import eu.eudat.data.DmpUserEntity; -import eu.eudat.data.old.UserInfo; import eu.eudat.model.PublicDmp; import eu.eudat.model.PublicDmpUser; -import eu.eudat.model.PublicUserInfo; +import eu.eudat.model.PublicUser; import eu.eudat.query.DmpQuery; import gr.cite.tools.data.builder.BuilderFactory; import gr.cite.tools.data.query.QueryFactory; @@ -56,7 +55,7 @@ public class PublicDmpUserBuilder extends BaseBuilder(); FieldSet userFields = fields.extractPrefixed(this.asPrefix(PublicDmpUser._user)); - Map userItemsMap = new HashMap<>(); //TODO + Map userItemsMap = new HashMap<>(); //TODO FieldSet dmpFields = fields.extractPrefixed(this.asPrefix(PublicDmpUser._dmp)); Map dmpItemsMap = this.collectDmps(dmpFields, data); diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/censorship/PublicDmpUserCensor.java b/dmp-backend/core/src/main/java/eu/eudat/model/censorship/PublicDmpUserCensor.java index 7150fe57c..15c19764b 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/model/censorship/PublicDmpUserCensor.java +++ b/dmp-backend/core/src/main/java/eu/eudat/model/censorship/PublicDmpUserCensor.java @@ -2,7 +2,6 @@ package eu.eudat.model.censorship; import eu.eudat.authorization.Permission; import eu.eudat.convention.ConventionService; -import eu.eudat.model.DmpUser; import eu.eudat.model.PublicDmpUser; import gr.cite.commons.web.authz.service.AuthorizationService; import gr.cite.tools.data.censor.CensorFactory; @@ -14,8 +13,6 @@ import org.springframework.beans.factory.config.ConfigurableBeanFactory; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; -import java.util.UUID; - @Component @Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE) public class PublicDmpUserCensor extends BaseCensor { @@ -40,7 +37,7 @@ public class PublicDmpUserCensor extends BaseCensor { FieldSet dmpFields = fields.extractPrefixed(this.asIndexerPrefix(PublicDmpUser._dmp)); this.censorFactory.censor(PublicDmpCensor.class).censor(dmpFields); FieldSet userFields = fields.extractPrefixed(this.asIndexerPrefix(PublicDmpUser._user)); - this.censorFactory.censor(PublicUserInfoCensor.class).censor(userFields); + this.censorFactory.censor(PublicUserCensor.class).censor(userFields); } } diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/censorship/PublicUserInfoCensor.java b/dmp-backend/core/src/main/java/eu/eudat/model/censorship/PublicUserCensor.java similarity index 78% rename from dmp-backend/core/src/main/java/eu/eudat/model/censorship/PublicUserInfoCensor.java rename to dmp-backend/core/src/main/java/eu/eudat/model/censorship/PublicUserCensor.java index ec779b307..e3d4d3ebf 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/model/censorship/PublicUserInfoCensor.java +++ b/dmp-backend/core/src/main/java/eu/eudat/model/censorship/PublicUserCensor.java @@ -12,20 +12,18 @@ import org.springframework.beans.factory.config.ConfigurableBeanFactory; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; -import java.util.UUID; - @Component @Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE) -public class PublicUserInfoCensor extends BaseCensor { +public class PublicUserCensor extends BaseCensor { - private static final LoggerService logger = new LoggerService(LoggerFactory.getLogger(PublicUserInfoCensor.class)); + private static final LoggerService logger = new LoggerService(LoggerFactory.getLogger(PublicUserCensor.class)); protected final AuthorizationService authService; protected final CensorFactory censorFactory; - public PublicUserInfoCensor(ConventionService conventionService, - AuthorizationService authService, - CensorFactory censorFactory) { + public PublicUserCensor(ConventionService conventionService, + AuthorizationService authService, + CensorFactory censorFactory) { super(conventionService); this.authService = authService; this.censorFactory = censorFactory; diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/censorship/UserAdditionalInfoCensor.java b/dmp-backend/core/src/main/java/eu/eudat/model/censorship/UserAdditionalInfoCensor.java new file mode 100644 index 000000000..53bc93fac --- /dev/null +++ b/dmp-backend/core/src/main/java/eu/eudat/model/censorship/UserAdditionalInfoCensor.java @@ -0,0 +1,42 @@ +package eu.eudat.model.censorship; + +import eu.eudat.authorization.OwnedResource; +import eu.eudat.authorization.Permission; +import eu.eudat.convention.ConventionService; +import eu.eudat.model.UserAdditionalInfo; +import eu.eudat.model.UserContactInfo; +import gr.cite.commons.web.authz.service.AuthorizationService; +import gr.cite.tools.data.censor.CensorFactory; +import gr.cite.tools.fieldset.FieldSet; +import gr.cite.tools.logging.DataLogEntry; +import gr.cite.tools.logging.LoggerService; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.config.ConfigurableBeanFactory; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.UUID; + +@Component +@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE) +public class UserAdditionalInfoCensor extends BaseCensor { + + private static final LoggerService logger = new LoggerService(LoggerFactory.getLogger(UserAdditionalInfoCensor.class)); + + protected final AuthorizationService authService; + + + public UserAdditionalInfoCensor(ConventionService conventionService, AuthorizationService authService) { + super(conventionService); + this.authService = authService; + } + + public void censor(FieldSet fields, UUID userId) { + logger.debug(new DataLogEntry("censoring fields", fields)); + if (fields == null || fields.isEmpty()) + return; + this.authService.authorizeAtLeastOneForce(userId != null ? List.of(new OwnedResource(userId)) : null, Permission.BrowseUser); + } + +} diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/censorship/UserCensor.java b/dmp-backend/core/src/main/java/eu/eudat/model/censorship/UserCensor.java new file mode 100644 index 000000000..f5c5ea43f --- /dev/null +++ b/dmp-backend/core/src/main/java/eu/eudat/model/censorship/UserCensor.java @@ -0,0 +1,58 @@ +package eu.eudat.model.censorship; + +import eu.eudat.authorization.OwnedResource; +import eu.eudat.authorization.Permission; +import eu.eudat.convention.ConventionService; +import eu.eudat.model.Description; +import eu.eudat.model.User; +import eu.eudat.model.UserContactInfo; +import eu.eudat.model.censorship.descriptionproperties.PropertyDefinitionCensor; +import gr.cite.commons.web.authz.service.AuthorizationService; +import gr.cite.tools.data.censor.CensorFactory; +import gr.cite.tools.fieldset.FieldSet; +import gr.cite.tools.logging.DataLogEntry; +import gr.cite.tools.logging.LoggerService; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.config.ConfigurableBeanFactory; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.UUID; + +@Component +@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE) +public class UserCensor extends BaseCensor { + + private static final LoggerService logger = new LoggerService(LoggerFactory.getLogger(UserCensor.class)); + + protected final AuthorizationService authService; + + protected final CensorFactory censorFactory; + + public UserCensor(ConventionService conventionService, AuthorizationService authService, CensorFactory censorFactory) { + super(conventionService); + this.authService = authService; + this.censorFactory = censorFactory; + } + + public void censor(FieldSet fields, UUID userId) { + logger.debug(new DataLogEntry("censoring fields", fields)); + if (fields == null || fields.isEmpty()) + return; + this.authService.authorizeAtLeastOneForce(userId != null ? List.of(new OwnedResource(userId)) : null, Permission.BrowseUser); + + FieldSet rolesFields = fields.extractPrefixed(this.asIndexerPrefix(User._roles)); + this.censorFactory.censor(UserRoleCensor.class).censor(rolesFields, userId); + + FieldSet contactsFields = fields.extractPrefixed(this.asIndexerPrefix(User._contacts)); + this.censorFactory.censor(UserContactInfoCensor.class).censor(contactsFields, userId); + + FieldSet credentialsFields = fields.extractPrefixed(this.asIndexerPrefix(User._credentials)); + this.censorFactory.censor(UserCredentialCensor.class).censor(credentialsFields, userId); + + FieldSet additionalInfoFields = fields.extractPrefixed(this.asIndexerPrefix(User._additionalInfo)); + this.censorFactory.censor(UserAdditionalInfoCensor.class).censor(additionalInfoFields, userId); + } + +} diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/censorship/UserContactInfoCensor.java b/dmp-backend/core/src/main/java/eu/eudat/model/censorship/UserContactInfoCensor.java new file mode 100644 index 000000000..766d89d2c --- /dev/null +++ b/dmp-backend/core/src/main/java/eu/eudat/model/censorship/UserContactInfoCensor.java @@ -0,0 +1,46 @@ +package eu.eudat.model.censorship; + +import eu.eudat.authorization.OwnedResource; +import eu.eudat.authorization.Permission; +import eu.eudat.convention.ConventionService; +import eu.eudat.model.UserContactInfo; +import gr.cite.commons.web.authz.service.AuthorizationService; +import gr.cite.tools.data.censor.CensorFactory; +import gr.cite.tools.fieldset.FieldSet; +import gr.cite.tools.logging.DataLogEntry; +import gr.cite.tools.logging.LoggerService; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.config.ConfigurableBeanFactory; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.UUID; + +@Component +@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE) +public class UserContactInfoCensor extends BaseCensor { + + private static final LoggerService logger = new LoggerService(LoggerFactory.getLogger(UserContactInfoCensor.class)); + + protected final AuthorizationService authService; + + protected final CensorFactory censorFactory; + + public UserContactInfoCensor(ConventionService conventionService, AuthorizationService authService, CensorFactory censorFactory) { + super(conventionService); + this.authService = authService; + this.censorFactory = censorFactory; + } + + public void censor(FieldSet fields, UUID userId) { + logger.debug(new DataLogEntry("censoring fields", fields)); + if (fields == null || fields.isEmpty()) + return; + this.authService.authorizeAtLeastOneForce(userId != null ? List.of(new OwnedResource(userId)) : null, Permission.BrowseUser); + + FieldSet descriptionReferenceFields = fields.extractPrefixed(this.asIndexerPrefix(UserContactInfo._user)); + this.censorFactory.censor(DescriptionReferenceCensor.class).censor(descriptionReferenceFields, userId); + } + +} diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/censorship/UserCredentialCensor.java b/dmp-backend/core/src/main/java/eu/eudat/model/censorship/UserCredentialCensor.java new file mode 100644 index 000000000..f3a9e2984 --- /dev/null +++ b/dmp-backend/core/src/main/java/eu/eudat/model/censorship/UserCredentialCensor.java @@ -0,0 +1,46 @@ +package eu.eudat.model.censorship; + +import eu.eudat.authorization.OwnedResource; +import eu.eudat.authorization.Permission; +import eu.eudat.convention.ConventionService; +import eu.eudat.model.UserCredential; +import gr.cite.commons.web.authz.service.AuthorizationService; +import gr.cite.tools.data.censor.CensorFactory; +import gr.cite.tools.fieldset.FieldSet; +import gr.cite.tools.logging.DataLogEntry; +import gr.cite.tools.logging.LoggerService; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.config.ConfigurableBeanFactory; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.UUID; + +@Component +@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE) +public class UserCredentialCensor extends BaseCensor { + + private static final LoggerService logger = new LoggerService(LoggerFactory.getLogger(UserCredentialCensor.class)); + + protected final AuthorizationService authService; + + protected final CensorFactory censorFactory; + + public UserCredentialCensor(ConventionService conventionService, AuthorizationService authService, CensorFactory censorFactory) { + super(conventionService); + this.authService = authService; + this.censorFactory = censorFactory; + } + + public void censor(FieldSet fields, UUID userId) { + logger.debug(new DataLogEntry("censoring fields", fields)); + if (fields == null || fields.isEmpty()) + return; + this.authService.authorizeAtLeastOneForce(userId != null ? List.of(new OwnedResource(userId)) : null, Permission.BrowseUser); + + FieldSet descriptionReferenceFields = fields.extractPrefixed(this.asIndexerPrefix(UserCredential._user)); + this.censorFactory.censor(DescriptionReferenceCensor.class).censor(descriptionReferenceFields, userId); + } + +} diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/censorship/UserRoleCensor.java b/dmp-backend/core/src/main/java/eu/eudat/model/censorship/UserRoleCensor.java new file mode 100644 index 000000000..66a624169 --- /dev/null +++ b/dmp-backend/core/src/main/java/eu/eudat/model/censorship/UserRoleCensor.java @@ -0,0 +1,48 @@ +package eu.eudat.model.censorship; + +import eu.eudat.authorization.OwnedResource; +import eu.eudat.authorization.Permission; +import eu.eudat.convention.ConventionService; +import eu.eudat.model.Description; +import eu.eudat.model.censorship.descriptionproperties.PropertyDefinitionCensor; +import gr.cite.commons.web.authz.service.AuthorizationService; +import gr.cite.tools.data.censor.CensorFactory; +import gr.cite.tools.fieldset.FieldSet; +import gr.cite.tools.logging.DataLogEntry; +import gr.cite.tools.logging.LoggerService; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.config.ConfigurableBeanFactory; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; +import eu.eudat.model.UserRole; + +import java.util.List; +import java.util.UUID; + +@Component +@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE) +public class UserRoleCensor extends BaseCensor { + + private static final LoggerService logger = new LoggerService(LoggerFactory.getLogger(UserRoleCensor.class)); + + protected final AuthorizationService authService; + + protected final CensorFactory censorFactory; + + public UserRoleCensor(ConventionService conventionService, AuthorizationService authService, CensorFactory censorFactory) { + super(conventionService); + this.authService = authService; + this.censorFactory = censorFactory; + } + + public void censor(FieldSet fields, UUID userId) { + logger.debug(new DataLogEntry("censoring fields", fields)); + if (fields == null || fields.isEmpty()) + return; + this.authService.authorizeAtLeastOneForce(userId != null ? List.of(new OwnedResource(userId)) : null, Permission.BrowseUser); + + FieldSet descriptionReferenceFields = fields.extractPrefixed(this.asIndexerPrefix(UserRole._user)); + this.censorFactory.censor(DescriptionReferenceCensor.class).censor(descriptionReferenceFields, userId); + } + +} diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/mapper/deposit/DMPToDepositMapper.java b/dmp-backend/core/src/main/java/eu/eudat/model/mapper/deposit/DMPToDepositMapper.java index 4023c02e7..bda0312d5 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/model/mapper/deposit/DMPToDepositMapper.java +++ b/dmp-backend/core/src/main/java/eu/eudat/model/mapper/deposit/DMPToDepositMapper.java @@ -4,7 +4,7 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import eu.eudat.data.DescriptionEntity; import eu.eudat.data.DmpEntity; -import eu.eudat.data.DmpUserEntity; +import eu.eudat.data.UserEntity; import eu.eudat.data.old.*; import eu.eudat.depositinterface.models.*; import eu.eudat.commons.types.xml.XmlBuilder; @@ -22,7 +22,6 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.stream.Collectors; public class DMPToDepositMapper { @@ -127,10 +126,10 @@ public class DMPToDepositMapper { // return deposit; // } - private static UserInfoDepositModel fromUserInfo(UserInfo entity){ + private static UserInfoDepositModel fromUserInfo(UserEntity entity){ UserInfoDepositModel deposit = new UserInfoDepositModel(); deposit.setName(entity.getName()); - deposit.setEmail(entity.getEmail()); + //deposit.setEmail(entity.getEmail());//TODO: GetEmail return deposit; } diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/mapper/deposit/DmpEntityDepositMapper.java b/dmp-backend/core/src/main/java/eu/eudat/model/mapper/deposit/DmpEntityDepositMapper.java index 1d7828d21..19247f35e 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/model/mapper/deposit/DmpEntityDepositMapper.java +++ b/dmp-backend/core/src/main/java/eu/eudat/model/mapper/deposit/DmpEntityDepositMapper.java @@ -5,7 +5,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import eu.eudat.commons.enums.IsActive; import eu.eudat.commons.types.xml.XmlBuilder; import eu.eudat.data.*; -import eu.eudat.data.old.UserInfo; +import eu.eudat.data.UserEntity; import eu.eudat.depositinterface.models.*; import eu.eudat.query.DescriptionQuery; import eu.eudat.query.DescriptionTemplateQuery; @@ -13,7 +13,6 @@ import eu.eudat.query.DmpDescriptionTemplateQuery; import eu.eudat.query.DmpUserQuery; import gr.cite.tools.data.query.QueryFactory; import jakarta.persistence.EntityManager; -import jakarta.persistence.criteria.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.ApplicationContext; @@ -149,9 +148,9 @@ public class DmpEntityDepositMapper { private UserDMPDepositModel toUserDeposit(DmpUserEntity user) { UserDMPDepositModel userDMPDepositModel = new UserDMPDepositModel(); userDMPDepositModel.setUser(new UserInfoDepositModel()); - UserInfo userInfo = this.entityManager.find(UserInfo.class, user.getUser()); + UserEntity userInfo = this.entityManager.find(UserEntity.class, user.getUser()); userDMPDepositModel.getUser().setName(userInfo.getName()); - userDMPDepositModel.getUser().setEmail(userInfo.getEmail()); +// userDMPDepositModel.getUser().setEmail(userInfo.getEmail()); //TODO: GetEmail userDMPDepositModel.setRole(user.getRole().getValue().intValue()); return userDMPDepositModel; diff --git a/dmp-backend/core/src/main/java/eu/eudat/query/CredentialQuery.java b/dmp-backend/core/src/main/java/eu/eudat/query/CredentialQuery.java deleted file mode 100644 index 9c214e4ae..000000000 --- a/dmp-backend/core/src/main/java/eu/eudat/query/CredentialQuery.java +++ /dev/null @@ -1,125 +0,0 @@ -package eu.eudat.query; - -import eu.eudat.data.CredentialEntity; -import gr.cite.tools.data.query.FieldResolver; -import gr.cite.tools.data.query.QueryBase; -import gr.cite.tools.data.query.QueryContext; -import jakarta.persistence.Tuple; -import jakarta.persistence.criteria.CriteriaBuilder; -import jakarta.persistence.criteria.Predicate; -import org.springframework.beans.factory.config.ConfigurableBeanFactory; -import org.springframework.context.annotation.Scope; -import org.springframework.stereotype.Component; - -import java.util.*; - -@Component -@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE) -public class CredentialQuery extends QueryBase { - - private Collection ids; - - private Collection userIds; - - private Collection statuses; - - public CredentialQuery ids(UUID value) { - this.ids = List.of(value); - return this; - } - - public CredentialQuery ids(UUID... value) { - this.ids = Arrays.asList(value); - return this; - } - - public CredentialQuery ids(List value) { - this.ids = value; - return this; - } - - - public CredentialQuery userIds(UUID value) { - this.userIds = List.of(value); - return this; - } - - public CredentialQuery userIds(UUID... value) { - this.userIds = Arrays.asList(value); - return this; - } - - public CredentialQuery userIds(List value) { - this.userIds = value; - return this; - } - - public CredentialQuery statuses(Short value) { - this.statuses = List.of(value); - return this; - } - - public CredentialQuery statuses(Short... value) { - this.statuses = Arrays.asList(value); - return this; - } - - public CredentialQuery statuses(List value) { - this.statuses = value; - return this; - } - - @Override - protected Boolean isFalseQuery() { - return this.isEmpty(this.ids) || this.isEmpty(this.userIds) || this.isEmpty(this.statuses); - } - - @Override - protected Class entityClass() { - return CredentialEntity.class; - } - - @Override - protected Predicate applyFilters(QueryContext queryContext) { - List predicates = new ArrayList<>(); - - if (this.ids != null) { - CriteriaBuilder.In inClause = queryContext.CriteriaBuilder.in(queryContext.Root.get(CredentialEntity._id)); - for (UUID item : this.ids) - inClause.value(item); - predicates.add(inClause); - } - - if (this.userIds != null) { - CriteriaBuilder.In inClause = queryContext.CriteriaBuilder.in(queryContext.Root.get(CredentialEntity._userId)); - for (UUID item : this.userIds) - inClause.value(item); - predicates.add(inClause); - } - - if (this.statuses != null) { - CriteriaBuilder.In inClause = queryContext.CriteriaBuilder.in(queryContext.Root.get(CredentialEntity._isActive)); - for (Short item : this.statuses) - inClause.value(item); - predicates.add(inClause); - } - - if (!predicates.isEmpty()) { - Predicate[] predicatesArray = predicates.toArray(new Predicate[0]); - return queryContext.CriteriaBuilder.and(predicatesArray); - } else { - return queryContext.CriteriaBuilder.and(); - } - } - - @Override - protected String fieldNameOf(FieldResolver item) { - return null; - } - - @Override - protected CredentialEntity convert(Tuple tuple, Set columns) { - return null; - } - -} diff --git a/dmp-backend/core/src/main/java/eu/eudat/query/DescriptionQuery.java b/dmp-backend/core/src/main/java/eu/eudat/query/DescriptionQuery.java index 36029acfd..4e50cc56c 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/query/DescriptionQuery.java +++ b/dmp-backend/core/src/main/java/eu/eudat/query/DescriptionQuery.java @@ -266,6 +266,7 @@ public class DescriptionQuery extends QueryBase { else if (item.match(Description._createdAt) || item.match(PublicDescription._createdAt)) return DescriptionEntity._createdAt; else if (item.match(Description._updatedAt) || item.match(PublicDescription._updatedAt)) return DescriptionEntity._updatedAt; else if (item.match(Description._isActive)) return DescriptionEntity._isActive; + else if (item.match(Description._hash)) return DescriptionEntity._updatedAt; else if (item.match(Description._finalizedAt) || item.match(PublicDescription._finalizedAt)) return DescriptionEntity._finalizedAt; else if (item.prefix(Description._dmpDescriptionTemplate) || item.prefix(PublicDescription._dmpDescriptionTemplate)) return DescriptionEntity._dmpDescriptionTemplateId; else if (item.prefix(Description._dmp)) return DescriptionEntity._dmpId; diff --git a/dmp-backend/core/src/main/java/eu/eudat/query/DescriptionTemplateQuery.java b/dmp-backend/core/src/main/java/eu/eudat/query/DescriptionTemplateQuery.java index 81efcdb95..8aeac222a 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/query/DescriptionTemplateQuery.java +++ b/dmp-backend/core/src/main/java/eu/eudat/query/DescriptionTemplateQuery.java @@ -303,6 +303,7 @@ public class DescriptionTemplateQuery extends QueryBase { else if (item.prefix(DmpBlueprint._definition)) return DmpBlueprintEntity._definition; else if (item.match(DmpBlueprint._createdAt)) return DmpBlueprintEntity._createdAt; else if (item.match(DmpBlueprint._updatedAt)) return DmpBlueprintEntity._updatedAt; + else if (item.match(DmpBlueprint._hash)) return DmpBlueprintEntity._updatedAt; else if (item.match(DmpBlueprint._isActive)) return DmpBlueprintEntity._isActive; else if (item.match(DmpBlueprint._status)) return DmpBlueprintEntity._status; else return null; diff --git a/dmp-backend/core/src/main/java/eu/eudat/query/DmpDescriptionTemplateQuery.java b/dmp-backend/core/src/main/java/eu/eudat/query/DmpDescriptionTemplateQuery.java index 5f6e6e171..cdd3f31bd 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/query/DmpDescriptionTemplateQuery.java +++ b/dmp-backend/core/src/main/java/eu/eudat/query/DmpDescriptionTemplateQuery.java @@ -5,9 +5,11 @@ import eu.eudat.authorization.Permission; import eu.eudat.commons.enums.DmpAccessType; import eu.eudat.commons.enums.IsActive; import eu.eudat.commons.scope.user.UserScope; +import eu.eudat.data.DescriptionTemplateEntity; import eu.eudat.data.DmpDescriptionTemplateEntity; import eu.eudat.data.DmpEntity; import eu.eudat.data.DmpUserEntity; +import eu.eudat.model.DmpBlueprint; import eu.eudat.model.DmpDescriptionTemplate; import eu.eudat.model.PublicDmpDescriptionTemplate; import eu.eudat.query.utils.QueryUtilsService; diff --git a/dmp-backend/core/src/main/java/eu/eudat/query/DmpQuery.java b/dmp-backend/core/src/main/java/eu/eudat/query/DmpQuery.java index c9848472f..c97f48f21 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/query/DmpQuery.java +++ b/dmp-backend/core/src/main/java/eu/eudat/query/DmpQuery.java @@ -302,6 +302,7 @@ public class DmpQuery extends QueryBase { else if (item.match(Dmp._description) || item.match(PublicDmp._description)) return DmpEntity._description; else if (item.match(Dmp._createdAt)) return DmpEntity._createdAt; else if (item.match(Dmp._updatedAt)) return DmpEntity._updatedAt; + else if (item.match(Dmp._hash)) return DmpEntity._updatedAt; else if (item.match(Dmp._isActive) ) return DmpEntity._isActive; else if (item.match(Dmp._finalizedAt) || item.match(PublicDmp._finalizedAt)) return DmpEntity._finalizedAt; else if (item.match(Dmp._accessType)) return DmpEntity._accessType; diff --git a/dmp-backend/core/src/main/java/eu/eudat/query/EntityDoiQuery.java b/dmp-backend/core/src/main/java/eu/eudat/query/EntityDoiQuery.java index 485e2e1d1..398e39023 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/query/EntityDoiQuery.java +++ b/dmp-backend/core/src/main/java/eu/eudat/query/EntityDoiQuery.java @@ -4,7 +4,9 @@ import eu.eudat.authorization.AuthorizationFlags; import eu.eudat.commons.enums.EntityType; import eu.eudat.commons.enums.IsActive; import eu.eudat.commons.scope.user.UserScope; +import eu.eudat.data.DmpEntity; import eu.eudat.data.EntityDoiEntity; +import eu.eudat.model.Dmp; import eu.eudat.model.EntityDoi; import gr.cite.commons.web.authz.service.AuthorizationService; import gr.cite.tools.data.query.FieldResolver; @@ -235,6 +237,7 @@ public class EntityDoiQuery extends QueryBase { return EntityDoiEntity._createdAt; else if (item.match(EntityDoi._updatedAt)) return EntityDoiEntity._updatedAt; + else if (item.match(EntityDoi._hash)) return EntityDoiEntity._updatedAt; else if (item.match(EntityDoi._isActive)) return EntityDoiEntity._isActive; else diff --git a/dmp-backend/core/src/main/java/eu/eudat/query/ReferenceQuery.java b/dmp-backend/core/src/main/java/eu/eudat/query/ReferenceQuery.java index 847b5211a..20ceabddd 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/query/ReferenceQuery.java +++ b/dmp-backend/core/src/main/java/eu/eudat/query/ReferenceQuery.java @@ -5,7 +5,9 @@ import eu.eudat.commons.enums.ReferenceType; import eu.eudat.commons.enums.IsActive; import eu.eudat.commons.enums.ReferenceSourceType; import eu.eudat.commons.scope.user.UserScope; +import eu.eudat.data.EntityDoiEntity; import eu.eudat.data.ReferenceEntity; +import eu.eudat.model.EntityDoi; import eu.eudat.model.PublicReference; import eu.eudat.model.Reference; import gr.cite.commons.web.authz.service.AuthorizationService; diff --git a/dmp-backend/core/src/main/java/eu/eudat/query/TagQuery.java b/dmp-backend/core/src/main/java/eu/eudat/query/TagQuery.java index d83a363bd..df54eef9f 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/query/TagQuery.java +++ b/dmp-backend/core/src/main/java/eu/eudat/query/TagQuery.java @@ -192,6 +192,7 @@ public class TagQuery extends QueryBase { else if (item.match(Tag._createdBy)) return TagEntity._createdBy; else if (item.match(Tag._createdAt)) return TagEntity._createdAt; else if (item.match(Tag._updatedAt)) return TagEntity._updatedAt; + else if (item.match(Tag._hash)) return TagEntity._updatedAt; else if (item.match(Tag._isActive)) return TagEntity._isActive; else return null; } diff --git a/dmp-backend/core/src/main/java/eu/eudat/query/UserContactInfoQuery.java b/dmp-backend/core/src/main/java/eu/eudat/query/UserContactInfoQuery.java new file mode 100644 index 000000000..889fbd650 --- /dev/null +++ b/dmp-backend/core/src/main/java/eu/eudat/query/UserContactInfoQuery.java @@ -0,0 +1,236 @@ +package eu.eudat.query; + +import eu.eudat.authorization.AuthorizationFlags; +import eu.eudat.authorization.Permission; +import eu.eudat.commons.enums.ContactInfoType; +import eu.eudat.commons.scope.user.UserScope; +import eu.eudat.data.UserContactInfoEntity; +import eu.eudat.model.UserContactInfo; +import gr.cite.commons.web.authz.service.AuthorizationService; +import gr.cite.tools.data.query.FieldResolver; +import gr.cite.tools.data.query.QueryBase; +import gr.cite.tools.data.query.QueryContext; +import jakarta.persistence.Tuple; +import jakarta.persistence.criteria.CriteriaBuilder; +import jakarta.persistence.criteria.Predicate; +import org.springframework.beans.factory.config.ConfigurableBeanFactory; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; + +import java.time.Instant; +import java.util.*; + +@Component +@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE) +public class UserContactInfoQuery extends QueryBase { + private Collection ids; + private Collection excludedIds; + private Collection excludedUserIds; + private Collection userIds; + private Collection values; + private Collection types; + + private EnumSet authorize = EnumSet.of(AuthorizationFlags.None); + + private final UserScope userScope; + private final AuthorizationService authService; + public UserContactInfoQuery(UserScope userScope, AuthorizationService authService) { + this.userScope = userScope; + this.authService = authService; + } + + public UserContactInfoQuery ids(UUID value) { + this.ids = List.of(value); + return this; + } + + public UserContactInfoQuery ids(UUID... value) { + this.ids = Arrays.asList(value); + return this; + } + + public UserContactInfoQuery ids(Collection values) { + this.ids = values; + return this; + } + + public UserContactInfoQuery excludedIds(Collection values) { + this.excludedIds = values; + return this; + } + + public UserContactInfoQuery excludedIds(UUID value) { + this.excludedIds = List.of(value); + return this; + } + + public UserContactInfoQuery excludedIds(UUID... value) { + this.excludedIds = Arrays.asList(value); + return this; + } + + public UserContactInfoQuery excludedUserIds(Collection values) { + this.excludedUserIds = values; + return this; + } + + public UserContactInfoQuery excludedUserIds(UUID value) { + this.excludedUserIds = List.of(value); + return this; + } + + public UserContactInfoQuery excludedUserIds(UUID... value) { + this.excludedUserIds = Arrays.asList(value); + return this; + } + + public UserContactInfoQuery userIds(UUID value) { + this.userIds = List.of(value); + return this; + } + + public UserContactInfoQuery userIds(UUID... value) { + this.userIds = Arrays.asList(value); + return this; + } + + public UserContactInfoQuery userIds(Collection values) { + this.userIds = values; + return this; + } + + public UserContactInfoQuery values(String value) { + this.values = List.of(value); + return this; + } + + public UserContactInfoQuery values(String... value) { + this.values = Arrays.asList(value); + return this; + } + + public UserContactInfoQuery values(Collection values) { + this.values = values; + return this; + } + + public UserContactInfoQuery types(ContactInfoType value) { + this.types = List.of(value); + return this; + } + + public UserContactInfoQuery types(ContactInfoType... value) { + this.types = Arrays.asList(value); + return this; + } + + public UserContactInfoQuery types(Collection values) { + this.types = values; + return this; + } + + public UserContactInfoQuery authorize(EnumSet values) { + this.authorize = values; + return this; + } + @Override + protected Boolean isFalseQuery() { + return + this.isEmpty(this.ids) || + this.isEmpty(this.userIds) || + this.isEmpty(this.excludedIds) || + this.isEmpty(this.values) || + this.isEmpty(this.excludedIds); + } + + @Override + protected Class entityClass() { + return UserContactInfoEntity.class; + } + + @Override + protected Predicate applyAuthZ(QueryContext queryContext) { + if (this.authorize.contains(AuthorizationFlags.None)) return null; + if (this.authorize.contains(AuthorizationFlags.Permission) && this.authService.authorize(Permission.BrowseUser)) return null; + UUID userId; + if (this.authorize.contains(AuthorizationFlags.Owner)) userId = this.userScope.getUserIdSafe(); + else userId = null; + + List predicates = new ArrayList<>(); + if (userId != null) { + predicates.add(queryContext.CriteriaBuilder.in(queryContext.Root.get(UserContactInfoEntity._userId)).value(userId)); + } + if (!predicates.isEmpty()) { + Predicate[] predicatesArray = predicates.toArray(new Predicate[0]); + return queryContext.CriteriaBuilder.and(predicatesArray); + } else { + return queryContext.CriteriaBuilder.or(); //Creates a false query + } + } + + @Override + protected Predicate applyFilters(QueryContext queryContext) { + List predicates = new ArrayList<>(); + if (this.ids != null) { + CriteriaBuilder.In inClause = queryContext.CriteriaBuilder.in(queryContext.Root.get(UserContactInfoEntity._id)); + for (UUID item : this.ids) + inClause.value(item); + predicates.add(inClause); + } + if (this.userIds != null) { + CriteriaBuilder.In inClause = queryContext.CriteriaBuilder.in(queryContext.Root.get(UserContactInfoEntity._userId)); + for (UUID item : this.userIds) + inClause.value(item); + predicates.add(inClause); + } + if (this.excludedIds != null) { + CriteriaBuilder.In notInClause = queryContext.CriteriaBuilder.in(queryContext.Root.get(UserContactInfoEntity._id)); + for (UUID item : this.excludedIds) + notInClause.value(item); + predicates.add(notInClause.not()); + } + if (this.excludedUserIds != null) { + CriteriaBuilder.In notInClause = queryContext.CriteriaBuilder.in(queryContext.Root.get(UserContactInfoEntity._userId)); + for (UUID item : this.excludedUserIds) + notInClause.value(item); + predicates.add(notInClause.not()); + } + if (this.values != null) { + CriteriaBuilder.In inClause = queryContext.CriteriaBuilder.in(queryContext.Root.get(UserContactInfoEntity._value)); + for (String item : this.values) + inClause.value(item); + predicates.add(inClause); + } + if (!predicates.isEmpty()) { + Predicate[] predicatesArray = predicates.toArray(new Predicate[0]); + return queryContext.CriteriaBuilder.and(predicatesArray); + } else { + return null; + } + } + + @Override + protected String fieldNameOf(FieldResolver item) { + if (item.match(UserContactInfo._id)) return UserContactInfoEntity._id; + else if (item.match(UserContactInfo._value)) return UserContactInfoEntity._value; + else if (item.match(UserContactInfo._ordinal)) return UserContactInfoEntity._ordinal; + else if (item.prefix(UserContactInfo._user)) return UserContactInfoEntity._userId; + else if (item.match(UserContactInfo._user)) return UserContactInfoEntity._userId; + else if (item.prefix(UserContactInfo._type)) return UserContactInfoEntity._type; + else if (item.match(UserContactInfo._createdAt) ) return UserContactInfoEntity._createdAt; + else return null; + } + + @Override + protected UserContactInfoEntity convert(Tuple tuple, Set columns) { + UserContactInfoEntity item = new UserContactInfoEntity(); + item.setId(QueryBase.convertSafe(tuple, columns, UserContactInfoEntity._id, UUID.class)); + item.setValue(QueryBase.convertSafe(tuple, columns, UserContactInfoEntity._value, String.class)); + item.setType(QueryBase.convertSafe(tuple, columns, UserContactInfoEntity._type, ContactInfoType.class)); + item.setOrdinal(QueryBase.convertSafe(tuple, columns, UserContactInfoEntity._ordinal, Integer.class)); + item.setUserId(QueryBase.convertSafe(tuple, columns, UserContactInfoEntity._userId, UUID.class)); + item.setCreatedAt(QueryBase.convertSafe(tuple, columns, UserContactInfoEntity._createdAt, Instant.class)); + return item; + } + +} diff --git a/dmp-backend/core/src/main/java/eu/eudat/query/UserCredentialQuery.java b/dmp-backend/core/src/main/java/eu/eudat/query/UserCredentialQuery.java new file mode 100644 index 000000000..e8284002f --- /dev/null +++ b/dmp-backend/core/src/main/java/eu/eudat/query/UserCredentialQuery.java @@ -0,0 +1,193 @@ +package eu.eudat.query; + +import eu.eudat.authorization.AuthorizationFlags; +import eu.eudat.authorization.Permission; +import eu.eudat.commons.scope.user.UserScope; +import eu.eudat.data.UserCredentialEntity; +import eu.eudat.model.UserCredential; +import gr.cite.commons.web.authz.service.AuthorizationService; +import gr.cite.tools.data.query.FieldResolver; +import gr.cite.tools.data.query.QueryBase; +import gr.cite.tools.data.query.QueryContext; +import jakarta.persistence.Tuple; +import jakarta.persistence.criteria.CriteriaBuilder; +import jakarta.persistence.criteria.Predicate; +import org.springframework.beans.factory.config.ConfigurableBeanFactory; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; + +import java.time.Instant; +import java.util.*; + +@Component +@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE) +public class UserCredentialQuery extends QueryBase { + private Collection ids; + private Collection excludedIds; + private Collection userIds; + private Collection externalIds; + + private EnumSet authorize = EnumSet.of(AuthorizationFlags.None); + + private final UserScope userScope; + private final AuthorizationService authService; + public UserCredentialQuery(UserScope userScope, AuthorizationService authService) { + this.userScope = userScope; + this.authService = authService; + } + + public UserCredentialQuery ids(UUID value) { + this.ids = List.of(value); + return this; + } + + public UserCredentialQuery ids(UUID... value) { + this.ids = Arrays.asList(value); + return this; + } + + public UserCredentialQuery ids(Collection values) { + this.ids = values; + return this; + } + + public UserCredentialQuery excludedIds(Collection values) { + this.excludedIds = values; + return this; + } + + public UserCredentialQuery excludedIds(UUID value) { + this.excludedIds = List.of(value); + return this; + } + + public UserCredentialQuery excludedIds(UUID... value) { + this.excludedIds = Arrays.asList(value); + return this; + } + + public UserCredentialQuery userIds(UUID value) { + this.userIds = List.of(value); + return this; + } + + public UserCredentialQuery userIds(UUID... value) { + this.userIds = Arrays.asList(value); + return this; + } + + public UserCredentialQuery userIds(Collection values) { + this.userIds = values; + return this; + } + + public UserCredentialQuery externalIds(String value) { + this.externalIds = List.of(value); + return this; + } + + public UserCredentialQuery externalIds(String... value) { + this.externalIds = Arrays.asList(value); + return this; + } + + public UserCredentialQuery externalIds(Collection values) { + this.externalIds = values; + return this; + } + + public UserCredentialQuery authorize(EnumSet values) { + this.authorize = values; + return this; + } + + @Override + protected Boolean isFalseQuery() { + return + this.isEmpty(this.ids) || + this.isEmpty(this.userIds) || + this.isEmpty(this.externalIds) || + this.isEmpty(this.excludedIds); + } + + @Override + protected Class entityClass() { + return UserCredentialEntity.class; + } + + @Override + protected Predicate applyAuthZ(QueryContext queryContext) { + if (this.authorize.contains(AuthorizationFlags.None)) return null; + if (this.authorize.contains(AuthorizationFlags.Permission) && this.authService.authorize(Permission.BrowseUser)) return null; + UUID userId; + if (this.authorize.contains(AuthorizationFlags.Owner)) userId = this.userScope.getUserIdSafe(); + else userId = null; + + List predicates = new ArrayList<>(); + if (userId != null) { + predicates.add(queryContext.CriteriaBuilder.in(queryContext.Root.get(UserCredentialEntity._userId)).value(userId)); + } + if (!predicates.isEmpty()) { + Predicate[] predicatesArray = predicates.toArray(new Predicate[0]); + return queryContext.CriteriaBuilder.and(predicatesArray); + } else { + return queryContext.CriteriaBuilder.or(); //Creates a false query + } + } + + @Override + protected Predicate applyFilters(QueryContext queryContext) { + List predicates = new ArrayList<>(); + if (this.ids != null) { + CriteriaBuilder.In inClause = queryContext.CriteriaBuilder.in(queryContext.Root.get(UserCredentialEntity._id)); + for (UUID item : this.ids) + inClause.value(item); + predicates.add(inClause); + } + if (this.userIds != null) { + CriteriaBuilder.In inClause = queryContext.CriteriaBuilder.in(queryContext.Root.get(UserCredentialEntity._userId)); + for (UUID item : this.userIds) + inClause.value(item); + predicates.add(inClause); + } + if (this.excludedIds != null) { + CriteriaBuilder.In notInClause = queryContext.CriteriaBuilder.in(queryContext.Root.get(UserCredentialEntity._id)); + for (UUID item : this.excludedIds) + notInClause.value(item); + predicates.add(notInClause.not()); + } + if (this.externalIds != null) { + CriteriaBuilder.In inClause = queryContext.CriteriaBuilder.in(queryContext.Root.get(UserCredentialEntity._externalId)); + for (String item : this.externalIds) + inClause.value(item); + predicates.add(inClause); + } + if (!predicates.isEmpty()) { + Predicate[] predicatesArray = predicates.toArray(new Predicate[0]); + return queryContext.CriteriaBuilder.and(predicatesArray); + } else { + return null; + } + } + + @Override + protected String fieldNameOf(FieldResolver item) { + if (item.match(UserCredential._id)) return UserCredentialEntity._id; + else if (item.match(UserCredential._externalId)) return UserCredentialEntity._externalId; + else if (item.prefix(UserCredential._user)) return UserCredentialEntity._userId; + else if (item.match(UserCredential._user)) return UserCredentialEntity._userId; + else if (item.match(UserCredential._createdAt) ) return UserCredentialEntity._createdAt; + else return null; + } + + @Override + protected UserCredentialEntity convert(Tuple tuple, Set columns) { + UserCredentialEntity item = new UserCredentialEntity(); + item.setId(QueryBase.convertSafe(tuple, columns, UserCredentialEntity._id, UUID.class)); + item.setExternalId(QueryBase.convertSafe(tuple, columns, UserCredentialEntity._externalId, String.class)); + item.setUserId(QueryBase.convertSafe(tuple, columns, UserCredentialEntity._userId, UUID.class)); + item.setCreatedAt(QueryBase.convertSafe(tuple, columns, UserCredentialEntity._createdAt, Instant.class)); + return item; + } + +} diff --git a/dmp-backend/core/src/main/java/eu/eudat/query/UserQuery.java b/dmp-backend/core/src/main/java/eu/eudat/query/UserQuery.java new file mode 100644 index 000000000..5e909a512 --- /dev/null +++ b/dmp-backend/core/src/main/java/eu/eudat/query/UserQuery.java @@ -0,0 +1,188 @@ +package eu.eudat.query; + +import eu.eudat.authorization.AuthorizationFlags; +import eu.eudat.authorization.Permission; +import eu.eudat.commons.enums.IsActive; +import eu.eudat.commons.scope.user.UserScope; +import eu.eudat.data.UserEntity; +import eu.eudat.data.DmpEntity; +import eu.eudat.model.User; +import eu.eudat.model.PublicUser; +import eu.eudat.query.utils.QueryUtilsService; +import gr.cite.commons.web.authz.service.AuthorizationService; +import gr.cite.tools.data.query.FieldResolver; +import gr.cite.tools.data.query.QueryBase; +import gr.cite.tools.data.query.QueryContext; +import jakarta.persistence.Tuple; +import jakarta.persistence.criteria.CriteriaBuilder; +import jakarta.persistence.criteria.Predicate; +import jakarta.persistence.criteria.Subquery; +import org.springframework.beans.factory.config.ConfigurableBeanFactory; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; + +import java.time.Instant; +import java.util.*; + +@Component +@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE) +public class UserQuery extends QueryBase { + private String like; + private Collection ids; + private Collection excludedIds; + private Collection isActives; + + private EnumSet authorize = EnumSet.of(AuthorizationFlags.None); + + private final UserScope userScope; + private final AuthorizationService authService; + public UserQuery(UserScope userScope, AuthorizationService authService) { + this.userScope = userScope; + this.authService = authService; + } + + public UserQuery like(String value) { + this.like = value; + return this; + } + + public UserQuery ids(UUID value) { + this.ids = List.of(value); + return this; + } + + public UserQuery ids(UUID... value) { + this.ids = Arrays.asList(value); + return this; + } + + public UserQuery ids(Collection values) { + this.ids = values; + return this; + } + + public UserQuery excludedIds(Collection values) { + this.excludedIds = values; + return this; + } + + public UserQuery excludedIds(UUID value) { + this.excludedIds = List.of(value); + return this; + } + + public UserQuery excludedIds(UUID... value) { + this.excludedIds = Arrays.asList(value); + return this; + } + + public UserQuery isActive(IsActive value) { + this.isActives = List.of(value); + return this; + } + + public UserQuery isActive(IsActive... value) { + this.isActives = Arrays.asList(value); + return this; + } + + public UserQuery isActive(Collection values) { + this.isActives = values; + return this; + } + + public UserQuery authorize(EnumSet values) { + this.authorize = values; + return this; + } + + @Override + protected Boolean isFalseQuery() { + return + this.isEmpty(this.ids) || + this.isEmpty(this.isActives) || + this.isEmpty(this.excludedIds); + } + + @Override + protected Class entityClass() { + return UserEntity.class; + } + + @Override + protected Predicate applyAuthZ(QueryContext queryContext) { + if (this.authorize.contains(AuthorizationFlags.None)) return null; + if (this.authorize.contains(AuthorizationFlags.Permission) && this.authService.authorize(Permission.BrowseUser)) return null; + UUID userId; + if (this.authorize.contains(AuthorizationFlags.Owner)) userId = this.userScope.getUserIdSafe(); + else userId = null; + + List predicates = new ArrayList<>(); + if (userId != null) { + predicates.add(queryContext.CriteriaBuilder.in(queryContext.Root.get(UserEntity._id)).value(userId)); + } + if (!predicates.isEmpty()) { + Predicate[] predicatesArray = predicates.toArray(new Predicate[0]); + return queryContext.CriteriaBuilder.and(predicatesArray); + } else { + return queryContext.CriteriaBuilder.or(); //Creates a false query + } + } + + @Override + protected Predicate applyFilters(QueryContext queryContext) { + List predicates = new ArrayList<>(); + if (this.like != null && !this.like.isEmpty()) { + predicates.add(queryContext.CriteriaBuilder.like(queryContext.Root.get(UserEntity._name), this.like)); + } + if (this.ids != null) { + CriteriaBuilder.In inClause = queryContext.CriteriaBuilder.in(queryContext.Root.get(UserEntity._id)); + for (UUID item : this.ids) + inClause.value(item); + predicates.add(inClause); + } + if (this.excludedIds != null) { + CriteriaBuilder.In notInClause = queryContext.CriteriaBuilder.in(queryContext.Root.get(UserEntity._id)); + for (UUID item : this.excludedIds) + notInClause.value(item); + predicates.add(notInClause.not()); + } + if (this.isActives != null) { + CriteriaBuilder.In inClause = queryContext.CriteriaBuilder.in(queryContext.Root.get(UserEntity._isActive)); + for (IsActive item : this.isActives) + inClause.value(item); + predicates.add(inClause); + } + if (!predicates.isEmpty()) { + Predicate[] predicatesArray = predicates.toArray(new Predicate[0]); + return queryContext.CriteriaBuilder.and(predicatesArray); + } else { + return null; + } + } + + @Override + protected String fieldNameOf(FieldResolver item) { + if (item.match(User._id) || item.match(PublicUser._id)) return UserEntity._id; + else if (item.match(User._name) || item.match(PublicUser._name)) return UserEntity._name; + else if (item.prefix(User._additionalInfo)) return UserEntity._additionalInfo; + else if (item.match(User._createdAt) ) return UserEntity._createdAt; + else if (item.match(User._updatedAt)) return UserEntity._updatedAt; + else if (item.match(User._hash)) return UserEntity._updatedAt; + else if (item.match(User._isActive)) return UserEntity._isActive; + else return null; + } + + @Override + protected UserEntity convert(Tuple tuple, Set columns) { + UserEntity item = new UserEntity(); + item.setId(QueryBase.convertSafe(tuple, columns, UserEntity._id, UUID.class)); + item.setName(QueryBase.convertSafe(tuple, columns, UserEntity._name, String.class)); + item.setAdditionalInfo(QueryBase.convertSafe(tuple, columns, UserEntity._additionalInfo, String.class)); + item.setCreatedAt(QueryBase.convertSafe(tuple, columns, UserEntity._createdAt, Instant.class)); + item.setUpdatedAt(QueryBase.convertSafe(tuple, columns, UserEntity._updatedAt, Instant.class)); + item.setIsActive(QueryBase.convertSafe(tuple, columns, UserEntity._isActive, IsActive.class)); + return item; + } + +} diff --git a/dmp-backend/core/src/main/java/eu/eudat/query/UserRoleQuery.java b/dmp-backend/core/src/main/java/eu/eudat/query/UserRoleQuery.java new file mode 100644 index 000000000..406413bd3 --- /dev/null +++ b/dmp-backend/core/src/main/java/eu/eudat/query/UserRoleQuery.java @@ -0,0 +1,192 @@ +package eu.eudat.query; + +import eu.eudat.authorization.AuthorizationFlags; +import eu.eudat.authorization.Permission; +import eu.eudat.commons.scope.user.UserScope; +import eu.eudat.data.UserRoleEntity; +import eu.eudat.model.UserRole; +import gr.cite.commons.web.authz.service.AuthorizationService; +import gr.cite.tools.data.query.FieldResolver; +import gr.cite.tools.data.query.QueryBase; +import gr.cite.tools.data.query.QueryContext; +import jakarta.persistence.Tuple; +import jakarta.persistence.criteria.CriteriaBuilder; +import jakarta.persistence.criteria.Predicate; +import org.springframework.beans.factory.config.ConfigurableBeanFactory; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; + +import java.time.Instant; +import java.util.*; + +@Component +@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE) +public class UserRoleQuery extends QueryBase { + private Collection ids; + private Collection excludedIds; + private Collection userIds; + private Collection roles; + + private EnumSet authorize = EnumSet.of(AuthorizationFlags.None); + + private final UserScope userScope; + private final AuthorizationService authService; + public UserRoleQuery(UserScope userScope, AuthorizationService authService) { + this.userScope = userScope; + this.authService = authService; + } + + public UserRoleQuery ids(UUID value) { + this.ids = List.of(value); + return this; + } + + public UserRoleQuery ids(UUID... value) { + this.ids = Arrays.asList(value); + return this; + } + + public UserRoleQuery ids(Collection values) { + this.ids = values; + return this; + } + + public UserRoleQuery excludedIds(Collection values) { + this.excludedIds = values; + return this; + } + + public UserRoleQuery excludedIds(UUID value) { + this.excludedIds = List.of(value); + return this; + } + + public UserRoleQuery excludedIds(UUID... value) { + this.excludedIds = Arrays.asList(value); + return this; + } + + public UserRoleQuery userIds(UUID value) { + this.userIds = List.of(value); + return this; + } + + public UserRoleQuery userIds(UUID... value) { + this.userIds = Arrays.asList(value); + return this; + } + + public UserRoleQuery userIds(Collection values) { + this.userIds = values; + return this; + } + + public UserRoleQuery roles(String value) { + this.roles = List.of(value); + return this; + } + + public UserRoleQuery roles(String... value) { + this.roles = Arrays.asList(value); + return this; + } + + public UserRoleQuery roles(Collection values) { + this.roles = values; + return this; + } + + public UserRoleQuery authorize(EnumSet values) { + this.authorize = values; + return this; + } + + @Override + protected Boolean isFalseQuery() { + return + this.isEmpty(this.ids) || + this.isEmpty(this.userIds) || + this.isEmpty(this.roles) || + this.isEmpty(this.excludedIds); + } + + @Override + protected Class entityClass() { + return UserRoleEntity.class; + } + + @Override + protected Predicate applyAuthZ(QueryContext queryContext) { + if (this.authorize.contains(AuthorizationFlags.None)) return null; + if (this.authorize.contains(AuthorizationFlags.Permission) && this.authService.authorize(Permission.BrowseUser)) return null; + UUID userId; + if (this.authorize.contains(AuthorizationFlags.Owner)) userId = this.userScope.getUserIdSafe(); + else userId = null; + + List predicates = new ArrayList<>(); + if (userId != null) { + predicates.add(queryContext.CriteriaBuilder.in(queryContext.Root.get(UserRoleEntity._userId)).value(userId)); + } + if (!predicates.isEmpty()) { + Predicate[] predicatesArray = predicates.toArray(new Predicate[0]); + return queryContext.CriteriaBuilder.and(predicatesArray); + } else { + return queryContext.CriteriaBuilder.or(); //Creates a false query + } + } + + @Override + protected Predicate applyFilters(QueryContext queryContext) { + List predicates = new ArrayList<>(); + if (this.ids != null) { + CriteriaBuilder.In inClause = queryContext.CriteriaBuilder.in(queryContext.Root.get(UserRoleEntity._id)); + for (UUID item : this.ids) + inClause.value(item); + predicates.add(inClause); + } + if (this.userIds != null) { + CriteriaBuilder.In inClause = queryContext.CriteriaBuilder.in(queryContext.Root.get(UserRoleEntity._userId)); + for (UUID item : this.userIds) + inClause.value(item); + predicates.add(inClause); + } + if (this.excludedIds != null) { + CriteriaBuilder.In notInClause = queryContext.CriteriaBuilder.in(queryContext.Root.get(UserRoleEntity._id)); + for (UUID item : this.excludedIds) + notInClause.value(item); + predicates.add(notInClause.not()); + } + if (this.roles != null) { + CriteriaBuilder.In inClause = queryContext.CriteriaBuilder.in(queryContext.Root.get(UserRoleEntity._role)); + for (String item : this.roles) + inClause.value(item); + predicates.add(inClause); + } + if (!predicates.isEmpty()) { + Predicate[] predicatesArray = predicates.toArray(new Predicate[0]); + return queryContext.CriteriaBuilder.and(predicatesArray); + } else { + return null; + } + } + + @Override + protected String fieldNameOf(FieldResolver item) { + if (item.match(UserRole._id)) return UserRoleEntity._id; + else if (item.match(UserRole._role)) return UserRoleEntity._role; + else if (item.prefix(UserRole._user)) return UserRoleEntity._userId; + else if (item.match(UserRole._createdAt) ) return UserRoleEntity._createdAt; + else return null; + } + + @Override + protected UserRoleEntity convert(Tuple tuple, Set columns) { + UserRoleEntity item = new UserRoleEntity(); + item.setId(QueryBase.convertSafe(tuple, columns, UserRoleEntity._id, UUID.class)); + item.setRole(QueryBase.convertSafe(tuple, columns, UserRoleEntity._role, String.class)); + item.setUserId(QueryBase.convertSafe(tuple, columns, UserRoleEntity._userId, UUID.class)); + item.setCreatedAt(QueryBase.convertSafe(tuple, columns, UserRoleEntity._createdAt, Instant.class)); + return item; + } + +} diff --git a/dmp-backend/core/src/main/java/eu/eudat/query/lookup/UserContantInfoLookup.java b/dmp-backend/core/src/main/java/eu/eudat/query/lookup/UserContantInfoLookup.java new file mode 100644 index 000000000..343dd834d --- /dev/null +++ b/dmp-backend/core/src/main/java/eu/eudat/query/lookup/UserContantInfoLookup.java @@ -0,0 +1,72 @@ +package eu.eudat.query.lookup; + +import eu.eudat.commons.enums.ContactInfoType; +import eu.eudat.query.UserContactInfoQuery; +import gr.cite.tools.data.query.Lookup; +import gr.cite.tools.data.query.QueryFactory; + +import java.util.List; +import java.util.UUID; + +public class UserContantInfoLookup extends Lookup { + private List ids; + private List excludedIds; + private List userIds; + private List values; + private List types; + + + public List getIds() { + return ids; + } + + public void setIds(List ids) { + this.ids = ids; + } + + public List getExcludedIds() { + return excludedIds; + } + + public void setExcludedIds(List excludedIds) { + this.excludedIds = excludedIds; + } + + public List getUserIds() { + return userIds; + } + + public void setUserIds(List userIds) { + this.userIds = userIds; + } + + public List getValues() { + return values; + } + + public void setValues(List values) { + this.values = values; + } + + public List getTypes() { + return types; + } + + public void setTypes(List types) { + this.types = types; + } + + public UserContactInfoQuery enrich(QueryFactory queryFactory) { + UserContactInfoQuery query = queryFactory.query(UserContactInfoQuery.class); + if (this.ids != null) query.ids(this.ids); + if (this.excludedIds != null) query.excludedIds(this.excludedIds); + if (this.userIds != null) query.userIds(this.userIds); + if (this.values != null) query.values(this.values); + if (this.types != null) query.types(this.types); + + this.enrichCommon(query); + + return query; + } + +} diff --git a/dmp-backend/core/src/main/java/eu/eudat/query/lookup/UserCredentialLookup.java b/dmp-backend/core/src/main/java/eu/eudat/query/lookup/UserCredentialLookup.java new file mode 100644 index 000000000..ae5276ae0 --- /dev/null +++ b/dmp-backend/core/src/main/java/eu/eudat/query/lookup/UserCredentialLookup.java @@ -0,0 +1,63 @@ +package eu.eudat.query.lookup; + +import eu.eudat.query.UserCredentialQuery; +import eu.eudat.query.UserRoleQuery; +import gr.cite.tools.data.query.Lookup; +import gr.cite.tools.data.query.QueryFactory; + +import java.util.List; +import java.util.UUID; + +public class UserCredentialLookup extends Lookup { + private List ids; + + private List excludedIds; + private List userIds; + private List externalIds; + + + public List getIds() { + return ids; + } + + public void setIds(List ids) { + this.ids = ids; + } + + public List getExcludedIds() { + return excludedIds; + } + + public void setExcludedIds(List excludedIds) { + this.excludedIds = excludedIds; + } + + public List getUserIds() { + return userIds; + } + + public void setUserIds(List userIds) { + this.userIds = userIds; + } + + public List getExternalIds() { + return externalIds; + } + + public void setExternalIds(List externalIds) { + this.externalIds = externalIds; + } + + public UserCredentialQuery enrich(QueryFactory queryFactory) { + UserCredentialQuery query = queryFactory.query(UserCredentialQuery.class); + if (this.ids != null) query.ids(this.ids); + if (this.excludedIds != null) query.excludedIds(this.excludedIds); + if (this.userIds != null) query.userIds(this.userIds); + if (this.externalIds != null) query.externalIds(this.externalIds); + + this.enrichCommon(query); + + return query; + } + +} diff --git a/dmp-backend/core/src/main/java/eu/eudat/query/lookup/UserLookup.java b/dmp-backend/core/src/main/java/eu/eudat/query/lookup/UserLookup.java new file mode 100644 index 000000000..7bc5c340b --- /dev/null +++ b/dmp-backend/core/src/main/java/eu/eudat/query/lookup/UserLookup.java @@ -0,0 +1,69 @@ +package eu.eudat.query.lookup; + +import eu.eudat.commons.enums.DescriptionStatus; +import eu.eudat.commons.enums.IsActive; +import eu.eudat.elastic.query.DescriptionElasticQuery; +import eu.eudat.elastic.query.InnerObjectDmpElasticQuery; +import eu.eudat.query.DescriptionQuery; +import eu.eudat.query.UserQuery; +import gr.cite.tools.data.query.Lookup; +import gr.cite.tools.data.query.QueryFactory; + +import java.time.Instant; +import java.util.List; +import java.util.UUID; + +public class UserLookup extends Lookup { + + private String like; + + private List ids; + + private List excludedIds; + private List isActive; + + public String getLike() { + return like; + } + + public void setLike(String like) { + this.like = like; + } + + public List getIds() { + return ids; + } + + public void setIds(List ids) { + this.ids = ids; + } + + public List getExcludedIds() { + return excludedIds; + } + + public void setExcludedIds(List excludedIds) { + this.excludedIds = excludedIds; + } + + public List getIsActive() { + return isActive; + } + + public void setIsActive(List isActive) { + this.isActive = isActive; + } + + public UserQuery enrich(QueryFactory queryFactory) { + UserQuery query = queryFactory.query(UserQuery.class); + if (this.like != null) query.like(this.like); + if (this.ids != null) query.ids(this.ids); + if (this.excludedIds != null) query.excludedIds(this.excludedIds); + if (this.isActive != null) query.isActive(this.isActive); + + this.enrichCommon(query); + + return query; + } + +} diff --git a/dmp-backend/core/src/main/java/eu/eudat/query/lookup/UserRoleLookup.java b/dmp-backend/core/src/main/java/eu/eudat/query/lookup/UserRoleLookup.java new file mode 100644 index 000000000..8a9f00147 --- /dev/null +++ b/dmp-backend/core/src/main/java/eu/eudat/query/lookup/UserRoleLookup.java @@ -0,0 +1,64 @@ +package eu.eudat.query.lookup; + +import eu.eudat.commons.enums.IsActive; +import eu.eudat.query.UserQuery; +import eu.eudat.query.UserRoleQuery; +import gr.cite.tools.data.query.Lookup; +import gr.cite.tools.data.query.QueryFactory; + +import java.util.List; +import java.util.UUID; + +public class UserRoleLookup extends Lookup { + private List ids; + + private List excludedIds; + private List userIds; + private List roles; + + + public List getIds() { + return ids; + } + + public void setIds(List ids) { + this.ids = ids; + } + + public List getExcludedIds() { + return excludedIds; + } + + public void setExcludedIds(List excludedIds) { + this.excludedIds = excludedIds; + } + + public List getUserIds() { + return userIds; + } + + public void setUserIds(List userIds) { + this.userIds = userIds; + } + + public List getRoles() { + return roles; + } + + public void setRoles(List roles) { + this.roles = roles; + } + + public UserRoleQuery enrich(QueryFactory queryFactory) { + UserRoleQuery query = queryFactory.query(UserRoleQuery.class); + if (this.ids != null) query.ids(this.ids); + if (this.excludedIds != null) query.excludedIds(this.excludedIds); + if (this.userIds != null) query.userIds(this.userIds); + if (this.roles != null) query.roles(this.roles); + + this.enrichCommon(query); + + return query; + } + +} diff --git a/dmp-backend/core/src/main/java/eu/eudat/service/description/DescriptionServiceImpl.java b/dmp-backend/core/src/main/java/eu/eudat/service/description/DescriptionServiceImpl.java index 1192d2e0e..80fc57a63 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/service/description/DescriptionServiceImpl.java +++ b/dmp-backend/core/src/main/java/eu/eudat/service/description/DescriptionServiceImpl.java @@ -149,7 +149,7 @@ public class DescriptionServiceImpl implements DescriptionService { this.entityManager.flush(); this.eventBroker.emit(new DescriptionTouchedEvent(data.getId())); - return this.builderFactory.builder(DescriptionBuilder.class).authorize(AuthorizationFlags.OwnerOrPermissionOrMemberOrPublic).build(BaseFieldSet.build(fields, Description._id), data); + return this.builderFactory.builder(DescriptionBuilder.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermissionOrPublic).build(BaseFieldSet.build(fields, Description._id), data); } private @NotNull PropertyDefinitionEntity buildPropertyDefinitionEntity(PropertyDefinitionPersist persist){ diff --git a/dmp-backend/core/src/main/java/eu/eudat/service/descriptiontemplate/DescriptionTemplateServiceImpl.java b/dmp-backend/core/src/main/java/eu/eudat/service/descriptiontemplate/DescriptionTemplateServiceImpl.java index b27c0005c..5da6bc1ca 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/service/descriptiontemplate/DescriptionTemplateServiceImpl.java +++ b/dmp-backend/core/src/main/java/eu/eudat/service/descriptiontemplate/DescriptionTemplateServiceImpl.java @@ -14,7 +14,7 @@ import eu.eudat.commons.types.descriptiontemplate.importexport.*; import eu.eudat.convention.ConventionService; import eu.eudat.data.DescriptionTemplateEntity; import eu.eudat.data.UserDescriptionTemplateEntity; -import eu.eudat.data.old.UserInfo; +import eu.eudat.data.UserEntity; import eu.eudat.errorcode.ErrorThesaurusProperties; import eu.eudat.model.DescriptionTemplate; import eu.eudat.model.builder.DescriptionTemplateBuilder; @@ -39,7 +39,6 @@ import eu.eudat.service.responseutils.ResponseUtilsService; import gr.cite.commons.web.authz.service.AuthorizationService; import gr.cite.tools.data.builder.BuilderFactory; import gr.cite.tools.data.deleter.DeleterFactory; -import gr.cite.tools.data.query.Ordering; import gr.cite.tools.data.query.QueryFactory; import gr.cite.tools.exception.MyApplicationException; import gr.cite.tools.exception.MyForbiddenException; @@ -175,7 +174,7 @@ public class DescriptionTemplateServiceImpl implements DescriptionTemplateServic this.entityManager.flush(); - return this.builderFactory.builder(DescriptionTemplateBuilder.class).authorize(AuthorizationFlags.OwnerOrPermissionOrMemberOrPublic).build(BaseFieldSet.build(fields, DescriptionTemplate._id), data); + return this.builderFactory.builder(DescriptionTemplateBuilder.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermissionOrPublic).build(BaseFieldSet.build(fields, DescriptionTemplate._id), data); } private void persistUsers(UUID id, List users) throws InvalidApplicationException { @@ -203,7 +202,7 @@ public class DescriptionTemplateServiceImpl implements DescriptionTemplateServic } private void sendJoinMail(UserDescriptionTemplateEntity userDatasetProfile) { SimpleMail mail = new SimpleMail(); - UserInfo user = this.entityManager.find(UserInfo.class, userDatasetProfile.getUser()); + UserEntity user = this.entityManager.find(UserEntity.class, userDatasetProfile.getUser()); DescriptionTemplateEntity descriptionTemplate = this.queryFactory.query(DescriptionTemplateQuery.class).isActive(IsActive.Active).ids(userDatasetProfile.getDescriptionTemplate()).first(); mail.setSubject(environment.getProperty("admin.mail.subject").replace( "{templateName}", descriptionTemplate.getLabel())); @@ -213,7 +212,8 @@ public class DescriptionTemplateServiceImpl implements DescriptionTemplateServic content = content.replace("{host}", this.environment.getProperty("dmp.domain")); content = content.replace("{templateID}", descriptionTemplate.getId().toString()); mail.setContent(content); - mail.setTo(user.getEmail()); + //TODO: GetEmail +// mail.setTo(user.getEmail()); try { this.mailService.sendSimpleMail(mail); } catch (Exception ex) { @@ -382,8 +382,8 @@ public class DescriptionTemplateServiceImpl implements DescriptionTemplateServic this.authorizationService.authorizeForce(Permission.CloneDescriptionTemplate); - DescriptionTemplateQuery query = this.queryFactory.query(DescriptionTemplateQuery.class).authorize(AuthorizationFlags.OwnerOrPermissionOrMemberOrPublic).ids(id); - DescriptionTemplate model = this.builderFactory.builder(DescriptionTemplateBuilder.class).authorize(AuthorizationFlags.OwnerOrPermissionOrMemberOrPublic).build(fields, query.firstAs(fields)); + DescriptionTemplateQuery query = this.queryFactory.query(DescriptionTemplateQuery.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermissionOrPublic).ids(id); + DescriptionTemplate model = this.builderFactory.builder(DescriptionTemplateBuilder.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermissionOrPublic).build(fields, query.firstAs(fields)); if (model == null) throw new MyNotFoundException(messageSource.getMessage("General_ItemNotFound", new Object[]{id, DescriptionTemplate.class.getSimpleName()}, LocaleContextHolder.getLocale())); model.setLabel(model.getLabel() + " new "); @@ -495,7 +495,7 @@ public class DescriptionTemplateServiceImpl implements DescriptionTemplateServic this.entityManager.flush(); - return this.builderFactory.builder(DescriptionTemplateBuilder.class).authorize(AuthorizationFlags.OwnerOrPermissionOrMemberOrPublic).build(BaseFieldSet.build(fields, DescriptionTemplate._id), data); + return this.builderFactory.builder(DescriptionTemplateBuilder.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermissionOrPublic).build(BaseFieldSet.build(fields, DescriptionTemplate._id), data); } //endregion diff --git a/dmp-backend/core/src/main/java/eu/eudat/service/descriptiontemplatetype/DescriptionTemplateTypeServiceImpl.java b/dmp-backend/core/src/main/java/eu/eudat/service/descriptiontemplatetype/DescriptionTemplateTypeServiceImpl.java index 4aec9e709..b2d082b4b 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/service/descriptiontemplatetype/DescriptionTemplateTypeServiceImpl.java +++ b/dmp-backend/core/src/main/java/eu/eudat/service/descriptiontemplatetype/DescriptionTemplateTypeServiceImpl.java @@ -106,7 +106,7 @@ public class DescriptionTemplateTypeServiceImpl implements DescriptionTemplateTy this.entityManager.flush(); this.eventBroker.emit(new DescriptionTemplateTypeTouchedEvent(data.getId())); - return this.builderFactory.builder(DescriptionTemplateTypeBuilder.class).authorize(AuthorizationFlags.OwnerOrPermissionOrMemberOrPublic).build(BaseFieldSet.build(fields, DescriptionTemplateType._id), data); + return this.builderFactory.builder(DescriptionTemplateTypeBuilder.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermissionOrPublic).build(BaseFieldSet.build(fields, DescriptionTemplateType._id), data); } public void deleteAndSave(UUID id) throws MyForbiddenException, InvalidApplicationException { diff --git a/dmp-backend/core/src/main/java/eu/eudat/service/dmp/DmpServiceImpl.java b/dmp-backend/core/src/main/java/eu/eudat/service/dmp/DmpServiceImpl.java index bf3d9ecb9..a5909d7eb 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/service/dmp/DmpServiceImpl.java +++ b/dmp-backend/core/src/main/java/eu/eudat/service/dmp/DmpServiceImpl.java @@ -29,7 +29,6 @@ import eu.eudat.service.description.DescriptionService; import gr.cite.commons.web.authz.service.AuthorizationService; import gr.cite.tools.data.builder.BuilderFactory; import gr.cite.tools.data.deleter.DeleterFactory; -import gr.cite.tools.data.query.Ordering; import gr.cite.tools.data.query.QueryFactory; import gr.cite.tools.exception.MyApplicationException; import gr.cite.tools.exception.MyForbiddenException; @@ -38,7 +37,6 @@ import gr.cite.tools.exception.MyValidationException; import gr.cite.tools.fieldset.BaseFieldSet; import gr.cite.tools.fieldset.FieldSet; import gr.cite.tools.logging.LoggerService; -import gr.cite.tools.logging.MapLogEntry; import jakarta.persistence.EntityManager; import jakarta.xml.bind.JAXBException; import org.jetbrains.annotations.NotNull; @@ -130,7 +128,7 @@ public class DmpServiceImpl implements DmpService { this.eventBroker.emit(new DmpTouchedEvent(data.getId())); - return this.builderFactory.builder(DmpBuilder.class).authorize(AuthorizationFlags.OwnerOrPermissionOrMemberOrPublic).build(BaseFieldSet.build(fields, Dmp._id, Dmp._hash), data); + return this.builderFactory.builder(DmpBuilder.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermissionOrPublic).build(BaseFieldSet.build(fields, Dmp._id, Dmp._hash), data); } public void deleteAndSave(UUID id) throws MyForbiddenException, InvalidApplicationException, IOException { @@ -241,7 +239,7 @@ public class DmpServiceImpl implements DmpService { public Dmp buildClone(CloneDmpPersist model, FieldSet fields) throws MyForbiddenException, MyValidationException, MyApplicationException, MyNotFoundException { this.authorizationService.authorizeForce(Permission.CloneDmp); - DmpEntity existingDmpEntity = this.queryFactory.query(DmpQuery.class).authorize(AuthorizationFlags.OwnerOrPermissionOrMemberOrPublic).ids(model.getId()).firstAs(fields); + DmpEntity existingDmpEntity = this.queryFactory.query(DmpQuery.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermissionOrPublic).ids(model.getId()).firstAs(fields); if (!this.conventionService.isValidGuid(model.getId()) || existingDmpEntity == null) throw new MyNotFoundException(messageSource.getMessage("General_ItemNotFound", new Object[]{model.getId(), Dmp.class.getSimpleName()}, LocaleContextHolder.getLocale())); diff --git a/dmp-backend/core/src/main/java/eu/eudat/service/dmpblueprint/DmpBlueprintServiceImpl.java b/dmp-backend/core/src/main/java/eu/eudat/service/dmpblueprint/DmpBlueprintServiceImpl.java index eb53529b1..782473a2e 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/service/dmpblueprint/DmpBlueprintServiceImpl.java +++ b/dmp-backend/core/src/main/java/eu/eudat/service/dmpblueprint/DmpBlueprintServiceImpl.java @@ -133,7 +133,7 @@ public class DmpBlueprintServiceImpl implements DmpBlueprintService { this.entityManager.flush(); - return this.builderFactory.builder(DmpBlueprintBuilder.class).authorize(AuthorizationFlags.OwnerOrPermissionOrMemberOrPublic).build(BaseFieldSet.build(fields, DmpBlueprint._id), data); + return this.builderFactory.builder(DmpBlueprintBuilder.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermissionOrPublic).build(BaseFieldSet.build(fields, DmpBlueprint._id), data); } private @NotNull DefinitionEntity buildDefinitionEntity(DefinitionPersist persist){ @@ -260,8 +260,8 @@ public class DmpBlueprintServiceImpl implements DmpBlueprintService { this.authorizationService.authorizeForce(Permission.CloneDmpBlueprint); - DmpBlueprintQuery query = this.queryFactory.query(DmpBlueprintQuery.class).authorize(AuthorizationFlags.OwnerOrPermissionOrMemberOrPublic).ids(id); - DmpBlueprint model = this.builderFactory.builder(DmpBlueprintBuilder.class).authorize(AuthorizationFlags.OwnerOrPermissionOrMemberOrPublic).build(fields, query.firstAs(fields)); + DmpBlueprintQuery query = this.queryFactory.query(DmpBlueprintQuery.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermissionOrPublic).ids(id); + DmpBlueprint model = this.builderFactory.builder(DmpBlueprintBuilder.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermissionOrPublic).build(fields, query.firstAs(fields)); if (model == null) throw new MyNotFoundException(messageSource.getMessage("General_ItemNotFound", new Object[]{id, DmpBlueprint.class.getSimpleName()}, LocaleContextHolder.getLocale())); model.setLabel(model.getLabel() + " new "); diff --git a/dmp-backend/core/src/main/java/eu/eudat/service/entitydoi/EntityDoiServiceImpl.java b/dmp-backend/core/src/main/java/eu/eudat/service/entitydoi/EntityDoiServiceImpl.java index 48b3f11f3..ce469341a 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/service/entitydoi/EntityDoiServiceImpl.java +++ b/dmp-backend/core/src/main/java/eu/eudat/service/entitydoi/EntityDoiServiceImpl.java @@ -109,7 +109,7 @@ public class EntityDoiServiceImpl implements EntityDoiService { this.entityManager.flush(); this.eventBroker.emit(new EntityDoiTouchedEvent(data.getId())); - return this.builderFactory.builder(EntityDoiBuilder.class).authorize(AuthorizationFlags.OwnerOrPermissionOrMemberOrPublic).build(BaseFieldSet.build(fields, EntityDoi._id), data); + return this.builderFactory.builder(EntityDoiBuilder.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermissionOrPublic).build(BaseFieldSet.build(fields, EntityDoi._id), data); } public void deleteAndSave(UUID id) throws MyForbiddenException, InvalidApplicationException { diff --git a/dmp-backend/core/src/main/java/eu/eudat/service/referencetype/ReferenceTypeServiceImpl.java b/dmp-backend/core/src/main/java/eu/eudat/service/referencetype/ReferenceTypeServiceImpl.java index dcf572ebf..0b039693f 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/service/referencetype/ReferenceTypeServiceImpl.java +++ b/dmp-backend/core/src/main/java/eu/eudat/service/referencetype/ReferenceTypeServiceImpl.java @@ -100,7 +100,7 @@ public class ReferenceTypeServiceImpl implements ReferenceTypeService { this.entityManager.flush(); - return this.builderFactory.builder(ReferenceTypeBuilder.class).authorize(AuthorizationFlags.OwnerOrPermissionOrMemberOrPublic).build(BaseFieldSet.build(fields, ReferenceType._id), data); + return this.builderFactory.builder(ReferenceTypeBuilder.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermissionOrPublic).build(BaseFieldSet.build(fields, ReferenceType._id), data); } private @NotNull ReferenceTypeDefinitionEntity buildDefinitionEntity(ReferenceTypeDefinitionPersist persist){ diff --git a/dmp-backend/core/src/main/java/eu/eudat/service/supportivematerial/SupportiveMaterialServiceImpl.java b/dmp-backend/core/src/main/java/eu/eudat/service/supportivematerial/SupportiveMaterialServiceImpl.java index 962d80d71..0c9cd9569 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/service/supportivematerial/SupportiveMaterialServiceImpl.java +++ b/dmp-backend/core/src/main/java/eu/eudat/service/supportivematerial/SupportiveMaterialServiceImpl.java @@ -128,7 +128,7 @@ public class SupportiveMaterialServiceImpl implements SupportiveMaterialService{ if (d == null) throw new MyNotFoundException(messageSource.getMessage("General_ItemNotFound", new Object[]{model.getId(), SupportiveMaterial.class.getSimpleName()}, LocaleContextHolder.getLocale())); } else { - List data = this.queryFactory.query(SupportiveMaterialQuery.class).authorize(AuthorizationFlags.OwnerOrPermissionOrMemberOrPublic).languageCodes(model.getLanguageCode()).types(model.getType()).collect(); + List data = this.queryFactory.query(SupportiveMaterialQuery.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermissionOrPublic).languageCodes(model.getLanguageCode()).types(model.getType()).collect(); if(data != null && !data.isEmpty()){ throw new MyApplicationException("Could not create a new Data with same type and lang code !"); @@ -150,7 +150,7 @@ public class SupportiveMaterialServiceImpl implements SupportiveMaterialService{ this.entityManager.flush(); - return this.builderFactory.builder(SupportiveMaterialBuilder.class).authorize(AuthorizationFlags.OwnerOrPermissionOrMemberOrPublic).build(BaseFieldSet.build(fields, SupportiveMaterial._id), d); + return this.builderFactory.builder(SupportiveMaterialBuilder.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermissionOrPublic).build(BaseFieldSet.build(fields, SupportiveMaterial._id), d); } public void deleteAndSave(UUID id) throws MyForbiddenException, InvalidApplicationException { diff --git a/dmp-backend/core/src/main/java/eu/eudat/service/user/settings/UserSettingsServiceImpl.java b/dmp-backend/core/src/main/java/eu/eudat/service/user/settings/UserSettingsServiceImpl.java index b79db82af..bedbee0d5 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/service/user/settings/UserSettingsServiceImpl.java +++ b/dmp-backend/core/src/main/java/eu/eudat/service/user/settings/UserSettingsServiceImpl.java @@ -96,7 +96,7 @@ public class UserSettingsServiceImpl implements UserSettingsService { this.entityManager.flush(); - return this.builderFactory.builder(UserSettingsBuilder.class).authorize(AuthorizationFlags.OwnerOrPermissionOrMemberOrPublic).build(BaseFieldSet.build(fields, UserSettings._id, UserSettings._key), data); + return this.builderFactory.builder(UserSettingsBuilder.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermissionOrPublic).build(BaseFieldSet.build(fields, UserSettings._id, UserSettings._key), data); } } diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/DatasetWizardUserDmpCriteria.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/DatasetWizardUserDmpCriteria.java index 60833102d..71f29e8cb 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/DatasetWizardUserDmpCriteria.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/DatasetWizardUserDmpCriteria.java @@ -2,16 +2,16 @@ package eu.eudat.data.dao.criteria; import eu.eudat.data.DmpEntity; -import eu.eudat.data.old.UserInfo; +import eu.eudat.data.UserEntity; public class DatasetWizardUserDmpCriteria extends Criteria { - private UserInfo userInfo; + private UserEntity userInfo; - public UserInfo getUserInfo() { + public UserEntity getUserInfo() { return userInfo; } - public void setUserInfo(UserInfo userInfo) { + public void setUserInfo(UserEntity userInfo) { this.userInfo = userInfo; } } diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/LockCriteria.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/LockCriteria.java index 7a888209e..ccdc7eff9 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/LockCriteria.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/LockCriteria.java @@ -1,7 +1,7 @@ package eu.eudat.data.dao.criteria; import eu.eudat.data.old.Lock; -import eu.eudat.data.old.UserInfo; +import eu.eudat.data.UserEntity; import java.util.Date; import java.util.UUID; @@ -9,7 +9,7 @@ import java.util.UUID; public class LockCriteria extends Criteria { private UUID target; - private UserInfo lockedBy; + private UserEntity lockedBy; private Date touchedAt; public UUID getTarget() { @@ -20,11 +20,11 @@ public class LockCriteria extends Criteria { this.target = target; } - public UserInfo getLockedBy() { + public UserEntity getLockedBy() { return lockedBy; } - public void setLockedBy(UserInfo lockedBy) { + public void setLockedBy(UserEntity lockedBy) { this.lockedBy = lockedBy; } diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/UserInfoCriteria.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/UserInfoCriteria.java index 82d2c6247..587bafa6f 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/UserInfoCriteria.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/UserInfoCriteria.java @@ -1,11 +1,11 @@ package eu.eudat.data.dao.criteria; -import eu.eudat.data.old.UserInfo; +import eu.eudat.data.UserEntity; import java.util.List; -public class UserInfoCriteria extends Criteria { +public class UserInfoCriteria extends Criteria { private String email; private List appRoles; private String collaboratorLike; diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/UserRoleCriteria.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/UserRoleCriteria.java index d9e8e02d1..f23f05456 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/UserRoleCriteria.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/UserRoleCriteria.java @@ -1,13 +1,13 @@ package eu.eudat.data.dao.criteria; -import eu.eudat.data.old.UserRole; +import eu.eudat.data.UserRoleEntity; import java.util.List; /** * Created by ikalyvas on 2/1/2018. */ -public class UserRoleCriteria extends Criteria { +public class UserRoleCriteria extends Criteria { private List appRoles; public List getAppRoles() { diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DMPDao.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DMPDao.java index c183e55c7..f565b96ad 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DMPDao.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DMPDao.java @@ -4,7 +4,7 @@ import eu.eudat.data.DmpEntity; import eu.eudat.data.dao.DatabaseAccessLayer; import eu.eudat.data.dao.criteria.DataManagementPlanCriteria; import eu.eudat.data.dao.criteria.DatasetWizardUserDmpCriteria; -import eu.eudat.data.old.UserInfo; +import eu.eudat.data.UserEntity; import eu.eudat.queryable.QueryableList; import java.util.List; @@ -14,7 +14,7 @@ public interface DMPDao extends DatabaseAccessLayer { QueryableList getWithCriteria(DataManagementPlanCriteria criteria); - QueryableList getUserDmps(DatasetWizardUserDmpCriteria datasetWizardAutocompleteRequest, UserInfo userInfo); + QueryableList getUserDmps(DatasetWizardUserDmpCriteria datasetWizardAutocompleteRequest, UserEntity userInfo); QueryableList getAuthenticated(QueryableList query, UUID principalId, List roles); diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DMPDaoImpl.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DMPDaoImpl.java index d2158f115..ef89f7afc 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DMPDaoImpl.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DMPDaoImpl.java @@ -7,7 +7,7 @@ import eu.eudat.data.dao.DatabaseAccess; import eu.eudat.data.dao.criteria.DataManagementPlanCriteria; import eu.eudat.data.dao.criteria.DatasetWizardUserDmpCriteria; import eu.eudat.data.dao.databaselayer.service.DatabaseService; -import eu.eudat.data.old.UserInfo; +import eu.eudat.data.UserEntity; import eu.eudat.queryable.QueryableList; import eu.eudat.queryable.types.FieldSelectionType; import eu.eudat.queryable.types.SelectionField; @@ -123,7 +123,7 @@ public class DMPDaoImpl extends DatabaseAccess implements DMPDao { } @Override - public QueryableList getUserDmps(DatasetWizardUserDmpCriteria datasetWizardUserDmpCriteria, UserInfo userInfo) { + public QueryableList getUserDmps(DatasetWizardUserDmpCriteria datasetWizardUserDmpCriteria, UserEntity userInfo) { QueryableList query = getDatabaseService().getQueryable(DmpEntity.class).where((builder, root) -> builder.or(builder.equal(root.get("creator"), userInfo), builder.isMember(userInfo, root.get("users")))); if (datasetWizardUserDmpCriteria.getLike() != null && !datasetWizardUserDmpCriteria.getLike().isEmpty()) { query.where((builder, root) -> builder.like(root.get("label"), "%" + datasetWizardUserDmpCriteria.getLike() + "%")); diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DatasetDao.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DatasetDao.java index d2c87cfe6..f492b6733 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DatasetDao.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DatasetDao.java @@ -3,7 +3,7 @@ package eu.eudat.data.dao.entities; import eu.eudat.data.dao.DatabaseAccessLayer; import eu.eudat.data.dao.criteria.DatasetCriteria; import eu.eudat.data.DescriptionEntity; -import eu.eudat.data.old.UserInfo; +import eu.eudat.data.UserEntity; import eu.eudat.queryable.QueryableList; import javax.management.InvalidApplicationException; @@ -16,7 +16,7 @@ public interface DatasetDao extends DatabaseAccessLayer QueryableList filterFromElastic(DatasetCriteria criteria, List ids); - QueryableList getAuthenticated(QueryableList query, UserInfo principal, List roles); + QueryableList getAuthenticated(QueryableList query, UserEntity principal, List roles); DescriptionEntity isPublicDataset(UUID id) throws InvalidApplicationException; diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DatasetDaoImpl.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DatasetDaoImpl.java index f33ec23de..a0521ed48 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DatasetDaoImpl.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DatasetDaoImpl.java @@ -2,12 +2,11 @@ package eu.eudat.data.dao.entities; import eu.eudat.commons.enums.DescriptionStatus; import eu.eudat.commons.enums.IsActive; -import eu.eudat.data.DmpEntity; import eu.eudat.data.dao.DatabaseAccess; import eu.eudat.data.dao.criteria.DatasetCriteria; import eu.eudat.data.dao.databaselayer.service.DatabaseService; import eu.eudat.data.DescriptionEntity; -import eu.eudat.data.old.UserInfo; +import eu.eudat.data.UserEntity; import eu.eudat.queryable.QueryableList; import eu.eudat.queryable.types.FieldSelectionType; import eu.eudat.queryable.types.SelectionField; @@ -123,7 +122,7 @@ public class DatasetDaoImpl extends DatabaseAccess implements } @Override - public QueryableList getAuthenticated(QueryableList query, UserInfo principal, List roles) { + public QueryableList getAuthenticated(QueryableList query, UserEntity principal, List roles) { if (roles != null && !roles.isEmpty()) { query.where((builder, root) -> { Join userJoin = root.join("dmp", JoinType.LEFT).join("users", JoinType.LEFT); diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/FunderDao.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/FunderDao.java index 84309d814..f0321f85b 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/FunderDao.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/FunderDao.java @@ -3,7 +3,7 @@ package eu.eudat.data.dao.entities; import eu.eudat.data.dao.DatabaseAccessLayer; import eu.eudat.data.dao.criteria.FunderCriteria; import eu.eudat.data.old.Funder; -import eu.eudat.data.old.UserInfo; +import eu.eudat.data.UserEntity; import eu.eudat.queryable.QueryableList; import java.util.UUID; @@ -12,5 +12,5 @@ public interface FunderDao extends DatabaseAccessLayer { QueryableList getWithCritetia(FunderCriteria criteria); - QueryableList getAuthenticated(QueryableList query, UserInfo principal); + QueryableList getAuthenticated(QueryableList query, UserEntity principal); } diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/FunderDaoImpl.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/FunderDaoImpl.java index 395699416..00e0228e4 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/FunderDaoImpl.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/FunderDaoImpl.java @@ -4,7 +4,7 @@ import eu.eudat.data.dao.DatabaseAccess; import eu.eudat.data.dao.criteria.FunderCriteria; import eu.eudat.data.dao.databaselayer.service.DatabaseService; import eu.eudat.data.old.Funder; -import eu.eudat.data.old.UserInfo; +import eu.eudat.data.UserEntity; import eu.eudat.queryable.QueryableList; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -39,7 +39,7 @@ public class FunderDaoImpl extends DatabaseAccess implements FunderDao { } @Override - public QueryableList getAuthenticated(QueryableList query, UserInfo principal) { + public QueryableList getAuthenticated(QueryableList query, UserEntity principal) { query.where((builder, root) -> builder.equal(root.get("creationUser"), principal)); return query; } diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/GrantDao.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/GrantDao.java index c31f7914d..25986b2bb 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/GrantDao.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/GrantDao.java @@ -3,7 +3,7 @@ package eu.eudat.data.dao.entities; import eu.eudat.data.dao.DatabaseAccessLayer; import eu.eudat.data.dao.criteria.GrantCriteria; import eu.eudat.data.old.Grant; -import eu.eudat.data.old.UserInfo; +import eu.eudat.data.UserEntity; import eu.eudat.queryable.QueryableList; import java.util.UUID; @@ -12,6 +12,6 @@ public interface GrantDao extends DatabaseAccessLayer { QueryableList getWithCriteria(GrantCriteria criteria); - QueryableList getAuthenticated(QueryableList query, UserInfo principal); + QueryableList getAuthenticated(QueryableList query, UserEntity principal); } \ No newline at end of file diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/GrantDaoImpl.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/GrantDaoImpl.java index 3fa6fed93..56181a3e5 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/GrantDaoImpl.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/GrantDaoImpl.java @@ -6,7 +6,7 @@ import eu.eudat.data.dao.DatabaseAccess; import eu.eudat.data.dao.criteria.GrantCriteria; import eu.eudat.data.dao.databaselayer.service.DatabaseService; import eu.eudat.data.old.Grant; -import eu.eudat.data.old.UserInfo; +import eu.eudat.data.UserEntity; import eu.eudat.queryable.QueryableList; import eu.eudat.types.grant.GrantStateType; import org.springframework.beans.factory.annotation.Autowired; @@ -86,7 +86,7 @@ public class GrantDaoImpl extends DatabaseAccess implements GrantDao { return this.getDatabaseService().getQueryable(Grant.class); } - public QueryableList getAuthenticated(QueryableList query, UserInfo principal) { + public QueryableList getAuthenticated(QueryableList query, UserEntity principal) { query.where((builder, root) -> builder.equal(root.get("creationUser").get("id"), principal.getId())).distinct(); return query; } diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/OrganisationDao.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/OrganisationDao.java index 7ce34b6f4..97c8dc8b4 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/OrganisationDao.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/OrganisationDao.java @@ -3,7 +3,7 @@ package eu.eudat.data.dao.entities; import eu.eudat.data.dao.DatabaseAccessLayer; import eu.eudat.data.dao.criteria.OrganisationCriteria; import eu.eudat.data.old.Organisation; -import eu.eudat.data.old.UserInfo; +import eu.eudat.data.UserEntity; import eu.eudat.queryable.QueryableList; import java.util.UUID; @@ -11,6 +11,6 @@ import java.util.UUID; public interface OrganisationDao extends DatabaseAccessLayer { QueryableList getWithCriteria(OrganisationCriteria criteria); - QueryableList getAuthenticated(QueryableList query, UserInfo principal); + QueryableList getAuthenticated(QueryableList query, UserEntity principal); } \ No newline at end of file diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/OrganisationDaoImpl.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/OrganisationDaoImpl.java index d8a5de2de..b05647864 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/OrganisationDaoImpl.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/OrganisationDaoImpl.java @@ -6,7 +6,7 @@ import eu.eudat.data.dao.DatabaseAccess; import eu.eudat.data.dao.criteria.OrganisationCriteria; import eu.eudat.data.dao.databaselayer.service.DatabaseService; import eu.eudat.data.old.Organisation; -import eu.eudat.data.old.UserInfo; +import eu.eudat.data.UserEntity; import eu.eudat.queryable.QueryableList; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Async; @@ -75,7 +75,7 @@ public class OrganisationDaoImpl extends DatabaseAccess implements return CompletableFuture.supplyAsync(() -> this.createOrUpdate(item)); } - public QueryableList getAuthenticated(QueryableList query, UserInfo principal) { + public QueryableList getAuthenticated(QueryableList query, UserEntity principal) { query.where((builder, root) -> builder.equal(root.join("dmps").join("users").get("user"), principal)); return query; } diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/ProjectDao.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/ProjectDao.java index e5194705d..042cacb72 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/ProjectDao.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/ProjectDao.java @@ -3,7 +3,7 @@ package eu.eudat.data.dao.entities; import eu.eudat.data.dao.DatabaseAccessLayer; import eu.eudat.data.dao.criteria.ProjectCriteria; import eu.eudat.data.old.Project; -import eu.eudat.data.old.UserInfo; +import eu.eudat.data.UserEntity; import eu.eudat.queryable.QueryableList; import java.util.UUID; @@ -12,5 +12,5 @@ public interface ProjectDao extends DatabaseAccessLayer { QueryableList getWithCritetia(ProjectCriteria criteria); - QueryableList getAuthenticated(QueryableList query, UserInfo principal); + QueryableList getAuthenticated(QueryableList query, UserEntity principal); } diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/ProjectDaoImpl.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/ProjectDaoImpl.java index 67270cb21..10985800f 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/ProjectDaoImpl.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/ProjectDaoImpl.java @@ -4,7 +4,7 @@ import eu.eudat.data.dao.DatabaseAccess; import eu.eudat.data.dao.criteria.ProjectCriteria; import eu.eudat.data.dao.databaselayer.service.DatabaseService; import eu.eudat.data.old.Project; -import eu.eudat.data.old.UserInfo; +import eu.eudat.data.UserEntity; import eu.eudat.queryable.QueryableList; import org.springframework.stereotype.Service; @@ -38,7 +38,7 @@ public class ProjectDaoImpl extends DatabaseAccess implements ProjectDa return query; } - public QueryableList getAuthenticated(QueryableList query, UserInfo principal) { + public QueryableList getAuthenticated(QueryableList query, UserEntity principal) { query.where((builder, root) -> builder.or(builder.equal(root.get("creationUser"), principal), builder.equal(root.join("dmps", JoinType.LEFT).join("users", JoinType.LEFT).join("user", JoinType.LEFT).get("id"), principal.getId()))).distinct(); return query; } diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/UserInfoDao.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/UserInfoDao.java index 2bc61bf72..3abbc3f8c 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/UserInfoDao.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/UserInfoDao.java @@ -2,14 +2,14 @@ package eu.eudat.data.dao.entities; import eu.eudat.data.dao.DatabaseAccessLayer; import eu.eudat.data.dao.criteria.UserInfoCriteria; -import eu.eudat.data.old.UserInfo; +import eu.eudat.data.UserEntity; import eu.eudat.queryable.QueryableList; import java.util.UUID; -public interface UserInfoDao extends DatabaseAccessLayer { +public interface UserInfoDao extends DatabaseAccessLayer { - QueryableList getWithCriteria(UserInfoCriteria criteria); + QueryableList getWithCriteria(UserInfoCriteria criteria); - QueryableList getAuthenticated(QueryableList users, UUID principalId); + QueryableList getAuthenticated(QueryableList users, UUID principalId); } \ No newline at end of file diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/UserInfoDaoImpl.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/UserInfoDaoImpl.java index 416e5a5cc..aa5a6b4f3 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/UserInfoDaoImpl.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/UserInfoDaoImpl.java @@ -3,7 +3,7 @@ package eu.eudat.data.dao.entities; import eu.eudat.data.dao.DatabaseAccess; import eu.eudat.data.dao.criteria.UserInfoCriteria; import eu.eudat.data.dao.databaselayer.service.DatabaseService; -import eu.eudat.data.old.UserInfo; +import eu.eudat.data.UserEntity; import eu.eudat.queryable.QueryableList; import eu.eudat.queryable.types.FieldSelectionType; import eu.eudat.queryable.types.SelectionField; @@ -17,16 +17,16 @@ import java.util.UUID; import java.util.concurrent.CompletableFuture; @Component("userInfoDao") -public class UserInfoDaoImpl extends DatabaseAccess implements UserInfoDao { +public class UserInfoDaoImpl extends DatabaseAccess implements UserInfoDao { @Autowired - public UserInfoDaoImpl(DatabaseService databaseService) { + public UserInfoDaoImpl(DatabaseService databaseService) { super(databaseService); } @Override - public QueryableList getWithCriteria(UserInfoCriteria criteria) { - QueryableList users = this.getDatabaseService().getQueryable(UserInfo.class); + public QueryableList getWithCriteria(UserInfoCriteria criteria) { + QueryableList users = this.getDatabaseService().getQueryable(UserEntity.class); users.where(((builder, root) -> builder.equal(root.get("userStatus"), 0))); if (criteria.getAppRoles() != null && !criteria.getAppRoles().isEmpty()) users.where((builder, root) -> root.join("userRoles").get("role").in(criteria.getAppRoles())); @@ -40,7 +40,7 @@ public class UserInfoDaoImpl extends DatabaseAccess implements UserInf } @Override - public QueryableList getAuthenticated(QueryableList users, UUID principalId) { + public QueryableList getAuthenticated(QueryableList users, UUID principalId) { users.initSubQuery(UUID.class).where((builder, root) -> builder.and(root.join("dmps").get("id").in( users.subQuery((builder1, root1) -> builder1.equal(root1.get("id"), principalId), @@ -50,33 +50,33 @@ public class UserInfoDaoImpl extends DatabaseAccess implements UserInf } @Override - public UserInfo createOrUpdate(UserInfo item) { - return this.getDatabaseService().createOrUpdate(item, UserInfo.class); + public UserEntity createOrUpdate(UserEntity item) { + return this.getDatabaseService().createOrUpdate(item, UserEntity.class); } @Override - public UserInfo find(UUID id) throws InvalidApplicationException { - return this.getDatabaseService().getQueryable(UserInfo.class).where((builder, root) -> builder.equal(root.get("id"), id)).getSingle(); + public UserEntity find(UUID id) throws InvalidApplicationException { + return this.getDatabaseService().getQueryable(UserEntity.class).where((builder, root) -> builder.equal(root.get("id"), id)).getSingle(); } @Override - public void delete(UserInfo item) { + public void delete(UserEntity item) { this.getDatabaseService().delete(item); } @Override - public QueryableList asQueryable() { - return this.getDatabaseService().getQueryable(UserInfo.class); + public QueryableList asQueryable() { + return this.getDatabaseService().getQueryable(UserEntity.class); } @Async @Override - public CompletableFuture createOrUpdateAsync(UserInfo item) { + public CompletableFuture createOrUpdateAsync(UserEntity item) { return CompletableFuture.supplyAsync(() -> this.createOrUpdate(item)); } @Override - public UserInfo find(UUID id, String hint) { + public UserEntity find(UUID id, String hint) { throw new UnsupportedOperationException(); } } \ No newline at end of file diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/UserRoleDao.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/UserRoleDao.java index 4c3a407f3..7c268cac0 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/UserRoleDao.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/UserRoleDao.java @@ -2,8 +2,8 @@ package eu.eudat.data.dao.entities; import eu.eudat.data.dao.DatabaseAccessLayer; import eu.eudat.data.dao.criteria.UserRoleCriteria; -import eu.eudat.data.old.UserInfo; -import eu.eudat.data.old.UserRole; +import eu.eudat.data.UserEntity; +import eu.eudat.data.UserRoleEntity; import eu.eudat.queryable.QueryableList; import javax.management.InvalidApplicationException; @@ -11,9 +11,9 @@ import java.util.List; import java.util.UUID; -public interface UserRoleDao extends DatabaseAccessLayer { +public interface UserRoleDao extends DatabaseAccessLayer { - QueryableList getWithCriteria(UserRoleCriteria criteria); + QueryableList getWithCriteria(UserRoleCriteria criteria); - List getUserRoles(UserInfo userInfo) throws InvalidApplicationException; + List getUserRoles(UserEntity userInfo) throws InvalidApplicationException; } diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/UserRoleDaoImpl.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/UserRoleDaoImpl.java index 25278a7c6..7c0c4b158 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/UserRoleDaoImpl.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/UserRoleDaoImpl.java @@ -3,8 +3,8 @@ package eu.eudat.data.dao.entities; import eu.eudat.data.dao.DatabaseAccess; import eu.eudat.data.dao.criteria.UserRoleCriteria; import eu.eudat.data.dao.databaselayer.service.DatabaseService; -import eu.eudat.data.old.UserInfo; -import eu.eudat.data.old.UserRole; +import eu.eudat.data.UserEntity; +import eu.eudat.data.UserRoleEntity; import eu.eudat.queryable.QueryableList; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Async; @@ -17,36 +17,36 @@ import java.util.concurrent.CompletableFuture; @Component("userRoleDao") -public class UserRoleDaoImpl extends DatabaseAccess implements UserRoleDao { +public class UserRoleDaoImpl extends DatabaseAccess implements UserRoleDao { @Autowired - public UserRoleDaoImpl(DatabaseService databaseService) { + public UserRoleDaoImpl(DatabaseService databaseService) { super(databaseService); } @Override - public UserRole createOrUpdate(UserRole item) { - return this.getDatabaseService().createOrUpdate(item, UserRole.class); + public UserRoleEntity createOrUpdate(UserRoleEntity item) { + return this.getDatabaseService().createOrUpdate(item, UserRoleEntity.class); } @Override - public UserRole find(UUID id) throws InvalidApplicationException { - return this.getDatabaseService().getQueryable(UserRole.class).where((builder, root) -> builder.equal(root.get("id"), id)).getSingleOrDefault(); + public UserRoleEntity find(UUID id) throws InvalidApplicationException { + return this.getDatabaseService().getQueryable(UserRoleEntity.class).where((builder, root) -> builder.equal(root.get("id"), id)).getSingleOrDefault(); } @Override - public List getUserRoles(UserInfo userInfo) throws InvalidApplicationException { - return this.getDatabaseService().getQueryable(UserRole.class).where((builder, root) -> builder.equal(root.get("userInfo"), userInfo)).toList(); + public List getUserRoles(UserEntity userInfo) throws InvalidApplicationException { + return this.getDatabaseService().getQueryable(UserRoleEntity.class).where((builder, root) -> builder.equal(root.get("userInfo"), userInfo)).toList(); } @Override - public void delete(UserRole item) { + public void delete(UserRoleEntity item) { this.getDatabaseService().delete(item); } @Override - public QueryableList getWithCriteria(UserRoleCriteria criteria) { - QueryableList query = this.getDatabaseService().getQueryable(UserRole.class); + public QueryableList getWithCriteria(UserRoleCriteria criteria) { + QueryableList query = this.getDatabaseService().getQueryable(UserRoleEntity.class); if (criteria.getLike() != null) query.where((builder, root) -> builder.equal(root.get("userInfo").get("name"), criteria.getLike())); if (criteria.getAppRoles() != null && !criteria.getAppRoles().isEmpty()) @@ -55,18 +55,18 @@ public class UserRoleDaoImpl extends DatabaseAccess implements UserRol } @Override - public QueryableList asQueryable() { - return this.getDatabaseService().getQueryable(UserRole.class); + public QueryableList asQueryable() { + return this.getDatabaseService().getQueryable(UserRoleEntity.class); } @Async @Override - public CompletableFuture createOrUpdateAsync(UserRole item) { + public CompletableFuture createOrUpdateAsync(UserRoleEntity item) { return CompletableFuture.supplyAsync(() -> this.createOrUpdate(item)); } @Override - public UserRole find(UUID id, String hint) { + public UserRoleEntity find(UUID id, String hint) { throw new UnsupportedOperationException(); } } diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/security/CredentialDao.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/security/CredentialDao.java index 4c6686741..878692e37 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/security/CredentialDao.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/security/CredentialDao.java @@ -1,13 +1,13 @@ package eu.eudat.data.dao.entities.security; -import eu.eudat.data.CredentialEntity; +import eu.eudat.data.UserCredentialEntity; import eu.eudat.data.dao.DatabaseAccessLayer; import javax.management.InvalidApplicationException; import java.util.UUID; -public interface CredentialDao extends DatabaseAccessLayer { +public interface CredentialDao extends DatabaseAccessLayer { - CredentialEntity getLoggedInCredentials(String username, String secret, Integer provider) throws InvalidApplicationException; + UserCredentialEntity getLoggedInCredentials(String username, String secret, Integer provider) throws InvalidApplicationException; } diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/security/CredentialDaoImpl.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/security/CredentialDaoImpl.java index 03b44ea1c..662e6d304 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/security/CredentialDaoImpl.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/security/CredentialDaoImpl.java @@ -1,6 +1,6 @@ package eu.eudat.data.dao.entities.security; -import eu.eudat.data.CredentialEntity; +import eu.eudat.data.UserCredentialEntity; import eu.eudat.data.dao.DatabaseAccess; import eu.eudat.data.dao.databaselayer.service.DatabaseService; import eu.eudat.queryable.QueryableList; @@ -13,26 +13,26 @@ import java.util.concurrent.CompletableFuture; @Component("credentialDao") -public class CredentialDaoImpl extends DatabaseAccess implements CredentialDao { +public class CredentialDaoImpl extends DatabaseAccess implements CredentialDao { @Autowired - public CredentialDaoImpl(DatabaseService databaseService) { + public CredentialDaoImpl(DatabaseService databaseService) { super(databaseService); } @Override - public CredentialEntity createOrUpdate(CredentialEntity item) { - return this.getDatabaseService().createOrUpdate(item, CredentialEntity.class); + public UserCredentialEntity createOrUpdate(UserCredentialEntity item) { + return this.getDatabaseService().createOrUpdate(item, UserCredentialEntity.class); } @Override - public CredentialEntity find(UUID id) throws InvalidApplicationException { - return this.getDatabaseService().getQueryable(CredentialEntity.class).where((builder, root) -> builder.equal(root.get("id"), id)).getSingleOrDefault(); + public UserCredentialEntity find(UUID id) throws InvalidApplicationException { + return this.getDatabaseService().getQueryable(UserCredentialEntity.class).where((builder, root) -> builder.equal(root.get("id"), id)).getSingleOrDefault(); } @Override - public CredentialEntity getLoggedInCredentials(String username, String secret, Integer provider) throws InvalidApplicationException { - return this.getDatabaseService().getQueryable(CredentialEntity.class).where(((builder, root) -> + public UserCredentialEntity getLoggedInCredentials(String username, String secret, Integer provider) throws InvalidApplicationException { + return this.getDatabaseService().getQueryable(UserCredentialEntity.class).where(((builder, root) -> builder.and( builder.equal(root.get("publicValue"), username), builder.equal(root.get("secret"), secret), @@ -41,22 +41,22 @@ public class CredentialDaoImpl extends DatabaseAccess implemen } @Override - public void delete(CredentialEntity item) { + public void delete(UserCredentialEntity item) { this.getDatabaseService().delete(item); } @Override - public QueryableList asQueryable() { - return this.getDatabaseService().getQueryable(CredentialEntity.class); + public QueryableList asQueryable() { + return this.getDatabaseService().getQueryable(UserCredentialEntity.class); } @Override - public CompletableFuture createOrUpdateAsync(CredentialEntity item) { + public CompletableFuture createOrUpdateAsync(UserCredentialEntity item) { return CompletableFuture.supplyAsync(() -> this.createOrUpdate(item)); } @Override - public CredentialEntity find(UUID id, String hint) { + public UserCredentialEntity find(UUID id, String hint) { throw new UnsupportedOperationException(); } } diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/query/items/item/userinfo/UserInfoRequestItem.java b/dmp-backend/data/src/main/java/eu/eudat/data/query/items/item/userinfo/UserInfoRequestItem.java index 74eaf0d79..0c8f8b1a2 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/query/items/item/userinfo/UserInfoRequestItem.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/query/items/item/userinfo/UserInfoRequestItem.java @@ -1,15 +1,15 @@ package eu.eudat.data.query.items.item.userinfo; import eu.eudat.data.dao.criteria.UserInfoCriteria; -import eu.eudat.data.old.UserInfo; +import eu.eudat.data.UserEntity; import eu.eudat.data.query.definition.Query; import eu.eudat.queryable.QueryableList; -public class UserInfoRequestItem extends Query { +public class UserInfoRequestItem extends Query { @Override - public QueryableList applyCriteria() { - QueryableList users = this.getQuery(); + public QueryableList applyCriteria() { + QueryableList users = this.getQuery(); if (this.getCriteria().getAppRoles() != null && !this.getCriteria().getAppRoles().isEmpty()) users.where((builder, root) -> root.join("userRoles").get("role").in(this.getCriteria().getAppRoles())); if (this.getCriteria().getLike() != null) diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/query/items/table/userinfo/UserInfoTableRequestItem.java b/dmp-backend/data/src/main/java/eu/eudat/data/query/items/table/userinfo/UserInfoTableRequestItem.java index 155e756bc..229eeeb0d 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/query/items/table/userinfo/UserInfoTableRequestItem.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/query/items/table/userinfo/UserInfoTableRequestItem.java @@ -1,18 +1,18 @@ package eu.eudat.data.query.items.table.userinfo; import eu.eudat.data.dao.criteria.UserInfoCriteria; -import eu.eudat.data.old.UserInfo; +import eu.eudat.data.UserEntity; import eu.eudat.data.query.definition.TableQuery; import eu.eudat.queryable.QueryableList; import java.util.UUID; -public class UserInfoTableRequestItem extends TableQuery { +public class UserInfoTableRequestItem extends TableQuery { @Override - public QueryableList applyCriteria() { - QueryableList users = this.getQuery(); + public QueryableList applyCriteria() { + QueryableList users = this.getQuery(); if (this.getCriteria().getAppRoles() != null && !this.getCriteria().getAppRoles().isEmpty()) users.where((builder, root) -> root.join("userRoles").get("role").in(this.getCriteria().getAppRoles())); if (this.getCriteria().getLike() != null) @@ -23,7 +23,7 @@ public class UserInfoTableRequestItem extends TableQuery applyPaging(QueryableList items) { + public QueryableList applyPaging(QueryableList items) { return null; } } diff --git a/dmp-backend/data/src/main/java/eu/eudat/query/DMPQuery.java b/dmp-backend/data/src/main/java/eu/eudat/query/DMPQuery.java index de94fb815..afef738d8 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/query/DMPQuery.java +++ b/dmp-backend/data/src/main/java/eu/eudat/query/DMPQuery.java @@ -4,7 +4,7 @@ import eu.eudat.data.DmpEntity; import eu.eudat.data.dao.DatabaseAccessLayer; import eu.eudat.data.DescriptionEntity; import eu.eudat.data.old.Grant; -import eu.eudat.data.old.UserInfo; +import eu.eudat.data.UserEntity; import eu.eudat.queryable.QueryableList; import eu.eudat.queryable.types.FieldSelectionType; import eu.eudat.queryable.types.SelectionField; @@ -23,7 +23,7 @@ public class DMPQuery extends Query { private String label; private int version; private GrantQuery grantQuery; - private UserQuery userQuery; + private UserQueryOld userQuery; private DatasetQuery datasetQuery; private List statuses; private Date created; @@ -101,11 +101,11 @@ public class DMPQuery extends Query { this.modified = modified; } - public UserQuery getUserQuery() { + public UserQueryOld getUserQuery() { return userQuery; } - public void setUserQuery(UserQuery userQuery) { + public void setUserQuery(UserQueryOld userQuery) { this.userQuery = userQuery; } @@ -130,7 +130,7 @@ public class DMPQuery extends Query { query.where((builder, root) -> root.get("status").in(this.getStatuses())); } if (this.userQuery != null) { - Subquery userInfoSubQuery = this.userQuery.getQuery().query(Arrays.asList(new SelectionField(FieldSelectionType.FIELD, "id"))); + Subquery userInfoSubQuery = this.userQuery.getQuery().query(Arrays.asList(new SelectionField(FieldSelectionType.FIELD, "id"))); query.where((builder, root) -> root.get("creator").get("id").in(userInfoSubQuery)); } if(this.datasetQuery != null){ diff --git a/dmp-backend/data/src/main/java/eu/eudat/query/DatasetProfileQuery.java b/dmp-backend/data/src/main/java/eu/eudat/query/DatasetProfileQuery.java index a4d477c0d..750fbae53 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/query/DatasetProfileQuery.java +++ b/dmp-backend/data/src/main/java/eu/eudat/query/DatasetProfileQuery.java @@ -1,16 +1,14 @@ package eu.eudat.query; -import java.util.UUID; - public class DatasetProfileQuery { - private UserQuery userQuery; + private UserQueryOld userQuery; - public UserQuery getUserQuery() { + public UserQueryOld getUserQuery() { return userQuery; } - public void setUserQuery(UserQuery userQuery) { + public void setUserQuery(UserQueryOld userQuery) { this.userQuery = userQuery; } } diff --git a/dmp-backend/data/src/main/java/eu/eudat/query/GrantQuery.java b/dmp-backend/data/src/main/java/eu/eudat/query/GrantQuery.java index b3a502da2..84ca64ab7 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/query/GrantQuery.java +++ b/dmp-backend/data/src/main/java/eu/eudat/query/GrantQuery.java @@ -2,7 +2,7 @@ package eu.eudat.query; import eu.eudat.data.dao.DatabaseAccessLayer; import eu.eudat.data.old.Grant; -import eu.eudat.data.old.UserInfo; +import eu.eudat.data.UserEntity; import eu.eudat.queryable.QueryableList; import eu.eudat.queryable.types.FieldSelectionType; import eu.eudat.queryable.types.SelectionField; @@ -23,7 +23,7 @@ public class GrantQuery extends Query { private List statuses; private Date created; private Date modified; - private UserQuery userQuery; + private UserQueryOld userQuery; public GrantQuery(DatabaseAccessLayer databaseAccessLayer) { super(databaseAccessLayer); @@ -81,11 +81,11 @@ public class GrantQuery extends Query { this.modified = modified; } - public UserQuery getUserQuery() { + public UserQueryOld getUserQuery() { return userQuery; } - public void setUserQuery(UserQuery userQuery) { + public void setUserQuery(UserQueryOld userQuery) { this.userQuery = userQuery; } @@ -99,7 +99,7 @@ public class GrantQuery extends Query { if (this.getStatuses() != null && !this.getStatuses().isEmpty()) query.where((builder, root) -> root.get("status").in(this.getStatuses())); if (this.userQuery != null) { - Subquery userInfoSubQuery = this.userQuery.getQuery().query(Arrays.asList(new SelectionField(FieldSelectionType.FIELD, "id"))); + Subquery userInfoSubQuery = this.userQuery.getQuery().query(Arrays.asList(new SelectionField(FieldSelectionType.FIELD, "id"))); query.where((builder, root) -> root.get("creationUser").get("id").in(userInfoSubQuery)); } if (!this.getSelectionFields().isEmpty() && this.getSelectionFields() != null) { diff --git a/dmp-backend/data/src/main/java/eu/eudat/query/LockQuery.java b/dmp-backend/data/src/main/java/eu/eudat/query/LockQuery.java index 2968ec9ef..8fb2be0df 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/query/LockQuery.java +++ b/dmp-backend/data/src/main/java/eu/eudat/query/LockQuery.java @@ -2,7 +2,7 @@ package eu.eudat.query; import eu.eudat.data.dao.DatabaseAccessLayer; import eu.eudat.data.old.Lock; -import eu.eudat.data.old.UserInfo; +import eu.eudat.data.UserEntity; import eu.eudat.queryable.QueryableList; import eu.eudat.queryable.types.FieldSelectionType; import eu.eudat.queryable.types.SelectionField; @@ -19,7 +19,7 @@ public class LockQuery extends Query { private UUID id; private UUID target; - private UserQuery userQuery; + private UserQueryOld userQuery; private Date touchedAt; public UUID getId() { @@ -38,11 +38,11 @@ public class LockQuery extends Query { this.target = target; } - public UserQuery getUserQuery() { + public UserQueryOld getUserQuery() { return userQuery; } - public void setUserQuery(UserQuery userQuery) { + public void setUserQuery(UserQueryOld userQuery) { this.userQuery = userQuery; } @@ -72,7 +72,7 @@ public class LockQuery extends Query { query.where(((builder, root) -> builder.equal(root.get("target"), this.target))); } if (this.userQuery != null) { - Subquery userSubQuery = this.userQuery.getQuery().query(Arrays.asList(new SelectionField(FieldSelectionType.FIELD, "id"))); + Subquery userSubQuery = this.userQuery.getQuery().query(Arrays.asList(new SelectionField(FieldSelectionType.FIELD, "id"))); query.where((builder, root) -> root.get("lockedBy").get("id").in(userSubQuery)); } return query; diff --git a/dmp-backend/data/src/main/java/eu/eudat/query/UserQuery.java b/dmp-backend/data/src/main/java/eu/eudat/query/UserQueryOld.java similarity index 54% rename from dmp-backend/data/src/main/java/eu/eudat/query/UserQuery.java rename to dmp-backend/data/src/main/java/eu/eudat/query/UserQueryOld.java index a4246c20b..9720ff51f 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/query/UserQuery.java +++ b/dmp-backend/data/src/main/java/eu/eudat/query/UserQueryOld.java @@ -1,13 +1,13 @@ package eu.eudat.query; import eu.eudat.data.dao.DatabaseAccessLayer; -import eu.eudat.data.old.UserInfo; +import eu.eudat.data.UserEntity; import eu.eudat.queryable.QueryableList; import java.util.List; import java.util.UUID; -public class UserQuery extends Query { +public class UserQueryOld extends Query { private UUID id; @@ -19,17 +19,17 @@ public class UserQuery extends Query { this.id = id; } - public UserQuery(DatabaseAccessLayer databaseAccessLayer) { + public UserQueryOld(DatabaseAccessLayer databaseAccessLayer) { super(databaseAccessLayer); } - public UserQuery(DatabaseAccessLayer databaseAccessLayer, List selectionFields) { + public UserQueryOld(DatabaseAccessLayer databaseAccessLayer, List selectionFields) { super(databaseAccessLayer, selectionFields); } @Override - public QueryableList getQuery() { - QueryableList query = this.databaseAccessLayer.asQueryable(); + public QueryableList getQuery() { + QueryableList query = this.databaseAccessLayer.asQueryable(); if (this.id != null) query.where((builder, root) -> builder.equal(root.get("id"), this.id)); return query; diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/DashBoardController.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/DashBoardController.java index 4f9a1f7f9..dffcb4810 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/DashBoardController.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/DashBoardController.java @@ -10,7 +10,6 @@ import eu.eudat.models.data.dashboard.searchbar.SearchBarItem; import eu.eudat.models.data.dashboard.statistics.DashBoardStatistics; import eu.eudat.models.data.helpers.responses.ResponseItem; import eu.eudat.types.ApiMessageCode; -import eu.eudat.types.Authorities; import gr.cite.commons.web.authz.service.AuthorizationService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/FileController.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/FileController.java index 1fb4b5dc1..c6142eac3 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/FileController.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/FileController.java @@ -47,7 +47,6 @@ import java.io.*; import java.nio.file.Files; import java.util.*; import java.util.concurrent.atomic.AtomicBoolean; -import java.util.stream.Collectors; @RestController @CrossOrigin @@ -81,7 +80,7 @@ public class FileController { String uuid = UUID.randomUUID().toString(); - DescriptionTemplateEntity descriptionTemplate = this.queryFactory.query(DescriptionTemplateQuery.class).ids(UUID.fromString(datasetProfileId)).authorize(AuthorizationFlags.OwnerOrPermissionOrMemberOrPublic).first(); + DescriptionTemplateEntity descriptionTemplate = this.queryFactory.query(DescriptionTemplateQuery.class).ids(UUID.fromString(datasetProfileId)).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermissionOrPublic).first(); DefinitionEntity definition = descriptionTemplate == null ? null : this.xmlHandlingService.fromXml(DefinitionEntity.class, descriptionTemplate.getDefinition()); AtomicBoolean acceptedFile = new AtomicBoolean(false); diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/ManagementController.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/ManagementController.java index df514d71c..f037aa365 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/ManagementController.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/ManagementController.java @@ -13,8 +13,6 @@ import org.springframework.web.bind.annotation.*; import jakarta.transaction.Transactional; -import static eu.eudat.types.Authorities.ADMIN; - @RestController @CrossOrigin @RequestMapping(value = {"/api/management/"}) diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/v2/DescriptionController.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/v2/DescriptionController.java index 788723f12..44d48f4fa 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/v2/DescriptionController.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/v2/DescriptionController.java @@ -116,7 +116,7 @@ public class DescriptionController { this.censorFactory.censor(DescriptionCensor.class).censor(lookup.getProject(), null); - QueryResult queryResult = this.elasticQueryHelperService.collect(lookup, AuthorizationFlags.OwnerOrPermissionOrMemberOrPublic, null); + QueryResult queryResult = this.elasticQueryHelperService.collect(lookup, AuthorizationFlags.OwnerOrDmpAssociatedOrPermissionOrPublic, null); this.auditService.track(AuditableAction.Description_Query, "lookup", lookup); @@ -130,8 +130,8 @@ public class DescriptionController { this.censorFactory.censor(DescriptionCensor.class).censor(fieldSet, null); - DescriptionQuery query = this.queryFactory.query(DescriptionQuery.class).authorize(AuthorizationFlags.OwnerOrPermissionOrMemberOrPublic).ids(id); - Description model = this.builderFactory.builder(DescriptionBuilder.class).authorize(AuthorizationFlags.OwnerOrPermissionOrMemberOrPublic).build(fieldSet, query.firstAs(fieldSet)); + DescriptionQuery query = this.queryFactory.query(DescriptionQuery.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermissionOrPublic).ids(id); + Description model = this.builderFactory.builder(DescriptionBuilder.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermissionOrPublic).build(fieldSet, query.firstAs(fieldSet)); if (model == null) throw new MyNotFoundException(messageSource.getMessage("General_ItemNotFound", new Object[]{id, Dmp.class.getSimpleName()}, LocaleContextHolder.getLocale())); diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/v2/DescriptionTemplateController.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/v2/DescriptionTemplateController.java index 79c924748..ad2576339 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/v2/DescriptionTemplateController.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/v2/DescriptionTemplateController.java @@ -81,10 +81,10 @@ public class DescriptionTemplateController { this.censorFactory.censor(DescriptionTemplateCensor.class).censor(lookup.getProject(), null); - DescriptionTemplateQuery query = lookup.enrich(this.queryFactory).authorize(AuthorizationFlags.OwnerOrPermissionOrMemberOrPublic); + DescriptionTemplateQuery query = lookup.enrich(this.queryFactory).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermissionOrPublic); List data = query.collectAs(lookup.getProject()); - List models = this.builderFactory.builder(DescriptionTemplateBuilder.class).authorize(AuthorizationFlags.OwnerOrPermissionOrMemberOrPublic).build(lookup.getProject(), data); + List models = this.builderFactory.builder(DescriptionTemplateBuilder.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermissionOrPublic).build(lookup.getProject(), data); long count = (lookup.getMetadata() != null && lookup.getMetadata().getCountAll()) ? query.count() : models.size(); this.auditService.track(AuditableAction.DescriptionTemplate_Query, "lookup", lookup); @@ -99,8 +99,8 @@ public class DescriptionTemplateController { this.censorFactory.censor(DescriptionTemplateCensor.class).censor(fieldSet, null); - DescriptionTemplateQuery query = this.queryFactory.query(DescriptionTemplateQuery.class).authorize(AuthorizationFlags.OwnerOrPermissionOrMemberOrPublic).ids(id); - DescriptionTemplate model = this.builderFactory.builder(DescriptionTemplateBuilder.class).authorize(AuthorizationFlags.OwnerOrPermissionOrMemberOrPublic).build(fieldSet, query.firstAs(fieldSet)); + DescriptionTemplateQuery query = this.queryFactory.query(DescriptionTemplateQuery.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermissionOrPublic).ids(id); + DescriptionTemplate model = this.builderFactory.builder(DescriptionTemplateBuilder.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermissionOrPublic).build(fieldSet, query.firstAs(fieldSet)); if (model == null) throw new MyNotFoundException(messageSource.getMessage("General_ItemNotFound", new Object[]{id, DescriptionTemplate.class.getSimpleName()}, LocaleContextHolder.getLocale())); diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/v2/DescriptionTemplateTypeController.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/v2/DescriptionTemplateTypeController.java index 4136a3f56..887f07c2c 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/v2/DescriptionTemplateTypeController.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/v2/DescriptionTemplateTypeController.java @@ -70,10 +70,10 @@ public class DescriptionTemplateTypeController { this.censorFactory.censor(DescriptionTemplateTypeCensor.class).censor(lookup.getProject(), null); - DescriptionTemplateTypeQuery query = lookup.enrich(this.queryFactory).authorize(AuthorizationFlags.OwnerOrPermissionOrMemberOrPublic); + DescriptionTemplateTypeQuery query = lookup.enrich(this.queryFactory).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermissionOrPublic); List data = query.collectAs(lookup.getProject()); - List models = this.builderFactory.builder(DescriptionTemplateTypeBuilder.class).authorize(AuthorizationFlags.OwnerOrPermissionOrMemberOrPublic).build(lookup.getProject(), data); + List models = this.builderFactory.builder(DescriptionTemplateTypeBuilder.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermissionOrPublic).build(lookup.getProject(), data); long count = (lookup.getMetadata() != null && lookup.getMetadata().getCountAll()) ? query.count() : models.size(); this.auditService.track(AuditableAction.DescriptionTemplateType_Query, "lookup", lookup); @@ -88,8 +88,8 @@ public class DescriptionTemplateTypeController { this.censorFactory.censor(DescriptionTemplateTypeCensor.class).censor(fieldSet, null); - DescriptionTemplateTypeQuery query = this.queryFactory.query(DescriptionTemplateTypeQuery.class).authorize(AuthorizationFlags.OwnerOrPermissionOrMemberOrPublic).ids(id); - DescriptionTemplateType model = this.builderFactory.builder(DescriptionTemplateTypeBuilder.class).authorize(AuthorizationFlags.OwnerOrPermissionOrMemberOrPublic).build(fieldSet, query.firstAs(fieldSet)); + DescriptionTemplateTypeQuery query = this.queryFactory.query(DescriptionTemplateTypeQuery.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermissionOrPublic).ids(id); + DescriptionTemplateType model = this.builderFactory.builder(DescriptionTemplateTypeBuilder.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermissionOrPublic).build(fieldSet, query.firstAs(fieldSet)); if (model == null) throw new MyNotFoundException(messageSource.getMessage("General_ItemNotFound", new Object[]{id, DescriptionTemplateType.class.getSimpleName()}, LocaleContextHolder.getLocale())); diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/v2/DmpBlueprintController.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/v2/DmpBlueprintController.java index 528033dbf..12b739863 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/v2/DmpBlueprintController.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/v2/DmpBlueprintController.java @@ -3,8 +3,6 @@ package eu.eudat.controllers.v2; import com.fasterxml.jackson.core.JsonProcessingException; import eu.eudat.audit.AuditableAction; import eu.eudat.authorization.AuthorizationFlags; -import eu.eudat.commons.enums.DescriptionStatus; -import eu.eudat.commons.enums.DmpStatus; import eu.eudat.data.DmpBlueprintEntity; import eu.eudat.model.DmpBlueprint; import eu.eudat.model.builder.DmpBlueprintBuilder; @@ -12,18 +10,11 @@ import eu.eudat.model.censorship.DmpBlueprintCensor; import eu.eudat.model.persist.DmpBlueprintPersist; import eu.eudat.model.result.QueryResult; import eu.eudat.query.*; -import eu.eudat.query.lookup.DescriptionLookup; import eu.eudat.query.lookup.DmpBlueprintLookup; -import eu.eudat.query.lookup.DmpLookup; import eu.eudat.service.dmpblueprint.DmpBlueprintService; -import eu.eudat.service.elastic.ElasticQueryHelperService; -import eu.eudat.service.elastic.ElasticService; import gr.cite.tools.auditing.AuditService; import gr.cite.tools.data.builder.BuilderFactory; import gr.cite.tools.data.censor.CensorFactory; -import gr.cite.tools.data.query.Lookup; -import gr.cite.tools.data.query.Ordering; -import gr.cite.tools.data.query.Paging; import gr.cite.tools.data.query.QueryFactory; import gr.cite.tools.exception.MyApplicationException; import gr.cite.tools.exception.MyForbiddenException; @@ -89,10 +80,10 @@ public class DmpBlueprintController { logger.debug("querying {}", DmpBlueprint.class.getSimpleName()); this.censorFactory.censor(DmpBlueprintCensor.class).censor(lookup.getProject(), null); - DmpBlueprintQuery query = lookup.enrich(this.queryFactory).authorize(AuthorizationFlags.OwnerOrPermissionOrMemberOrPublic); + DmpBlueprintQuery query = lookup.enrich(this.queryFactory).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermissionOrPublic); List data = query.collectAs(lookup.getProject()); - List models = this.builderFactory.builder(DmpBlueprintBuilder.class).authorize(AuthorizationFlags.OwnerOrPermissionOrMemberOrPublic).build(lookup.getProject(), data); + List models = this.builderFactory.builder(DmpBlueprintBuilder.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermissionOrPublic).build(lookup.getProject(), data); long count = (lookup.getMetadata() != null && lookup.getMetadata().getCountAll()) ? query.count() : models.size(); this.auditService.track(AuditableAction.DmpBlueprint_Query, "lookup", lookup); @@ -107,8 +98,8 @@ public class DmpBlueprintController { this.censorFactory.censor(DmpBlueprintCensor.class).censor(fieldSet, null); - DmpBlueprintQuery query = this.queryFactory.query(DmpBlueprintQuery.class).authorize(AuthorizationFlags.OwnerOrPermissionOrMemberOrPublic).ids(id); - DmpBlueprint model = this.builderFactory.builder(DmpBlueprintBuilder.class).authorize(AuthorizationFlags.OwnerOrPermissionOrMemberOrPublic).build(fieldSet, query.firstAs(fieldSet)); + DmpBlueprintQuery query = this.queryFactory.query(DmpBlueprintQuery.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermissionOrPublic).ids(id); + DmpBlueprint model = this.builderFactory.builder(DmpBlueprintBuilder.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermissionOrPublic).build(fieldSet, query.firstAs(fieldSet)); if (model == null) throw new MyNotFoundException(messageSource.getMessage("General_ItemNotFound", new Object[]{id, DmpBlueprint.class.getSimpleName()}, LocaleContextHolder.getLocale())); diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/v2/DmpController.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/v2/DmpController.java index fc9d650e3..68eb876b3 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/v2/DmpController.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/v2/DmpController.java @@ -82,10 +82,10 @@ public class DmpController { this.censorFactory.censor(DmpCensor.class).censor(lookup.getProject(), null); - DmpQuery query = lookup.enrich(this.queryFactory).authorize(AuthorizationFlags.OwnerOrPermissionOrMemberOrPublic); + DmpQuery query = lookup.enrich(this.queryFactory).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermissionOrPublic); List data = query.collectAs(lookup.getProject()); - List models = this.builderFactory.builder(DmpBuilder.class).authorize(AuthorizationFlags.OwnerOrPermissionOrMemberOrPublic).build(lookup.getProject(), data); + List models = this.builderFactory.builder(DmpBuilder.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermissionOrPublic).build(lookup.getProject(), data); long count = (lookup.getMetadata() != null && lookup.getMetadata().getCountAll()) ? query.count() : models.size(); this.auditService.track(AuditableAction.Dmp_Query, "lookup", lookup); @@ -99,8 +99,8 @@ public class DmpController { this.censorFactory.censor(DmpCensor.class).censor(fieldSet, null); - DmpQuery query = this.queryFactory.query(DmpQuery.class).authorize(AuthorizationFlags.OwnerOrPermissionOrMemberOrPublic).ids(id); - Dmp model = this.builderFactory.builder(DmpBuilder.class).authorize(AuthorizationFlags.OwnerOrPermissionOrMemberOrPublic).build(fieldSet, query.firstAs(fieldSet)); + DmpQuery query = this.queryFactory.query(DmpQuery.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermissionOrPublic).ids(id); + Dmp model = this.builderFactory.builder(DmpBuilder.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermissionOrPublic).build(fieldSet, query.firstAs(fieldSet)); if (model == null) throw new MyNotFoundException(messageSource.getMessage("General_ItemNotFound", new Object[]{id, Dmp.class.getSimpleName()}, LocaleContextHolder.getLocale())); diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/v2/EntityDoiController.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/v2/EntityDoiController.java index 6e22efae5..cd4c6b985 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/v2/EntityDoiController.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/v2/EntityDoiController.java @@ -71,10 +71,10 @@ public class EntityDoiController { this.censorFactory.censor(EntityDoiCensor.class).censor(lookup.getProject(), null); - EntityDoiQuery query = lookup.enrich(this.queryFactory).authorize(AuthorizationFlags.OwnerOrPermissionOrMemberOrPublic); + EntityDoiQuery query = lookup.enrich(this.queryFactory).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermissionOrPublic); List data = query.collectAs(lookup.getProject()); - List models = this.builderFactory.builder(EntityDoiBuilder.class).authorize(AuthorizationFlags.OwnerOrPermissionOrMemberOrPublic).build(lookup.getProject(), data); + List models = this.builderFactory.builder(EntityDoiBuilder.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermissionOrPublic).build(lookup.getProject(), data); long count = (lookup.getMetadata() != null && lookup.getMetadata().getCountAll()) ? query.count() : models.size(); this.auditService.track(AuditableAction.EntityDoi_Query, "lookup", lookup); @@ -88,8 +88,8 @@ public class EntityDoiController { this.censorFactory.censor(EntityDoiCensor.class).censor(fieldSet, null); - EntityDoiQuery query = this.queryFactory.query(EntityDoiQuery.class).authorize(AuthorizationFlags.OwnerOrPermissionOrMemberOrPublic).ids(id); - EntityDoi model = this.builderFactory.builder(EntityDoiBuilder.class).authorize(AuthorizationFlags.OwnerOrPermissionOrMemberOrPublic).build(fieldSet, query.firstAs(fieldSet)); + EntityDoiQuery query = this.queryFactory.query(EntityDoiQuery.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermissionOrPublic).ids(id); + EntityDoi model = this.builderFactory.builder(EntityDoiBuilder.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermissionOrPublic).build(fieldSet, query.firstAs(fieldSet)); if (model == null) throw new MyNotFoundException(messageSource.getMessage("General_ItemNotFound", new Object[]{id, EntityDoi.class.getSimpleName()}, LocaleContextHolder.getLocale())); diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/v2/ReferenceController.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/v2/ReferenceController.java index 97ef52130..b37a8afda 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/v2/ReferenceController.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/v2/ReferenceController.java @@ -89,9 +89,9 @@ public class ReferenceController extends BaseController { this.censorFactory.censor(ReferenceCensor.class).censor(lookup.getProject(), null); - ReferenceQuery query = lookup.enrich(this.queryFactory).authorize(AuthorizationFlags.OwnerOrPermissionOrMemberOrPublic); + ReferenceQuery query = lookup.enrich(this.queryFactory).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermissionOrPublic); List data = query.collectAs(lookup.getProject()); - List models = this.builderFactory.builder(ReferenceBuilder.class).authorize(AuthorizationFlags.OwnerOrPermissionOrMemberOrPublic).build(lookup.getProject(), data); + List models = this.builderFactory.builder(ReferenceBuilder.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermissionOrPublic).build(lookup.getProject(), data); long count = (lookup.getMetadata() != null && lookup.getMetadata().getCountAll()) ? query.count() : models.size(); this.auditService.track(AuditableAction.Reference_Query, "lookup", lookup); @@ -125,8 +125,8 @@ public class ReferenceController extends BaseController { this.censorFactory.censor(ReferenceCensor.class).censor(fieldSet, null); - ReferenceQuery query = this.queryFactory.query(ReferenceQuery.class).authorize(AuthorizationFlags.OwnerOrPermissionOrMemberOrPublic).ids(id); - Reference model = this.builderFactory.builder(ReferenceBuilder.class).authorize(AuthorizationFlags.OwnerOrPermissionOrMemberOrPublic).build(fieldSet, query.firstAs(fieldSet)); + ReferenceQuery query = this.queryFactory.query(ReferenceQuery.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermissionOrPublic).ids(id); + Reference model = this.builderFactory.builder(ReferenceBuilder.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermissionOrPublic).build(fieldSet, query.firstAs(fieldSet)); if (model == null) throw new MyNotFoundException(messageSource.getMessage("General_ItemNotFound", new Object[]{id, Reference.class.getSimpleName()}, LocaleContextHolder.getLocale())); diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/v2/ReferenceTypeController.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/v2/ReferenceTypeController.java index 10c6cbdcd..41eafff10 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/v2/ReferenceTypeController.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/v2/ReferenceTypeController.java @@ -78,9 +78,9 @@ public class ReferenceTypeController extends BaseController { this.censorFactory.censor(ReferenceTypeCensor.class).censor(lookup.getProject(), null); - ReferenceTypeQuery query = lookup.enrich(this.queryFactory).authorize(AuthorizationFlags.OwnerOrPermissionOrMemberOrPublic); + ReferenceTypeQuery query = lookup.enrich(this.queryFactory).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermissionOrPublic); List data = query.collectAs(lookup.getProject()); - List models = this.builderFactory.builder(ReferenceTypeBuilder.class).authorize(AuthorizationFlags.OwnerOrPermissionOrMemberOrPublic).build(lookup.getProject(), data); + List models = this.builderFactory.builder(ReferenceTypeBuilder.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermissionOrPublic).build(lookup.getProject(), data); long count = (lookup.getMetadata() != null && lookup.getMetadata().getCountAll()) ? query.count() : models.size(); this.auditService.track(AuditableAction.ReferenceType_Query, "lookup", lookup); @@ -94,8 +94,8 @@ public class ReferenceTypeController extends BaseController { this.censorFactory.censor(ReferenceTypeCensor.class).censor(fieldSet, null); - ReferenceTypeQuery query = this.queryFactory.query(ReferenceTypeQuery.class).authorize(AuthorizationFlags.OwnerOrPermissionOrMemberOrPublic).ids(id); - ReferenceType model = this.builderFactory.builder(ReferenceTypeBuilder.class).authorize(AuthorizationFlags.OwnerOrPermissionOrMemberOrPublic).build(fieldSet, query.firstAs(fieldSet)); + ReferenceTypeQuery query = this.queryFactory.query(ReferenceTypeQuery.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermissionOrPublic).ids(id); + ReferenceType model = this.builderFactory.builder(ReferenceTypeBuilder.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermissionOrPublic).build(fieldSet, query.firstAs(fieldSet)); if (model == null) throw new MyNotFoundException(messageSource.getMessage("General_ItemNotFound", new Object[]{id, Reference.class.getSimpleName()}, LocaleContextHolder.getLocale())); diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/v2/SupportiveMaterialController.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/v2/SupportiveMaterialController.java index b9d7c4dbb..cbbf35ac2 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/v2/SupportiveMaterialController.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/v2/SupportiveMaterialController.java @@ -80,9 +80,9 @@ public class SupportiveMaterialController { this.censorFactory.censor(SupportiveMaterialCensor.class).censor(lookup.getProject(), null); - SupportiveMaterialQuery query = lookup.enrich(this.queryFactory).authorize(AuthorizationFlags.OwnerOrPermissionOrMemberOrPublic); + SupportiveMaterialQuery query = lookup.enrich(this.queryFactory).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermissionOrPublic); List data = query.collectAs(lookup.getProject()); - List models = this.builderFactory.builder(SupportiveMaterialBuilder.class).authorize(AuthorizationFlags.OwnerOrPermissionOrMemberOrPublic).build(lookup.getProject(), data); + List models = this.builderFactory.builder(SupportiveMaterialBuilder.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermissionOrPublic).build(lookup.getProject(), data); long count = (lookup.getMetadata() != null && lookup.getMetadata().getCountAll()) ? query.count() : models.size(); this.auditService.track(AuditableAction.SupportiveMaterial_Query, "lookup", lookup); @@ -96,8 +96,8 @@ public class SupportiveMaterialController { this.censorFactory.censor(SupportiveMaterialCensor.class).censor(fieldSet, null); - SupportiveMaterialQuery query = this.queryFactory.query(SupportiveMaterialQuery.class).authorize(AuthorizationFlags.OwnerOrPermissionOrMemberOrPublic).ids(id); - SupportiveMaterial model = this.builderFactory.builder(SupportiveMaterialBuilder.class).authorize(AuthorizationFlags.OwnerOrPermissionOrMemberOrPublic).build(fieldSet, query.firstAs(fieldSet)); + SupportiveMaterialQuery query = this.queryFactory.query(SupportiveMaterialQuery.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermissionOrPublic).ids(id); + SupportiveMaterial model = this.builderFactory.builder(SupportiveMaterialBuilder.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermissionOrPublic).build(fieldSet, query.firstAs(fieldSet)); if (model == null) throw new MyNotFoundException(messageSource.getMessage("General_ItemNotFound", new Object[]{id, SupportiveMaterial.class.getSimpleName()}, LocaleContextHolder.getLocale())); @@ -115,7 +115,7 @@ public class SupportiveMaterialController { this.censorFactory.censor(SupportiveMaterialCensor.class).censor(lookup.getProject(), null); - SupportiveMaterialQuery query = lookup.enrich(this.queryFactory).authorize(AuthorizationFlags.OwnerOrPermissionOrMemberOrPublic); + SupportiveMaterialQuery query = lookup.enrich(this.queryFactory).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermissionOrPublic); List data = query.collectAs(lookup.getProject()); if (data.size() == 1){ return new ResponseEntity<>(data.get(0).getPayload().getBytes(), HttpStatus.OK); diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/v2/UserSettingsController.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/v2/UserSettingsController.java index aa62e3a96..f5167cfa8 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/v2/UserSettingsController.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/v2/UserSettingsController.java @@ -64,9 +64,9 @@ public class UserSettingsController { public QueryResult Query(@RequestBody UserSettingsLookup lookup) throws MyApplicationException, MyForbiddenException { logger.debug("querying {}", UserSettings.class.getSimpleName()); this.censorFactory.censor(UserSettingsCensor.class).censor(lookup.getProject(), null); - UserSettingsQuery query = lookup.enrich(this.queryFactory).authorize(AuthorizationFlags.OwnerOrPermissionOrMemberOrPublic); + UserSettingsQuery query = lookup.enrich(this.queryFactory).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermissionOrPublic); List data = query.collectAs(lookup.getProject()); - List models = this.builderFactory.builder(UserSettingsBuilder.class).authorize(AuthorizationFlags.OwnerOrPermissionOrMemberOrPublic).build(lookup.getProject(), data); + List models = this.builderFactory.builder(UserSettingsBuilder.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermissionOrPublic).build(lookup.getProject(), data); long count = (lookup.getMetadata() != null && lookup.getMetadata().getCountAll()) ? query.count() : models.size(); this.auditService.track(AuditableAction.User_Settings_Query, "lookup", lookup); @@ -90,8 +90,8 @@ public class UserSettingsController { UserSettings._updatedAt, UserSettings._type )); - UserSettingsQuery query = this.queryFactory.query(UserSettingsQuery.class).authorize(AuthorizationFlags.OwnerOrPermissionOrMemberOrPublic).keys(key); - UserSettings model = this.builderFactory.builder(UserSettingsBuilder.class).authorize(AuthorizationFlags.OwnerOrPermissionOrMemberOrPublic).build(fieldSet, query.firstAs(fieldSet)); + UserSettingsQuery query = this.queryFactory.query(UserSettingsQuery.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermissionOrPublic).keys(key); + UserSettings model = this.builderFactory.builder(UserSettingsBuilder.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermissionOrPublic).build(fieldSet, query.firstAs(fieldSet)); this.auditService.track(AuditableAction.User_Settings_Lookup, Map.ofEntries( new AbstractMap.SimpleEntry("key", key) diff --git a/dmp-backend/web/src/main/java/eu/eudat/criteria/UserCriteria.java b/dmp-backend/web/src/main/java/eu/eudat/criteria/UserCriteria.java index b111294d9..1fa9d281b 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/criteria/UserCriteria.java +++ b/dmp-backend/web/src/main/java/eu/eudat/criteria/UserCriteria.java @@ -7,7 +7,7 @@ import com.fasterxml.jackson.databind.ObjectReader; import com.fasterxml.jackson.databind.node.JsonNodeType; import eu.eudat.criteria.entities.Criteria; import eu.eudat.logic.services.operations.DatabaseRepository; -import eu.eudat.query.UserQuery; +import eu.eudat.query.UserQueryOld; import java.io.IOException; import java.util.*; @@ -57,9 +57,9 @@ public class UserCriteria { return new LinkedList<>(fields); } - public UserQuery buildQuery(DatabaseRepository dao) { + public UserQueryOld buildQuery(DatabaseRepository dao) { List fields = this.buildFields(""); - UserQuery query = new UserQuery(dao.getUserInfoDao(), fields); + UserQueryOld query = new UserQueryOld(dao.getUserInfoDao(), fields); if (this.id != null) query.setId(this.id.getValue()); return query; } diff --git a/dmp-backend/web/src/main/java/eu/eudat/interceptors/UserInterceptor.java b/dmp-backend/web/src/main/java/eu/eudat/interceptors/UserInterceptor.java index 19a9e3747..815b27f97 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/interceptors/UserInterceptor.java +++ b/dmp-backend/web/src/main/java/eu/eudat/interceptors/UserInterceptor.java @@ -1,25 +1,28 @@ package eu.eudat.interceptors; -import eu.eudat.commons.enums.ProviderType; +import eu.eudat.commons.JsonHandlingService; +import eu.eudat.commons.enums.ContactInfoType; import eu.eudat.commons.enums.IsActive; +import eu.eudat.commons.lock.LockByKeyManager; import eu.eudat.commons.scope.user.UserScope; -import eu.eudat.data.CredentialEntity; -import eu.eudat.data.old.UserInfo; -import eu.eudat.data.old.UserRole; -import eu.eudat.exceptions.security.NullEmailException; -import eu.eudat.types.Authorities; +import eu.eudat.commons.types.user.AdditionalInfoEntity; +import eu.eudat.data.UserContactInfoEntity; +import eu.eudat.data.UserCredentialEntity; +import eu.eudat.data.UserEntity; +import eu.eudat.data.UserRoleEntity; +import eu.eudat.model.UserContactInfo; +import eu.eudat.model.UserCredential; +import eu.eudat.model.UserRole; +import eu.eudat.query.*; import gr.cite.commons.web.oidc.principal.CurrentPrincipalResolver; import gr.cite.commons.web.oidc.principal.extractor.ClaimExtractor; -import gr.cite.tools.exception.MyApplicationException; +import gr.cite.tools.data.query.QueryFactory; +import gr.cite.tools.exception.MyForbiddenException; +import gr.cite.tools.fieldset.BaseFieldSet; import gr.cite.tools.logging.LoggerService; import jakarta.persistence.EntityManager; import jakarta.persistence.PersistenceContext; -import jakarta.persistence.Tuple; -import jakarta.persistence.TypedQuery; -import jakarta.persistence.criteria.CriteriaBuilder; -import jakarta.persistence.criteria.CriteriaQuery; -import jakarta.persistence.criteria.Root; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.lang.NonNull; @@ -29,15 +32,17 @@ import org.springframework.transaction.TransactionDefinition; import org.springframework.transaction.TransactionStatus; import org.springframework.transaction.support.DefaultTransactionDefinition; import org.springframework.ui.ModelMap; -import org.springframework.web.context.request.ServletWebRequest; import org.springframework.web.context.request.WebRequest; import org.springframework.web.context.request.WebRequestInterceptor; import javax.management.InvalidApplicationException; -import java.util.Date; +import java.time.Instant; +import java.util.ArrayList; import java.util.List; -import java.util.Locale; import java.util.UUID; +import java.util.concurrent.Semaphore; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.locks.ReentrantLock; @Component public class UserInterceptor implements WebRequestInterceptor { @@ -47,193 +52,238 @@ public class UserInterceptor implements WebRequestInterceptor { private final CurrentPrincipalResolver currentPrincipalResolver; private final PlatformTransactionManager transactionManager; private final UserInterceptorCacheService userInterceptorCacheService; + private final JsonHandlingService jsonHandlingService; + private final QueryFactory queryFactory; + private final LockByKeyManager lockByKeyManager; @PersistenceContext public EntityManager entityManager; - + @Autowired public UserInterceptor( - UserScope userScope, + UserScope userScope, ClaimExtractor claimExtractor, CurrentPrincipalResolver currentPrincipalResolver, PlatformTransactionManager transactionManager, - UserInterceptorCacheService userInterceptorCacheService - ) { + UserInterceptorCacheService userInterceptorCacheService, + JsonHandlingService jsonHandlingService, + QueryFactory queryFactory, + LockByKeyManager lockByKeyManager) { this.userScope = userScope; this.currentPrincipalResolver = currentPrincipalResolver; this.claimExtractor = claimExtractor; this.transactionManager = transactionManager; this.userInterceptorCacheService = userInterceptorCacheService; + this.jsonHandlingService = jsonHandlingService; + this.queryFactory = queryFactory; + this.lockByKeyManager = lockByKeyManager; } @Override - public void preHandle(WebRequest request) throws InvalidApplicationException { + public void preHandle(WebRequest request) throws InterruptedException { UUID userId = null; if (this.currentPrincipalResolver.currentPrincipal().isAuthenticated()) { String subjectId = this.claimExtractor.subjectString(this.currentPrincipalResolver.currentPrincipal()); - var aa = this.claimExtractor.roles(this.currentPrincipalResolver.currentPrincipal()); + if (subjectId == null || subjectId.isBlank()) throw new MyForbiddenException("Empty subjects not allowed"); + UserInterceptorCacheService.UserInterceptorCacheValue cacheValue = this.userInterceptorCacheService.lookup(this.userInterceptorCacheService.buildKey(subjectId)); - if (cacheValue != null) { + if (cacheValue != null && emailExistsToUser(cacheValue.getEmails()) && userRolesSynced(cacheValue.getRoles())) { userId = cacheValue.getUserId(); } else { - userId = this.getUserIdFromDatabaseBySubject(subjectId); - if (userId == null ) { + boolean usedResource = false; + try { + usedResource = this.lockByKeyManager.tryLock(subjectId, 5000, TimeUnit.MILLISECONDS); String email = this.claimExtractor.email(this.currentPrincipalResolver.currentPrincipal()); - if (email != null && !email.isBlank()) { - userId = this.getUserIdFromDatabaseByEmail(email); - userId = this.createOrUpdateUser(subjectId, userId); - } else { - boolean checkMailNull = ((ServletWebRequest) request).getRequest().getServletPath().toLowerCase(Locale.ROOT).startsWith("/api/emailConfirmation".toLowerCase(Locale.ROOT)); - if (!checkMailNull) throw new NullEmailException(); - } - } - if (userId != null) this.userInterceptorCacheService.put(new UserInterceptorCacheService.UserInterceptorCacheValue(subjectId, userId)); + DefaultTransactionDefinition definition = new DefaultTransactionDefinition(); + definition.setName(UUID.randomUUID().toString()); + definition.setIsolationLevel(TransactionDefinition.ISOLATION_READ_COMMITTED); + definition.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED); + TransactionStatus status = null; + try { + status = transactionManager.getTransaction(definition); + userId = this.findExistingUserFromDb(subjectId); + boolean isNewUser = userId == null; + if (isNewUser) { + UserEntity user = this.addNewUser(subjectId, email); + userId = user.getId(); + } + + if (!isNewUser) this.syncUserWithClaims(userId); + + this.entityManager.flush(); + transactionManager.commit(status); + } catch (Exception ex) { + if (status != null) transactionManager.rollback(status); + throw ex; + } + + cacheValue = new UserInterceptorCacheService.UserInterceptorCacheValue(subjectId, userId); + cacheValue.setEmails(new ArrayList<>()); + if (email != null && !email.isBlank()) cacheValue.getEmails().add(email); + cacheValue.setRoles(claimExtractor.roles(currentPrincipalResolver.currentPrincipal())); + + this.userInterceptorCacheService.put(cacheValue); + } finally { + if (usedResource) this.lockByKeyManager.unlock(subjectId); + } + } } this.userScope.setUserId(userId); } + + private void syncUserWithClaims(UUID userId){ + List existingUserEmails = this.collectUserEmails(userId); + List existingUserRoles = this.collectUserRoles(userId); + if (!this.emailExistsToUser(existingUserEmails)){ + String email = this.claimExtractor.email(this.currentPrincipalResolver.currentPrincipal()); + long contactUsedByOthersCount = this.queryFactory.query(UserContactInfoQuery.class).excludedUserIds(userId).types(ContactInfoType.Email).values(email).count(); + if (contactUsedByOthersCount > 0) { + logger.warn("user contact exists to other user" + email); + } else { + Long emailContactsCount = this.queryFactory.query(UserContactInfoQuery.class).userIds(userId).types(ContactInfoType.Email).count(); + UserContactInfoEntity contactInfo = this.buildEmailContact(userId, email); + contactInfo.setOrdinal(emailContactsCount.intValue()); + this.entityManager.persist(contactInfo); + } + } - private UUID getUserIdFromDatabaseBySubject(String subjectId) { - CriteriaBuilder credentialCriteriaBuilder = this.entityManager.getCriteriaBuilder(); - CriteriaQuery credentialQuery = credentialCriteriaBuilder.createQuery(Tuple.class); - Root credentialRoot = credentialQuery.from(CredentialEntity.class); - credentialQuery.where( - credentialCriteriaBuilder.and( - credentialCriteriaBuilder.equal(credentialRoot.get(CredentialEntity._externalId), subjectId), - credentialCriteriaBuilder.equal(credentialRoot.get(CredentialEntity._isActive), IsActive.Active), - credentialCriteriaBuilder.equal(credentialRoot.get(CredentialEntity._provider), ProviderType.Keycloack) - )); - - credentialQuery.multiselect(credentialRoot.get(CredentialEntity._userId).alias(UserInfo._id)); - - List results = this.entityManager.createQuery(credentialQuery).getResultList(); - return this.getUUIDFromTuple(results, UserInfo._id); - } - - private UUID getUserIdFromDatabaseByEmail(String email) { - CriteriaBuilder emailCriteriaBuilder = this.entityManager.getCriteriaBuilder(); - CriteriaQuery emailQuery = emailCriteriaBuilder.createQuery(Tuple.class); - Root emailRoot = emailQuery.from(UserInfo.class); - emailQuery.where( - emailCriteriaBuilder.and( - emailCriteriaBuilder.equal(emailRoot.get(UserInfo._email), email), - emailCriteriaBuilder.equal(emailRoot.get(UserInfo._userStatus), 0) //TODO: Authn - )); - - emailQuery.multiselect(emailRoot.get(UserInfo._id).alias(UserInfo._id)); - - List results = this.entityManager.createQuery(emailQuery).getResultList(); - return this.getUUIDFromTuple(results, UserInfo._id); + if (!this.userRolesSynced(existingUserRoles)){ + this.syncRoles(userId); + } } - private UUID getUUIDFromTuple(List results, String field){ - if (results.size() > 0) {//TODO: Authn - Object o; - try { - o = results.get(0).get(field); - } catch (IllegalArgumentException e) { - return null; - } - if (o == null) return null; - try { - return UUID.class.cast(o); - } catch (ClassCastException e) { - return null; + private UUID findExistingUserFromDb(String subjectId){ + UserCredentialEntity userCredential = this.queryFactory.query(UserCredentialQuery.class).externalIds(subjectId).firstAs(new BaseFieldSet().ensure(UserCredential._user)); + if (userCredential != null) { + return userCredential.getUserId(); + } else { + String email = this.claimExtractor.email(this.currentPrincipalResolver.currentPrincipal()); + if (email != null && !email.isBlank()) { + UserContactInfoEntity userContactInfo = this.queryFactory.query(UserContactInfoQuery.class).types(ContactInfoType.Email).values(email).firstAs(new BaseFieldSet().ensure(UserContactInfo._user)); + if (userContactInfo != null) { + UserCredentialEntity credential = this.buildCredential(userContactInfo.getUserId(), subjectId); + this.entityManager.persist(credential); + + return credential.getUserId(); + } + } else { + throw new MyForbiddenException("Email is required"); } } return null; } + + private void syncRoles(UUID userId){ + List claimsRoles = claimExtractor.roles(currentPrincipalResolver.currentPrincipal()); + if (claimsRoles == null) claimsRoles = new ArrayList<>(); + claimsRoles = claimsRoles.stream().filter(x-> x != null && !x.isBlank()).distinct().toList(); + + List existingUserRoles = this.queryFactory.query(UserRoleQuery.class).userIds(userId).collect(); + List foundRoles = new ArrayList<>(); + for (String claimRole : claimsRoles) { + UserRoleEntity roleEntity = existingUserRoles.stream().filter(x-> x.getRole().equals(claimRole)).findFirst().orElse(null); + if (roleEntity == null) { + roleEntity = this.buildRole(userId, claimRole); + this.entityManager.persist(roleEntity); + } + foundRoles.add(roleEntity.getId()); + } + for (UserRoleEntity existing: existingUserRoles) { + if (!foundRoles.contains(existing.getId())){ + this.entityManager.remove(existing); + } + } + } + + private List collectUserRoles(UUID userId){ + List items = this.queryFactory.query(UserRoleQuery.class).userIds(userId).collectAs(new BaseFieldSet().ensure(UserRole._role)); + return items == null ? new ArrayList<>() : items.stream().map(UserRoleEntity::getRole).toList(); + } - private UUID createOrUpdateUser(String subjectId, UUID userId) { - String name = this.claimExtractor.name(this.currentPrincipalResolver.currentPrincipal()); - String emailVerified = this.claimExtractor.emailVerified(this.currentPrincipalResolver.currentPrincipal()); + private List collectUserEmails(UUID userId){ + List items = this.queryFactory.query(UserContactInfoQuery.class).userIds(userId).types(ContactInfoType.Email).collectAs(new BaseFieldSet().ensure(UserContactInfo._value)); + return items == null ? new ArrayList<>() : items.stream().map(UserContactInfoEntity::getValue).toList(); + } + + private boolean emailExistsToUser(List existingUserEmails){ String email = this.claimExtractor.email(this.currentPrincipalResolver.currentPrincipal()); - if (name == null) name = subjectId; + return email == null || email.isBlank() || + (existingUserEmails != null && existingUserEmails.stream().anyMatch(email::equals)); + } - UserInfo user = null; - UserRole userRole = null; - boolean isUpdateUser = userId != null; - if (!isUpdateUser) { - - user = new UserInfo(); - user.setId(UUID.randomUUID()); - user.setVerified_email("true".equals(emailVerified));//TODO: Authn - user.setName(name); - user.setEmail(email); - user.setCreated(new Date()); - user.setLastloggedin(new Date()); - user.setLastloggedin(new Date()); - user.setAuthorization_level((short) 1);//TODO: Authn - user.setUsertype((short) 1); - user.setUserStatus((short) 0); -// user.setAdditionalinfo("{\"data\":{\"avatar\":{\"url\":\"" + profile.getAvatarUrl() -// + "\"},\"zenodoToken\":\"" + profile.getZenodoId() -// + "\", \"expirationDate\": \"" + Instant.now().plusSeconds((profile.getZenodoExpire() != null ? profile.getZenodoExpire(): 0)).toEpochMilli() -// + "\", \"zenodoRefresh\": \"" + profile.getZenodoRefresh() -// + (profile.getProvider() == TokenValidatorFactoryImpl.LoginProvider.ZENODO ? "\", \"zenodoEmail\": \"" + profile.getEmail() : "") +"\"}}"); - user.setAdditionalinfo("{\"data\":{\"avatar\":{\"url\":\"\"},\"zenodoToken\":\"\", \"expirationDate\": \"\", \"zenodoRefresh\": \"\", \"zenodoEmail\": \"\"}}"); //TODO: Authn - - userRole = new UserRole(); - userRole.setId(UUID.randomUUID()); - userRole.setUserInfo(user); - userRole.setRole(Authorities.USER.getValue()); - } else { - CriteriaBuilder emailCriteriaBuilder = this.entityManager.getCriteriaBuilder(); - CriteriaQuery userQuery = emailCriteriaBuilder.createQuery(UserInfo.class); - Root userRoot = userQuery.from(UserInfo.class); - userQuery.where( - emailCriteriaBuilder.and( - emailCriteriaBuilder.equal(userRoot.get(UserInfo._id), userId), - emailCriteriaBuilder.equal(userRoot.get(UserInfo._userStatus), 0) //TODO: Authn - )); - userQuery.select(userRoot); - TypedQuery q = this.entityManager.createQuery(userQuery); - List userInfos = q.getResultList(); - if (userInfos == null || userInfos.size() < 1) { - throw new MyApplicationException("Can not found user " + userId); - } - user = userInfos.get(0); - //user.setAdditionalinfo("{\"data\":{\"avatar\":{\"url\":\"\"},\"zenodoToken\":\"\", \"expirationDate\": \"\", \"zenodoRefresh\": \"\", \"zenodoEmail\": \"\"}}"); //TODO: Authn + private boolean userRolesSynced(List existingUserRoles){ + List claimsRoles = claimExtractor.roles(currentPrincipalResolver.currentPrincipal()); + if (claimsRoles == null) claimsRoles = new ArrayList<>(); + if (existingUserRoles == null) existingUserRoles = new ArrayList<>(); + claimsRoles = claimsRoles.stream().filter(x-> x != null && !x.isBlank()).distinct().toList(); + existingUserRoles = existingUserRoles.stream().filter(x-> x != null && !x.isBlank()).distinct().toList(); + if (claimsRoles.size() != existingUserRoles.size()) return false; + + for (String claim : claimsRoles ) { + if (existingUserRoles.stream().noneMatch(claim::equalsIgnoreCase)) return false; } + return true; + } - CredentialEntity credentialEntity = new CredentialEntity(); - credentialEntity.setId(UUID.randomUUID()); - credentialEntity.setUserId(user.getId()); - credentialEntity.setSecret(subjectId); - credentialEntity.setCreationTime(new Date()); - credentialEntity.setLastUpdateTime(new Date()); - credentialEntity.setIsActive(IsActive.Active); - credentialEntity.setProvider(ProviderType.Keycloack); - credentialEntity.setExternalId(subjectId); - credentialEntity.setEmail(email); - credentialEntity.setPublicValue(email); + private UserCredentialEntity buildCredential(UUID userId, String subjectId){ + UserCredentialEntity data = new UserCredentialEntity(); + data.setId(UUID.randomUUID()); + data.setUserId(userId); + data.setCreatedAt(Instant.now()); + data.setExternalId(subjectId); + return data; + } + + private UserRoleEntity buildRole(UUID userId, String role){ + UserRoleEntity data = new UserRoleEntity(); + data.setId(UUID.randomUUID()); + data.setUserId(userId); + data.setRole(role); + data.setCreatedAt(Instant.now()); + return data; + } + + private UserContactInfoEntity buildEmailContact(UUID userId, String email){ + UserContactInfoEntity data = new UserContactInfoEntity(); + data.setId(UUID.randomUUID()); + data.setUserId(userId); + data.setValue(email); + data.setType(ContactInfoType.Email); + data.setOrdinal(0); + data.setCreatedAt(Instant.now()); + return data; + } - DefaultTransactionDefinition definition = new DefaultTransactionDefinition(); - definition.setName(UUID.randomUUID().toString()); - definition.setIsolationLevel(TransactionDefinition.ISOLATION_READ_COMMITTED); - definition.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED); - TransactionStatus status = null; - try { - status = transactionManager.getTransaction(definition); - if (!isUpdateUser) { - user = this.entityManager.merge(user); - this.entityManager.flush(); - userRole.setUserInfo(user); - credentialEntity.setUserId(user.getId()); - this.entityManager.merge(userRole); - this.entityManager.merge(credentialEntity); - } else { - this.entityManager.persist(user); - this.entityManager.persist(credentialEntity); - } - this.entityManager.flush(); - transactionManager.commit(status); - } catch (Exception ex) { - if (status != null) transactionManager.rollback(status); - throw ex; + + private UserEntity addNewUser(String subjectId, String email){ + List roles = claimExtractor.roles(currentPrincipalResolver.currentPrincipal()); + String name = this.claimExtractor.name(this.currentPrincipalResolver.currentPrincipal()); + + UserEntity user = new UserEntity(); + user.setId(UUID.randomUUID()); + user.setName(name); + user.setCreatedAt(Instant.now()); + user.setIsActive(IsActive.Active); + user.setAdditionalInfo(this.jsonHandlingService.toJsonSafe(new AdditionalInfoEntity())); + + UserCredentialEntity credential = this.buildCredential(user.getId(), subjectId); + this.entityManager.persist(credential); + + if (email != null && !email.isBlank()) { + UserContactInfoEntity contactInfo = this.buildEmailContact(user.getId(), email); + this.entityManager.persist(contactInfo); } - return user.getId(); + this.entityManager.persist(user); + if (roles != null) { + for (String role: roles) { + UserRoleEntity roleEntity = this.buildRole(user.getId(), role); + this.entityManager.persist(roleEntity); + } + } + + return user; } @Override @@ -245,3 +295,4 @@ public class UserInterceptor implements WebRequestInterceptor { public void afterCompletion(@NonNull WebRequest request, Exception ex) { } } + diff --git a/dmp-backend/web/src/main/java/eu/eudat/interceptors/UserInterceptorCacheService.java b/dmp-backend/web/src/main/java/eu/eudat/interceptors/UserInterceptorCacheService.java index a92b8f458..d2cbb225f 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/interceptors/UserInterceptorCacheService.java +++ b/dmp-backend/web/src/main/java/eu/eudat/interceptors/UserInterceptorCacheService.java @@ -7,6 +7,7 @@ import org.springframework.context.event.EventListener; import org.springframework.stereotype.Service; import java.util.HashMap; +import java.util.List; import java.util.UUID; @Service @@ -33,6 +34,8 @@ public class UserInterceptorCacheService extends CacheService roles; + private List emails; public UUID getUserId() { return userId; @@ -41,24 +44,30 @@ public class UserInterceptorCacheService extends CacheService getRoles() { + return roles; + } + + public void setRoles(List roles) { + this.roles = roles; + } + + public List getEmails() { + return emails; + } + + public void setEmails(List emails) { + this.emails = emails; + } } - private final ConventionService conventionService; @Autowired public UserInterceptorCacheService(UserInterceptorCacheOptions options, ConventionService conventionService) { super(options); - this.conventionService = conventionService; } -// @EventListener //TODO: Authn -// public void handleUserTouchedEvent(UserTouchedEvent event) { -// if (!this.conventionService.isNullOrEmpty(event.getSubjectId())) -// this.evict(this.buildKey(event.getSubjectId())); -// if (!this.conventionService.isNullOrEmpty(event.getPreviousSubjectId())) -// this.evict(this.buildKey(event.getPreviousSubjectId())); -// } - @Override protected Class valueClass() { return UserInterceptorCacheValue.class; diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/builders/entity/UserInfoBuilder.java b/dmp-backend/web/src/main/java/eu/eudat/logic/builders/entity/UserInfoBuilder.java index 9fbc85e8c..3396e2091 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/builders/entity/UserInfoBuilder.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/builders/entity/UserInfoBuilder.java @@ -1,12 +1,13 @@ package eu.eudat.logic.builders.entity; -import eu.eudat.data.CredentialEntity; +import eu.eudat.commons.enums.IsActive; +import eu.eudat.data.UserCredentialEntity; import eu.eudat.data.DmpEntity; import eu.eudat.logic.builders.Builder; -import eu.eudat.data.old.UserInfo; -import eu.eudat.data.old.UserRole; +import eu.eudat.data.UserEntity; +import eu.eudat.data.UserRoleEntity; -import java.util.Date; +import java.time.Instant; import java.util.HashSet; import java.util.Set; import java.util.UUID; @@ -14,74 +15,40 @@ import java.util.UUID; /** * Created by ikalyvas on 2/15/2018. */ -public class UserInfoBuilder extends Builder { +public class UserInfoBuilder extends Builder { private UUID id; - private String email = null; - - private Short authorization_level; //0 admin, 1 user - - private Short usertype; // 0 internal, 1 external - - private Boolean verified_email = null; - private String name = null; - private Date created = null; - - private Date lastloggedin = null; + private Instant created = null; private String additionalinfo; private Set dmps; - private Set credentials = new HashSet<>(); + private Set credentials = new HashSet<>(); - private Set userRoles = new HashSet<>(); + private Set userRoles = new HashSet<>(); - private Short userStatus; + private IsActive userStatus; public UserInfoBuilder id(UUID id) { this.id = id; return this; } - public UserInfoBuilder email(String email) { - this.email = email; - return this; - } - - public UserInfoBuilder authorization_level(Short authorization_level) { - this.authorization_level = authorization_level; - return this; - } - - public UserInfoBuilder usertype(Short usertype) { - this.usertype = usertype; - return this; - } - - public UserInfoBuilder verified_email(Boolean verified_email) { - this.verified_email = verified_email; - return this; - } public UserInfoBuilder name(String name) { this.name = name; return this; } - public UserInfoBuilder created(Date created) { + public UserInfoBuilder created(Instant created) { this.created = created; return this; } - public UserInfoBuilder lastloggedin(Date lastloggedin) { - this.lastloggedin = lastloggedin; - return this; - } - public UserInfoBuilder additionalinfo(String additionalinfo) { this.additionalinfo = additionalinfo; return this; @@ -92,37 +59,32 @@ public class UserInfoBuilder extends Builder { return this; } - public UserInfoBuilder credentials(Set credentials) { + public UserInfoBuilder credentials(Set credentials) { this.credentials = credentials; return this; } - public UserInfoBuilder userRoles(Set userRoles) { + public UserInfoBuilder userRoles(Set userRoles) { this.userRoles = userRoles; return this; } - public UserInfoBuilder userStatus(Short userStatus) { + public UserInfoBuilder userStatus(IsActive userStatus) { this.userStatus = userStatus; return this; } @Override - public UserInfo build() { - UserInfo userInfo = new UserInfo(); + public UserEntity build() { + UserEntity userInfo = new UserEntity(); userInfo.setId(id); - userInfo.setUsertype(usertype); - userInfo.setAuthorization_level(authorization_level); - userInfo.setLastloggedin(lastloggedin); - userInfo.setCreated(created); - userInfo.setEmail(email); + userInfo.setCreatedAt(created); userInfo.setName(name); - userInfo.setAdditionalinfo(additionalinfo); - userInfo.setUserRoles(userRoles); - userInfo.setCredentials(credentials); + userInfo.setAdditionalInfo(additionalinfo); +// userInfo.setUserRoles(userRoles); +// userInfo.setCredentials(credentials); // userInfo.setDmps(dmps); //TODO - userInfo.setVerified_email(verified_email); - userInfo.setUserStatus(userStatus); + userInfo.setIsActive(userStatus); return userInfo; } } diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/builders/entity/UserRoleBuilder.java b/dmp-backend/web/src/main/java/eu/eudat/logic/builders/entity/UserRoleBuilder.java index edae42fe2..4e7112fae 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/builders/entity/UserRoleBuilder.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/builders/entity/UserRoleBuilder.java @@ -1,41 +1,41 @@ package eu.eudat.logic.builders.entity; import eu.eudat.logic.builders.Builder; -import eu.eudat.data.old.UserInfo; -import eu.eudat.data.old.UserRole; +import eu.eudat.data.UserEntity; +import eu.eudat.data.UserRoleEntity; import java.util.UUID; /** * Created by ikalyvas on 2/15/2018. */ -public class UserRoleBuilder extends Builder { +public class UserRoleBuilder extends Builder { private UUID id; - private int role; + private String role; - private UserInfo userInfo; + private UUID userId; public UserRoleBuilder id(UUID id) { this.id = id; return this; } - public UserRoleBuilder role(int role) { + public UserRoleBuilder role(String role) { this.role = role; return this; } - public UserRoleBuilder userInfo(UserInfo userInfo) { - this.userInfo = userInfo; + public UserRoleBuilder userInfo(UserEntity userInfo) { + this.userId = userInfo.getId(); return this; } @Override - public UserRole build() { - UserRole userRole = new UserRole(); - userRole.setUserInfo(userInfo); + public UserRoleEntity build() { + UserRoleEntity userRole = new UserRoleEntity(); + userRole.setUserId(userId); userRole.setRole(role); userRole.setId(id); return userRole; diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/builders/model/models/GrantBuilder.java b/dmp-backend/web/src/main/java/eu/eudat/logic/builders/model/models/GrantBuilder.java index 14d717ade..be37a54e5 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/builders/model/models/GrantBuilder.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/builders/model/models/GrantBuilder.java @@ -1,7 +1,7 @@ package eu.eudat.logic.builders.model.models; import eu.eudat.logic.builders.Builder; -import eu.eudat.data.old.UserInfo; +import eu.eudat.data.UserEntity; import eu.eudat.models.data.dmp.DataManagementPlan; import eu.eudat.models.data.grant.Grant; @@ -31,7 +31,7 @@ public class GrantBuilder extends Builder { private eu.eudat.data.old.Grant.Status status; - private UserInfo creationUser; + private UserEntity creationUser; private Date created; @@ -93,7 +93,7 @@ public class GrantBuilder extends Builder { return this; } - public GrantBuilder creationUser(UserInfo creationUser) { + public GrantBuilder creationUser(UserEntity creationUser) { this.creationUser = creationUser; return this; } diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/builders/model/models/ProjectBuilder.java b/dmp-backend/web/src/main/java/eu/eudat/logic/builders/model/models/ProjectBuilder.java index dac2a1734..e8d9f009e 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/builders/model/models/ProjectBuilder.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/builders/model/models/ProjectBuilder.java @@ -1,7 +1,7 @@ package eu.eudat.logic.builders.model.models; -import eu.eudat.data.old.UserInfo; +import eu.eudat.data.UserEntity; import eu.eudat.logic.builders.Builder; import eu.eudat.models.data.dmp.DataManagementPlan; import eu.eudat.models.data.project.Project; @@ -23,7 +23,7 @@ public class ProjectBuilder extends Builder { private Date startDate; private Date endDate; private eu.eudat.data.old.Project.Status status; - private UserInfo creationUser; + private UserEntity creationUser; private Date created; private Date modified; private String description; @@ -85,7 +85,7 @@ public class ProjectBuilder extends Builder { return this; } - public ProjectBuilder creationUser(UserInfo creationUser) { + public ProjectBuilder creationUser(UserEntity creationUser) { this.creationUser = creationUser; return this; } diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/ContactEmailManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/ContactEmailManager.java index a25a581dd..324baddc7 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/ContactEmailManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/ContactEmailManager.java @@ -1,7 +1,7 @@ package eu.eudat.logic.managers; import eu.eudat.commons.scope.user.UserScope; -import eu.eudat.data.old.UserInfo; +import eu.eudat.data.UserEntity; import eu.eudat.logic.services.ApiContext; import eu.eudat.models.data.ContactEmail.ContactEmailModel; import eu.eudat.models.data.ContactEmail.PublicContactEmailModel; @@ -28,13 +28,13 @@ public class ContactEmailManager { } public void sendContactEmail(ContactEmailModel contactEmailModel) throws MessagingException, InvalidApplicationException { - UserInfo user = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(this.userScope.getUserId()); + UserEntity user = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(this.userScope.getUserId()); SimpleMail mail = new SimpleMail(); - String enrichedMail = contactEmailModel.getDescription() + "\n\n" + "Send by user: " + user.getEmail() ; + String enrichedMail = ""; //TODO: GetEmailcontactEmailModel.getDescription() + "\n\n" + "Send by user: " + user.getEmail() ; mail.setSubject(contactEmailModel.getSubject()); mail.setTo(environment.getProperty("contact_email.mail")); mail.setContent(enrichedMail); - mail.setFrom(user.getEmail()); +// mail.setFrom(user.getEmail());//TODO: GetEmail apiContext.getUtilitiesService().getMailService().sendSimpleMail(mail); } diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DashBoardManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DashBoardManager.java index 52c057799..d570d2759 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DashBoardManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DashBoardManager.java @@ -14,7 +14,7 @@ import eu.eudat.data.dao.entities.GrantDao; import eu.eudat.data.dao.entities.OrganisationDao; import eu.eudat.data.DescriptionEntity; import eu.eudat.data.old.Grant; -import eu.eudat.data.old.UserInfo; +import eu.eudat.data.UserEntity; import eu.eudat.data.query.items.table.dataset.DatasetTableRequest; import eu.eudat.data.query.items.table.dmp.DataManagementPlanTableRequest; import eu.eudat.logic.builders.model.models.RecentActivityDataBuilder; @@ -121,7 +121,7 @@ public class DashBoardManager { DatasetDao datasetRepository = databaseRepository.getDatasetDao(); GrantDao grantRepository = databaseRepository.getGrantDao(); OrganisationDao organisationRepository = databaseRepository.getOrganisationDao(); - UserInfo user = new UserInfo(); + UserEntity user = new UserEntity(); user.setId(this.userScope.getUserId()); DatasetCriteria datasetCriteria = new DatasetCriteria(); // if (apiContext.getOperationsContext().getElasticRepository().getDatasetRepository() != null) { //TODO @@ -187,7 +187,7 @@ public class DashBoardManager { DMPDao dataManagementPlanRepository = databaseRepository.getDmpDao(); DatasetDao datasetRepository = databaseRepository.getDatasetDao(); GrantDao grantRepository = databaseRepository.getGrantDao(); - UserInfo user = new UserInfo(); + UserEntity user = new UserEntity(); user.setId(this.userScope.getUserId()); DatasetCriteria datasetCriteria = new DatasetCriteria(); datasetCriteria.setAllVersions(false); @@ -226,7 +226,7 @@ public class DashBoardManager { public List getNewRecentActivity(RecentActivityTableRequest tableRequest) throws Exception { boolean isAuthenticated = this.currentPrincipalResolver.currentPrincipal().isAuthenticated(); List recentActivityModels = new ArrayList<>(); - UserInfo user = new UserInfo(); + UserEntity user = new UserEntity(); if (isAuthenticated) { user.setId(userScope.getUserId()); } @@ -300,7 +300,7 @@ public class DashBoardManager { } public List searchUserData(String like) throws InvalidApplicationException { - UserInfo user = new UserInfo(); + UserEntity user = new UserEntity(); user.setId(this.userScope.getUserIdSafe()); DMPDao dataManagementPlanRepository = databaseRepository.getDmpDao(); DatasetDao datasetRepository = databaseRepository.getDatasetDao(); diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementPlanManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementPlanManager.java index 592723eb1..6d0dcf08e 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementPlanManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementPlanManager.java @@ -6,19 +6,16 @@ import eu.eudat.commons.XmlHandlingService; import eu.eudat.commons.enums.*; import eu.eudat.commons.scope.user.UserScope; import eu.eudat.commons.types.dmpblueprint.*; -import eu.eudat.commons.types.dmpblueprint.DescriptionTemplateEntity; import eu.eudat.configurations.dynamicgrant.DynamicGrantConfiguration; import eu.eudat.configurations.dynamicgrant.entities.Property; import eu.eudat.data.*; import eu.eudat.data.dao.criteria.*; import eu.eudat.data.dao.entities.*; import eu.eudat.data.old.*; -import eu.eudat.data.old.Researcher; import eu.eudat.commons.enums.old.notification.ActiveStatus; import eu.eudat.commons.enums.old.notification.ContactType; import eu.eudat.commons.enums.old.notification.NotificationType; import eu.eudat.commons.enums.old.notification.NotifyState; -import eu.eudat.data.old.Organisation; import eu.eudat.data.query.items.table.dataset.DatasetTableRequest; import eu.eudat.data.query.items.table.datasetprofile.DatasetProfileTableRequestItem; import eu.eudat.data.query.items.table.dmp.DataManagementPlanTableRequest; @@ -278,7 +275,7 @@ public class DataManagementPlanManager { QueryableList datasetItems = apiContext.getOperationsContext().getDatabaseRepository().getDatasetDao().getWithCriteria(datasetCriteria) .orderBy((builder, root) -> builder.desc(root.get("modified"))); if (principal != null) { - UserInfo userInfo = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(principal); + UserEntity userInfo = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(principal); List roles = new ArrayList<>(); roles.add(0); roles.add(1); @@ -508,7 +505,7 @@ public class DataManagementPlanManager { if (newDmp.getStatus().equals(DmpStatus.Finalized)) { checkDmpValidationRules(newDmp); } - UserInfo user = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(this.userScope.getUserId()); + UserEntity user = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(this.userScope.getUserId()); newDmp.setCreator(user.getId()); DmpBlueprintEntity dmpBlueprint = this.queryFactory.query(DmpBlueprintQuery.class).ids(newDmp.getBlueprint()).first(); @@ -585,7 +582,7 @@ public class DataManagementPlanManager { if (dataManagementPlan.getUsers() != null && !dataManagementPlan.getUsers().isEmpty()) { clearUsers(newDmp); for (UserInfoListingModel userListing : dataManagementPlan.getUsers()) { - UserInfo tempUser = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(userListing.getId()); + UserEntity tempUser = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(userListing.getId()); assignUser(dmp, tempUser, DmpUserRole.of((short)userListing.getRole())); } } @@ -671,7 +668,7 @@ public class DataManagementPlanManager { if (tempDMP.getStatus().equals(DmpStatus.Finalized)) { checkDmpValidationRules(tempDMP); } - UserInfo user = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(this.userScope.getUserId()); + UserEntity user = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(this.userScope.getUserId()); DmpBlueprintEntity dmpBlueprint = this.queryFactory.query(DmpBlueprintQuery.class).ids(tempDMP.getBlueprint()).first(); if(this.dmpBlueprintService.fieldInBlueprint(dmpBlueprint, DmpBlueprintSystemFieldType.Organizations)) { @@ -721,7 +718,7 @@ public class DataManagementPlanManager { newDmp.setBlueprint(oldDmp.getBlueprint()); newDmp.setProperties(oldDmp.getProperties()); newDmp.setProperties(oldDmp.getProperties()); - UserInfo user = apiContext.getOperationsContext().getBuilderFactory().getBuilder(UserInfoBuilder.class).id(this.userScope.getUserId()).build(); + UserEntity user = apiContext.getOperationsContext().getBuilderFactory().getBuilder(UserInfoBuilder.class).id(this.userScope.getUserId()).build(); newDmp.setCreator(user.getId()); DmpBlueprintEntity dmpBlueprint = this.queryFactory.query(DmpBlueprintQuery.class).ids(newDmp.getBlueprint()).first(); if(this.dmpBlueprintService.fieldInBlueprint(dmpBlueprint, DmpBlueprintSystemFieldType.Organizations)) { @@ -817,7 +814,7 @@ public class DataManagementPlanManager { newDmp.setProperties(oldDmp.getProperties()); newDmp.setProperties(oldDmp.getProperties()); - UserInfo user = apiContext.getOperationsContext().getBuilderFactory().getBuilder(UserInfoBuilder.class).id(this.userScope.getUserId()).build(); + UserEntity user = apiContext.getOperationsContext().getBuilderFactory().getBuilder(UserInfoBuilder.class).id(this.userScope.getUserId()).build(); newDmp.setCreator(user.getId()); DmpBlueprintEntity dmpBlueprint = this.queryFactory.query(DmpBlueprintQuery.class).ids(newDmp.getBlueprint()).first(); if(this.dmpBlueprintService.fieldInBlueprint(dmpBlueprint, DmpBlueprintSystemFieldType.Organizations)) { @@ -947,7 +944,7 @@ public class DataManagementPlanManager { }); } - private void createResearchersIfTheyDontExist(DmpEntity newDmp, ResearcherDao researcherRepository, UserInfo user) throws InvalidApplicationException { + private void createResearchersIfTheyDontExist(DmpEntity newDmp, ResearcherDao researcherRepository, UserEntity user) throws InvalidApplicationException { // if (newDmp.getResearchers() != null && !newDmp.getResearchers().isEmpty()) { //TODO // for (eu.eudat.data.old.Researcher researcher : newDmp.getResearchers()) { // ResearcherCriteria criteria = new ResearcherCriteria(); @@ -1233,7 +1230,7 @@ public class DataManagementPlanManager { // } // }); }); - UserInfo user = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(this.userScope.getUserId()); + UserEntity user = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(this.userScope.getUserId()); sendNotification(dmp, user, NotificationType.DMP_PUBLISH); } @@ -1319,7 +1316,7 @@ public class DataManagementPlanManager { UUID dmpId = dmp.getId(); // dmp.setUsers(new HashSet<>(apiContext.getOperationsContext().getDatabaseRepository().getUserDmpDao().asQueryable().where((builder, root) -> builder.equal(root.get("dmp").get("id"), dmpId)).toList())); //TODO //this.updateIndex(dmp); //TODO - UserInfo user = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(this.userScope.getUserId()); + UserEntity user = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(this.userScope.getUserId()); sendNotification(dmp, user, NotificationType.DMP_FINALISED); metricsManager.decreaseValue(MetricNames.DMP, 1, MetricNames.DRAFT); metricsManager.increaseValue(MetricNames.DMP, 1, MetricNames.FINALIZED); @@ -1353,7 +1350,7 @@ public class DataManagementPlanManager { throw new Exception("User does not have the privilege to do this action."); clearUsers(dmp); for (UserInfoListingModel userListing : users) { - UserInfo tempUser = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(userListing.getId()); + UserEntity tempUser = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(userListing.getId()); assignUser(dmp, tempUser, DmpUserRole.of((short)userListing.getRole())); } @@ -1828,14 +1825,14 @@ public class DataManagementPlanManager { Element dmpContactEmail = xmlDoc.createElement("email"); if(dmp.getCreator() != null){ dmpContactName.setTextContent(this.databaseRepository.getUserInfoDao().find(dmp.getCreator()).getName()); - dmpContactEmail.setTextContent(this.databaseRepository.getUserInfoDao().find(dmp.getCreator()).getEmail()); + //TODO dmpContactEmail.setTextContent(this.databaseRepository.getUserInfoDao().find(dmp.getCreator()).getEmail()); } else{ Iterator users = new ArrayList().iterator(); //TODO dmp.getUsers().iterator(); if(users.hasNext()){ DmpUserEntity creator = users.next(); dmpContactName.setTextContent(this.databaseRepository.getUserInfoDao().find(creator.getUser()).getName()); - dmpContactEmail.setTextContent(this.databaseRepository.getUserInfoDao().find(creator.getUser()).getEmail()); +//TODO .setTextContent(this.databaseRepository.getUserInfoDao().find(creator.getUser()).getEmail()); } } dmpContactElement.appendChild(dmpContactName); @@ -1850,7 +1847,7 @@ public class DataManagementPlanManager { Element dmpContributorEmail= xmlDoc.createElement("email"); DmpUserEntity contributor = users.next(); dmpContributorName.setTextContent(this.databaseRepository.getUserInfoDao().find(contributor.getUser()).getName()); - dmpContributorEmail.setTextContent(this.databaseRepository.getUserInfoDao().find(contributor.getUser()).getEmail()); + //TODO dmpContributorEmail.setTextContent(this.databaseRepository.getUserInfoDao().find(contributor.getUser()).getEmail()); dmpContributorElement.appendChild(dmpContributorName); dmpContributorElement.appendChild(dmpContributorEmail); dmpContributorsElement.appendChild(dmpContributorElement); @@ -2331,7 +2328,7 @@ public class DataManagementPlanManager { for (MultipartFile file: files) { DmpEntity dmp = rdaManager.convertToEntity(new String(file.getBytes(), "UTF-8"), profiles); dmp.setLabel(file.getOriginalFilename()); - UserInfo me = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(this.userScope.getUserId()); + UserEntity me = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(this.userScope.getUserId()); dmp.setUpdatedAt(Instant.now()); dmp.setCreator(me.getId()); //TODO @@ -2404,11 +2401,11 @@ public class DataManagementPlanManager { * Data assignments * */ - private void assignUser(DmpEntity dmp, UserInfo userInfo) { + private void assignUser(DmpEntity dmp, UserEntity userInfo) { this.assignUser(dmp, userInfo, DmpUserRole.Owner); } - private void assignUser(DmpEntity dmp, UserInfo userInfo, DmpUserRole role) { + private void assignUser(DmpEntity dmp, UserEntity userInfo, DmpUserRole role) { DmpUserEntity userDMP = new DmpUserEntity(); userDMP.setDmp(dmp.getId()); userDMP.setUser(userInfo.getId()); @@ -2421,21 +2418,21 @@ public class DataManagementPlanManager { userDMPs.forEach(userDMP -> apiContext.getOperationsContext().getDatabaseRepository().getUserDmpDao().delete(userDMP)); } - private void assignGrandUserIfInternal(DmpEntity dmp, UserInfo user) { + private void assignGrandUserIfInternal(DmpEntity dmp, UserEntity user) { //TODO // if (dmp.getGrant() != null && dmp.getGrant().getCreationUser() == null && (dmp.getGrant().getReference() != null && dmp.getGrant().getReference().startsWith("dmp:"))) { // dmp.getGrant().setCreationUser(user); // } } - private void assignFunderUserIfInternal(DmpEntity dmp, UserInfo user) { + private void assignFunderUserIfInternal(DmpEntity dmp, UserEntity user) { //TODO // if (dmp.getGrant() != null && dmp.getGrant().getFunder() != null && dmp.getGrant().getFunder().getCreationUser() == null && ( dmp.getGrant().getFunder().getReference() != null && dmp.getGrant().getFunder().getReference().startsWith("dmp:"))) { // dmp.getGrant().getFunder().setCreationUser(user); // } } - private void assignProjectUserIfInternal(DmpEntity dmp, UserInfo user) { + private void assignProjectUserIfInternal(DmpEntity dmp, UserEntity user) { //TODO // if (dmp.getProject() != null && dmp.getProject().getCreationUser() == null && (dmp.getProject().getReference() != null && dmp.getProject().getReference().startsWith("dmp:"))) { // dmp.getProject().setCreationUser(user); @@ -2517,7 +2514,7 @@ public class DataManagementPlanManager { * Data Checkup * */ - private void checkIfUserCanEditGrant(DmpEntity dmp, UserInfo user) throws Exception{ + private void checkIfUserCanEditGrant(DmpEntity dmp, UserEntity user) throws Exception{ // if (dmp.getGrant() != null && dmp.getGrant().getId() != null) { //TODO // Grant grant = apiContext.getOperationsContext().getDatabaseRepository().getGrantDao().find(dmp.getGrant().getId()); // if (grant.getFunder() != null && dmp.getGrant().getFunder() != null @@ -2683,7 +2680,7 @@ public class DataManagementPlanManager { * Misc * */ - private void sendNotification(DmpEntity dmp, UserInfo user, NotificationType notificationType) throws InvalidApplicationException { + private void sendNotification(DmpEntity dmp, UserEntity user, NotificationType notificationType) throws InvalidApplicationException { List userDMPS = databaseRepository.getUserDmpDao().asQueryable().where(((builder, root) -> builder.equal(root.get("dmp").get("id"), dmp.getId()))).toList(); for (DmpUserEntity userDMP : userDMPS) { if (!userDMP.getUser().equals(user.getId())) { diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetManager.java index 43cf1c8c6..dfb6aaf09 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetManager.java @@ -36,7 +36,6 @@ import eu.eudat.model.file.FileEnvelope; import eu.eudat.logic.utilities.documents.types.ParagraphStyle; import eu.eudat.logic.utilities.documents.word.WordBuilder; import eu.eudat.logic.utilities.documents.xml.ExportXmlBuilder; -import eu.eudat.logic.utilities.helpers.StreamDistinctBy; import eu.eudat.logic.utilities.json.JsonSearcher; import eu.eudat.models.HintedModelFactory; import eu.eudat.models.data.dataset.DatasetOverviewModel; @@ -58,7 +57,6 @@ import gr.cite.tools.data.query.QueryFactory; import org.apache.poi.xwpf.extractor.XWPFWordExtractor; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.usermodel.XWPFParagraph; -import org.json.JSONArray; import org.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -179,7 +177,7 @@ public class DatasetManager { // datasets = null; // } - UserInfo userInfo = builderFactory.getBuilder(UserInfoBuilder.class).id(this.userScope.getUserIdSafe()).build(); + UserEntity userInfo = builderFactory.getBuilder(UserInfoBuilder.class).id(this.userScope.getUserIdSafe()).build(); // QueryableList items = databaseRepository.getDatasetDao().getWithCriteria(datasetTableRequest.getCriteria()).withHint(HintedModelFactory.getHint(DatasetListingModel.class)); QueryableList items; //TODO @@ -654,7 +652,7 @@ public class DatasetManager { throw new Exception("Field value of " + failedField + " must be filled."); } } - UserInfo userInfo = apiContext.getOperationsContext().getBuilderFactory().getBuilder(UserInfoBuilder.class).id(this.userScope.getUserId()).build(); + UserEntity userInfo = apiContext.getOperationsContext().getBuilderFactory().getBuilder(UserInfoBuilder.class).id(this.userScope.getUserId()).build(); descriptionEntity.setDmpDescriptionTemplateId(userInfo.getId()); createDataRepositoriesIfTheyDontExist(apiContext.getOperationsContext().getDatabaseRepository().getDataRepositoryDao(), descriptionEntity); @@ -688,7 +686,7 @@ public class DatasetManager { return descriptionEntity1; } - private void deleteOldFilesAndAddNew(DatasetWizardModel datasetWizardModel, UserInfo userInfo) throws JsonProcessingException, InvalidApplicationException { + private void deleteOldFilesAndAddNew(DatasetWizardModel datasetWizardModel, UserEntity userInfo) throws JsonProcessingException, InvalidApplicationException { // Files in DB for this entityId which are NOT DELETED List fileUploads = fileManager.getCurrentFileUploadsForEntityId(datasetWizardModel.getId()); List fileUploadIds = fileUploads.stream().map(fileUpload -> fileUpload.getId().toString()).collect(Collectors.toList()); @@ -726,7 +724,7 @@ public class DatasetManager { }); } - private void sendNotification(DescriptionEntity descriptionEntity, DmpEntity dmp, UserInfo user, NotificationType notificationType) throws InvalidApplicationException { + private void sendNotification(DescriptionEntity descriptionEntity, DmpEntity dmp, UserEntity user, NotificationType notificationType) throws InvalidApplicationException { List userDMPS = databaseRepository.getUserDmpDao().asQueryable().where(((builder, root) -> builder.equal(root.get("dmp").get("id"), dmp.getId()))).toList(); for (DmpUserEntity userDMP : userDMPS) { if (!userDMP.getUser().equals(user.getId())) { @@ -744,7 +742,7 @@ public class DatasetManager { notification.setCreatedAt(new Date()); notification.setUpdatedAt(notification.getCreatedAt()); notification.setContactTypeHint(ContactType.EMAIL); - notification.setContactHint(databaseRepository.getUserInfoDao().find(userDMP.getUser()).getEmail()); + //notification.setContactHint(databaseRepository.getUserInfoDao().find(userDMP.getUser()).getEmail()); //TODO: GetEmail databaseRepository.getNotificationDao().createOrUpdate(notification); } } @@ -1054,7 +1052,7 @@ public class DatasetManager { profile.setId(UUID.fromString(datasetProfileId)); // entity.setDescriptionTemplateId(profile.getId());//TODO - UserInfo userInfo = apiContext.getOperationsContext().getBuilderFactory().getBuilder(UserInfoBuilder.class).id(this.userScope.getUserId()).build(); + UserEntity userInfo = apiContext.getOperationsContext().getBuilderFactory().getBuilder(UserInfoBuilder.class).id(this.userScope.getUserId()).build(); entity.setDmpDescriptionTemplateId(userInfo.getId()); updateTagsXmlImportDataset(entity); diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetWizardManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetWizardManager.java index 9fcd7714f..a2b008280 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetWizardManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetWizardManager.java @@ -10,7 +10,7 @@ import eu.eudat.data.dao.entities.DMPDao; import eu.eudat.data.dao.entities.DatasetProfileDao; import eu.eudat.data.DescriptionEntity; import eu.eudat.data.DescriptionTemplateEntity; -import eu.eudat.data.old.UserInfo; +import eu.eudat.data.UserEntity; import eu.eudat.data.query.items.item.dataset.DatasetWizardAutocompleteRequest; import eu.eudat.data.query.items.item.datasetprofile.DatasetProfileWizardAutocompleteRequest; import eu.eudat.exceptions.datasetwizard.DatasetWizardCannotUnlockException; @@ -33,7 +33,7 @@ import java.util.stream.Collectors; public class DatasetWizardManager { public static List getUserDmps(DMPDao dmpRepository, DatasetWizardAutocompleteRequest datasetWizardAutocompleteRequest, UserScope userScope) throws InstantiationException, IllegalAccessException, InvalidApplicationException { - UserInfo userInfo = new UserInfo(); + UserEntity userInfo = new UserEntity(); userInfo.setId(userScope.getUserId()); QueryableList items = dmpRepository.getUserDmps(datasetWizardAutocompleteRequest.getCriteria(), userInfo); List dataManagementPlans = items.select(item -> new DataManagentPlanListingModel().fromDataModel(item)); diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/EmailConfirmationManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/EmailConfirmationManager.java index c27e95c6b..4664eda64 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/EmailConfirmationManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/EmailConfirmationManager.java @@ -1,9 +1,9 @@ package eu.eudat.logic.managers; import eu.eudat.commons.scope.user.UserScope; -import eu.eudat.data.CredentialEntity; +import eu.eudat.data.UserCredentialEntity; import eu.eudat.data.old.EmailConfirmation; -import eu.eudat.data.old.UserInfo; +import eu.eudat.data.UserEntity; import eu.eudat.exceptions.emailconfirmation.HasConfirmedEmailException; import eu.eudat.exceptions.emailconfirmation.TokenExpiredException; import eu.eudat.logic.services.ApiContext; @@ -33,11 +33,11 @@ public class EmailConfirmationManager { .getDatabaseRepository().getLoginConfirmationEmailDao().asQueryable() .where((builder, root) -> builder.equal(root.get("token"), UUID.fromString(token))).getSingle(); - UserInfo user = databaseRepository.getUserInfoDao().asQueryable() + UserEntity user = databaseRepository.getUserInfoDao().asQueryable() .where((builder, root) -> builder.equal(root.get("id"), loginConfirmationEmail.getUserId())).getSingle(); - if (user.getEmail() != null) - throw new HasConfirmedEmailException("User already has confirmed his Email."); +// if (user.getEmail() != null) //TODO +// throw new HasConfirmedEmailException("User already has confirmed his Email."); if (loginConfirmationEmail.getExpiresAt().compareTo(new Date()) < 0) throw new TokenExpiredException("Token has expired."); @@ -47,31 +47,31 @@ public class EmailConfirmationManager { // Checks if mail is used by another user. If it is, merges the new the old. Long existingUsers = databaseRepository.getUserInfoDao().asQueryable().where((builder, root) -> builder.equal(root.get("email"), loginConfirmationEmail.getEmail())).count(); if (existingUsers > 0) { - CredentialEntity credential = databaseRepository.getCredentialDao().asQueryable().where((builder, root) -> builder.equal(root.get("userId"), user.getId())).getSingle(); - credential.setEmail(loginConfirmationEmail.getEmail()); + UserCredentialEntity credential = databaseRepository.getCredentialDao().asQueryable().where((builder, root) -> builder.equal(root.get("userId"), user.getId())).getSingle(); +// credential.setEmail(loginConfirmationEmail.getEmail()); //TODO databaseRepository.getCredentialDao().createOrUpdate(credential); - UserInfo oldUser = databaseRepository.getUserInfoDao().asQueryable().where((builder, root) -> builder.equal(root.get("email"), loginConfirmationEmail.getEmail())).getSingle(); + UserEntity oldUser = databaseRepository.getUserInfoDao().asQueryable().where((builder, root) -> builder.equal(root.get("email"), loginConfirmationEmail.getEmail())).getSingle(); mergeNewUserToOld(user, oldUser); // expireUserToken(user); //TODO: Authn databaseRepository.getLoginConfirmationEmailDao().createOrUpdate(loginConfirmationEmail); return; } - user.setEmail(loginConfirmationEmail.getEmail()); +// user.setEmail(loginConfirmationEmail.getEmail()); //TODO databaseRepository.getUserInfoDao().createOrUpdate(user); - CredentialEntity credential = databaseRepository.getCredentialDao().asQueryable() + UserCredentialEntity credential = databaseRepository.getCredentialDao().asQueryable() .where((builder, root) -> builder.equal(root.get("userId"), user.getId())).getSingle(); - if(credential.getEmail() == null){ - credential.setEmail(user.getEmail()); - databaseRepository.getCredentialDao().createOrUpdate(credential); - } +// if(credential.getEmail() == null){//TODO +// credential.setEmail(user.getEmail()); +// databaseRepository.getCredentialDao().createOrUpdate(credential); +// } databaseRepository.getLoginConfirmationEmailDao().createOrUpdate(loginConfirmationEmail); } public void sendConfirmationEmail(String email) throws HasConfirmedEmailException, InvalidApplicationException { - UserInfo user = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(this.userScope.getUserId()); - if (user.getEmail() != null) - throw new HasConfirmedEmailException("User already has confirmed his Email."); + UserEntity user = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(this.userScope.getUserId()); +// if (user.getEmail() != null) //TODO +// throw new HasConfirmedEmailException("User already has confirmed his Email."); apiContext.getUtilitiesService().getConfirmationEmailService().createConfirmationEmail( databaseRepository.getLoginConfirmationEmailDao(), @@ -81,8 +81,8 @@ public class EmailConfirmationManager { ); } - private void mergeNewUserToOld(UserInfo newUser, UserInfo oldUser) throws InvalidApplicationException { - CredentialEntity credential = databaseRepository.getCredentialDao().asQueryable().where((builder, root) -> builder.equal(root.get("userId"), newUser.getId())).getSingle(); + private void mergeNewUserToOld(UserEntity newUser, UserEntity oldUser) throws InvalidApplicationException { + UserCredentialEntity credential = databaseRepository.getCredentialDao().asQueryable().where((builder, root) -> builder.equal(root.get("userId"), newUser.getId())).getSingle(); credential.setUserId(oldUser.getId()); databaseRepository.getCredentialDao().createOrUpdate(credential); } diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/FileManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/FileManager.java index a5f3f79f2..04f0aa333 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/FileManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/FileManager.java @@ -1,7 +1,7 @@ package eu.eudat.logic.managers; import eu.eudat.data.old.FileUpload; -import eu.eudat.data.old.UserInfo; +import eu.eudat.data.UserEntity; import eu.eudat.logic.services.ApiContext; import eu.eudat.logic.services.operations.DatabaseRepository; import org.slf4j.Logger; @@ -79,7 +79,7 @@ public class FileManager { }); } - public void createFile(String id, String fileName, String fileType, String entityId, FileUpload.EntityType entityType, UserInfo userInfo) { + public void createFile(String id, String fileName, String fileType, String entityId, FileUpload.EntityType entityType, UserEntity userInfo) { FileUpload fileUpload = new FileUpload(); fileUpload.setId(UUID.fromString(id)); fileUpload.setName(fileName); diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/FunderManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/FunderManager.java index de6335a8d..90260f1f3 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/FunderManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/FunderManager.java @@ -1,7 +1,7 @@ package eu.eudat.logic.managers; import eu.eudat.commons.scope.user.UserScope; -import eu.eudat.data.old.UserInfo; +import eu.eudat.data.UserEntity; import eu.eudat.data.query.items.item.funder.FunderCriteriaRequest; import eu.eudat.logic.builders.model.models.FunderBuilder; import eu.eudat.logic.proxy.config.ExternalUrlCriteria; @@ -38,7 +38,7 @@ public class FunderManager { } public List getCriteriaWithExternal(FunderCriteriaRequest funderCriteria) throws HugeResultSet, NoURLFound, InvalidApplicationException { - UserInfo userInfo = new UserInfo(); + UserEntity userInfo = new UserEntity(); userInfo.setId(this.userScope.getUserId()); funderCriteria.getCriteria().setReference("dmp:"); QueryableList items = apiContext.getOperationsContext().getDatabaseRepository().getFunderDao().getWithCritetia(funderCriteria.getCriteria()); diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/GrantManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/GrantManager.java index b16aa7500..7ca3ea163 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/GrantManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/GrantManager.java @@ -1,9 +1,8 @@ package eu.eudat.logic.managers; import eu.eudat.commons.scope.user.UserScope; -import eu.eudat.data.old.UserInfo; +import eu.eudat.data.UserEntity; import eu.eudat.data.query.items.table.grant.GrantTableRequest; -import eu.eudat.exceptions.grant.GrantWithDMPsDeleteException; import eu.eudat.logic.builders.model.models.GrantBuilder; import eu.eudat.data.dao.entities.GrantDao; import eu.eudat.logic.proxy.config.ExternalUrlCriteria; @@ -50,7 +49,7 @@ public class GrantManager { } public DataTableData getPaged(GrantTableRequest grantTableRequest, String fieldsGroup) throws Exception { - UserInfo userInfo = new UserInfo(); + UserEntity userInfo = new UserEntity(); userInfo.setId(this.userScope.getUserId()); GrantDao grantRepository = databaseRepository.getGrantDao(); QueryableList items = grantRepository.getWithCriteria(grantTableRequest.getCriteria()); @@ -107,7 +106,7 @@ public class GrantManager { }*/ public List getCriteriaWithExternal(GrantCriteriaRequest grantCriteria) throws HugeResultSet, NoURLFound, InvalidApplicationException { - UserInfo userInfo = new UserInfo(); + UserEntity userInfo = new UserEntity(); userInfo.setId(this.userScope.getUserId()); /*if (grantCriteria.getCriteria().getFunderReference() != null && !grantCriteria.getCriteria().getFunderReference().trim().isEmpty()) { FunderCriteria funderCriteria = new FunderCriteria(); diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/InvitationsManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/InvitationsManager.java index b67c27f52..35cbf8a10 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/InvitationsManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/InvitationsManager.java @@ -1,33 +1,24 @@ package eu.eudat.logic.managers; import eu.eudat.commons.enums.DmpUserRole; -import eu.eudat.commons.enums.IsActive; import eu.eudat.commons.scope.user.UserScope; import eu.eudat.data.DmpEntity; import eu.eudat.data.DmpUserEntity; -import eu.eudat.data.old.UserInfo; +import eu.eudat.data.UserEntity; import eu.eudat.data.query.items.item.userinfo.UserInfoRequestItem; import eu.eudat.exceptions.security.UnauthorisedException; import eu.eudat.logic.services.ApiContext; -import eu.eudat.logic.utilities.helpers.StreamDistinctBy; -import eu.eudat.model.DmpUser; import eu.eudat.models.data.invitation.Invitation; -import eu.eudat.models.data.invitation.Properties; import eu.eudat.models.data.userinfo.UserInfoInvitationModel; -import eu.eudat.queryable.QueryableList; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import jakarta.xml.bind.JAXBContext; import jakarta.xml.bind.JAXBException; -import jakarta.xml.bind.Unmarshaller; import javax.management.InvalidApplicationException; import java.io.IOException; -import java.io.StringReader; import java.util.*; import java.util.stream.Collectors; -import java.util.stream.Stream; @Component public class InvitationsManager { @@ -44,23 +35,24 @@ public class InvitationsManager { } public void inviteUsers(Invitation invitation) throws Exception { - UserInfo principalUser = new UserInfo(); + UserEntity principalUser = new UserEntity(); principalUser.setId(this.userScope.getUserIdSafe()); invitation.getUsers().stream().filter(item -> item.getId() == null).forEach(item -> { - UserInfo existingUser = null; - try { - existingUser = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().asQueryable().where((builder, root) -> builder.equal(root.get("email"), item.getEmail())).getSingleOrDefault(); - } catch (InvalidApplicationException e) { - throw new RuntimeException(e); - } + UserEntity existingUser = null; +// try { +// //TODO: email +// //existingUser = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().asQueryable().where((builder, root) -> builder.equal(root.get("email"), item.getEmail())).getSingleOrDefault(); +// } catch (InvalidApplicationException e) { +// throw new RuntimeException(e); +// } if (existingUser != null) { item.setId(existingUser.getId()); } }); List alreadySignedInUsers = invitation.getUsers().stream().filter(item -> item.getId() != null).collect(Collectors.toList()); - List alreadySignedInUsersEntities = alreadySignedInUsers.stream().map(UserInfoInvitationModel::toDataModel).collect(Collectors.toList()); + List alreadySignedInUsersEntities = alreadySignedInUsers.stream().map(UserInfoInvitationModel::toDataModel).collect(Collectors.toList()); List userInfoToUserDmp = new LinkedList<>(); - for (UserInfo userInfo : alreadySignedInUsersEntities) { + for (UserEntity userInfo : alreadySignedInUsersEntities) { DmpUserEntity userDMP = new DmpUserEntity(); userDMP.setUser(userInfo.getId()); userDMP.setRole(DmpUserRole.of(invitation.getRole().shortValue())); @@ -86,7 +78,7 @@ public class InvitationsManager { return userAssociation.getFirstUser(); } }).collect(Collectors.toList());*/ - List users = new ArrayList<>(); + List users = new ArrayList<>(); //TODO // apiContext.getOperationsContext().getDatabaseRepository().getDmpDao() // .getAuthenticated(apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().asQueryable() diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/MergeEmailConfirmationManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/MergeEmailConfirmationManager.java index dc0d6db61..586ddf2d4 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/MergeEmailConfirmationManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/MergeEmailConfirmationManager.java @@ -1,10 +1,11 @@ package eu.eudat.logic.managers; +import eu.eudat.commons.enums.IsActive; import eu.eudat.commons.scope.user.UserScope; -import eu.eudat.data.CredentialEntity; +import eu.eudat.data.UserCredentialEntity; import eu.eudat.data.DmpUserEntity; import eu.eudat.data.old.EmailConfirmation; -import eu.eudat.data.old.UserInfo; +import eu.eudat.data.UserEntity; import eu.eudat.exceptions.emailconfirmation.HasConfirmedEmailException; import eu.eudat.exceptions.emailconfirmation.TokenExpiredException; import eu.eudat.logic.services.ApiContext; @@ -47,13 +48,13 @@ public class MergeEmailConfirmationManager { if (loginConfirmationEmail.getExpiresAt().compareTo(new Date()) < 0) throw new TokenExpiredException("Token has expired."); - UserInfo userToBeMerged = databaseRepository.getUserInfoDao().asQueryable() + UserEntity userToBeMerged = databaseRepository.getUserInfoDao().asQueryable() .where((builder, root) -> builder.equal(root.get("id"), loginConfirmationEmail.getUserId())).getSingle(); - String userToBeMergedEmail = userToBeMerged.getEmail(); + String userToBeMergedEmail = ""; //TODO userToBeMerged.getEmail(); try { Map map = new ObjectMapper().readValue(loginConfirmationEmail.getData(), HashMap.class); UUID otherUserId = UUID.fromString((String) map.get("userId")); - UserInfo user = databaseRepository.getUserInfoDao().asQueryable() + UserEntity user = databaseRepository.getUserInfoDao().asQueryable() .where((builder, root) -> builder.equal(root.get("id"), otherUserId)).getSingle(); // Checks if mail is used by another user. If it is, merges the new the old. @@ -69,22 +70,22 @@ public class MergeEmailConfirmationManager { } public void sendConfirmationEmail(String email, UUID userId, Integer provider) throws HasConfirmedEmailException, InvalidApplicationException { - UserInfo user = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(this.userScope.getUserId()); - - if (user.getEmail() != null && !user.getEmail().equals(email)) { - apiContext.getUtilitiesService().getConfirmationEmailService().createMergeConfirmationEmail( - databaseRepository.getLoginConfirmationEmailDao(), - apiContext.getUtilitiesService().getMailService(), - email, - user, - provider - ); - } + UserEntity user = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(this.userScope.getUserId()); +//TODO +// if (user.getEmail() != null && !user.getEmail().equals(email)) { +// apiContext.getUtilitiesService().getConfirmationEmailService().createMergeConfirmationEmail( +// databaseRepository.getLoginConfirmationEmailDao(), +// apiContext.getUtilitiesService().getMailService(), +// email, +// user, +// provider +// ); +// } } @Transactional - private void mergeNewUserToOld(UserInfo newUser, UserInfo oldUser, Integer provider) throws InvalidApplicationException { - CredentialEntity credential = databaseRepository.getCredentialDao().asQueryable().where((builder, root) -> builder.and(builder.equal(root.get("userId"), oldUser.getId()), builder.equal(root.get("provider"), provider))).getSingle(); + private void mergeNewUserToOld(UserEntity newUser, UserEntity oldUser, Integer provider) throws InvalidApplicationException { + UserCredentialEntity credential = databaseRepository.getCredentialDao().asQueryable().where((builder, root) -> builder.and(builder.equal(root.get("userId"), oldUser.getId()), builder.equal(root.get("provider"), provider))).getSingle(); credential.setUserId(newUser.getId()); databaseRepository.getCredentialDao().createOrUpdate(credential); List userDmps = databaseRepository.getUserDmpDao().asQueryable().where((builder, root) -> builder.equal(root.get("user"), oldUser)).toList(); @@ -126,9 +127,9 @@ public class MergeEmailConfirmationManager { // catch (IOException e){ // logger.warn("Warning: Could not fetch dmps from elastic.", e); // } - oldUser.setUserStatus((short)1); - oldUser.setEmail(null); - List credentials = databaseRepository.getCredentialDao().asQueryable().where((builder, root) -> builder.equal(root.get("userId"), oldUser.getId())).toList(); + oldUser.setIsActive(IsActive.Inactive); + //TODO oldUser.setEmail(null); + List credentials = databaseRepository.getCredentialDao().asQueryable().where((builder, root) -> builder.equal(root.get("userId"), oldUser.getId())).toList(); credentials.forEach(cred -> { if (cred.getId() != credential.getId()) { databaseRepository.getCredentialDao().delete(cred); diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/NotificationManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/NotificationManager.java index 9b4730f27..7ccac814a 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/NotificationManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/NotificationManager.java @@ -2,7 +2,7 @@ package eu.eudat.logic.managers; import com.fasterxml.jackson.databind.ObjectMapper; import eu.eudat.data.old.Notification; -import eu.eudat.data.old.UserInfo; +import eu.eudat.data.UserEntity; import eu.eudat.commons.enums.old.notification.ActiveStatus; import eu.eudat.commons.enums.old.notification.NotifyState; import eu.eudat.logic.services.ApiContext; @@ -52,7 +52,7 @@ public class NotificationManager { notification.setUpdatedAt(new Date()); try { Map data = new ObjectMapper().readValue(notification.getData(), HashMap.class); - UserInfo userInfo = this.apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(UUID.fromString(data.get("userId"))); + UserEntity userInfo = this.apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(UUID.fromString(data.get("userId"))); String subjectTemplate = ""; String contentTemplate = ""; @@ -90,7 +90,7 @@ public class NotificationManager { } } - private void sendEmailNotification(Notification notification, UserInfo userInfo, Map data, String subjectTemplate, String contentTemplate) throws IOException { + private void sendEmailNotification(Notification notification, UserEntity userInfo, Map data, String subjectTemplate, String contentTemplate) throws IOException { SimpleMail simpleMail = new SimpleMail(); simpleMail.setFrom(this.environment.getProperty("mail.from")); simpleMail.setSubject(makeSubject(data, subjectTemplate)); @@ -111,7 +111,7 @@ public class NotificationManager { return subjectTemplate.replace("{name}", data.get("name")); } - private String makeContent(Map data, Notification notification, UserInfo userInfo, String template) { + private String makeContent(Map data, Notification notification, UserEntity userInfo, String template) { String content = template; content = content.replace("{recipient}", userInfo.getName()); for (String key : data.keySet()) { diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/OrganisationsManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/OrganisationsManager.java index fe21dce3a..72a3672c5 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/OrganisationsManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/OrganisationsManager.java @@ -2,7 +2,7 @@ package eu.eudat.logic.managers; import eu.eudat.commons.scope.user.UserScope; import eu.eudat.data.dao.entities.OrganisationDao; -import eu.eudat.data.old.UserInfo; +import eu.eudat.data.UserEntity; import eu.eudat.data.query.items.table.organisations.OrganisationsTableRequest; import eu.eudat.logic.builders.model.models.OrganisationBuilder; import eu.eudat.logic.proxy.config.ExternalUrlCriteria; @@ -38,7 +38,7 @@ public class OrganisationsManager { } public DataTableData getPagedOrganisations(OrganisationsTableRequest organisationsTableRequest) throws Exception { - UserInfo userInfo = new UserInfo(); + UserEntity userInfo = new UserEntity(); userInfo.setId(this.userScope.getUserId()); OrganisationDao organisationDao = databaseRepository.getOrganisationDao(); @@ -70,7 +70,7 @@ public class OrganisationsManager { } public List getWithExternal(OrganisationsTableRequest organisationsTableRequest) throws Exception { - UserInfo userInfo = new UserInfo(); + UserEntity userInfo = new UserEntity(); userInfo.setId(this.userScope.getUserId()); OrganisationDao organisationDao = databaseRepository.getOrganisationDao(); diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/ProjectManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/ProjectManager.java index c08d6cf59..c67804e1b 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/ProjectManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/ProjectManager.java @@ -1,7 +1,7 @@ package eu.eudat.logic.managers; import eu.eudat.commons.scope.user.UserScope; -import eu.eudat.data.old.UserInfo; +import eu.eudat.data.UserEntity; import eu.eudat.logic.proxy.config.ExternalUrlCriteria; import eu.eudat.logic.utilities.helpers.ListHelper; import eu.eudat.models.data.external.ProjectsExternalSourcesModel; @@ -38,7 +38,7 @@ public class ProjectManager { } public List getCriteriaWithExternal(ProjectCriteriaRequest projectCriteria) throws HugeResultSet, NoURLFound, InvalidApplicationException { - UserInfo userInfo = new UserInfo(); + UserEntity userInfo = new UserEntity(); userInfo.setId(this.userScope.getUserId()); projectCriteria.getCriteria().setReference("dmp:"); QueryableList items = apiContext.getOperationsContext().getDatabaseRepository().getProjectDao().getWithCritetia(projectCriteria.getCriteria()); diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/QuickWizardManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/QuickWizardManager.java index 8027ef3d5..7f98ab9ef 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/QuickWizardManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/QuickWizardManager.java @@ -4,9 +4,7 @@ import eu.eudat.commons.enums.DmpUserRole; import eu.eudat.commons.scope.user.UserScope; import eu.eudat.data.DmpEntity; import eu.eudat.data.DmpUserEntity; -import eu.eudat.data.dao.criteria.FunderCriteria; -import eu.eudat.data.dao.criteria.GrantCriteria; -import eu.eudat.data.dao.criteria.ProjectCriteria; +import eu.eudat.data.UserEntity; import eu.eudat.data.old.*; import eu.eudat.logic.services.ApiContext; import eu.eudat.logic.services.operations.DatabaseRepository; @@ -17,7 +15,6 @@ import org.springframework.stereotype.Component; import javax.management.InvalidApplicationException; import java.io.IOException; import java.text.ParseException; -import java.util.UUID; @Component public class QuickWizardManager { @@ -59,7 +56,7 @@ public class QuickWizardManager { //TODO //newDmp.getGrant().setFunder(funderEntity); } - UserInfo user = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(this.userScope.getUserId()); + UserEntity user = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(this.userScope.getUserId()); createFunderIfItDoesntExist(newDmp, user); createGrantIfItDoesntExist(newDmp, user); //TODO @@ -86,7 +83,7 @@ public class QuickWizardManager { // apiContext.getOperationsContext().getElasticRepository().getDmpRepository().createOrUpdate(elastic); // } - private void assignUser(DmpEntity dmp, UserInfo userInfo, ApiContext apiContext) { + private void assignUser(DmpEntity dmp, UserEntity userInfo, ApiContext apiContext) { DmpUserEntity userDMP = new DmpUserEntity(); userDMP.setDmp(dmp.getId()); userDMP.setUser(userInfo.getId()); @@ -94,7 +91,7 @@ public class QuickWizardManager { apiContext.getOperationsContext().getDatabaseRepository().getUserDmpDao().createOrUpdate(userDMP); } - private void createGrantIfItDoesntExist(DmpEntity newDmp, UserInfo userInfo) throws InvalidApplicationException { + private void createGrantIfItDoesntExist(DmpEntity newDmp, UserEntity userInfo) throws InvalidApplicationException { // if (newDmp.getGrant() != null) { // Grant grant = newDmp.getGrant(); // GrantCriteria criteria = new GrantCriteria(); @@ -108,7 +105,7 @@ public class QuickWizardManager { // } } - private void createFunderIfItDoesntExist(DmpEntity newDmp, UserInfo userInfo) throws InvalidApplicationException { + private void createFunderIfItDoesntExist(DmpEntity newDmp, UserEntity userInfo) throws InvalidApplicationException { // if (newDmp.getGrant().getFunder() != null) { //TODO // Funder funder = newDmp.getGrant().getFunder(); // FunderCriteria criteria = new FunderCriteria(); @@ -122,7 +119,7 @@ public class QuickWizardManager { // } } - private void createProjectIfItDoesntExist(DmpEntity newDmp, UserInfo userInfo) throws InvalidApplicationException { + private void createProjectIfItDoesntExist(DmpEntity newDmp, UserEntity userInfo) throws InvalidApplicationException { // if (newDmp.getProject() != null) { //TODO // Project project = newDmp.getProject(); // ProjectCriteria criteria = new ProjectCriteria(); diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/UnlinkEmailConfirmationManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/UnlinkEmailConfirmationManager.java index ab6326f9a..0c87e5ef8 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/UnlinkEmailConfirmationManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/UnlinkEmailConfirmationManager.java @@ -2,10 +2,9 @@ package eu.eudat.logic.managers; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; -import eu.eudat.commons.scope.user.UserScope; -import eu.eudat.data.CredentialEntity; +import eu.eudat.data.UserCredentialEntity; import eu.eudat.data.old.EmailConfirmation; -import eu.eudat.data.old.UserInfo; +import eu.eudat.data.UserEntity; import eu.eudat.exceptions.emailconfirmation.HasConfirmedEmailException; import eu.eudat.exceptions.emailconfirmation.TokenExpiredException; import eu.eudat.logic.services.ApiContext; @@ -66,7 +65,7 @@ public class UnlinkEmailConfirmationManager { @Transactional private void unlinkUser(String emailTobeUnlinked, Integer provider) throws InvalidApplicationException { - CredentialEntity credential = databaseRepository.getCredentialDao().asQueryable() + UserCredentialEntity credential = databaseRepository.getCredentialDao().asQueryable() .where((builder, root) -> builder.and(builder.equal(root.get("email"), emailTobeUnlinked), builder.equal(root.get("provider"), provider))).getSingle(); if(credential != null) { databaseRepository.getCredentialDao().delete(credential); @@ -74,16 +73,16 @@ public class UnlinkEmailConfirmationManager { } public void sendConfirmationEmail(String email, UUID userId, Integer provider) throws InvalidApplicationException { - UserInfo user = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(userId); - - if (user.getEmail() != null && !user.getEmail().equals(email)) { - apiContext.getUtilitiesService().getConfirmationEmailService().createUnlinkConfirmationEmail( - databaseRepository.getLoginConfirmationEmailDao(), - apiContext.getUtilitiesService().getMailService(), - email, - user, - provider - ); - } + UserEntity user = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(userId); +//TODO: GetEmail +// if (user.getEmail() != null && !user.getEmail().equals(email)) { +// apiContext.getUtilitiesService().getConfirmationEmailService().createUnlinkConfirmationEmail( +// databaseRepository.getLoginConfirmationEmailDao(), +// apiContext.getUtilitiesService().getMailService(), +// email, +// user, +// provider +// ); +// } } } diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/UserManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/UserManager.java index 2a063bd6e..bf836d44a 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/UserManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/UserManager.java @@ -4,13 +4,13 @@ import com.fasterxml.jackson.databind.ObjectMapper; import eu.eudat.authorization.Permission; import eu.eudat.commons.scope.user.UserScope; import eu.eudat.commons.types.descriptiontemplate.DefinitionEntity; -import eu.eudat.data.CredentialEntity; +import eu.eudat.data.UserCredentialEntity; import eu.eudat.data.DmpEntity; import eu.eudat.data.dao.criteria.DataManagementPlanCriteria; import eu.eudat.data.dao.entities.UserInfoDao; import eu.eudat.data.DescriptionTemplateEntity; -import eu.eudat.data.old.UserInfo; -import eu.eudat.data.old.UserRole; +import eu.eudat.data.UserEntity; +import eu.eudat.data.UserRoleEntity; import eu.eudat.data.query.items.table.userinfo.UserInfoTableRequestItem; import eu.eudat.logic.builders.entity.UserRoleBuilder; import eu.eudat.logic.builders.model.models.DataTableDataBuilder; @@ -22,8 +22,10 @@ import eu.eudat.models.data.helpers.common.DataTableData; import eu.eudat.models.data.userinfo.UserCredential; import eu.eudat.models.data.userinfo.UserListingModel; import eu.eudat.models.data.userinfo.UserProfile; +import eu.eudat.query.UserCredentialQuery; import eu.eudat.queryable.QueryableList; import gr.cite.commons.web.authz.service.AuthorizationService; +import gr.cite.tools.data.query.QueryFactory; import org.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -50,13 +52,15 @@ public class UserManager { private final ApiContext apiContext; private final Environment environment; private final UserScope userScope; + private final QueryFactory queryFactory; private final AuthorizationService authorizationService; @Autowired - public UserManager(ApiContext apiContext, Environment environment, UserScope userScope, AuthorizationService authorizationService) { + public UserManager(ApiContext apiContext, Environment environment, UserScope userScope, QueryFactory queryFactory, AuthorizationService authorizationService) { this.apiContext = apiContext; this.environment = environment; this.userScope = userScope; + this.queryFactory = queryFactory; this.authorizationService = authorizationService; } @@ -72,8 +76,8 @@ public class UserManager { } public DataTableData getPaged(UserInfoTableRequestItem userInfoTableRequestItem) throws Exception { - QueryableList users = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().getWithCriteria(userInfoTableRequestItem.getCriteria()).withHint(HintedModelFactory.getHint(UserListingModel.class)); - QueryableList pagedUsers = PaginationManager.applyPaging(users, userInfoTableRequestItem); + QueryableList users = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().getWithCriteria(userInfoTableRequestItem.getCriteria()).withHint(HintedModelFactory.getHint(UserListingModel.class)); + QueryableList pagedUsers = PaginationManager.applyPaging(users, userInfoTableRequestItem); List modelUsers = pagedUsers.select(item -> new UserListingModel().fromDataModel(item)); return apiContext.getOperationsContext().getBuilderFactory().getBuilder(DataTableDataBuilder.class).totalCount(users.count()).data(modelUsers).build(); @@ -81,19 +85,17 @@ public class UserManager { public List getCredentials(UUID userId) throws InvalidApplicationException { List results = new ArrayList<>(); - UserInfo user = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(userId); - List credentials = apiContext.getOperationsContext().getDatabaseRepository().getCredentialDao().asQueryable().where((builder, root) -> builder.equal(root.get("userId"), user.getId())).toList(); + UserEntity user = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(userId); + List credentials = this.queryFactory.query(UserCredentialQuery.class).userIds(user.getId()).collect(); credentials.forEach(credential -> { UserCredential userCredential = new UserCredential(); - userCredential.setEmail(credential.getEmail()); - userCredential.setProvider(credential.getProvider()); results.add(userCredential); }); return results; } public UserProfile getSingle(UUID userId) throws Exception { - UserInfo user = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(userId); + UserEntity user = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(userId); UserProfile profile = new UserProfile().fromDataModel(user); List roles = new LinkedList<>(); DataManagementPlanCriteria criteria = new DataManagementPlanCriteria(); @@ -105,30 +107,30 @@ public class UserManager { } public void editRoles(UserListingModel user) throws InvalidApplicationException { - UserInfo userInfo = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(user.getId()); - userInfo.getUserRoles().stream().forEach(item -> apiContext.getOperationsContext().getDatabaseRepository().getUserRoleDao().delete(item)); - for (Integer role : user.getAppRoles()) { - UserRole userRole = apiContext.getOperationsContext().getBuilderFactory().getBuilder(UserRoleBuilder.class).role(role).userInfo(userInfo).build(); + UserEntity userInfo = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(user.getId()); + //userInfo.getUserRoles().stream().forEach(item -> apiContext.getOperationsContext().getDatabaseRepository().getUserRoleDao().delete(item)); //TODO + for (String role : user.getAppRoles()) { + UserRoleEntity userRole = apiContext.getOperationsContext().getBuilderFactory().getBuilder(UserRoleBuilder.class).role(role).userInfo(userInfo).build(); apiContext.getOperationsContext().getDatabaseRepository().getUserRoleDao().createOrUpdate(userRole); } } public void updateSettings(Map settings) throws IOException, InvalidApplicationException { - UserInfo userInfo = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(this.userScope.getUserId()); + UserEntity userInfo = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(this.userScope.getUserId()); apiContext.getOperationsContext().getDatabaseRepository().detachEntity(userInfo); HashMap result = - new ObjectMapper().readValue(userInfo.getAdditionalinfo(), HashMap.class); + new ObjectMapper().readValue(userInfo.getAdditionalInfo(), HashMap.class); userInfo.setName(settings.entrySet().stream().filter(entry -> entry.getKey().equals("name")).filter(Objects::nonNull).map(entry -> entry.getValue().toString()).findFirst().orElse(userInfo.getName())); settings.remove("name"); result.putAll(settings); - userInfo.setAdditionalinfo(new JSONObject(result).toString()); + userInfo.setAdditionalInfo(new JSONObject(result).toString()); apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao() .createOrUpdate(userInfo); } public DataTableData getCollaboratorsPaged(UserInfoTableRequestItem userInfoTableRequestItem) throws Exception { UserInfoDao userInfoDao = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao(); - QueryableList users = userInfoDao.getWithCriteria(userInfoTableRequestItem.getCriteria()); + QueryableList users = userInfoDao.getWithCriteria(userInfoTableRequestItem.getCriteria()); List colaborators = userInfoDao.getAuthenticated(users, this.userScope.getUserId()) .withHint(HintedModelFactory.getHint(UserListingModel.class)) @@ -144,12 +146,13 @@ public class UserManager { this.authorizationService.authorizeForce(Permission.AdminRole); - List users = this.apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().asQueryable().toList(); + List users = this.apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().asQueryable().toList(); StringBuilder resultBuilder = new StringBuilder(); resultBuilder.append("User Id").append(",").append("User Name").append(",").append("User Email").append("\n"); users.stream().forEach(user -> resultBuilder.append(user.getId().toString()).append(",") .append(user.getName()).append(",") - .append(user.getEmail()).append("\n")); +//TODO .append(user.getEmail()).append("\n") + ); String result = resultBuilder.toString(); String fileName = "Users_dump";//dmp.getLabel(); fileName = fileName.replaceAll("[^a-zA-Z0-9+ ]", ""); @@ -180,7 +183,7 @@ public class UserManager { } public UserProfile getFromEmail(String email) throws InvalidApplicationException { - UserInfo user = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().asQueryable().where((builder, root) -> builder.equal(root.get("email"), email)).getSingle(); + UserEntity user = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().asQueryable().where((builder, root) -> builder.equal(root.get("email"), email)).getSingle(); return new UserProfile().fromDataModel(user); } diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/services/references/ReferenceService.java b/dmp-backend/web/src/main/java/eu/eudat/logic/services/references/ReferenceService.java index d12565528..b4ec74f12 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/services/references/ReferenceService.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/services/references/ReferenceService.java @@ -156,7 +156,7 @@ public class ReferenceService { this.entityManager.flush(); - return this.builderFactory.builder(ReferenceBuilder.class).authorize(AuthorizationFlags.OwnerOrPermissionOrMemberOrPublic).build(BaseFieldSet.build(fields, Reference._id), data); + return this.builderFactory.builder(ReferenceBuilder.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermissionOrPublic).build(BaseFieldSet.build(fields, Reference._id), data); } private @NotNull DefinitionEntity buildDefinitionEntity(DefinitionPersist persist){ @@ -209,7 +209,7 @@ public class ReferenceService { List> remoteRepos = this.apiContext.getOperationsContext().getRemoteFetcher().get(lookup.getType(), externalUrlCriteria, lookup.getKey()); - List externalModels = this.builderFactory.builder(ReferenceSearchBuilder.class).authorize(AuthorizationFlags.OwnerOrPermissionOrMemberOrPublic).build(lookup.getProject(), remoteRepos); + List externalModels = this.builderFactory.builder(ReferenceSearchBuilder.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermissionOrPublic).build(lookup.getProject(), remoteRepos); List models = this.fetchFromDb(lookup); models.addAll(externalModels); @@ -226,9 +226,9 @@ public class ReferenceService { Reference._isActive, Reference._createdAt, Reference._updatedAt, Reference._type, Reference._definition, Reference._reference, Reference._sourceType ); lookup.setProject(new BaseFieldSet(fields)); - ReferenceQuery query = lookup.enrich(this.queryFactory).authorize(AuthorizationFlags.OwnerOrPermissionOrMemberOrPublic); + ReferenceQuery query = lookup.enrich(this.queryFactory).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermissionOrPublic); List data = query.collectAs(lookup.getProject()); - return this.builderFactory.builder(ReferenceBuilder.class).authorize(AuthorizationFlags.OwnerOrPermissionOrMemberOrPublic).build(lookup.getProject(), data); + return this.builderFactory.builder(ReferenceBuilder.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermissionOrPublic).build(lookup.getProject(), data); } // private List fetchFromDb(ReferenceType externalType, String query, String type, List> remoteRepos) throws InvalidApplicationException { @@ -286,7 +286,7 @@ public class ReferenceService { public List searchReferenceWithDefinition(ReferenceDefinitionSearchLookup lookup) throws HugeResultSet, NoURLFound, InvalidApplicationException { - ReferenceTypeQuery query = this.queryFactory.query(ReferenceTypeQuery.class).authorize(AuthorizationFlags.OwnerOrPermissionOrMemberOrPublic).ids(lookup.getReferenceTypeId()); + ReferenceTypeQuery query = this.queryFactory.query(ReferenceTypeQuery.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermissionOrPublic).ids(lookup.getReferenceTypeId()); List datas = query.collectAs(lookup.getProject()); if (datas.size() != 1 ){ return null; diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/services/utilities/ConfirmationEmailService.java b/dmp-backend/web/src/main/java/eu/eudat/logic/services/utilities/ConfirmationEmailService.java index d42049fec..80ef61a56 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/services/utilities/ConfirmationEmailService.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/services/utilities/ConfirmationEmailService.java @@ -2,7 +2,7 @@ package eu.eudat.logic.services.utilities; import eu.eudat.data.dao.entities.EmailConfirmationDao; import eu.eudat.data.old.EmailConfirmation; -import eu.eudat.data.old.UserInfo; +import eu.eudat.data.UserEntity; import eu.eudat.service.mail.MailService; import javax.management.InvalidApplicationException; @@ -12,9 +12,9 @@ import java.util.concurrent.CompletableFuture; public interface ConfirmationEmailService { public void createConfirmationEmail(EmailConfirmationDao loginConfirmationEmailDao, MailService mailService, String email, UUID userId); - public void createMergeConfirmationEmail(EmailConfirmationDao loginConfirmationEmailDao, MailService mailService, String email, UserInfo user, Integer provider) throws InvalidApplicationException; + public void createMergeConfirmationEmail(EmailConfirmationDao loginConfirmationEmailDao, MailService mailService, String email, UserEntity user, Integer provider) throws InvalidApplicationException; - public void createUnlinkConfirmationEmail(EmailConfirmationDao loginConfirmationEmailDao, MailService mailService, String email, UserInfo user, Integer provider) throws InvalidApplicationException; + public void createUnlinkConfirmationEmail(EmailConfirmationDao loginConfirmationEmailDao, MailService mailService, String email, UserEntity user, Integer provider) throws InvalidApplicationException; public CompletableFuture sentConfirmationEmail(EmailConfirmation confirmationEmail, MailService mailService); diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/services/utilities/ConfirmationEmailServiceImpl.java b/dmp-backend/web/src/main/java/eu/eudat/logic/services/utilities/ConfirmationEmailServiceImpl.java index 114056365..33e512dad 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/services/utilities/ConfirmationEmailServiceImpl.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/services/utilities/ConfirmationEmailServiceImpl.java @@ -6,7 +6,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import eu.eudat.commons.scope.user.UserScope; import eu.eudat.data.dao.entities.EmailConfirmationDao; import eu.eudat.data.old.EmailConfirmation; -import eu.eudat.data.old.UserInfo; +import eu.eudat.data.UserEntity; import eu.eudat.service.mail.MailService; import eu.eudat.service.mail.SimpleMail; import org.slf4j.Logger; @@ -144,7 +144,7 @@ public class ConfirmationEmailServiceImpl implements ConfirmationEmailService { @Override public void createMergeConfirmationEmail(EmailConfirmationDao loginConfirmationEmailDao, MailService mailService, - String email, UserInfo user, Integer provider) throws InvalidApplicationException { + String email, UserEntity user, Integer provider) throws InvalidApplicationException { EmailConfirmation confirmationEmail = new EmailConfirmation(); confirmationEmail.setEmail(email); confirmationEmail.setExpiresAt(Date @@ -171,9 +171,9 @@ public class ConfirmationEmailServiceImpl implements ConfirmationEmailService { @Override public void createUnlinkConfirmationEmail(EmailConfirmationDao loginConfirmationEmailDao, MailService mailService, - String email, UserInfo user, Integer provider) throws InvalidApplicationException { + String email, UserEntity user, Integer provider) throws InvalidApplicationException { EmailConfirmation confirmationEmail = new EmailConfirmation(); - confirmationEmail.setEmail(user.getEmail()); +// confirmationEmail.setEmail(user.getEmail());//TODO: GetEmail confirmationEmail.setExpiresAt(Date .from(new Date() .toInstant() diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/services/utilities/InvitationService.java b/dmp-backend/web/src/main/java/eu/eudat/logic/services/utilities/InvitationService.java index 90e48cc91..d2fdafbad 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/services/utilities/InvitationService.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/services/utilities/InvitationService.java @@ -7,8 +7,7 @@ import eu.eudat.data.dao.entities.DMPDao; import eu.eudat.data.dao.entities.InvitationDao; import eu.eudat.data.old.Invitation; -import eu.eudat.data.old.UserInfo; -import eu.eudat.models.rda.Dmp; +import eu.eudat.data.UserEntity; import eu.eudat.service.mail.MailService; import jakarta.mail.MessagingException; import java.util.List; @@ -20,7 +19,7 @@ public interface InvitationService { void assignToDmp(DMPDao dmpDao, DmpUserEntity user, DmpEntity dmp); - void createInvitations(InvitationDao invitationDao, MailService mailService, List users, DmpEntity dmp, Integer role, UserInfo creator) throws MessagingException; + void createInvitations(InvitationDao invitationDao, MailService mailService, List users, DmpEntity dmp, Integer role, UserEntity creator) throws MessagingException; CompletableFuture sendInvitationAsync(DmpEntity dmp, Invitation invitation, String recipient, MailService mailService, Integer role) throws MessagingException; } diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/services/utilities/InvitationServiceImpl.java b/dmp-backend/web/src/main/java/eu/eudat/logic/services/utilities/InvitationServiceImpl.java index c0ff4b482..bb43231d5 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/services/utilities/InvitationServiceImpl.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/services/utilities/InvitationServiceImpl.java @@ -6,7 +6,7 @@ import eu.eudat.data.DmpUserEntity; import eu.eudat.data.dao.entities.DMPDao; import eu.eudat.data.dao.entities.InvitationDao; import eu.eudat.data.old.Invitation; -import eu.eudat.data.old.UserInfo; +import eu.eudat.data.UserEntity; import eu.eudat.models.data.invitation.Properties; import eu.eudat.service.mail.MailService; import eu.eudat.service.mail.SimpleMail; @@ -23,7 +23,6 @@ import java.io.StringWriter; import java.util.List; import java.util.UUID; import java.util.concurrent.CompletableFuture; -import java.util.stream.Collectors; @Service("invitationService") @@ -53,11 +52,11 @@ public class InvitationServiceImpl implements InvitationService { } @Override - public void createInvitations(InvitationDao invitationDao, MailService mailService, List users, DmpEntity dmp, Integer role, UserInfo creator) throws MessagingException { - for (UserInfo userInfo : users) { + public void createInvitations(InvitationDao invitationDao, MailService mailService, List users, DmpEntity dmp, Integer role, UserEntity creator) throws MessagingException { + for (UserEntity userInfo : users) { Invitation invitation = new Invitation(); // invitation.setDmp(dmp); //TODO - invitation.setInvitationEmail(userInfo.getEmail()); +// invitation.setInvitationEmail(userInfo.getEmail()); //TODO: GetEmail invitation.setUser(creator); invitation.setToken(UUID.randomUUID()); invitation.setAcceptedInvitation(false); diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/datarepository/DataRepositoryModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/datarepository/DataRepositoryModel.java index 5023ca212..b6e01e379 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/datarepository/DataRepositoryModel.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/datarepository/DataRepositoryModel.java @@ -1,7 +1,7 @@ package eu.eudat.models.data.datarepository; import eu.eudat.data.old.DataRepository; -import eu.eudat.data.old.UserInfo; +import eu.eudat.data.UserEntity; import eu.eudat.models.DataModel; import java.util.Date; @@ -116,7 +116,7 @@ public class DataRepositoryModel implements DataModel { private Date startDate; private Date endDate; private eu.eudat.data.old.Grant.Status status; - private UserInfo creationUser; + private UserEntity creationUser; private Date created; private Date modified; private String description; @@ -111,10 +111,10 @@ public class Grant implements DataModel { this.status = eu.eudat.data.old.Grant.Status.fromInteger(status); } - public UserInfo getCreationUser() { + public UserEntity getCreationUser() { return creationUser; } - public void setCreationUser(UserInfo creationUser) { + public void setCreationUser(UserEntity creationUser) { this.creationUser = creationUser; } diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/grant/GrantListingModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/grant/GrantListingModel.java index 559d46a3d..a1c6989db 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/grant/GrantListingModel.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/grant/GrantListingModel.java @@ -1,7 +1,7 @@ package eu.eudat.models.data.grant; import eu.eudat.data.old.Grant; -import eu.eudat.data.old.UserInfo; +import eu.eudat.data.UserEntity; import eu.eudat.models.DataModel; import eu.eudat.models.data.files.ContentFile; import eu.eudat.models.data.urls.DataManagementPlanUrlListing; @@ -10,7 +10,6 @@ import java.util.Arrays; import java.util.Date; import java.util.List; import java.util.UUID; -import java.util.stream.Collectors; public class GrantListingModel implements DataModel { @@ -33,7 +32,7 @@ public class GrantListingModel implements DataModel { } dataRepository.setUri(this.uri); dataRepository.setStatus((short) 0); - dataRepository.setCreationUser(new UserInfo()); + dataRepository.setCreationUser(new UserEntity()); return dataRepository; } diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/listingmodels/UserInfoListingModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/listingmodels/UserInfoListingModel.java index 7dd342cb7..ea22f0806 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/listingmodels/UserInfoListingModel.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/listingmodels/UserInfoListingModel.java @@ -2,8 +2,7 @@ package eu.eudat.models.data.listingmodels; import eu.eudat.commons.enums.DmpUserRole; import eu.eudat.data.DmpUserEntity; -import eu.eudat.data.old.UserInfo; -import eu.eudat.model.DmpUser; +import eu.eudat.data.UserEntity; import eu.eudat.models.DataModel; import java.util.UUID; @@ -13,7 +12,6 @@ public class UserInfoListingModel implements DataModel { private Date startDate; private Date endDate; private Short status; - private UserInfo creationUser; + private UserEntity creationUser; private Date created; private Date modified; private String description; @@ -109,10 +109,10 @@ public class Project implements DataModel { this.status = status; } - public UserInfo getCreationUser() { + public UserEntity getCreationUser() { return creationUser; } - public void setCreationUser(UserInfo creationUser) { + public void setCreationUser(UserEntity creationUser) { this.creationUser = creationUser; } diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/publication/PublicationModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/publication/PublicationModel.java index 2ec71f9c7..48a7d2602 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/publication/PublicationModel.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/publication/PublicationModel.java @@ -1,7 +1,7 @@ package eu.eudat.models.data.publication; import eu.eudat.data.old.DataRepository; -import eu.eudat.data.old.UserInfo; +import eu.eudat.data.UserEntity; import eu.eudat.models.DataModel; import java.util.ArrayList; import java.util.Date; @@ -155,7 +155,7 @@ public class PublicationModel implements DataModel(); contributor.role.add(role); diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/registries/RegistryModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/registries/RegistryModel.java index 787bf0ded..4a6abc457 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/registries/RegistryModel.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/registries/RegistryModel.java @@ -1,7 +1,7 @@ package eu.eudat.models.data.registries; import eu.eudat.data.old.Registry; -import eu.eudat.data.old.UserInfo; +import eu.eudat.data.UserEntity; import eu.eudat.models.DataModel; import java.util.Date; @@ -132,7 +132,7 @@ public class RegistryModel implements DataModel { registry.setReference(this.source + ":" + registry.getId()); } registry.setStatus((short)0); - registry.setCreationUser(new UserInfo()); + registry.setCreationUser(new UserEntity()); return registry; } diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/services/ServiceModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/services/ServiceModel.java index f3fc6d6fd..93364bd36 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/services/ServiceModel.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/services/ServiceModel.java @@ -1,7 +1,7 @@ package eu.eudat.models.data.services; import eu.eudat.data.old.Service; -import eu.eudat.data.old.UserInfo; +import eu.eudat.data.UserEntity; import eu.eudat.models.DataModel; import java.util.Date; @@ -133,7 +133,7 @@ public class ServiceModel implements DataModel { } service.setModified(new Date()); service.setStatus((short) 0); - service.setCreationUser(new UserInfo()); + service.setCreationUser(new UserEntity()); return service; } diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/taxonomy/TaxonomyModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/taxonomy/TaxonomyModel.java index 344533d8e..05d9f9d3d 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/taxonomy/TaxonomyModel.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/taxonomy/TaxonomyModel.java @@ -1,7 +1,7 @@ package eu.eudat.models.data.taxonomy; import eu.eudat.data.old.DataRepository; -import eu.eudat.data.old.UserInfo; +import eu.eudat.data.UserEntity; import eu.eudat.models.DataModel; import java.util.Date; import java.util.UUID; @@ -123,7 +123,7 @@ public class TaxonomyModel implements DataModel { } dataRepository.setUri(this.uri); dataRepository.setStatus((short) 0); - dataRepository.setCreationUser(new UserInfo()); + dataRepository.setCreationUser(new UserEntity()); return dataRepository; } diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/userinfo/UserInfo.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/userinfo/UserInfo.java index 1201b4e46..9dbe36f56 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/userinfo/UserInfo.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/userinfo/UserInfo.java @@ -1,26 +1,18 @@ package eu.eudat.models.data.userinfo; +import eu.eudat.data.UserEntity; import eu.eudat.models.DataModel; -import java.util.Date; +import java.time.Instant; import java.util.UUID; -public class UserInfo implements DataModel { +public class UserInfo implements DataModel { private UUID id; - private String email = null; - - private Short authorization_level; //0 admin, 1 user - - private Short usertype; // 0 internal, 1 external - - private Boolean verified_email = null; private String name = null; - private Date created = null; - - private Date lastloggedin = null; + private Instant created = null; // private String additionalinfo; @@ -32,38 +24,6 @@ public class UserInfo implements DataModel this.id = id; } - public String getEmail() { - return email; - } - - public void setEmail(String email) { - this.email = email; - } - - public Short getAuthorization_level() { - return authorization_level; - } - - public void setAuthorization_level(Short authorization_level) { - this.authorization_level = authorization_level; - } - - public Short getUsertype() { - return usertype; - } - - public void setUsertype(Short usertype) { - this.usertype = usertype; - } - - public Boolean getVerified_email() { - return verified_email; - } - - public void setVerified_email(Boolean verified_email) { - this.verified_email = verified_email; - } - public String getName() { return name; } @@ -72,21 +32,14 @@ public class UserInfo implements DataModel this.name = name; } - public Date getCreated() { + public Instant getCreated() { return created; } - public void setCreated(Date created) { + public void setCreated(Instant created) { this.created = created; } - public Date getLastloggedin() { - return lastloggedin; - } - - public void setLastloggedin(Date lastloggedin) { - this.lastloggedin = lastloggedin; - } /*public String getAdditionalinfo() { return additionalinfo; @@ -97,26 +50,20 @@ public class UserInfo implements DataModel }*/ @Override - public UserInfo fromDataModel(eu.eudat.data.old.UserInfo entity) { + public UserInfo fromDataModel(UserEntity entity) { this.name = entity.getName(); - this.email = entity.getEmail(); - this.usertype = entity.getUsertype(); this.id = entity.getId(); return this; } @Override - public eu.eudat.data.old.UserInfo toDataModel() { - eu.eudat.data.old.UserInfo entity = new eu.eudat.data.old.UserInfo(); + public UserEntity toDataModel() { + UserEntity entity = new UserEntity(); entity.setId(this.getId()); - entity.setEmail(this.getEmail()); entity.setName(this.getName()); //entity.setAdditionalinfo(this.getAdditionalinfo()); - entity.setAuthorization_level(this.getAuthorization_level()); - entity.setCreated(this.getCreated()); - entity.setLastloggedin(this.getLastloggedin()); - entity.setUsertype(this.getUsertype()); - entity.setVerified_email(this.getVerified_email()); + entity.setCreatedAt(this.getCreated()); +// entity.setVerified_email(this.getVerified_email()); return entity; } diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/userinfo/UserInfoInvitationModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/userinfo/UserInfoInvitationModel.java index 865e2f68f..544d63668 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/userinfo/UserInfoInvitationModel.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/userinfo/UserInfoInvitationModel.java @@ -1,14 +1,13 @@ package eu.eudat.models.data.userinfo; -import eu.eudat.data.old.UserInfo; +import eu.eudat.data.UserEntity; import eu.eudat.models.DataModel; import java.util.UUID; -public class UserInfoInvitationModel implements DataModel { +public class UserInfoInvitationModel implements DataModel { private UUID id; - private String email; private String name; public UUID getId() { @@ -19,14 +18,6 @@ public class UserInfoInvitationModel implements DataModel { +public class UserListingModel implements DataModel { private static final Logger logger = LoggerFactory.getLogger(UserListingModel.class); private UUID id; - private String email; - private Short usertype; - private Boolean verified_email; private String name; - private Date created; - private Date lastloggedin; + private Instant created; //private String additionalinfo; - private List appRoles; + private List appRoles; private String avatarUrl; public UUID getId() { @@ -32,26 +26,6 @@ public class UserListingModel implements DataModel { this.id = id; } - public String getEmail() { - return email; - } - public void setEmail(String email) { - this.email = email; - } - - public Short getUsertype() { - return usertype; - } - public void setUsertype(Short usertype) { - this.usertype = usertype; - } - - public Boolean getVerified_email() { - return verified_email; - } - public void setVerified_email(Boolean verified_email) { - this.verified_email = verified_email; - } public String getName() { return name; @@ -60,20 +34,13 @@ public class UserListingModel implements DataModel { this.name = name; } - public Date getCreated() { + public Instant getCreated() { return created; } - public void setCreated(Date created) { + public void setCreated(Instant created) { this.created = created; } - public Date getLastloggedin() { - return lastloggedin; - } - public void setLastloggedin(Date lastloggedin) { - this.lastloggedin = lastloggedin; - } - /*public String getAdditionalinfo() { return additionalinfo; } @@ -81,10 +48,10 @@ public class UserListingModel implements DataModel { this.additionalinfo = additionalinfo; }*/ - public List getAppRoles() { + public List getAppRoles() { return appRoles; } - public void setAppRoles(List appRoles) { + public void setAppRoles(List appRoles) { this.appRoles = appRoles; } @@ -95,37 +62,30 @@ public class UserListingModel implements DataModel { this.avatarUrl = avatarUrl; } @Override - public UserListingModel fromDataModel(UserInfo entity) { + public UserListingModel fromDataModel(UserEntity entity) { this.id = entity.getId(); - this.email = entity.getEmail(); - this.usertype = entity.getUsertype(); - this.verified_email = entity.getVerified_email(); this.name = entity.getName(); - this.created = entity.getCreated(); - this.lastloggedin = entity.getLastloggedin(); + this.created = entity.getCreatedAt(); // this.additionalinfo = entity.getAdditionalinfo(); - this.appRoles = entity.getUserRoles().stream().map(item -> item.getRole()).collect(Collectors.toList()); - if (entity.getAdditionalinfo() != null) { - try { - Map additionalInfo = new ObjectMapper().readValue(entity.getAdditionalinfo(), HashMap.class); - this.avatarUrl = (String) additionalInfo.get("avatarUrl"); - } catch (IOException e) { - logger.error(e.getMessage(), e); - } - } + //TODO +// this.appRoles = entity.getUserRoles().stream().map(item -> item.getRole()).collect(Collectors.toList()); +// if (entity.getAdditionalinfo() != null) { +// try { +// Map additionalInfo = new ObjectMapper().readValue(entity.getAdditionalinfo(), HashMap.class); +// this.avatarUrl = (String) additionalInfo.get("avatarUrl"); +// } catch (IOException e) { +// logger.error(e.getMessage(), e); +// } +// } return this; } @Override - public UserInfo toDataModel() throws Exception { - UserInfo userInfo = new UserInfo(); + public UserEntity toDataModel() throws Exception { + UserEntity userInfo = new UserEntity(); userInfo.setId(this.id); - userInfo.setEmail(this.email); - userInfo.setUsertype(this.usertype); - userInfo.setVerified_email(this.verified_email); userInfo.setName(this.name); - userInfo.setCreated(this.created); - userInfo.setLastloggedin(this.lastloggedin); + userInfo.setCreatedAt(this.created); // userInfo.setAdditionalinfo(this.additionalinfo); return userInfo; diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/userinfo/UserProfile.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/userinfo/UserProfile.java index 85e4ea6dc..50f971863 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/userinfo/UserProfile.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/userinfo/UserProfile.java @@ -1,7 +1,7 @@ package eu.eudat.models.data.userinfo; import com.fasterxml.jackson.databind.ObjectMapper; -import eu.eudat.data.old.UserInfo; +import eu.eudat.data.UserEntity; import eu.eudat.models.DataModel; import eu.eudat.models.data.dmp.DataManagementPlan; import eu.eudat.models.data.dmp.Organisation; @@ -14,15 +14,11 @@ import java.util.*; /** * Created by ikalyvas on 8/24/2018. */ -public class UserProfile implements DataModel { +public class UserProfile implements DataModel { private static final Logger logger = LoggerFactory.getLogger(UserProfile.class); private UUID id; - private String email; - private Short usertype; private String name; - private Date lastloggedin; - //private String additionalinfo; private List associatedDmps; private Map language; private String timezone; @@ -39,21 +35,6 @@ public class UserProfile implements DataModel { this.id = id; } - public String getEmail() { - return email; - } - - public void setEmail(String email) { - this.email = email; - } - - public Short getUsertype() { - return usertype; - } - - public void setUsertype(Short usertype) { - this.usertype = usertype; - } public String getName() { return name; @@ -63,14 +44,6 @@ public class UserProfile implements DataModel { this.name = name; } - public Date getLastloggedin() { - return lastloggedin; - } - - public void setLastloggedin(Date lastloggedin) { - this.lastloggedin = lastloggedin; - } - /*public String getAdditionalinfo() { return additionalinfo; } @@ -139,15 +112,12 @@ public class UserProfile implements DataModel { } @Override - public UserProfile fromDataModel(UserInfo entity) { + public UserProfile fromDataModel(UserEntity entity) { this.id = entity.getId(); - this.email = entity.getEmail(); - this.usertype = entity.getUsertype(); this.name = entity.getName(); - this.lastloggedin = entity.getLastloggedin(); //this.additionalinfo = entity.getAdditionalinfo(); try { - Map additionalInfo = new ObjectMapper().readValue(entity.getAdditionalinfo(), HashMap.class); + Map additionalInfo = new ObjectMapper().readValue(entity.getAdditionalInfo(), HashMap.class); this.language = (Map)additionalInfo.get("language"); this.culture = (Map) additionalInfo.get("culture"); this.timezone = (String) additionalInfo.get("timezone"); @@ -161,7 +131,7 @@ public class UserProfile implements DataModel { } @Override - public UserInfo toDataModel() throws Exception { + public UserEntity toDataModel() throws Exception { return null; } diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/ContactRDAMapper.java b/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/ContactRDAMapper.java index d2999d6c4..0b24487cf 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/ContactRDAMapper.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/ContactRDAMapper.java @@ -1,29 +1,30 @@ package eu.eudat.models.rda.mapper; -import eu.eudat.data.old.UserInfo; +import eu.eudat.data.UserEntity; import eu.eudat.models.rda.Contact; public class ContactRDAMapper { - public static Contact toRDA(UserInfo creator) { + public static Contact toRDA(UserEntity creator) { Contact rda = new Contact(); if (creator.getName() == null) { throw new IllegalArgumentException("Contact Name is missing"); } rda.setName(creator.getName()); - if (creator.getEmail() == null) { - throw new IllegalArgumentException("Contact Email is missing"); - } - rda.setMbox(creator.getEmail()); + //TODO: GetEmail +// if (creator.getEmail() == null) { +// throw new IllegalArgumentException("Contact Email is missing"); +// } +// rda.setMbox(creator.getEmail()); rda.setContactId(ContactIdRDAMapper.toRDA(creator.getId())); return rda; } - public static UserInfo toEntity(Contact rda) { - UserInfo entity = new UserInfo(); + public static UserEntity toEntity(Contact rda) { + UserEntity entity = new UserEntity(); entity.setId(ContactIdRDAMapper.toEntity(rda.getContactId())); entity.setName(rda.getName()); - entity.setEmail(rda.getMbox()); +// entity.setEmail(rda.getMbox());//TODO: GetEmail return entity; } } diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/v2/Account.java b/dmp-backend/web/src/main/java/eu/eudat/models/v2/Account.java index f82e33126..d27b45edb 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/v2/Account.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/v2/Account.java @@ -151,18 +151,18 @@ public class Account { } public final static String _roles = "roles"; - private List roles; + private List roles; public Boolean getAuthenticated() { return isAuthenticated; } - public List getRoles() { + public List getRoles() { return roles; } - public void setRoles(List roles) { + public void setRoles(List roles) { this.roles = roles; } diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/v2/AccountBuilder.java b/dmp-backend/web/src/main/java/eu/eudat/models/v2/AccountBuilder.java index e082c4c93..0a38532c5 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/v2/AccountBuilder.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/v2/AccountBuilder.java @@ -1,14 +1,15 @@ package eu.eudat.models.v2; import eu.eudat.commons.scope.user.UserScope; -import eu.eudat.data.old.UserInfo; -import eu.eudat.data.old.UserRole; +import eu.eudat.data.UserEntity; +import eu.eudat.data.UserRoleEntity; import eu.eudat.logic.services.ApiContext; import gr.cite.commons.web.authz.configuration.AuthorizationConfiguration; import gr.cite.commons.web.oidc.principal.CurrentPrincipalResolver; import gr.cite.commons.web.oidc.principal.MyPrincipal; import gr.cite.commons.web.oidc.principal.extractor.ClaimExtractor; import gr.cite.commons.web.oidc.principal.extractor.ClaimExtractorKeys; +import gr.cite.tools.data.query.QueryFactory; import gr.cite.tools.fieldset.BaseFieldSet; import gr.cite.tools.fieldset.FieldSet; import org.springframework.beans.factory.config.ConfigurableBeanFactory; @@ -26,13 +27,11 @@ public class AccountBuilder { private final Set excludeMoreClaim; private final CurrentPrincipalResolver currentPrincipalResolver; private final AuthorizationConfiguration authorizationConfiguration; - private final ApiContext apiContext; private final UserScope userScope; - public AccountBuilder(ClaimExtractor claimExtractor, CurrentPrincipalResolver currentPrincipalResolver, AuthorizationConfiguration authorizationConfiguration, ApiContext apiContext, UserScope userScope) { + public AccountBuilder(ClaimExtractor claimExtractor, CurrentPrincipalResolver currentPrincipalResolver, AuthorizationConfiguration authorizationConfiguration,UserScope userScope) { this.claimExtractor = claimExtractor; this.currentPrincipalResolver = currentPrincipalResolver; this.authorizationConfiguration = authorizationConfiguration; - this.apiContext = apiContext; this.userScope = userScope; this.excludeMoreClaim = Set.of( ClaimExtractorKeys.Subject, @@ -86,15 +85,9 @@ public class AccountBuilder { model.getPrincipal().getMore().get(key).addAll(values); } } - UserInfo user = this.userScope.isSet() ? this.apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(this.userScope.getUserIdSafe()) : null; //TODO: Authn - List userRoles = this.userScope.isSet() ?apiContext.getOperationsContext().getDatabaseRepository().getUserRoleDao().getUserRoles(user) : new ArrayList<>(); if (fields.hasField(Account._roles)) { - //List roles = claimExtractor.roles(currentPrincipalResolver.currentPrincipal()); - //model.setRoles(roles); - model.setRoles(new ArrayList<>()); - for (UserRole item : userRoles) { - model.getRoles().add(item.getRole()); - } + List roles = claimExtractor.roles(currentPrincipalResolver.currentPrincipal()); + model.setRoles(roles); } if (fields.hasField(Account._permissions)) { List roles = claimExtractor.roles(currentPrincipalResolver.currentPrincipal()); diff --git a/dmp-backend/web/src/main/java/eu/eudat/publicapi/models/user/UserInfoPublicModel.java b/dmp-backend/web/src/main/java/eu/eudat/publicapi/models/user/UserInfoPublicModel.java index 78fd35f09..fb8e60643 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/publicapi/models/user/UserInfoPublicModel.java +++ b/dmp-backend/web/src/main/java/eu/eudat/publicapi/models/user/UserInfoPublicModel.java @@ -2,8 +2,7 @@ package eu.eudat.publicapi.models.user; import eu.eudat.commons.enums.DmpUserRole; import eu.eudat.data.DmpUserEntity; -import eu.eudat.data.old.UserInfo; -import eu.eudat.model.DmpUser; +import eu.eudat.data.UserEntity; import eu.eudat.models.DataModel; import java.util.UUID; @@ -12,7 +11,6 @@ public class UserInfoPublicModel implements DataModel all() { - return Arrays.asList(USER, ADMIN, MANAGER, DATASET_PROFILE_MANAGER); - } -} diff --git a/dmp-backend/web/src/main/resources/config/cache.yml b/dmp-backend/web/src/main/resources/config/cache.yml index 0464d8c83..7c3fd1dba 100644 --- a/dmp-backend/web/src/main/resources/config/cache.yml +++ b/dmp-backend/web/src/main/resources/config/cache.yml @@ -15,9 +15,9 @@ cache: initialCapacity: 100 maximumSize: 500 enableRecordStats: false - expireAfterWriteMinutes: 10 - expireAfterAccessMinutes: 10 - refreshAfterWriteMinutes: 10 + expireAfterWriteMinutes: 1 + expireAfterAccessMinutes: 1 + refreshAfterWriteMinutes: 1 - names: [ "supportiveMaterial" ] allowNullValues: true initialCapacity: 100 diff --git a/dmp-backend/web/src/main/resources/config/permissions.yml b/dmp-backend/web/src/main/resources/config/permissions.yml index 87b7bf40c..b7bd7cf54 100644 --- a/dmp-backend/web/src/main/resources/config/permissions.yml +++ b/dmp-backend/web/src/main/resources/config/permissions.yml @@ -154,6 +154,26 @@ permissions: clients: [ ] allowAnonymous: false allowAuthenticated: false + # User + BrowseUser: + roles: + - Admin + clients: [ ] + allowAnonymous: false + allowAuthenticated: false + EditUser: + roles: + - Admin + clients: [ ] + allowAnonymous: false + allowAuthenticated: false + DeleteUser: + roles: + - Admin + claims: [ ] + clients: [ ] + allowAnonymous: false + allowAuthenticated: false # DescriptionTemplateType BrowseDescriptionTemplateType: roles: diff --git a/dmp-frontend/src/app/core/common/enum/app-role.ts b/dmp-frontend/src/app/core/common/enum/app-role.ts index 4cd4c9c08..a08ce00a1 100644 --- a/dmp-frontend/src/app/core/common/enum/app-role.ts +++ b/dmp-frontend/src/app/core/common/enum/app-role.ts @@ -1,6 +1,6 @@ export enum AppRole { - Admin = 2, - Manager = 1, - User = 0, - DatasetTemplateEditor = 3 + Admin = "Admin", + Manager = "Manager", + User = "User", + DatasetTemplateEditor = "DatasetProfileManager" } diff --git a/dmp-frontend/src/app/ui/dataset/dataset-wizard/dataset-wizard.component.ts b/dmp-frontend/src/app/ui/dataset/dataset-wizard/dataset-wizard.component.ts index 09399b259..bf8552b09 100644 --- a/dmp-frontend/src/app/ui/dataset/dataset-wizard/dataset-wizard.component.ts +++ b/dmp-frontend/src/app/ui/dataset/dataset-wizard/dataset-wizard.component.ts @@ -231,7 +231,8 @@ export class DatasetWizardComponent extends CheckDeactivateBaseComponent impleme email: this.authService.getUserProfileEmail(), id: this.authService.userId()?.toString(), name: this.authService.getPrincipalName(), - role: this.authService.getRoles()?.at(0) + role: 0 //TODO + //role: this.authService.getRoles()?.at(0) } this.lock = new LockModel(data.id, lockedBy); @@ -388,7 +389,8 @@ export class DatasetWizardComponent extends CheckDeactivateBaseComponent impleme email: this.authService.getUserProfileEmail(), id: this.authService.userId()?.toString(), name: this.authService.getPrincipalName(), - role: this.authService.getRoles()?.at(0) + role: 0 //TODO + //role: this.authService.getRoles()?.at(0) } this.lock = new LockModel(data.id, lockedBy);