diff --git a/dbrepo-container-service/services/src/main/java/at/tuwien/mapper/UserMapper.java b/dbrepo-container-service/services/src/main/java/at/tuwien/mapper/UserMapper.java index 5e47ebae6303fbc31256fed584c167971ce8e671..cb6d20fd1090e83c6d9b86987e910f02be7cffcb 100644 --- a/dbrepo-container-service/services/src/main/java/at/tuwien/mapper/UserMapper.java +++ b/dbrepo-container-service/services/src/main/java/at/tuwien/mapper/UserMapper.java @@ -22,6 +22,12 @@ public interface UserMapper { org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(UserMapper.class); + /* keep */ + @Mappings({ + @Mapping(target = "id", expression = "java(data.getId().toString())") + }) + UserDetailsDto userDtoToUserDetailsDto(UserDto data); + /* keep */ @Mappings({ @Mapping(target = "orcid", expression = "java(userToOrcid(data))") @@ -43,6 +49,10 @@ public interface UserMapper { return orcid.map(UserAttribute::getValue).orElse(null); } + /* keep */ + @Mappings({ + @Mapping(target = "id", expression = "java(data.getId().toString())") + }) UserDetailsDto userBriefDtoToUserDetailsDto(UserBriefDto data); default UserDetailsDto tokenIntrospectDtoToUserDetailsDto(TokenIntrospectDto data) { diff --git a/dbrepo-container-service/services/src/main/java/at/tuwien/repository/jpa/RealmRepository.java b/dbrepo-container-service/services/src/main/java/at/tuwien/repository/jpa/RealmRepository.java index 0505e07c3af85b62bdcf9321a12f57fcdbaa38ca..c1a5d756b7af9d163766f3a9fae3c31cf157a77c 100644 --- a/dbrepo-container-service/services/src/main/java/at/tuwien/repository/jpa/RealmRepository.java +++ b/dbrepo-container-service/services/src/main/java/at/tuwien/repository/jpa/RealmRepository.java @@ -6,8 +6,9 @@ import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; import java.util.Optional; +import java.util.UUID; @Repository -public interface RealmRepository extends JpaRepository<Realm, String> { +public interface RealmRepository extends JpaRepository<Realm, UUID> { } diff --git a/dbrepo-container-service/services/src/main/java/at/tuwien/repository/jpa/UserRepository.java b/dbrepo-container-service/services/src/main/java/at/tuwien/repository/jpa/UserRepository.java index e77de8f6a8160d1f2e04a0ce7575b1ee3d833a0a..9eb0b5190252b7e1890deb7717fe9b2afc133d41 100644 --- a/dbrepo-container-service/services/src/main/java/at/tuwien/repository/jpa/UserRepository.java +++ b/dbrepo-container-service/services/src/main/java/at/tuwien/repository/jpa/UserRepository.java @@ -5,9 +5,10 @@ import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; import java.util.Optional; +import java.util.UUID; @Repository -public interface UserRepository extends JpaRepository<User, String> { +public interface UserRepository extends JpaRepository<User, UUID> { Optional<User> findByUsername(String username); diff --git a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/endpoint/AccessEndpointUnitTest.java b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/endpoint/AccessEndpointUnitTest.java index e8e9192e1c18093df6206e884be1e6fd8f81fce5..e08b535f2dab9c5a70b3435bf3f35a64f06f8094 100644 --- a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/endpoint/AccessEndpointUnitTest.java +++ b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/endpoint/AccessEndpointUnitTest.java @@ -30,6 +30,7 @@ import org.springframework.test.context.junit.jupiter.SpringExtension; import java.security.Principal; import java.util.Optional; +import java.util.UUID; import static org.junit.jupiter.api.Assertions.*; import static org.mockito.Mockito.when; @@ -209,7 +210,7 @@ public class AccessEndpointUnitTest extends BaseUnitTest { } protected void generic_find(Long containerId, Long databaseId, Database database, DatabaseAccess access, - String username, String userId, Principal principal) throws AccessDeniedException, + String username, UUID userId, Principal principal) throws AccessDeniedException, NotAllowedException { /* mock */ diff --git a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/AccessServiceIntegrationTest.java b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/AccessServiceIntegrationTest.java index b8f79bee732620a753af5bf6bbdd5acf7a661817..549b9489a0678756b1b466941b98bab4fe2a9c6f 100644 --- a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/AccessServiceIntegrationTest.java +++ b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/AccessServiceIntegrationTest.java @@ -9,13 +9,18 @@ import at.tuwien.config.H2Utils; import at.tuwien.config.IndexConfig; import at.tuwien.config.ReadyConfig; import at.tuwien.entities.database.AccessType; +import at.tuwien.entities.database.Database; import at.tuwien.entities.database.DatabaseAccess; +import at.tuwien.entities.user.User; import at.tuwien.exception.*; import at.tuwien.repository.jpa.*; import com.rabbitmq.client.Channel; import lombok.extern.log4j.Log4j2; import org.junit.jupiter.api.*; import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.mock.mockito.MockBean; @@ -24,6 +29,8 @@ import org.springframework.test.context.junit.jupiter.SpringExtension; import java.io.File; import java.util.List; +import java.util.UUID; +import java.util.stream.Stream; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; @@ -43,9 +50,6 @@ public class AccessServiceIntegrationTest extends BaseUnitTest { @MockBean private Channel channel; - @Autowired - private DatabaseAccessRepository databaseAccessRepository; - @Autowired private ImageRepository imageRepository; @@ -55,12 +59,18 @@ public class AccessServiceIntegrationTest extends BaseUnitTest { @Autowired private DatabaseRepository databaseRepository; + @Autowired + private DatabaseAccessRepository databaseAccessRepository; + @Autowired private AccessService accessService; @Autowired private UserRepository userRepository; + @Autowired + private RealmRepository realmRepository; + @Autowired private H2Utils h2Utils; @@ -84,11 +94,13 @@ public class AccessServiceIntegrationTest extends BaseUnitTest { DockerConfig.createAllNetworks(); /* metadata database */ h2Utils.runScript("schema.sql"); + realmRepository.save(REALM_DBREPO); imageRepository.save(IMAGE_1); userRepository.save(USER_1_SIMPLE); userRepository.save(USER_2_SIMPLE); + userRepository.save(USER_3_SIMPLE); containerRepository.save(CONTAINER_1_SIMPLE); - databaseRepository.save(DATABASE_1_SIMPLE); + databaseRepository.save(DATABASE_1); } @AfterEach @@ -97,205 +109,156 @@ public class AccessServiceIntegrationTest extends BaseUnitTest { DockerConfig.removeAllNetworks(); } - @Test - public void create_succeeds() throws UserNotFoundException, NotAllowedException, QueryMalformedException, - DatabaseNotFoundException, DatabaseMalformedException, InterruptedException { - - /* mock */ - DockerConfig.createContainer(BIND_WEATHER, CONTAINER_1_SIMPLE, CONTAINER_1_ENV); - DockerConfig.startContainer(CONTAINER_1_SIMPLE); - userRepository.save(USER_1_SIMPLE); - userRepository.save(USER_2_SIMPLE); - containerRepository.save(CONTAINER_1_SIMPLE); - databaseRepository.save(DATABASE_1_SIMPLE); - - /* test */ - create_generic(AccessTypeDto.READ, AccessType.READ, USER_2_USERNAME, USER_2_ID); + public static Stream<Arguments> create_succeeds_parameters() { + return Stream.of( + Arguments.arguments("general", AccessTypeDto.READ, AccessType.READ, USER_3_USERNAME, USER_3_ID) + ); } - @Test - public void create_multiple_fails() throws InterruptedException { - - /* mock */ - DockerConfig.createContainer(BIND_WEATHER, CONTAINER_1_SIMPLE, CONTAINER_1_ENV); - DockerConfig.startContainer(CONTAINER_1_SIMPLE); - userRepository.save(USER_1_SIMPLE); - userRepository.save(USER_2_SIMPLE); - containerRepository.save(CONTAINER_1_SIMPLE); - databaseRepository.save(DATABASE_1_SIMPLE); - databaseAccessRepository.save(DATABASE_1_DEVELOPER_READ_ACCESS); + public static Stream<Arguments> create_fails_parameters() { + return Stream.of( + Arguments.arguments("general", NotAllowedException.class, AccessTypeDto.READ, USER_2_USERNAME) + ); + } - /* test */ - assertThrows(NotAllowedException.class, () -> { - create_generic(AccessTypeDto.READ, AccessType.READ, USER_2_USERNAME, USER_2_ID); - }); + public static Stream<Arguments> update_succeeds_parameters() { + return Stream.of( + Arguments.arguments("same access", CONTAINER_1_ID, DATABASE_1_ID, AccessTypeDto.READ, AccessType.READ, + USER_2_USERNAME, USER_2_ID), + Arguments.arguments("write own access", CONTAINER_1_ID, DATABASE_1_ID, AccessTypeDto.WRITE_OWN, + AccessType.WRITE_OWN, USER_2_USERNAME, USER_2_ID), + Arguments.arguments("write all access", CONTAINER_1_ID, DATABASE_1_ID, AccessTypeDto.WRITE_ALL, + AccessType.WRITE_ALL, USER_2_USERNAME, USER_2_ID) + ); } - @Test - public void update_same_succeeds() throws UserNotFoundException, NotAllowedException, QueryMalformedException, - DatabaseNotFoundException, DatabaseMalformedException, InterruptedException { + public static Stream<Arguments> update_fails_parameters() { + return Stream.of( + Arguments.arguments("user not found", UserNotFoundException.class, CONTAINER_1_ID, DATABASE_1_ID, + AccessTypeDto.READ, "l33tsp34k"), + Arguments.arguments("database not found", DatabaseNotFoundException.class, CONTAINER_2_ID, DATABASE_2_ID, + AccessTypeDto.READ, USER_2_USERNAME) + ); + } - /* mock */ - DockerConfig.createContainer(BIND_WEATHER, CONTAINER_1_SIMPLE, CONTAINER_1_ENV); - DockerConfig.startContainer(CONTAINER_1_SIMPLE); - userRepository.save(USER_1_SIMPLE); - userRepository.save(USER_2_SIMPLE); - containerRepository.save(CONTAINER_1_SIMPLE); - databaseRepository.save(DATABASE_1_SIMPLE); - databaseAccessRepository.save(DATABASE_1_DEVELOPER_READ_ACCESS); + public static Stream<Arguments> delete_fails_parameters() { + return Stream.of( + Arguments.arguments("user not found", UserNotFoundException.class, "l33tsp34k"), + Arguments.arguments("is owner", NotAllowedException.class, USER_1_USERNAME) + ); + } - /* test */ - update_generic(CONTAINER_1_ID, DATABASE_1_ID, AccessTypeDto.READ, AccessType.READ, USER_2_USERNAME, USER_2_ID); + public static Stream<Arguments> delete_succeeds_parameters() { + return Stream.of( + Arguments.arguments("general", USER_2_USERNAME) + ); } - @Test - public void update_writeOwn_succeeds() throws UserNotFoundException, NotAllowedException, QueryMalformedException, - DatabaseNotFoundException, DatabaseMalformedException, InterruptedException { + /* ################################################################################################### */ + /* ## GENERIC TEST CASES ## */ + /* ################################################################################################### */ + + @ParameterizedTest + @MethodSource("create_fails_parameters") + protected <T extends Throwable> void create_fails(String test, Class<T> expectedException, + AccessTypeDto accessTypeDto, String username) { + final DatabaseGiveAccessDto request = DatabaseGiveAccessDto.builder() + .type(accessTypeDto) + .username(username) + .build(); /* mock */ - DockerConfig.createContainer(BIND_WEATHER, CONTAINER_1_SIMPLE, CONTAINER_1_ENV); - DockerConfig.startContainer(CONTAINER_1_SIMPLE); - userRepository.save(USER_1_SIMPLE); - userRepository.save(USER_2_SIMPLE); - containerRepository.save(CONTAINER_1_SIMPLE); - databaseRepository.save(DATABASE_1_SIMPLE); + databaseAccessRepository.save(DATABASE_1_DEVELOPER_READ_ACCESS); /* test */ - update_generic(CONTAINER_1_ID, DATABASE_1_ID, AccessTypeDto.WRITE_OWN, AccessType.WRITE_OWN, USER_2_USERNAME, USER_2_ID); + assertThrows(expectedException, () -> { + accessService.create(CONTAINER_1_ID, DATABASE_1_ID, request); + }); } - @Test - public void update_writeAll_succeeds() throws UserNotFoundException, NotAllowedException, QueryMalformedException, - DatabaseNotFoundException, DatabaseMalformedException, InterruptedException { + @ParameterizedTest + @MethodSource("create_succeeds_parameters") + protected <T extends Throwable> void create_succeeds(String test, AccessTypeDto accessTypeDto, AccessType access, + String username, UUID userId) + throws UserNotFoundException, NotAllowedException, QueryMalformedException, DatabaseNotFoundException, + DatabaseMalformedException, InterruptedException { + final DatabaseGiveAccessDto request = DatabaseGiveAccessDto.builder() + .type(accessTypeDto) + .username(username) + .build(); /* mock */ DockerConfig.createContainer(BIND_WEATHER, CONTAINER_1_SIMPLE, CONTAINER_1_ENV); DockerConfig.startContainer(CONTAINER_1_SIMPLE); - userRepository.save(USER_1_SIMPLE); - userRepository.save(USER_2_SIMPLE); - containerRepository.save(CONTAINER_1_SIMPLE); - databaseRepository.save(DATABASE_1_SIMPLE); /* test */ - update_generic(CONTAINER_1_ID, DATABASE_1_ID, AccessTypeDto.WRITE_ALL, AccessType.WRITE_ALL, USER_2_USERNAME, USER_2_ID); + accessService.create(CONTAINER_1_ID, DATABASE_1_ID, request); + final List<DatabaseAccess> response = databaseAccessRepository.findAll(); + assertEquals(1, response.size()); + assertEquals(access, response.get(0).getType()); + assertEquals(DATABASE_1_ID, response.get(0).getHdbid()); + assertEquals(userId, response.get(0).getHuserid()); } - @Test - public void update_userNotFound_fails() throws InterruptedException { + @ParameterizedTest + @MethodSource("update_succeeds_parameters") + protected void update_succeeds(String test, Long containerId, Long databaseId, AccessTypeDto accessTypeDto, AccessType access, + String username) throws UserNotFoundException, NotAllowedException, + QueryMalformedException, DatabaseNotFoundException, DatabaseMalformedException, AccessDeniedException, InterruptedException { + final DatabaseModifyAccessDto request = DatabaseModifyAccessDto.builder() + .type(accessTypeDto) + .build(); /* mock */ + databaseAccessRepository.save(DATABASE_1_DEVELOPER_READ_ACCESS); DockerConfig.createContainer(BIND_WEATHER, CONTAINER_1_SIMPLE, CONTAINER_1_ENV); DockerConfig.startContainer(CONTAINER_1_SIMPLE); - userRepository.save(USER_1_SIMPLE); - containerRepository.save(CONTAINER_1_SIMPLE); - databaseRepository.save(DATABASE_1_SIMPLE); /* test */ - assertThrows(UserNotFoundException.class, () -> { - update_generic(CONTAINER_1_ID, DATABASE_1_ID, AccessTypeDto.READ, AccessType.READ, "l33tsp34k", null); - }); + accessService.update(containerId, databaseId, username, request); + final List<DatabaseAccess> response = databaseAccessRepository.findAll(); + assertEquals(1, response.size()); + assertEquals(access, response.get(0).getType()); + assertEquals(databaseId, response.get(0).getHdbid()); } - @Test - public void update_databaseNotFound_fails() throws InterruptedException { - - /* mock */ - DockerConfig.createContainer(BIND_WEATHER, CONTAINER_2, CONTAINER_2_ENV); - DockerConfig.startContainer(CONTAINER_2); - userRepository.save(USER_1_SIMPLE); - userRepository.save(USER_2_SIMPLE); - containerRepository.save(CONTAINER_1_SIMPLE); - containerRepository.save(CONTAINER_2); - databaseRepository.save(DATABASE_1_SIMPLE); + @ParameterizedTest + @MethodSource("update_fails_parameters") + protected <T extends Throwable> void update_fails(String name, Class<T> expectedException, Long containerId, + Long databaseId, AccessTypeDto accessTypeDto, + String username) { + final DatabaseModifyAccessDto request = DatabaseModifyAccessDto.builder() + .type(accessTypeDto) + .build(); /* test */ - assertThrows(DatabaseNotFoundException.class, () -> { - update_generic(CONTAINER_2_ID, DATABASE_2_ID, AccessTypeDto.READ, AccessType.READ, USER_2_USERNAME, USER_2_ID); + assertThrows(expectedException, () -> { + accessService.update(containerId, databaseId, username, request); }); } - @Test - public void delete_succeeds() throws UserNotFoundException, NotAllowedException, QueryMalformedException, - DatabaseNotFoundException, DatabaseMalformedException, InterruptedException { - - /* mock */ - DockerConfig.createContainer(BIND_WEATHER, CONTAINER_1_SIMPLE, CONTAINER_1_ENV); - DockerConfig.startContainer(CONTAINER_1_SIMPLE); - userRepository.save(USER_1_SIMPLE); - userRepository.save(USER_2_SIMPLE); - containerRepository.save(CONTAINER_1_SIMPLE); - databaseRepository.save(DATABASE_1_SIMPLE); + @ParameterizedTest + @MethodSource("delete_fails_parameters") + protected <T extends Throwable> void delete_fails(String name, Class<T> expectedException, String username) { /* test */ - accessService.delete(CONTAINER_1_ID, DATABASE_1_ID, USER_2_USERNAME); - } - - @Test - public void delete_isOwner_fails() throws InterruptedException { - - /* mock */ - DockerConfig.createContainer(BIND_WEATHER, CONTAINER_1_SIMPLE, CONTAINER_1_ENV); - DockerConfig.startContainer(CONTAINER_1_SIMPLE); - userRepository.save(USER_1_SIMPLE); - containerRepository.save(CONTAINER_1_SIMPLE); - databaseRepository.save(DATABASE_1_SIMPLE); - - /* test */ - assertThrows(NotAllowedException.class, () -> { - accessService.delete(CONTAINER_1_ID, DATABASE_1_ID, USER_1_USERNAME); + assertThrows(expectedException, () -> { + accessService.delete(CONTAINER_1_ID, DATABASE_1_ID, username); }); } - @Test - public void delete_notExists_fails() throws InterruptedException { + @ParameterizedTest + @MethodSource("delete_succeeds_parameters") + protected <T extends Throwable> void delete_succeeds(String name, String username) throws InterruptedException, + UserNotFoundException, NotAllowedException, QueryMalformedException, DatabaseNotFoundException, + DatabaseMalformedException { /* mock */ DockerConfig.createContainer(BIND_WEATHER, CONTAINER_1_SIMPLE, CONTAINER_1_ENV); DockerConfig.startContainer(CONTAINER_1_SIMPLE); - containerRepository.save(CONTAINER_1_SIMPLE); - databaseRepository.save(DATABASE_1_SIMPLE); - - /* test */ - assertThrows(UserNotFoundException.class, () -> { - accessService.delete(CONTAINER_1_ID, DATABASE_1_ID, "l33tsp34k"); - }); - } - - /* ################################################################################################### */ - /* ## GENERIC TEST CASES ## */ - /* ################################################################################################### */ - - protected void create_generic(AccessTypeDto accessTypeDto, AccessType access, String username, String userId) - throws UserNotFoundException, NotAllowedException, QueryMalformedException, DatabaseNotFoundException, - DatabaseMalformedException { - final DatabaseGiveAccessDto request = DatabaseGiveAccessDto.builder() - .type(accessTypeDto) - .username(username) - .build(); /* test */ - accessService.create(CONTAINER_1_ID, DATABASE_1_ID, request); - final List<DatabaseAccess> response = databaseAccessRepository.findAll(); - assertEquals(1, response.size()); - assertEquals(access, response.get(0).getType()); - assertEquals(DATABASE_1_ID, response.get(0).getHdbid()); - assertEquals(userId, response.get(0).getHuserid()); - } - - protected void update_generic(Long containerId, Long databaseId, AccessTypeDto accessTypeDto, AccessType access, - String username, String userId) throws UserNotFoundException, NotAllowedException, - QueryMalformedException, DatabaseNotFoundException, DatabaseMalformedException { - final DatabaseModifyAccessDto request = DatabaseModifyAccessDto.builder() - .type(accessTypeDto) - .build(); - - /* test */ - accessService.update(containerId, databaseId, username, request); - final List<DatabaseAccess> response = databaseAccessRepository.findAll(); - assertEquals(1, response.size()); - assertEquals(access, response.get(0).getType()); - assertEquals(databaseId, response.get(0).getHdbid()); - assertEquals(userId, response.get(0).getHuserid()); + accessService.delete(CONTAINER_1_ID, DATABASE_1_ID, username); } } diff --git a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceIntegrationElasticTest.java b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceIntegrationElasticTest.java index 7d680ea0af17a10435c3f887c79867bc76356fc3..370972f192629619377fc89faea976524a9bbccf 100644 --- a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceIntegrationElasticTest.java +++ b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceIntegrationElasticTest.java @@ -82,7 +82,7 @@ public class DatabaseServiceIntegrationElasticTest extends BaseUnitTest { afterEach(); /* metadata database */ h2Utils.runScript("schema.sql"); - imageRepository.save(IMAGE_1_SIMPLE); + imageRepository.save(IMAGE_1); userRepository.save(USER_1_SIMPLE); } diff --git a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceIntegrationTest.java b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceIntegrationTest.java index 0da52ebd92f914a2a4017c5daf2c0060cb09209f..85c0e90563f84b52898d42a6693f46b6ebc45542 100644 --- a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceIntegrationTest.java +++ b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceIntegrationTest.java @@ -8,6 +8,7 @@ import at.tuwien.config.IndexConfig; import at.tuwien.config.MariaDbConfig; import at.tuwien.config.ReadyConfig; import at.tuwien.entities.database.Database; +import at.tuwien.entities.user.User; import at.tuwien.exception.QueryMalformedException; import at.tuwien.repository.elastic.DatabaseIdxRepository; import at.tuwien.repository.jpa.*; @@ -26,6 +27,7 @@ import org.springframework.test.context.junit.jupiter.SpringExtension; import java.io.File; import java.security.Principal; import java.sql.SQLException; +import java.util.List; import java.util.Optional; import static org.junit.jupiter.api.Assertions.*; @@ -47,18 +49,27 @@ public class DatabaseServiceIntegrationTest extends BaseUnitTest { @MockBean private IndexConfig indexConfig; - @MockBean - private ContainerRepository containerRepository; - @MockBean private DatabaseIdxRepository databaseIdxRepository; - @MockBean - private MariaDbServiceImpl databaseService; + @Autowired + private ContainerRepository containerRepository; - @MockBean + @Autowired private DatabaseRepository databaseRepository; + @Autowired + private ImageRepository imageRepository; + + @Autowired + private RealmRepository realmRepository; + + @Autowired + private UserRepository userRepository; + + @Autowired + private MariaDbServiceImpl databaseService; + @Autowired private MariaDbConfig mariaDbConfig; @@ -82,6 +93,12 @@ public class DatabaseServiceIntegrationTest extends BaseUnitTest { public void beforeEach() { afterEach(); DockerConfig.createAllNetworks(); + /* metadata database */ + imageRepository.save(IMAGE_1); + realmRepository.save(REALM_DBREPO); + userRepository.save(USER_1_SIMPLE); + userRepository.save(USER_2_SIMPLE); + userRepository.save(USER_3_SIMPLE); } @AfterEach @@ -98,11 +115,10 @@ public class DatabaseServiceIntegrationTest extends BaseUnitTest { DockerConfig.startContainer(CONTAINER_3_SIMPLE); MariaDbConfig.dropDatabase(CONTAINER_3_INTERNALNAME, DATABASE_3_INTERNALNAME, "root", "mariadb"); when(databaseIdxRepository.save(any(DatabaseDto.class))) - .thenReturn(DATABASE_1_DTO); - when(containerRepository.findById(CONTAINER_3_ID)) - .thenReturn(Optional.of(CONTAINER_3)); - when(databaseRepository.save(any(Database.class))) - .thenReturn(DATABASE_1); + .thenReturn(DATABASE_3_DTO); + containerRepository.save(CONTAINER_1_SIMPLE) /* increase id */; + containerRepository.save(CONTAINER_2_SIMPLE) /* increase id */; + containerRepository.save(CONTAINER_3_SIMPLE); /* test */ generic_create(CONTAINER_3_ID, DATABASE_3_CREATE, DATABASE_3); @@ -121,11 +137,9 @@ public class DatabaseServiceIntegrationTest extends BaseUnitTest { when(databaseIdxRepository.save(any(DatabaseDto.class))) .thenReturn(DATABASE_2_DTO) .thenReturn(DATABASE_3_DTO); - when(containerRepository.findById(CONTAINER_3_ID)) - .thenReturn(Optional.of(CONTAINER_3_SIMPLE)); - when(databaseRepository.save(any(Database.class))) - .thenReturn(DATABASE_2) - .thenReturn(DATABASE_3); + containerRepository.save(CONTAINER_1_SIMPLE) /* increase id */; + containerRepository.save(CONTAINER_2_SIMPLE); + containerRepository.save(CONTAINER_3_SIMPLE); /* test */ generic_create(CONTAINER_2_ID, DATABASE_2_CREATE, DATABASE_2); @@ -145,11 +159,9 @@ public class DatabaseServiceIntegrationTest extends BaseUnitTest { when(databaseIdxRepository.save(any(DatabaseDto.class))) .thenReturn(DATABASE_3_DTO) .thenReturn(DATABASE_2_DTO); - when(containerRepository.findById(CONTAINER_3_ID)) - .thenReturn(Optional.of(CONTAINER_3)); - when(databaseRepository.save(any(Database.class))) - .thenReturn(DATABASE_2) - .thenReturn(DATABASE_3); + containerRepository.save(CONTAINER_1_SIMPLE) /* increase id */; + containerRepository.save(CONTAINER_2_SIMPLE); + containerRepository.save(CONTAINER_3_SIMPLE); /* test */ generic_create(CONTAINER_3_ID, DATABASE_3_CREATE, DATABASE_3); @@ -162,10 +174,9 @@ public class DatabaseServiceIntegrationTest extends BaseUnitTest { /* mock */ DockerConfig.createContainer(BIND_MUSICOLOGY, CONTAINER_3_SIMPLE, CONTAINER_3_ENV); DockerConfig.startContainer(CONTAINER_3_SIMPLE); - when(containerRepository.findById(CONTAINER_3_ID)) - .thenReturn(Optional.of(CONTAINER_3)); - when(databaseRepository.save(any(Database.class))) - .thenReturn(DATABASE_3); + containerRepository.save(CONTAINER_1_SIMPLE) /* increase id */; + containerRepository.save(CONTAINER_2_SIMPLE) /* increase id */; + containerRepository.save(CONTAINER_3_SIMPLE); /* test */ generic_insert(QUERY_4_STATEMENT, 1L); @@ -178,10 +189,9 @@ public class DatabaseServiceIntegrationTest extends BaseUnitTest { /* mock */ DockerConfig.createContainer(BIND_MUSICOLOGY, CONTAINER_3_SIMPLE, CONTAINER_3_ENV); DockerConfig.startContainer(CONTAINER_3_SIMPLE); - when(containerRepository.findById(CONTAINER_3_ID)) - .thenReturn(Optional.of(CONTAINER_3)); - when(databaseRepository.save(any(Database.class))) - .thenReturn(DATABASE_3); + containerRepository.save(CONTAINER_1_SIMPLE) /* increase id */; + containerRepository.save(CONTAINER_2_SIMPLE) /* increase id */; + containerRepository.save(CONTAINER_3_SIMPLE); /* test */ generic_insert(QUERY_4_STATEMENT, 1L); @@ -195,10 +205,9 @@ public class DatabaseServiceIntegrationTest extends BaseUnitTest { /* mock */ DockerConfig.createContainer(BIND_MUSICOLOGY, CONTAINER_3_SIMPLE, CONTAINER_3_ENV); DockerConfig.startContainer(CONTAINER_3_SIMPLE); - when(containerRepository.findById(CONTAINER_3_ID)) - .thenReturn(Optional.of(CONTAINER_3)); - when(databaseRepository.save(any(Database.class))) - .thenReturn(DATABASE_3); + containerRepository.save(CONTAINER_1_SIMPLE) /* increase id */; + containerRepository.save(CONTAINER_2_SIMPLE) /* increase id */; + containerRepository.save(CONTAINER_3_SIMPLE); /* test */ generic_system_insert("root", "mariadb"); @@ -210,10 +219,9 @@ public class DatabaseServiceIntegrationTest extends BaseUnitTest { /* mock */ DockerConfig.createContainer(BIND_MUSICOLOGY, CONTAINER_3_SIMPLE, CONTAINER_3_ENV); DockerConfig.startContainer(CONTAINER_3_SIMPLE); - when(containerRepository.findById(CONTAINER_3_ID)) - .thenReturn(Optional.of(CONTAINER_3)); - when(databaseRepository.save(any(Database.class))) - .thenReturn(DATABASE_3); + containerRepository.save(CONTAINER_1_SIMPLE) /* increase id */; + containerRepository.save(CONTAINER_2_SIMPLE) /* increase id */; + containerRepository.save(CONTAINER_3_SIMPLE); /* test */ assertThrows(SQLException.class, () -> { @@ -227,10 +235,9 @@ public class DatabaseServiceIntegrationTest extends BaseUnitTest { /* mock */ DockerConfig.createContainer(BIND_MUSICOLOGY, CONTAINER_3_SIMPLE, CONTAINER_3_ENV); DockerConfig.startContainer(CONTAINER_3_SIMPLE); - when(containerRepository.findById(CONTAINER_3_ID)) - .thenReturn(Optional.of(CONTAINER_3)); - when(databaseRepository.save(any(Database.class))) - .thenReturn(DATABASE_3); + containerRepository.save(CONTAINER_1_SIMPLE) /* increase id */; + containerRepository.save(CONTAINER_2_SIMPLE) /* increase id */; + containerRepository.save(CONTAINER_3_SIMPLE); /* test */ generic_user_insert("root", "mariadb"); @@ -242,10 +249,9 @@ public class DatabaseServiceIntegrationTest extends BaseUnitTest { /* mock */ DockerConfig.createContainer(BIND_MUSICOLOGY, CONTAINER_3_SIMPLE, CONTAINER_3_ENV); DockerConfig.startContainer(CONTAINER_3_SIMPLE); - when(containerRepository.findById(CONTAINER_3_ID)) - .thenReturn(Optional.of(CONTAINER_3)); - when(databaseRepository.save(any(Database.class))) - .thenReturn(DATABASE_3); + containerRepository.save(CONTAINER_1_SIMPLE) /* increase id */; + containerRepository.save(CONTAINER_2_SIMPLE) /* increase id */; + containerRepository.save(CONTAINER_3_SIMPLE); /* test */ generic_user_insert("junit1", "junit1"); @@ -268,10 +274,9 @@ public class DatabaseServiceIntegrationTest extends BaseUnitTest { protected void generic_create(Long containerId, DatabaseCreateDto createDto, Database database) throws Exception { - final Principal principal = new BasicUserPrincipal(USER_1_USERNAME); /* test */ - final Database response = databaseService.create(containerId, createDto, principal); + final Database response = databaseService.create(containerId, createDto, USER_1_PRINCIPAL); assertEquals(database.getName(), response.getName()); assertEquals(containerId, database.getId()); } diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/mapper/UserMapper.java b/dbrepo-database-service/services/src/main/java/at/tuwien/mapper/UserMapper.java index c8c386119eb093501d958e654b5e23097839eafd..cb3679d1c347d809015b4a67fcd99d4d01130709 100644 --- a/dbrepo-database-service/services/src/main/java/at/tuwien/mapper/UserMapper.java +++ b/dbrepo-database-service/services/src/main/java/at/tuwien/mapper/UserMapper.java @@ -6,10 +6,13 @@ import at.tuwien.api.user.UserBriefDto; import at.tuwien.api.user.UserDetailsDto; import at.tuwien.api.user.UserDto; import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.Mappings; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; import java.util.Arrays; +import java.util.UUID; import java.util.stream.Collectors; @Mapper(componentModel = "spring") @@ -17,6 +20,10 @@ public interface UserMapper { org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(UserMapper.class); + /* keep */ + @Mappings({ + @Mapping(target = "id", expression = "java(data.getId().toString())") + }) UserDetailsDto userDtoToUserDetailsDto(UserDto data); UserBriefDto userDtoToUserBriefDto(UserDto data); diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/repository/jpa/DatabaseAccessRepository.java b/dbrepo-database-service/services/src/main/java/at/tuwien/repository/jpa/DatabaseAccessRepository.java index 62123403ef4e1acc3d95cfbc8c242cf62daf7592..3cf7c7ad0072c6ddbd510696263cf6921dc6d1e0 100644 --- a/dbrepo-database-service/services/src/main/java/at/tuwien/repository/jpa/DatabaseAccessRepository.java +++ b/dbrepo-database-service/services/src/main/java/at/tuwien/repository/jpa/DatabaseAccessRepository.java @@ -8,11 +8,12 @@ import org.springframework.stereotype.Repository; import java.util.List; import java.util.Optional; +import java.util.UUID; @Repository public interface DatabaseAccessRepository extends JpaRepository<DatabaseAccess, Long> { - void deleteByHdbidAndHuserid(Long databaseId, String userId); + void deleteByHdbidAndHuserid(Long databaseId, UUID userId); Optional<DatabaseAccess> findByHdbidAndHuserid(Long databaseId, String userId); diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/repository/jpa/RealmRepository.java b/dbrepo-database-service/services/src/main/java/at/tuwien/repository/jpa/RealmRepository.java index 74d99176b09d25ee4def85fce8905ff80d1169b7..99f75a4104e8daa1c61a3e7b67ee28aa4a3800ec 100644 --- a/dbrepo-database-service/services/src/main/java/at/tuwien/repository/jpa/RealmRepository.java +++ b/dbrepo-database-service/services/src/main/java/at/tuwien/repository/jpa/RealmRepository.java @@ -4,6 +4,8 @@ import at.tuwien.entities.user.Realm; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; +import java.util.UUID; + @Repository -public interface RealmRepository extends JpaRepository<Realm, String> { +public interface RealmRepository extends JpaRepository<Realm, UUID> { } diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/repository/jpa/UserRepository.java b/dbrepo-database-service/services/src/main/java/at/tuwien/repository/jpa/UserRepository.java index 3772a12f59a6e9a9225612d34a0bf7b4a50fcd4e..9eb0b5190252b7e1890deb7717fe9b2afc133d41 100644 --- a/dbrepo-database-service/services/src/main/java/at/tuwien/repository/jpa/UserRepository.java +++ b/dbrepo-database-service/services/src/main/java/at/tuwien/repository/jpa/UserRepository.java @@ -5,9 +5,10 @@ import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; import java.util.Optional; +import java.util.UUID; @Repository -public interface UserRepository extends JpaRepository<User, Long> { +public interface UserRepository extends JpaRepository<User, UUID> { Optional<User> findByUsername(String username); diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/service/AccessService.java b/dbrepo-database-service/services/src/main/java/at/tuwien/service/AccessService.java index c32cd3579f2dfa5dd0724b82766ffe1feca95b07..97eed76ada8e5b1ed01ac97ab6de9d6b2354680b 100644 --- a/dbrepo-database-service/services/src/main/java/at/tuwien/service/AccessService.java +++ b/dbrepo-database-service/services/src/main/java/at/tuwien/service/AccessService.java @@ -50,7 +50,7 @@ public interface AccessService { * @throws DatabaseMalformedException The database has an invalid state. */ void update(Long containerId, Long databaseId, String username, DatabaseModifyAccessDto accessDto) - throws DatabaseNotFoundException, UserNotFoundException, NotAllowedException, QueryMalformedException, DatabaseMalformedException; + throws DatabaseNotFoundException, UserNotFoundException, NotAllowedException, QueryMalformedException, DatabaseMalformedException, AccessDeniedException; /** * Revokes access to a database of container. diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/service/UserService.java b/dbrepo-database-service/services/src/main/java/at/tuwien/service/UserService.java index 2a052646544dabdaf5100761ca2843ed031024ae..cec9cf42e785ee2211782faeefc0181cf5c7ff4f 100644 --- a/dbrepo-database-service/services/src/main/java/at/tuwien/service/UserService.java +++ b/dbrepo-database-service/services/src/main/java/at/tuwien/service/UserService.java @@ -3,9 +3,11 @@ package at.tuwien.service; import at.tuwien.entities.user.User; import at.tuwien.exception.UserNotFoundException; +import java.util.UUID; + public interface UserService { User findByUsername(String username) throws UserNotFoundException; - User find(Long id) throws UserNotFoundException; + User find(UUID id) throws UserNotFoundException; } diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/service/impl/AccessServiceImpl.java b/dbrepo-database-service/services/src/main/java/at/tuwien/service/impl/AccessServiceImpl.java index 3aa6ab4ea334e16c6db8bc9eef418e7aec7af43c..a94df1399012e231287e07756353e2aa11f6be97 100644 --- a/dbrepo-database-service/services/src/main/java/at/tuwien/service/impl/AccessServiceImpl.java +++ b/dbrepo-database-service/services/src/main/java/at/tuwien/service/impl/AccessServiceImpl.java @@ -102,7 +102,7 @@ public class AccessServiceImpl extends HibernateConnector implements AccessServi @Transactional public void update(Long containerId, Long databaseId, String username, DatabaseModifyAccessDto accessDto) throws DatabaseNotFoundException, UserNotFoundException, NotAllowedException, QueryMalformedException, - DatabaseMalformedException { + DatabaseMalformedException, AccessDeniedException { /* check */ final Database database = databaseService.findById(containerId, databaseId); final Container container = database.getContainer(); @@ -111,6 +111,7 @@ public class AccessServiceImpl extends HibernateConnector implements AccessServi log.error("Failed to modify access of user with username {}, because it is the owner", username); throw new NotAllowedException("Failed modify access"); } + find(databaseId, username); final User root = databaseMapper.containerToPrivilegedUser(container); final ComboPooledDataSource dataSource = getDataSource(container.getImage(), container, database, root); final DatabaseGiveAccessDto giveAccess = databaseMapper.databaseModifyAccessToDatabaseGiveAccessDto(username, accessDto); @@ -133,8 +134,7 @@ public class AccessServiceImpl extends HibernateConnector implements AccessServi dataSource.close(); } /* update access */ - final DatabaseAccess access = databaseMapper.databaseModifyAccessDtoToDatabaseAccess(database, user, accessDto); - final DatabaseAccess entity = databaseAccessRepository.save(access); + databaseAccessRepository.save(databaseMapper.databaseModifyAccessDtoToDatabaseAccess(database, user, accessDto)); log.info("Modified access to database with id {} for user with username {}", databaseId, username); } diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java b/dbrepo-database-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java index d0c7fdb2d0ee3f95584d98f885685fbbb9584aab..003f54c319a01c901076553690c5d319aeab2953 100644 --- a/dbrepo-database-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java +++ b/dbrepo-database-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java @@ -8,7 +8,9 @@ import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.List; import java.util.Optional; +import java.util.UUID; @Log4j2 @Service @@ -32,7 +34,7 @@ public class UserServiceImpl implements UserService { } @Override - public User find(Long id) throws UserNotFoundException { + public User find(UUID id) throws UserNotFoundException { final Optional<User> optional = userRepository.findById(id); if (optional.isEmpty()) { log.error("Failed to retrieve user with id {}", id); diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/mapper/UserMapper.java b/dbrepo-identifier-service/services/src/main/java/at/tuwien/mapper/UserMapper.java index f14430e9675c7a152c778df18fc892e3423afdc6..bac8f626c26760326cf2dfd17027b5d2e5d29cd1 100644 --- a/dbrepo-identifier-service/services/src/main/java/at/tuwien/mapper/UserMapper.java +++ b/dbrepo-identifier-service/services/src/main/java/at/tuwien/mapper/UserMapper.java @@ -1,16 +1,23 @@ package at.tuwien.mapper; import at.tuwien.api.user.GrantedAuthorityDto; +import at.tuwien.api.user.UserBriefDto; import at.tuwien.api.user.UserDetailsDto; import at.tuwien.api.user.UserDto; import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.Mappings; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; @Mapper(componentModel = "spring") public interface UserMapper { - UserDetailsDto userDtoToUserDetailsDto(UserDto data); + /* keep */ + @Mappings({ + @Mapping(target = "id", expression = "java(data.getId().toString())") + }) + UserDetailsDto userBriefDtoToUserDetailsDto(UserBriefDto data); default GrantedAuthority grantedAuthorityDtoToGrantedAuthority(GrantedAuthorityDto data) { return new SimpleGrantedAuthority(data.getAuthority()); diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/jpa/RealmRepository.java b/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/jpa/RealmRepository.java new file mode 100644 index 0000000000000000000000000000000000000000..122095a168705beba38dc0c52cba481c1a64a649 --- /dev/null +++ b/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/jpa/RealmRepository.java @@ -0,0 +1,15 @@ + +package at.tuwien.repository.jpa; + +import at.tuwien.entities.user.Realm; +import at.tuwien.entities.user.User; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.Optional; +import java.util.UUID; + +@Repository +public interface RealmRepository extends JpaRepository<Realm, UUID> { + +} diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/jpa/UserRepository.java b/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/jpa/UserRepository.java index 8368703d887e68c1df2c18f82fa4f7d46531820e..01b143f6f813cb5c34cd94a413010f2677d43685 100644 --- a/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/jpa/UserRepository.java +++ b/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/jpa/UserRepository.java @@ -6,9 +6,10 @@ import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; import java.util.Optional; +import java.util.UUID; @Repository -public interface UserRepository extends JpaRepository<User, Long> { +public interface UserRepository extends JpaRepository<User, UUID> { Optional<User> findByUsername(String username); diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/auth/TokenBriefDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/auth/TokenBriefDto.java deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/auth/TokenDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/auth/TokenDto.java deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/DatabaseAccessDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/DatabaseAccessDto.java index 5824512e7aa7bc8d7da46d103f189fffe5903bec..be111aa08ccb1a04d7a8b010107ceb8bfc4f5c46 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/DatabaseAccessDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/DatabaseAccessDto.java @@ -9,6 +9,7 @@ import lombok.*; import javax.validation.constraints.NotNull; import java.time.Instant; +import java.util.UUID; @Getter @Setter @@ -21,7 +22,7 @@ public class DatabaseAccessDto { @NotNull @JsonIgnore @ToString.Exclude - private String huserid; + private UUID huserid; @NotNull @JsonIgnore diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserAttributeDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserAttributeDto.java index c5f7b7b0b34bc1d3036ed393e7ef1e979591c7b0..fc95f67dc682ff1639116ea859f4f20bd9d1eaa0 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserAttributeDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserAttributeDto.java @@ -5,6 +5,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; import javax.validation.constraints.NotNull; +import java.util.UUID; @Getter @Setter @@ -16,12 +17,12 @@ public class UserAttributeDto { @NotNull @JsonIgnore - private String id; + private UUID id; @NotNull @JsonIgnore @Schema(example = "1ffc7b0e-9aeb-4e8b-b8f1-68f3936155b4") - private String userId; + private UUID userId; @Schema(example = "theme_dark") private String name; diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserBriefDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserBriefDto.java index d11d345a0d66457a56beaacf025b02a15c57a10d..62dfb946fe85884fa91e48b745583fa253a26f80 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserBriefDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserBriefDto.java @@ -9,6 +9,7 @@ import org.springframework.security.core.userdetails.UserDetails; import javax.validation.constraints.NotNull; import java.util.List; +import java.util.UUID; @Getter @Setter @@ -20,7 +21,7 @@ public class UserBriefDto { @NotNull @Schema(example = "1ffc7b0e-9aeb-4e8b-b8f1-68f3936155b4") - private String id; + private UUID id; @NotNull @Schema(example = "jcarberry", description = "Only contains lowercase characters") diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserDto.java index d3b081ade0f4f4a67fdf7c60726ec22d8ef4b20d..2c824f4acae33668863d931571e96cc9546e1f15 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserDto.java @@ -7,6 +7,7 @@ import lombok.*; import javax.validation.constraints.NotNull; import java.util.List; +import java.util.UUID; @Getter @Setter @@ -19,7 +20,7 @@ public class UserDto { @NotNull @Schema(example = "1ffc7b0e-9aeb-4e8b-b8f1-68f3936155b4") - private String id; + private UUID id; @NotNull @Schema(example = "jcarberry", description = "Only contains lowercase characters") diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/DatabaseAccess.java b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/DatabaseAccess.java index bc5ba2b798d68bdc93352c193f30668c1031f54e..5f6e684785d78e7f91e41edc7bb2e8058df5cb4b 100644 --- a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/DatabaseAccess.java +++ b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/DatabaseAccess.java @@ -7,6 +7,7 @@ import org.springframework.data.jpa.domain.support.AuditingEntityListener; import javax.persistence.*; import java.time.Instant; +import java.util.UUID; @Data @Entity @@ -21,8 +22,8 @@ public class DatabaseAccess { @Id @EqualsAndHashCode.Include - @Column(name = "user_id", updatable = false) - private String huserid; + @Column(name = "user_id", updatable = false, columnDefinition = "VARCHAR(36)") + private UUID huserid; @Id @EqualsAndHashCode.Include diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/DatabaseAccessKey.java b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/DatabaseAccessKey.java index 6b4b8f2bc8768dce6adba4a3b29083e250822d61..83806068525ef9073e0bb18ca01b1a933f74a090 100644 --- a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/DatabaseAccessKey.java +++ b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/DatabaseAccessKey.java @@ -3,11 +3,12 @@ package at.tuwien.entities.database; import lombok.EqualsAndHashCode; import java.io.Serializable; +import java.util.UUID; @EqualsAndHashCode public class DatabaseAccessKey implements Serializable { - private String huserid; + private UUID huserid; private Long hdbid; } diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/Table.java b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/Table.java index 23bd4c566c6e098b6e330a5a81be5f50a4f58a14..0840dca2e7d4f5d8ab21ba69c602237478ae2d4a 100644 --- a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/Table.java +++ b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/Table.java @@ -15,6 +15,7 @@ import org.springframework.data.jpa.domain.support.AuditingEntityListener; import javax.persistence.*; import java.time.Instant; import java.util.List; +import java.util.UUID; @Data @Entity @@ -42,7 +43,7 @@ public class Table { @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL) @JoinColumns({ - @JoinColumn(name = "createdBy", referencedColumnName = "ID") + @JoinColumn(name = "createdBy", referencedColumnName = "ID", columnDefinition = "VARCHAR(36)") }) private User creator; diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/user/Credential.java b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/user/Credential.java index f3da481c38b003df917e0ef0003159c9a6fe5066..a422eed5e9eb598c45b15283c6fa2efbae35847e 100644 --- a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/user/Credential.java +++ b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/user/Credential.java @@ -5,6 +5,7 @@ import org.hibernate.annotations.GenericGenerator; import org.springframework.data.jpa.domain.support.AuditingEntityListener; import javax.persistence.*; +import java.util.UUID; @Data @Entity @@ -19,16 +20,14 @@ public class Credential { @Id @EqualsAndHashCode.Include - @GeneratedValue(generator = "credential-uuid") - @GenericGenerator(name = "credential-uuid", strategy = "org.hibernate.id.UUIDGenerator") @Column(name = "ID", nullable = false, columnDefinition = "VARCHAR(36)") - private String id; + private UUID id; @Column(nullable = false) private String type; - @Column(name = "user_id", nullable = false) - private String userId; + @Column(name = "user_id", nullable = false, columnDefinition = "VARCHAR(36)") + private UUID userId; @Column(nullable = false) private Long createdDate; diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/user/Realm.java b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/user/Realm.java index c87b90bc69a2a158e67777d4d2fbc65400fc931a..96ba2ec66181a43d38a4ce0f46e1e04efe8a09a8 100644 --- a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/user/Realm.java +++ b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/user/Realm.java @@ -5,6 +5,7 @@ import org.hibernate.annotations.GenericGenerator; import javax.persistence.*; import java.util.List; +import java.util.UUID; @Data @Entity @@ -21,10 +22,8 @@ public class Realm { @Id @EqualsAndHashCode.Include - @GeneratedValue(generator = "realm-uuid") - @GenericGenerator(name = "realm-uuid", strategy = "org.hibernate.id.UUIDGenerator") @Column(name = "ID", nullable = false, columnDefinition = "VARCHAR(36)") - private String id; + private UUID id; @Column(nullable = false) private Boolean enabled; diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/user/Role.java b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/user/Role.java index f1a8b1031b43134280b1d55d503a415ed1637820..5d25bce86bb08af5375d1f17aca4abee987772a6 100644 --- a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/user/Role.java +++ b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/user/Role.java @@ -5,6 +5,7 @@ import org.hibernate.annotations.GenericGenerator; import org.springframework.data.jpa.domain.support.AuditingEntityListener; import javax.persistence.*; +import java.util.UUID; @Data @Entity @@ -19,10 +20,8 @@ public class Role { @Id @EqualsAndHashCode.Include - @GeneratedValue(generator = "role-uuid") - @GenericGenerator(name = "role-uuid", strategy = "org.hibernate.id.UUIDGenerator") @Column(name = "ID", nullable = false, columnDefinition = "VARCHAR(36)") - private String id; + private UUID id; @Column(name = "NAME", nullable = false) private String name; diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/user/RoleMapping.java b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/user/RoleMapping.java index 4ef61ea2ef0e32c1b52da2f96dec404d1b153312..7317453872dcbf11b0d32af43cffa709b5a0e251 100644 --- a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/user/RoleMapping.java +++ b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/user/RoleMapping.java @@ -1,10 +1,10 @@ package at.tuwien.entities.user; import lombok.*; -import org.hibernate.annotations.GenericGenerator; import org.springframework.data.jpa.domain.support.AuditingEntityListener; import javax.persistence.*; +import java.util.UUID; @Data @Entity @@ -20,12 +20,12 @@ public class RoleMapping { @Id @EqualsAndHashCode.Include - @Column(name = "USER_ID", nullable = false) - private String userId; + @Column(name = "USER_ID", nullable = false, columnDefinition = "VARCHAR(36)") + private UUID userId; @Id @EqualsAndHashCode.Include - @Column(name = "ROLE_ID", nullable = false) - private String roleId; + @Column(name = "ROLE_ID", nullable = false, columnDefinition = "VARCHAR(36)") + private UUID roleId; } diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/user/RoleMappingKey.java b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/user/RoleMappingKey.java index 7e96f96b1f12ee3ca306f8526540eebcb78eea06..ffe719a7106640cd38999a148bfcbb9902a39f3d 100644 --- a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/user/RoleMappingKey.java +++ b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/user/RoleMappingKey.java @@ -3,12 +3,13 @@ package at.tuwien.entities.user; import lombok.EqualsAndHashCode; import java.io.Serializable; +import java.util.UUID; @EqualsAndHashCode public class RoleMappingKey implements Serializable { - private String userId; + private UUID userId; - private String roleId; + private UUID roleId; } diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/user/User.java b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/user/User.java index 2d36a68aff1e6bd6a63aa5eb6ebc76af1dcc1cf9..b4469d77bf31ac27650a9f114b9a49443a170da5 100644 --- a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/user/User.java +++ b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/user/User.java @@ -9,6 +9,7 @@ import org.springframework.data.jpa.domain.support.AuditingEntityListener; import javax.persistence.*; import java.util.List; +import java.util.UUID; @Data @Entity @@ -31,10 +32,8 @@ public class User { @Id @EqualsAndHashCode.Include - @GeneratedValue(generator = "user-uuid") - @GenericGenerator(name = "user-uuid", strategy = "org.hibernate.id.UUIDGenerator") @Column(name = "ID", nullable = false, columnDefinition = "VARCHAR(36)") - private String id; + private UUID id; @Column(nullable = false) private String username; @@ -45,8 +44,8 @@ public class User { @Column(name = "LAST_NAME") private String lastname; - @Column(name = "REALM_ID") - private String realmId; + @Column(name = "REALM_ID", columnDefinition = "VARCHAR(36)") + private UUID realmId; @Column(nullable = false) private String email; @@ -95,4 +94,9 @@ public class User { @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "creator") private List<Identifier> identifiers; + @Transient + @ToString.Exclude + @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "creator") + private List<at.tuwien.entities.database.table.Table> tables; + } diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/user/UserAttribute.java b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/user/UserAttribute.java index fbcfc82cf5512f55ca20cec5bac0089ffd4a1d36..976fc09f81f4881a60462c2c754f177000622b3f 100644 --- a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/user/UserAttribute.java +++ b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/user/UserAttribute.java @@ -1,11 +1,11 @@ package at.tuwien.entities.user; -import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.*; import org.hibernate.annotations.GenericGenerator; import org.springframework.data.jpa.domain.support.AuditingEntityListener; import javax.persistence.*; +import java.util.UUID; @Data @Entity @@ -20,14 +20,12 @@ public class UserAttribute { @Id @EqualsAndHashCode.Include - @GeneratedValue(generator = "attribute-uuid") - @GenericGenerator(name = "attribute-uuid", strategy = "org.hibernate.id.UUIDGenerator") @Column(name = "ID", nullable = false, columnDefinition = "VARCHAR(36)") - private String id; + private UUID id; @ToString.Exclude - @Column(name = "USER_ID", nullable = false) - private String userId; + @Column(name = "USER_ID", nullable = false, columnDefinition = "VARCHAR(36)") + private UUID userId; @Column(name = "NAME", nullable = false) private String name; diff --git a/dbrepo-metadata-db/test/src/main/java/at/tuwien/test/BaseTest.java b/dbrepo-metadata-db/test/src/main/java/at/tuwien/test/BaseTest.java index cb509b750df7d873dbef0dc6816f0824997c40cf..d6a515b3974c5a06a1ba62359a90d04163c184f8 100644 --- a/dbrepo-metadata-db/test/src/main/java/at/tuwien/test/BaseTest.java +++ b/dbrepo-metadata-db/test/src/main/java/at/tuwien/test/BaseTest.java @@ -165,7 +165,7 @@ public abstract class BaseTest { .themeDark(false) .build(); - public final static String REALM_DBREPO_ID = "6264bf7b-d1d3-4562-9c07-ce4364a8f9d3"; + public final static UUID REALM_DBREPO_ID = UUID.fromString("6264bf7b-d1d3-4562-9c07-ce4364a8f9d3"); public final static String REALM_DBREPO_NAME = "dbrepo"; public final static Boolean REALM_DBREPO_ENABLED = true; @@ -182,7 +182,7 @@ public abstract class BaseTest { .username(USER_BROKER_USERNAME) .build(); - public final static String USER_1_ID = "cd5bab0d-7799-4069-85fb-c5d738572a0b"; + public final static UUID USER_1_ID = UUID.fromString("cd5bab0d-7799-4069-85fb-c5d738572a0b"); public final static String USER_1_EMAIL = "john.doe@example.com"; public final static String USER_1_USERNAME = "junit1"; public final static String USER_1_PASSWORD = "s3cr3t1nf0rm4t10n"; @@ -200,41 +200,41 @@ public abstract class BaseTest { public final static Boolean USER_1_THEME_DARK = false; public final static Instant USER_1_CREATED = Instant.ofEpochSecond(1677399441) /* 2023-02-26 08:17:21 (UTC) */; public final static Instant USER_1_LAST_MODIFIED = USER_1_CREATED; - public final static String USER_1_REALM_ID = REALM_DBREPO_ID; + public final static UUID USER_1_REALM_ID = REALM_DBREPO_ID; public final static List<UserAttribute> USER_1_ATTRIBUTES = List.of(UserAttribute.builder() - .id("c466a105-5bbd-4afc-87ae-751d5037d9ab") + .id(UUID.fromString("c466a105-5bbd-4afc-87ae-751d5037d9ab")) .userId(USER_1_ID) .name("theme_dark") .value("false") .build(), UserAttribute.builder() - .id("0870498b-d6ac-4543-bef1-830142de96d7") + .id(UUID.fromString("0870498b-d6ac-4543-bef1-830142de96d7")) .userId(USER_1_ID) .name("orcid") .value(USER_1_ORCID_UNCOMPRESSED) .build(), UserAttribute.builder() - .id("42b06e7f-9df2-4b1c-bdfb-904401d6ad36") + .id(UUID.fromString("42b06e7f-9df2-4b1c-bdfb-904401d6ad36")) .userId(USER_1_ID) .name("affiliation") .value(USER_1_AFFILIATION) .build()); public final static List<UserAttributeDto> USER_1_ATTRIBUTES_DTO = List.of(UserAttributeDto.builder() - .id("c466a105-5bbd-4afc-87ae-751d5037d9ab") + .id(UUID.fromString("c466a105-5bbd-4afc-87ae-751d5037d9ab")) .userId(USER_1_ID) .name("theme_dark") .value("false") .build(), UserAttributeDto.builder() - .id("0870498b-d6ac-4543-bef1-830142de96d7") + .id(UUID.fromString("0870498b-d6ac-4543-bef1-830142de96d7")) .userId(USER_1_ID) .name("orcid") .value(USER_1_ORCID_UNCOMPRESSED) .build(), UserAttributeDto.builder() - .id("42b06e7f-9df2-4b1c-bdfb-904401d6ad36") + .id(UUID.fromString("42b06e7f-9df2-4b1c-bdfb-904401d6ad36")) .userId(USER_1_ID) .name("affiliation") .value(USER_1_AFFILIATION) @@ -302,7 +302,7 @@ public abstract class BaseTest { .tags(new String[]{"administrator"}) .build(); - public final static String USER_2_ID = "eeb9a51b-4cd8-4039-90bf-e24f17372f7c"; + public final static UUID USER_2_ID = UUID.fromString("eeb9a51b-4cd8-4039-90bf-e24f17372f7c"); public final static String USER_2_EMAIL = "jane.doe@example.com"; public final static String USER_2_USERNAME = "junit2"; public final static String USER_2_FIRSTNAME = "Jane"; @@ -317,41 +317,41 @@ public abstract class BaseTest { public final static Boolean USER_2_THEME_DARK = false; public final static Instant USER_2_CREATED = Instant.ofEpochSecond(1677399528) /* 2023-02-26 08:18:48 (UTC) */; public final static Instant USER_2_LAST_MODIFIED = USER_1_CREATED; - public final static String USER_2_REALM_ID = REALM_DBREPO_ID; + public final static UUID USER_2_REALM_ID = REALM_DBREPO_ID; public final static List<UserAttribute> USER_2_ATTRIBUTES = List.of(UserAttribute.builder() - .id("23da2c08-cb8a-4e18-a7f0-70c30de2771e") + .id(UUID.fromString("23da2c08-cb8a-4e18-a7f0-70c30de2771e")) .userId(USER_2_ID) .name("theme_dark") .value("false") .build(), UserAttribute.builder() - .id("83223dfd-1c80-4132-8c74-a38994f45f4a") + .id(UUID.fromString("83223dfd-1c80-4132-8c74-a38994f45f4a")) .userId(USER_2_ID) .name("orcid") .value(USER_2_ORCID_UNCOMPRESSED) .build(), UserAttribute.builder() - .id("a29879fd-9801-4adf-bf3a-16bbff6ea207") + .id(UUID.fromString("a29879fd-9801-4adf-bf3a-16bbff6ea207")) .userId(USER_2_ID) .name("affiliation") .value(USER_2_AFFILIATION) .build()); public final static List<UserAttributeDto> USER_2_ATTRIBUTES_DTO = List.of(UserAttributeDto.builder() - .id("23da2c08-cb8a-4e18-a7f0-70c30de2771e") + .id(UUID.fromString("23da2c08-cb8a-4e18-a7f0-70c30de2771e")) .userId(USER_2_ID) .name("theme_dark") .value("false") .build(), UserAttributeDto.builder() - .id("83223dfd-1c80-4132-8c74-a38994f45f4a") + .id(UUID.fromString("83223dfd-1c80-4132-8c74-a38994f45f4a")) .userId(USER_2_ID) .name("orcid") .value(USER_2_ORCID_UNCOMPRESSED) .build(), UserAttributeDto.builder() - .id("a29879fd-9801-4adf-bf3a-16bbff6ea207") + .id(UUID.fromString("a29879fd-9801-4adf-bf3a-16bbff6ea207")) .userId(USER_2_ID) .name("affiliation") .value(USER_2_AFFILIATION) @@ -401,7 +401,7 @@ public abstract class BaseTest { .build(); public final static UserDetails USER_2_DETAILS = UserDetailsDto.builder() - .id(USER_2_ID) + .id(USER_2_ID.toString()) .username(USER_2_USERNAME) .email(USER_2_EMAIL) .password(USER_2_PASSWORD) @@ -416,7 +416,7 @@ public abstract class BaseTest { public final static Principal USER_2_PRINCIPAL = new UsernamePasswordAuthenticationToken(USER_2_DETAILS, USER_2_PASSWORD, USER_2_DETAILS.getAuthorities()); - public final static String USER_3_ID = "7b080e33-d8db-4276-9d53-47208e657006"; + public final static UUID USER_3_ID = UUID.fromString("7b080e33-d8db-4276-9d53-47208e657006"); public final static String USER_3_USERNAME = "junit3"; public final static String USER_3_FIRSTNAME = "System"; public final static String USER_3_LASTNAME = "System"; @@ -429,7 +429,45 @@ public abstract class BaseTest { public final static Boolean USER_3_ENABLED = true; public final static Boolean USER_3_THEME_DARK = false; public final static Instant USER_3_CREATED = Instant.ofEpochSecond(1677399559) /* 2023-02-26 08:19:19 (UTC) */; - public final static String USER_3_REALM_ID = REALM_DBREPO_ID; + public final static UUID USER_3_REALM_ID = REALM_DBREPO_ID; + + public final static List<UserAttribute> USER_3_ATTRIBUTES = List.of(UserAttribute.builder() + .id(UUID.fromString("58062219-7b99-4c0d-b00b-136b7d916c04")) + .userId(USER_3_ID) + .name("theme_dark") + .value(USER_3_THEME_DARK.toString()) + .build(), + UserAttribute.builder() + .id(UUID.fromString("384851ee-83c4-4cda-805e-be0c1bab71eb")) + .userId(USER_3_ID) + .name("orcid") + .value(null) + .build(), + UserAttribute.builder() + .id(UUID.fromString("c2cb2357-5e34-453f-b080-ca1c97f56d4a")) + .userId(USER_3_ID) + .name("affiliation") + .value(USER_3_AFFILIATION) + .build()); + + public final static List<UserAttributeDto> USER_3_ATTRIBUTES_DTO = List.of(UserAttributeDto.builder() + .id(UUID.fromString("58062219-7b99-4c0d-b00b-136b7d916c04")) + .userId(USER_3_ID) + .name("theme_dark") + .value(USER_3_THEME_DARK.toString()) + .build(), + UserAttributeDto.builder() + .id(UUID.fromString("384851ee-83c4-4cda-805e-be0c1bab71eb")) + .userId(USER_3_ID) + .name("orcid") + .value(null) + .build(), + UserAttributeDto.builder() + .id(UUID.fromString("c2cb2357-5e34-453f-b080-ca1c97f56d4a")) + .userId(USER_3_ID) + .name("affiliation") + .value(USER_3_AFFILIATION) + .build()); public final static User USER_3 = User.builder() .id(USER_3_ID) @@ -437,8 +475,26 @@ public abstract class BaseTest { .email(USER_3_EMAIL) .emailVerified(true) .databasePassword(USER_3_DATABASE_PASSWORD) + .firstname(USER_3_FIRSTNAME) + .lastname(USER_3_LASTNAME) + .emailVerified(USER_3_VERIFIED) .enabled(USER_3_ENABLED) .realmId(USER_3_REALM_ID) + .attributes(USER_3_ATTRIBUTES) + .build(); + + public final static User USER_3_SIMPLE = User.builder() + .id(USER_3_ID) + .username(USER_3_USERNAME) + .email(USER_3_EMAIL) + .emailVerified(true) + .databasePassword(USER_3_DATABASE_PASSWORD) + .firstname(USER_3_FIRSTNAME) + .lastname(USER_3_LASTNAME) + .emailVerified(USER_3_VERIFIED) + .enabled(USER_3_ENABLED) + .realmId(USER_3_REALM_ID) + .attributes(List.of() /* for jpa */) .build(); public final static UserDto USER_3_DTO = UserDto.builder() @@ -465,7 +521,7 @@ public abstract class BaseTest { .tags(new String[]{}) .build(); - public final static String USER_4_ID = "791d58c5-bfab-4520-b4fc-b44d4ab9feb0"; + public final static UUID USER_4_ID = UUID.fromString("791d58c5-bfab-4520-b4fc-b44d4ab9feb0"); public final static String USER_4_USERNAME = "junit4"; public final static String USER_4_FIRSTNAME = "JUnit"; public final static String USER_4_LASTNAME = "4"; @@ -478,7 +534,7 @@ public abstract class BaseTest { public final static Boolean USER_4_ENABLED = true; public final static Boolean USER_4_THEME_DARK = false; public final static Instant USER_4_CREATED = Instant.ofEpochSecond(1677399592) /* 2023-02-26 08:19:52 (UTC) */; - public final static String USER_4_REALM_ID = REALM_DBREPO_ID; + public final static UUID USER_4_REALM_ID = REALM_DBREPO_ID; public final static User USER_4 = User.builder() .id(USER_4_ID) @@ -509,7 +565,7 @@ public abstract class BaseTest { public final static Principal USER_4_PRINCIPAL = new UsernamePasswordAuthenticationToken(USER_4_DETAILS, USER_4_PASSWORD, USER_4_DETAILS.getAuthorities()); - public final static String USER_5_ID = "28ff851d-d7bc-4422-959c-edd7a5b15630"; + public final static UUID USER_5_ID = UUID.fromString("28ff851d-d7bc-4422-959c-edd7a5b15630"); public final static String USER_5_USERNAME = "system"; public final static String USER_5_FIRSTNAME = "System"; public final static String USER_5_LASTNAME = "System"; @@ -521,7 +577,7 @@ public abstract class BaseTest { public final static Boolean USER_5_VERIFIED = true; public final static Boolean USER_5_THEME_DARK = false; public final static Instant USER_5_CREATED = Instant.ofEpochSecond(1677399592) /* 2023-02-26 08:19:52 (UTC) */; - public final static String USER_5_REALM_ID = REALM_DBREPO_ID; + public final static UUID USER_5_REALM_ID = REALM_DBREPO_ID; public final static User USER_5 = User.builder() .id(USER_5_ID) @@ -1448,6 +1504,33 @@ public abstract class BaseTest { public final static Instant TABLE_7_CREATED = Instant.ofEpochSecond(1677400175) /* 2023-02-26 08:29:35 (UTC) */; public final static Instant TABLE_7_LAST_MODIFIED = Instant.ofEpochSecond(1677400175) /* 2023-02-26 08:29:35 (UTC) */; + public final static List<TableColumn> TABLE_7_COLUMNS = List.of(TableColumn.builder() + .id(1L) + .ordinalPosition(0) + .cdbid(DATABASE_1_ID) + .tid(TABLE_1_ID) + .name("Timestamp") + .internalName("timestamp") + .columnType(TableColumnType.TIMESTAMP) + .dfid(IMAGE_DATE_3_ID) + .isNullAllowed(false) + .autoGenerated(false) + .isPrimaryKey(true) + .build(), + TableColumn.builder() + .id(2L) + .ordinalPosition(1) + .cdbid(DATABASE_1_ID) + .tid(TABLE_1_ID) + .name("Value") + .internalName("value") + .columnType(TableColumnType.DECIMAL) + .dfid(null) + .isNullAllowed(true) + .autoGenerated(false) + .isPrimaryKey(false) + .build()); + public final static Table TABLE_7 = Table.builder() .id(TABLE_7_ID) .created(Instant.now()) @@ -1457,37 +1540,27 @@ public abstract class BaseTest { .tdbid(DATABASE_1_ID) .queueName(TABLE_7_QUEUE_NAME) .routingKey(TABLE_7_ROUTING_KEY) - .columns(List.of(TableColumn.builder() - .id(1L) - .ordinalPosition(0) - .cdbid(DATABASE_1_ID) - .tid(TABLE_1_ID) - .name("Timestamp") - .internalName("timestamp") - .columnType(TableColumnType.TIMESTAMP) - .dfid(IMAGE_DATE_3_ID) - .isNullAllowed(false) - .autoGenerated(false) - .isPrimaryKey(true) - .build(), - TableColumn.builder() - .id(2L) - .ordinalPosition(1) - .cdbid(DATABASE_1_ID) - .tid(TABLE_1_ID) - .name("Value") - .internalName("value") - .columnType(TableColumnType.DECIMAL) - .dfid(null) - .isNullAllowed(true) - .autoGenerated(false) - .isPrimaryKey(false) - .build())) + .columns(TABLE_7_COLUMNS) .creator(USER_1) .created(TABLE_7_CREATED) .lastModified(TABLE_7_LAST_MODIFIED) .build(); + public final static Table TABLE_7_SIMPLE = Table.builder() + .id(TABLE_7_ID) + .created(Instant.now()) + .internalName(TABLE_7_INTERNAL_NAME) + .description(TABLE_7_DESCRIPTION) + .name(TABLE_7_NAME) + .tdbid(DATABASE_1_ID) + .queueName(TABLE_7_QUEUE_NAME) + .routingKey(TABLE_7_ROUTING_KEY) + .columns(List.of() /* for jpa */) + .creator(null /* for jpa */) + .created(TABLE_7_CREATED) + .lastModified(TABLE_7_LAST_MODIFIED) + .build(); + public final static Long TABLE_8_ID = 8L; public final static String TABLE_8_NAME = "mfcc"; public final static String TABLE_8_INTERNAL_NAME = "mfcc"; @@ -2066,7 +2139,7 @@ public abstract class BaseTest { .resultHash(QUERY_1_RESULT_HASH) .created(QUERY_1_CREATED) .execution(QUERY_1_EXECUTION) - .createdBy(USER_1_ID) + .createdBy(USER_1_ID.toString()) .creator(USER_1_DTO) .build(); @@ -2079,7 +2152,7 @@ public abstract class BaseTest { .resultHash(QUERY_1_RESULT_HASH) .created(QUERY_1_CREATED) .execution(QUERY_1_EXECUTION) - .createdBy(USER_1_ID) + .createdBy(USER_1_ID.toString()) .creator(USER_1_DTO) .build(); @@ -2385,8 +2458,9 @@ public abstract class BaseTest { .lastModified(TABLE_1_LAST_MODIFIED) .build(); - public final static Table TABLE_1_NOCOLS = Table.builder() + public final static Table TABLE_1_SIMPLE = Table.builder() .id(TABLE_1_ID) + .database(null /* for jpa */) .created(Instant.now()) .internalName(TABLE_1_INTERNALNAME) .description(TABLE_1_DESCRIPTION) @@ -2395,8 +2469,9 @@ public abstract class BaseTest { .tdbid(DATABASE_1_ID) .queueName(TABLE_1_QUEUE_NAME) .routingKey(TABLE_1_ROUTING_KEY) - .columns(List.of()) - .creator(USER_1) + .columns(List.of() /* for jpa */) + .constraints(null /* for jpa */) /* TABLE_1_CONSTRAINTS */ + .creator(null /* for jpa */) .created(TABLE_1_CREATED) .lastModified(TABLE_1_LAST_MODIFIED) .build(); @@ -2461,8 +2536,9 @@ public abstract class BaseTest { .lastModified(TABLE_2_LAST_MODIFIED) .build(); - public final static Table TABLE_2_NOCOLS = Table.builder() + public final static Table TABLE_2_SIMPLE = Table.builder() .id(TABLE_2_ID) + .database(null /* for jpa */) .created(Instant.now()) .internalName(TABLE_2_INTERNALNAME) .description(TABLE_2_DESCRIPTION) @@ -2471,8 +2547,8 @@ public abstract class BaseTest { .tdbid(DATABASE_1_ID) .queueName(TABLE_2_QUEUE_NAME) .routingKey(TABLE_2_ROUTING_KEY) - .columns(List.of()) - .creator(USER_1) + .columns(List.of() /* for jpa */) + .creator(null /* for jpa */) .created(TABLE_2_CREATED) .lastModified(TABLE_2_LAST_MODIFIED) .build(); @@ -2970,8 +3046,9 @@ public abstract class BaseTest { .lastModified(TABLE_3_LAST_MODIFIED) .build(); - public final static Table TABLE_3_NOCOLS = Table.builder() + public final static Table TABLE_3_SIMPLE = Table.builder() .id(TABLE_3_ID) + .database(null /* for jpa */) .created(Instant.now()) .internalName(TABLE_3_INTERNALNAME) .description(TABLE_3_DESCRIPTION) @@ -2980,8 +3057,9 @@ public abstract class BaseTest { .tdbid(DATABASE_1_ID) .queueName(TABLE_3_QUEUE_NAME) .routingKey(TABLE_3_ROUTING_KEY) - .columns(List.of()) - .creator(USER_1) + .columns(List.of() /* for jpa */) + .constraints(TABLE_3_CONSTRAINTS) + .creator(null /* for jpa */) .created(TABLE_3_CREATED) .lastModified(TABLE_3_LAST_MODIFIED) .build(); @@ -3300,22 +3378,6 @@ public abstract class BaseTest { .creator(USER_1) .build(); - public final static Table TABLE_4_NOCOLS = Table.builder() - .id(TABLE_4_ID) - .created(Instant.now()) - .internalName(TABLE_4_INTERNALNAME) - .description(TABLE_4_DESCRIPTION) - .name(TABLE_4_NAME) - .lastModified(TABLE_4_LAST_MODIFIED) - .tdbid(DATABASE_1_ID) - .queueName(TABLE_4_QUEUE_NAME) - .routingKey(TABLE_4_ROUTING_KEY) - .columns(List.of()) - .creator(USER_1) - .created(TABLE_4_CREATED) - .lastModified(TABLE_4_LAST_MODIFIED) - .build(); - public final static List<ForeignKeyCreateDto> TABLE_4_FOREIGN_KEYS_INVALID_CREATE = List.of(ForeignKeyCreateDto.builder() .columns(List.of("somecolumn")) .referencedTable("sometable") diff --git a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/endpoint/StoreEndpointUnitTest.java b/dbrepo-query-service/rest-service/src/test/java/at/tuwien/endpoint/StoreEndpointUnitTest.java index 2a7a024b703bd373e85b4eec648c198b9500b9f3..de175df7097f2db03ee8c965bd5e6ec267ad0aea 100644 --- a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/endpoint/StoreEndpointUnitTest.java +++ b/dbrepo-query-service/rest-service/src/test/java/at/tuwien/endpoint/StoreEndpointUnitTest.java @@ -10,14 +10,12 @@ import at.tuwien.entities.database.DatabaseAccess; import at.tuwien.entities.user.User; import at.tuwien.exception.*; import at.tuwien.gateway.BrokerServiceGateway; -import at.tuwien.listener.MessageQueueListener; import at.tuwien.listener.impl.RabbitMqListenerImpl; import at.tuwien.querystore.Query; import at.tuwien.repository.jpa.IdentifierRepository; import at.tuwien.service.AccessService; import at.tuwien.service.DatabaseService; import at.tuwien.service.QueryService; -import at.tuwien.service.UserService; import at.tuwien.service.impl.StoreServiceImpl; import com.rabbitmq.client.Channel; import lombok.extern.log4j.Log4j2; @@ -34,6 +32,7 @@ import org.springframework.test.context.junit.jupiter.SpringExtension; import java.security.Principal; import java.util.List; +import java.util.UUID; import static org.junit.jupiter.api.Assertions.*; import static org.mockito.Mockito.doReturn; @@ -70,9 +69,6 @@ public class StoreEndpointUnitTest extends BaseUnitTest { @MockBean private StoreServiceImpl storeService; - @MockBean - private UserService userService; - @MockBean private IdentifierRepository identifierRepository; @@ -309,13 +305,6 @@ public class StoreEndpointUnitTest extends BaseUnitTest { /* mock */ doReturn(List.of(QUERY_1)).when(storeService) .findAll(containerId, databaseId, true, principal); - if (user != null) { - when(userService.findAll()) - .thenReturn(List.of(user)); - } else { - when(userService.findAll()) - .thenReturn(List.of()); - } when(databaseService.find(containerId, databaseId)) .thenReturn(database); @@ -330,7 +319,7 @@ public class StoreEndpointUnitTest extends BaseUnitTest { } protected QueryDto find_generic(Long containerId, Long databaseId, Database database, Long queryId, Query query, - String userId, User user, Principal principal) throws QueryStoreException, + UUID userId, User user, Principal principal) throws QueryStoreException, QueryNotFoundException, DatabaseNotFoundException, ImageNotSupportedException, UserNotFoundException, NotAllowedException, DatabaseConnectionException { @@ -342,13 +331,6 @@ public class StoreEndpointUnitTest extends BaseUnitTest { when(storeService.findOne(containerId, databaseId, queryId, principal)) .thenThrow(QueryNotFoundException.class); } - if (user != null) { - when(userService.find(userId)) - .thenReturn(user); - } else { - when(userService.find(userId)) - .thenThrow(UserNotFoundException.class); - } if (database != null) { when(databaseService.find(containerId, databaseId)) .thenReturn(database); diff --git a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/listener/RabbitMqListenerIntegrationTest.java b/dbrepo-query-service/rest-service/src/test/java/at/tuwien/listener/RabbitMqListenerIntegrationTest.java index 84b278ad273abe5180df23c724829b0da2da14c3..09cd52fefd2a52652503e33273843d7e22822dd1 100644 --- a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/listener/RabbitMqListenerIntegrationTest.java +++ b/dbrepo-query-service/rest-service/src/test/java/at/tuwien/listener/RabbitMqListenerIntegrationTest.java @@ -47,6 +47,12 @@ public class RabbitMqListenerIntegrationTest extends BaseUnitTest { @Autowired private ContainerRepository containerRepository; + @Autowired + private RealmRepository realmRepository; + + @Autowired + private UserRepository userRepository; + @Autowired private DatabaseRepository databaseRepository; @@ -85,14 +91,14 @@ public class RabbitMqListenerIntegrationTest extends BaseUnitTest { public void beforeEach() { /* metadata database */ h2Utils.runScript("schema.sql"); - imageRepository.save(IMAGE_1); - containerRepository.save(CONTAINER_1); - DATABASE_1.setTables(List.of()); - databaseRepository.save(DATABASE_1); - DATABASE_1.setTables(List.of(TABLE_1, TABLE_2, TABLE_3)); - tableRepository.save(TABLE_1_NOCOLS); - tableRepository.save(TABLE_2_NOCOLS); - tableRepository.save(TABLE_3_NOCOLS); + imageRepository.save(IMAGE_1_SIMPLE); + realmRepository.save(REALM_DBREPO); + userRepository.save(USER_1_SIMPLE); + containerRepository.save(CONTAINER_1_SIMPLE); + databaseRepository.save(DATABASE_1_SIMPLE); + tableRepository.save(TABLE_1_SIMPLE); + tableRepository.save(TABLE_2_SIMPLE); + tableRepository.save(TABLE_3_SIMPLE); } @Test diff --git a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationReadTest.java b/dbrepo-query-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationReadTest.java index ed559e44234a96407aaab186b5e41735fff52fa8..9eaa311b103932e1163d278189873063f0856084 100644 --- a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationReadTest.java +++ b/dbrepo-query-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationReadTest.java @@ -8,10 +8,7 @@ import at.tuwien.config.ReadyConfig; import at.tuwien.exception.*; import at.tuwien.gateway.BrokerServiceGateway; import at.tuwien.listener.impl.RabbitMqListenerImpl; -import at.tuwien.repository.jpa.ContainerRepository; -import at.tuwien.repository.jpa.DatabaseRepository; -import at.tuwien.repository.jpa.ImageRepository; -import at.tuwien.repository.jpa.TableRepository; +import at.tuwien.repository.jpa.*; import com.rabbitmq.client.Channel; import at.tuwien.config.DockerConfig; import lombok.extern.log4j.Log4j2; @@ -65,6 +62,12 @@ public class TableServiceIntegrationReadTest extends BaseUnitTest { @Autowired private ContainerRepository containerRepository; + @Autowired + private RealmRepository realmRepository; + + @Autowired + private UserRepository userRepository; + @Autowired private DatabaseRepository databaseRepository; @@ -97,15 +100,16 @@ public class TableServiceIntegrationReadTest extends BaseUnitTest { /* metadata db */ h2Utils.runScript("schema.sql"); /* metadata db */ - imageRepository.save(IMAGE_1); - containerRepository.save(CONTAINER_1); - tableRepository.save(TABLE_1_NOCOLS); - tableRepository.save(TABLE_2_NOCOLS); - tableRepository.save(TABLE_3_NOCOLS); - tableRepository.save(TABLE_7_NOCOLS); - DATABASE_1.setTables(List.of()); - DATABASE_1.setViews(List.of()); - databaseRepository.save(DATABASE_1); + imageRepository.save(IMAGE_1_SIMPLE); + realmRepository.save(REALM_DBREPO); + userRepository.save(USER_1_SIMPLE); + userRepository.save(USER_2_SIMPLE); + containerRepository.save(CONTAINER_1_SIMPLE); + databaseRepository.save(DATABASE_1_SIMPLE); + tableRepository.save(TABLE_1_SIMPLE); + tableRepository.save(TABLE_2_SIMPLE); + tableRepository.save(TABLE_3_SIMPLE); + tableRepository.save(TABLE_7_SIMPLE); } @Test diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/mapper/UserMapper.java b/dbrepo-query-service/services/src/main/java/at/tuwien/mapper/UserMapper.java index 4352af3a5974a8cc2d7b28641c64dbfb227371a4..cf803c0f1355dca095ea010e376b079c1b1b891a 100644 --- a/dbrepo-query-service/services/src/main/java/at/tuwien/mapper/UserMapper.java +++ b/dbrepo-query-service/services/src/main/java/at/tuwien/mapper/UserMapper.java @@ -1,10 +1,13 @@ package at.tuwien.mapper; import at.tuwien.api.user.GrantedAuthorityDto; +import at.tuwien.api.user.UserBriefDto; import at.tuwien.api.user.UserDetailsDto; import at.tuwien.api.user.UserDto; import at.tuwien.entities.user.User; import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.Mappings; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; @@ -13,7 +16,11 @@ public interface UserMapper { org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(UserMapper.class); - UserDetailsDto userDtoToUserDetailsDto(UserDto data); + /* keep */ + @Mappings({ + @Mapping(target = "id", expression = "java(data.getId().toString())") + }) + UserDetailsDto userBriefDtoToUserDetailsDto(UserBriefDto data); UserDto userToUserDto(User data); diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/mapper/ViewMapper.java b/dbrepo-query-service/services/src/main/java/at/tuwien/mapper/ViewMapper.java index 04234f583fe89abaa5556f60495fadf3287f60f9..91fb6bc00c8e31c9d535d80ecb7df576f9d1045d 100644 --- a/dbrepo-query-service/services/src/main/java/at/tuwien/mapper/ViewMapper.java +++ b/dbrepo-query-service/services/src/main/java/at/tuwien/mapper/ViewMapper.java @@ -3,30 +3,19 @@ package at.tuwien.mapper; import at.tuwien.api.database.ViewBriefDto; import at.tuwien.api.database.ViewCreateDto; import at.tuwien.api.database.ViewDto; -import at.tuwien.api.database.query.QueryResultDto; import at.tuwien.entities.database.View; import at.tuwien.exception.QueryMalformedException; -import at.tuwien.exception.QueryStoreException; -import at.tuwien.exception.TableMalformedException; -import at.tuwien.querystore.Query; -import org.apache.commons.codec.digest.DigestUtils; import org.mapstruct.Mapper; import org.mapstruct.Mapping; import org.mapstruct.Mappings; import org.mapstruct.Named; -import org.springframework.data.annotation.CreatedDate; -import org.springframework.data.annotation.LastModifiedDate; -import javax.persistence.Column; import java.sql.*; import java.text.Normalizer; -import java.time.Instant; -import java.util.LinkedList; -import java.util.List; import java.util.Locale; import java.util.regex.Pattern; -@Mapper(componentModel = "spring", uses = {ContainerMapper.class}) +@Mapper(componentModel = "spring", uses = {ContainerMapper.class, UserMapper.class}) public interface ViewMapper { org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(ViewMapper.class); @@ -52,7 +41,7 @@ public interface ViewMapper { ViewDto viewToViewDto(View data); @Mappings({ - @Mapping(target = "createdBy", source = "creator.id") + @Mapping(target = "createdBy", expression = "java(data.getCreator().getId().toString())") }) ViewBriefDto viewToViewBriefDto(View data); diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/repository/jpa/RealmRepository.java b/dbrepo-query-service/services/src/main/java/at/tuwien/repository/jpa/RealmRepository.java new file mode 100644 index 0000000000000000000000000000000000000000..c1a5d756b7af9d163766f3a9fae3c31cf157a77c --- /dev/null +++ b/dbrepo-query-service/services/src/main/java/at/tuwien/repository/jpa/RealmRepository.java @@ -0,0 +1,14 @@ +package at.tuwien.repository.jpa; + +import at.tuwien.entities.user.Realm; +import at.tuwien.entities.user.User; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.Optional; +import java.util.UUID; + +@Repository +public interface RealmRepository extends JpaRepository<Realm, UUID> { + +} diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/repository/jpa/UserRepository.java b/dbrepo-query-service/services/src/main/java/at/tuwien/repository/jpa/UserRepository.java index e77de8f6a8160d1f2e04a0ce7575b1ee3d833a0a..9eb0b5190252b7e1890deb7717fe9b2afc133d41 100644 --- a/dbrepo-query-service/services/src/main/java/at/tuwien/repository/jpa/UserRepository.java +++ b/dbrepo-query-service/services/src/main/java/at/tuwien/repository/jpa/UserRepository.java @@ -5,9 +5,10 @@ import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; import java.util.Optional; +import java.util.UUID; @Repository -public interface UserRepository extends JpaRepository<User, String> { +public interface UserRepository extends JpaRepository<User, UUID> { Optional<User> findByUsername(String username); diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/service/UserService.java b/dbrepo-query-service/services/src/main/java/at/tuwien/service/UserService.java index 830efcaf6b54b8420149aa4fa5aeb0db758de4e0..a96834b6483e46adfd0a3ecae2830ea0b35abe6b 100644 --- a/dbrepo-query-service/services/src/main/java/at/tuwien/service/UserService.java +++ b/dbrepo-query-service/services/src/main/java/at/tuwien/service/UserService.java @@ -6,6 +6,7 @@ import at.tuwien.exception.UserNotFoundException; import java.security.Principal; import java.util.List; +import java.util.UUID; public interface UserService { @@ -24,23 +25,4 @@ public interface UserService { * @throws UserNotFoundException The user was not found in the metadata database. */ User findByUsername(String username) throws UserNotFoundException; - - /** - * Finds a user by user principal or uses the anonymous user - * - * @param principal The user principal. - * @param container The container which is used to detetermine the image's default anonymous user - * @return A user, if successful. - * @throws UserNotFoundException No user was found. - */ - User findByPrincipalOrAnonymous(Principal principal, Container container) throws UserNotFoundException; - - /** - * Finds a user by id. - * - * @param id The id. - * @return The user. - * @throws UserNotFoundException The user was not found in the metadata database. - */ - User find(String id) throws UserNotFoundException; } diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java b/dbrepo-query-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java index 89a95b367828f166b0d9c0bde5fa224314a091db..d3c8b1659624e6b4e2df7a5c4bbbfa5f6c3f59e9 100644 --- a/dbrepo-query-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java +++ b/dbrepo-query-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java @@ -1,8 +1,5 @@ package at.tuwien.service.impl; -import at.tuwien.entities.container.Container; -import at.tuwien.entities.container.image.ContainerImageEnvironmentItem; -import at.tuwien.entities.container.image.ContainerImageEnvironmentItemType; import at.tuwien.entities.user.User; import at.tuwien.exception.UserNotFoundException; import at.tuwien.repository.jpa.UserRepository; @@ -10,12 +7,9 @@ import at.tuwien.service.UserService; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; -import java.security.Principal; import java.util.List; import java.util.Optional; -import java.util.stream.Collectors; @Log4j2 @Service @@ -43,43 +37,4 @@ public class UserServiceImpl implements UserService { return optional.get(); } - @Override - @Transactional(readOnly = true) - public User findByPrincipalOrAnonymous(Principal principal, Container container) throws UserNotFoundException { - log.trace("find user or anonymous, principal={}, container={}", principal, container); - if (principal == null) { - final String username = container.getImage() - .getEnvironment() - .stream() - .filter(e -> e.getType().equals(ContainerImageEnvironmentItemType.PRIVILEGED_USERNAME)) - .map(ContainerImageEnvironmentItem::getValue) - .collect(Collectors.toList()) - .get(0); - final String password = container.getImage() - .getEnvironment() - .stream() - .filter(e -> e.getType().equals(ContainerImageEnvironmentItemType.PRIVILEGED_PASSWORD)) - .map(ContainerImageEnvironmentItem::getValue) - .collect(Collectors.toList()) - .get(0); - final User user = User.builder() - .username(username) - .databasePassword(password) - .build(); - log.trace("mapped anonymous user {}", user); - return user; - } - return findByUsername(principal.getName()); - } - - @Override - public User find(String id) throws UserNotFoundException { - final Optional<User> optional = userRepository.findById(id); - if (optional.isEmpty()) { - log.error("Failed to retrieve user with id {}", id); - throw new UserNotFoundException("Failed to retrieve user"); - } - return optional.get(); - } - } diff --git a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/endpoint/TableEndpointUnitTest.java b/dbrepo-table-service/rest-service/src/test/java/at/tuwien/endpoint/TableEndpointUnitTest.java index 9b4db6f4f0b5cad39d7d9eb2b38c8cdd2f1d19bf..04daf45d0bfd517513bcf1e066307bdcf7a74fb7 100644 --- a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/endpoint/TableEndpointUnitTest.java +++ b/dbrepo-table-service/rest-service/src/test/java/at/tuwien/endpoint/TableEndpointUnitTest.java @@ -7,10 +7,10 @@ import at.tuwien.endpoints.TableEndpoint; import at.tuwien.exception.DatabaseNotFoundException; import at.tuwien.repository.elastic.TableColumnIdxRepository; import at.tuwien.repository.elastic.TableIdxRepository; +import at.tuwien.repository.jpa.*; import at.tuwien.service.DatabaseService; import com.rabbitmq.client.Channel; -import org.apache.http.auth.BasicUserPrincipal; -import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; @@ -18,9 +18,6 @@ import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.test.context.junit.jupiter.SpringExtension; -import javax.ws.rs.NotAllowedException; -import java.security.Principal; - import static org.junit.jupiter.api.Assertions.*; import static org.mockito.Mockito.*; @@ -28,54 +25,51 @@ import static org.mockito.Mockito.*; @SpringBootTest public class TableEndpointUnitTest extends BaseUnitTest { - /** - * RabbitMQ not required in this test - */ @MockBean private ReadyConfig readyConfig; - /** - * RabbitMQ not required in this test - */ @MockBean private Channel channel; - /** - * ElasticSearch not required in this test - */ @MockBean private IndexConfig indexInitializer; - /** - * ElasticSearch not required in this test - */ @MockBean private TableIdxRepository tableidxRepository; - /** - * ElasticSearch not required in this test - */ @MockBean private TableColumnIdxRepository tableColumnidxRepository; - @MockBean - private DatabaseService databaseService; + @Autowired + private ContainerRepository containerRepository; + + @Autowired + private ImageRepository imageRepository; + + @Autowired + private UserRepository userRepository; + + @Autowired + private RealmRepository realmRepository; @Autowired private TableEndpoint tableEndpoint; - @Test - @Disabled - public void list_databaseNotFound_fails() throws DatabaseNotFoundException { - final Principal principal = new BasicUserPrincipal(USER_1_USERNAME); + @BeforeEach + public void beforeEach() { + /* metadata database */ + imageRepository.save(IMAGE_1_SIMPLE); + realmRepository.save(REALM_DBREPO); + userRepository.save(USER_1_SIMPLE); + containerRepository.save(CONTAINER_1_SIMPLE); + } - /* mock */ - when(databaseService.find(CONTAINER_1_ID, DATABASE_1_ID)) - .thenThrow(DatabaseNotFoundException.class); + @Test + public void list_databaseNotFound_fails() { /* test */ - assertThrows(NotAllowedException.class, () -> { - tableEndpoint.list(CONTAINER_1_ID, DATABASE_1_ID, principal); + assertThrows(DatabaseNotFoundException.class, () -> { + tableEndpoint.list(CONTAINER_1_ID, DATABASE_1_ID, USER_1_PRINCIPAL); }); } } diff --git a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/service/MessageQueueServiceIntegrationTest.java b/dbrepo-table-service/rest-service/src/test/java/at/tuwien/service/MessageQueueServiceIntegrationTest.java index c5face43b7d3de010b2d56583f27ae623168e86e..d808459c0808115294b21d7d5c3eb3503254833d 100644 --- a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/service/MessageQueueServiceIntegrationTest.java +++ b/dbrepo-table-service/rest-service/src/test/java/at/tuwien/service/MessageQueueServiceIntegrationTest.java @@ -72,13 +72,7 @@ public class MessageQueueServiceIntegrationTest extends BaseUnitTest { public static void afterAll() { /* stop containers and remove them */ DockerConfig.removeAllContainers(); - DockerConfig.createAllNetworks(); - } - - @BeforeEach - public void beforeEach() { - TABLE_1.setDatabase(DATABASE_1); - TABLE_2.setDatabase(DATABASE_1); + DockerConfig.removeAllNetworks(); } @Test diff --git a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationReadTest.java b/dbrepo-table-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationReadTest.java index 5e7bebc7f62f31696691f01a4fec28d1c40a36ca..0d529abc1c2e72ae8b4a3bcdc33379a0a981b8a3 100644 --- a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationReadTest.java +++ b/dbrepo-table-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationReadTest.java @@ -9,10 +9,7 @@ import at.tuwien.entities.database.table.Table; import at.tuwien.exception.*; import at.tuwien.repository.elastic.TableColumnIdxRepository; import at.tuwien.repository.elastic.TableIdxRepository; -import at.tuwien.repository.jpa.ContainerRepository; -import at.tuwien.repository.jpa.DatabaseRepository; -import at.tuwien.repository.jpa.ImageRepository; -import at.tuwien.repository.jpa.TableRepository; +import at.tuwien.repository.jpa.*; import com.rabbitmq.client.Channel; import lombok.extern.log4j.Log4j2; import org.junit.jupiter.api.*; @@ -50,9 +47,15 @@ public class TableServiceIntegrationReadTest extends BaseUnitTest { @MockBean private TableColumnIdxRepository tableColumnidxRepository; + @Autowired + private RealmRepository realmRepository; + @Autowired private ImageRepository imageRepository; + @Autowired + private UserRepository userRepository; + @Autowired private ContainerRepository containerRepository; @@ -88,11 +91,14 @@ public class TableServiceIntegrationReadTest extends BaseUnitTest { public void beforeEach() { h2Utils.runScript("schema.sql"); imageRepository.save(IMAGE_1); - containerRepository.save(CONTAINER_1); - containerRepository.save(CONTAINER_2); - databaseRepository.save(DATABASE_1) /* will have 2 tables */; - tableRepository.save(TABLE_1); - tableRepository.save(TABLE_2); + realmRepository.save(REALM_DBREPO); + userRepository.save(USER_1_SIMPLE); + userRepository.save(USER_2_SIMPLE); + containerRepository.save(CONTAINER_1_SIMPLE); + containerRepository.save(CONTAINER_2_SIMPLE); + databaseRepository.save(DATABASE_1_SIMPLE); + tableRepository.save(TABLE_1_SIMPLE); + tableRepository.save(TABLE_2_SIMPLE); } @Test @@ -128,7 +134,7 @@ public class TableServiceIntegrationReadTest extends BaseUnitTest { /* test */ assertThrows(TableNotFoundException.class, () -> { - tableService.findById(CONTAINER_1_ID, DATABASE_1_ID, TABLE_3_ID); + tableService.findById(CONTAINER_1_ID, DATABASE_1_ID, 99999L); }); } @@ -137,7 +143,7 @@ public class TableServiceIntegrationReadTest extends BaseUnitTest { /* test */ assertThrows(DatabaseNotFoundException.class, () -> { - tableService.findById(CONTAINER_2_ID, DATABASE_3_ID, TABLE_3_ID); + tableService.findById(CONTAINER_2_ID, 99999L, TABLE_3_ID); }); } @@ -146,7 +152,7 @@ public class TableServiceIntegrationReadTest extends BaseUnitTest { /* test */ assertThrows(ContainerNotFoundException.class, () -> { - tableService.findById(CONTAINER_3_ID, DATABASE_3_ID, TABLE_3_ID); + tableService.findById(99999L, DATABASE_3_ID, TABLE_3_ID); }); } diff --git a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationWriteTest.java b/dbrepo-table-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationWriteTest.java index 670b3301b3b20711a92ccf5af892d757db4bce98..f6dabd2250294716a70520a37b2ff77f02485082 100644 --- a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationWriteTest.java +++ b/dbrepo-table-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationWriteTest.java @@ -10,10 +10,7 @@ import at.tuwien.config.ReadyConfig; import at.tuwien.exception.*; import at.tuwien.repository.elastic.TableColumnIdxRepository; import at.tuwien.repository.elastic.TableIdxRepository; -import at.tuwien.repository.jpa.ContainerRepository; -import at.tuwien.repository.jpa.DatabaseRepository; -import at.tuwien.repository.jpa.ImageRepository; -import at.tuwien.repository.jpa.TableRepository; +import at.tuwien.repository.jpa.*; import com.rabbitmq.client.Channel; import lombok.extern.log4j.Log4j2; import org.apache.http.auth.BasicUserPrincipal; @@ -72,6 +69,12 @@ public class TableServiceIntegrationWriteTest extends BaseUnitTest { @Autowired private TableService tableService; + @Autowired + private UserRepository userRepository; + + @Autowired + private RealmRepository realmRepository; + @Autowired private H2Utils h2Utils; @@ -88,11 +91,14 @@ public class TableServiceIntegrationWriteTest extends BaseUnitTest { /* metadata database */ h2Utils.runScript("schema.sql"); imageRepository.save(IMAGE_1); - containerRepository.save(CONTAINER_1); - containerRepository.save(CONTAINER_2); - databaseRepository.save(DATABASE_1) /* will have 2 tables */; - tableRepository.save(TABLE_1); - tableRepository.save(TABLE_2); + realmRepository.save(REALM_DBREPO); + userRepository.save(USER_1_SIMPLE); + userRepository.save(USER_2_SIMPLE); + containerRepository.save(CONTAINER_1_SIMPLE); + containerRepository.save(CONTAINER_2_SIMPLE); + databaseRepository.save(DATABASE_1_SIMPLE); + tableRepository.save(TABLE_1_SIMPLE); + tableRepository.save(TABLE_2_SIMPLE); } @AfterEach @@ -105,7 +111,6 @@ public class TableServiceIntegrationWriteTest extends BaseUnitTest { public void create_succeeds() throws UserNotFoundException, TableMalformedException, QueryMalformedException, DatabaseNotFoundException, ImageNotSupportedException, TableNameExistsException, ContainerNotFoundException { - final Principal principal = new BasicUserPrincipal(USER_1_USERNAME); /* mock */ when(tableidxRepository.save(any(TableDto.class))) @@ -114,7 +119,7 @@ public class TableServiceIntegrationWriteTest extends BaseUnitTest { .thenReturn(List.of()); /* test */ - tableService.createTable(CONTAINER_1_ID, DATABASE_1_ID, TABLE_3_CREATE_DTO, principal); + tableService.createTable(CONTAINER_1_ID, DATABASE_1_ID, TABLE_3_CREATE_DTO, USER_1_PRINCIPAL); } @Test @@ -142,7 +147,6 @@ public class TableServiceIntegrationWriteTest extends BaseUnitTest { public void create_withConstraints_succeeds() throws UserNotFoundException, TableMalformedException, QueryMalformedException, DatabaseNotFoundException, ImageNotSupportedException, TableNameExistsException, ContainerNotFoundException { - final Principal principal = new BasicUserPrincipal(USER_1_USERNAME); /* mock */ when(tableidxRepository.save(any(TableDto.class))) @@ -151,23 +155,16 @@ public class TableServiceIntegrationWriteTest extends BaseUnitTest { .thenReturn(List.of()); /* test */ - tableService.createTable(CONTAINER_1_ID, DATABASE_1_ID, TABLE_4_CREATE_DTO, principal); // table to reference - tableService.createTable(CONTAINER_1_ID, DATABASE_1_ID, TABLE_5_CREATE_DTO, principal); + tableService.createTable(CONTAINER_1_ID, DATABASE_1_ID, TABLE_4_CREATE_DTO, USER_1_PRINCIPAL); // table to reference + tableService.createTable(CONTAINER_1_ID, DATABASE_1_ID, TABLE_5_CREATE_DTO, USER_1_PRINCIPAL); } @Test public void create_withForeignKeyButWithoutReferencingTable_fails() { - final Principal principal = new BasicUserPrincipal(USER_1_USERNAME); - - /* mock */ - when(tableidxRepository.save(any(TableDto.class))) - .thenReturn(null); - when(tableColumnidxRepository.saveAll(anyList())) - .thenReturn(List.of()); /* test */ assertThrows(TableMalformedException.class, () -> { - tableService.createTable(CONTAINER_1_ID, DATABASE_1_ID, TABLE_5_CREATE_DTO, principal); + tableService.createTable(CONTAINER_1_ID, DATABASE_1_ID, TABLE_5_CREATE_DTO, USER_1_PRINCIPAL); }); } diff --git a/dbrepo-table-service/rest-service/src/test/resources/application.properties b/dbrepo-table-service/rest-service/src/test/resources/application.properties index eb36bd3f1dbfd4c1c7542fe3ff08c2959f564f3b..41b07348e3e6e770e028deace6feaf5f801b0a25 100644 --- a/dbrepo-table-service/rest-service/src/test/resources/application.properties +++ b/dbrepo-table-service/rest-service/src/test/resources/application.properties @@ -17,6 +17,9 @@ spring.jpa.database-platform=org.hibernate.dialect.H2Dialect spring.jpa.hibernate.ddl-auto=create-drop spring.jpa.show-sql=false +# log +logging.level.org.hibernate.SQL=trace + # broker service spring.rabbitmq.host=dbrepo-broker-service spring.rabbitmq.username=guest diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/mapper/UserMapper.java b/dbrepo-table-service/services/src/main/java/at/tuwien/mapper/UserMapper.java index e4fe5c286258089991df210c7099437c2670765b..b57185b5c5499b4a7d61a520e0d2f3875183ddf6 100644 --- a/dbrepo-table-service/services/src/main/java/at/tuwien/mapper/UserMapper.java +++ b/dbrepo-table-service/services/src/main/java/at/tuwien/mapper/UserMapper.java @@ -8,15 +8,23 @@ import at.tuwien.api.user.UserDto; import at.tuwien.entities.user.User; import at.tuwien.entities.user.UserAttribute; import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.Mappings; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; +import java.util.UUID; + @Mapper(componentModel = "spring") public interface UserMapper { org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(UserMapper.class); + /* keep */ + @Mappings({ + @Mapping(target = "id", expression = "java(data.getId().toString())") + }) UserDetailsDto userDtoToUserDetailsDto(UserDto data); UserDto userToUserDto(User data); @@ -31,7 +39,7 @@ public interface UserMapper { return authority; } - default UserAttribute tripleToUserAttribute(String userId, String name, String value) { + default UserAttribute tripleToUserAttribute(UUID userId, String name, String value) { return UserAttribute.builder() .userId(userId) .name(name) diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/jpa/RealmRepository.java b/dbrepo-table-service/services/src/main/java/at/tuwien/repository/jpa/RealmRepository.java new file mode 100644 index 0000000000000000000000000000000000000000..5b5855dec88d3e3ef8d032369a7d6af6956a702e --- /dev/null +++ b/dbrepo-table-service/services/src/main/java/at/tuwien/repository/jpa/RealmRepository.java @@ -0,0 +1,12 @@ +package at.tuwien.repository.jpa; + +import at.tuwien.entities.user.Realm; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.UUID; + +@Repository +public interface RealmRepository extends JpaRepository<Realm, UUID> { + +} diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/jpa/UserRepository.java b/dbrepo-table-service/services/src/main/java/at/tuwien/repository/jpa/UserRepository.java index 3772a12f59a6e9a9225612d34a0bf7b4a50fcd4e..9eb0b5190252b7e1890deb7717fe9b2afc133d41 100644 --- a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/jpa/UserRepository.java +++ b/dbrepo-table-service/services/src/main/java/at/tuwien/repository/jpa/UserRepository.java @@ -5,9 +5,10 @@ import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; import java.util.Optional; +import java.util.UUID; @Repository -public interface UserRepository extends JpaRepository<User, Long> { +public interface UserRepository extends JpaRepository<User, UUID> { Optional<User> findByUsername(String username); diff --git a/dbrepo-user-service/pom.xml b/dbrepo-user-service/pom.xml index 8b3b45fbf1906a8e8d0261b470e5449dbed44645..58cfe80e7ce92578f30b4aee05a0b7ab7cc56a76 100644 --- a/dbrepo-user-service/pom.xml +++ b/dbrepo-user-service/pom.xml @@ -9,9 +9,9 @@ </parent> <groupId>at.tuwien</groupId> - <artifactId>fda-user-service</artifactId> - <version>1.1.0-alpha</version> - <name>fda-user-service</name> + <artifactId>dbrepo-user-service</artifactId> + <version>1.2.0</version> + <name>dbrepo-user-service</name> <description> The query service provides an interface to insert data into the tables created by the table service. It also allows for view-only (possibly paginated and versioned) query execution to the raw data and consumes @@ -132,13 +132,13 @@ <!-- Entity, API, QueryStore --> <dependency> <groupId>at.tuwien</groupId> - <artifactId>fda-metadata-db-api</artifactId> + <artifactId>dbrepo-metadata-db-api</artifactId> <version>${project.version}</version> <scope>compile</scope> </dependency> <dependency> <groupId>at.tuwien</groupId> - <artifactId>fda-metadata-db-entites</artifactId> + <artifactId>dbrepo-metadata-db-entites</artifactId> <version>${project.version}</version> <scope>compile</scope> </dependency> diff --git a/dbrepo-user-service/report/pom.xml b/dbrepo-user-service/report/pom.xml index b93720ffeb6fb8f68ae0c891a7a83afd5dfde333..fc1e116c6a94ef847292fe2e72329c5fc0e3c8bb 100644 --- a/dbrepo-user-service/report/pom.xml +++ b/dbrepo-user-service/report/pom.xml @@ -4,14 +4,14 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> - <artifactId>fda-user-service</artifactId> + <artifactId>dbrepo-user-service</artifactId> <groupId>at.tuwien</groupId> - <version>1.1.0-alpha</version> + <version>1.2.0</version> </parent> <artifactId>report</artifactId> - <version>1.1.0-alpha</version> - <name>fda-user-service-report</name> + <version>1.2.0</version> + <name>dbrepo-user-service-report</name> <description> This module is only intended for the pipeline coverage report. See the detailed report in the respective modules diff --git a/dbrepo-user-service/rest-service/pom.xml b/dbrepo-user-service/rest-service/pom.xml index 6a53b116b31e1bb41ae9bda847e770e83bf836fa..c805699d3fddcc5295693ea8182bd42aa47977f4 100644 --- a/dbrepo-user-service/rest-service/pom.xml +++ b/dbrepo-user-service/rest-service/pom.xml @@ -4,14 +4,14 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> - <artifactId>fda-user-service</artifactId> + <artifactId>dbrepo-user-service</artifactId> <groupId>at.tuwien</groupId> - <version>1.1.0-alpha</version> + <version>1.2.0</version> </parent> <artifactId>rest-service</artifactId> - <version>1.1.0-alpha</version> - <name>fda-user-service-rest</name> + <version>1.2.0</version> + <name>dbrepo-user-service-rest</name> <dependencies> <dependency> diff --git a/dbrepo-user-service/rest-service/src/main/java/at/tuwien/endpoint/UserEndpoint.java b/dbrepo-user-service/rest-service/src/main/java/at/tuwien/endpoint/UserEndpoint.java index 5316b9e062ffae5a99c06d24bedc5c98f66599c3..9ee7a22d2d1f6edb6b9674f988fe91e98629de13 100644 --- a/dbrepo-user-service/rest-service/src/main/java/at/tuwien/endpoint/UserEndpoint.java +++ b/dbrepo-user-service/rest-service/src/main/java/at/tuwien/endpoint/UserEndpoint.java @@ -3,7 +3,7 @@ package at.tuwien.endpoint; import at.tuwien.api.auth.SignupRequestDto; import at.tuwien.api.user.*; import at.tuwien.config.AuthenticationConfig; -import at.tuwien.entities.auth.Realm; +import at.tuwien.entities.user.Realm; import at.tuwien.entities.user.Role; import at.tuwien.entities.user.User; import at.tuwien.exception.*; @@ -15,7 +15,6 @@ import io.micrometer.core.annotation.Timed; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.security.SecurityRequirement; import lombok.extern.log4j.Log4j2; -import org.elasticsearch.client.security.ChangePasswordRequest; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -27,6 +26,7 @@ import javax.validation.Valid; import javax.validation.constraints.NotNull; import java.security.Principal; import java.util.List; +import java.util.UUID; import java.util.stream.Collectors; @Log4j2 @@ -90,7 +90,7 @@ public class UserEndpoint { @NotNull Principal principal) throws UserNotFoundException { log.debug("endpoint find a user, id={}, principal={}", id, principal); - final UserDto dto = userMapper.userToUserDto(userService.find(id)); + final UserDto dto = userMapper.userToUserDto(userService.find(UUID.fromString(id))); log.trace("find user resulted in dto {}", dto); return ResponseEntity.ok() .body(dto); @@ -106,7 +106,7 @@ public class UserEndpoint { @NotNull Principal principal) throws UserNotFoundException, ForeignUserException, UserAttributeNotFoundException { log.debug("endpoint modify a user, id={}, data={}, principal={}", id, data, principal); - final UserDto dto = userMapper.userToUserDto(userService.modify(id, data, principal)); + final UserDto dto = userMapper.userToUserDto(userService.modify(UUID.fromString(id), data, principal)); log.trace("modify user resulted in dto {}", dto); return ResponseEntity.status(HttpStatus.ACCEPTED) .body(dto); @@ -122,7 +122,7 @@ public class UserEndpoint { @NotNull Principal principal) throws UserNotFoundException, ForeignUserException, UserAttributeNotFoundException { log.debug("endpoint modify a user theme, id={}, data={}, principal={}", id, data, principal); - final User user = userService.toggleTheme(id, data, principal); + final User user = userService.toggleTheme(UUID.fromString(id), data, principal); final UserDto dto = userMapper.userToUserDto(user); log.trace("modify user theme resulted in dto {}", dto); return ResponseEntity.accepted() @@ -139,7 +139,7 @@ public class UserEndpoint { @NotNull Principal principal) throws UserNotFoundException, ForeignUserException { log.debug("endpoint modify a user password, id={}, data={}, principal={}", id, data, principal); - final User user = userService.updatePassword(id, data, principal); + final User user = userService.updatePassword(UUID.fromString(id), data, principal); final UserDto dto = userMapper.userToUserDto(user); log.trace("updated user password resulted in dto {}", dto); return ResponseEntity.accepted() diff --git a/dbrepo-user-service/services/pom.xml b/dbrepo-user-service/services/pom.xml index a42439c741b47488ded1aaa259a3c362cecc87eb..ff14aaa5473b2aba218690ddf511fc05d915fc52 100644 --- a/dbrepo-user-service/services/pom.xml +++ b/dbrepo-user-service/services/pom.xml @@ -4,13 +4,13 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> - <artifactId>fda-user-service</artifactId> + <artifactId>dbrepo-user-service</artifactId> <groupId>at.tuwien</groupId> - <version>1.1.0-alpha</version> + <version>1.2.0</version> </parent> <artifactId>services</artifactId> - <version>1.1.0-alpha</version> - <name>fda-user-service-services</name> + <version>1.2.0</version> + <name>dbrepo-user-service-services</name> </project> diff --git a/dbrepo-user-service/services/src/main/java/at/tuwien/mapper/AuthenticationMapper.java b/dbrepo-user-service/services/src/main/java/at/tuwien/mapper/AuthenticationMapper.java index 8e97787ee770caeb989717581e7ba01939f8c827..9d00f7e159748aa20dcb4cbf4df067c696f18b1a 100644 --- a/dbrepo-user-service/services/src/main/java/at/tuwien/mapper/AuthenticationMapper.java +++ b/dbrepo-user-service/services/src/main/java/at/tuwien/mapper/AuthenticationMapper.java @@ -6,7 +6,7 @@ import org.springframework.http.converter.json.MappingJackson2HttpMessageConvert import java.util.Collections; -@Mapper(componentModel = "spring") +@Mapper(componentModel = "spring", uses = {UserMapper.class}) public interface AuthenticationMapper { org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(AuthenticationMapper.class); diff --git a/dbrepo-user-service/services/src/main/java/at/tuwien/mapper/UserMapper.java b/dbrepo-user-service/services/src/main/java/at/tuwien/mapper/UserMapper.java index e4fe5c286258089991df210c7099437c2670765b..9156ecd0c3c13e4628508541f67efefe312065b2 100644 --- a/dbrepo-user-service/services/src/main/java/at/tuwien/mapper/UserMapper.java +++ b/dbrepo-user-service/services/src/main/java/at/tuwien/mapper/UserMapper.java @@ -8,16 +8,24 @@ import at.tuwien.api.user.UserDto; import at.tuwien.entities.user.User; import at.tuwien.entities.user.UserAttribute; import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.Mappings; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; +import java.util.UUID; + @Mapper(componentModel = "spring") public interface UserMapper { org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(UserMapper.class); - UserDetailsDto userDtoToUserDetailsDto(UserDto data); + /* keep */ + @Mappings({ + @Mapping(target = "id", expression = "java(data.getId().toString())") + }) + UserDetailsDto userBriefDtoToUserDetailsDto(UserBriefDto data); UserDto userToUserDto(User data); @@ -31,7 +39,7 @@ public interface UserMapper { return authority; } - default UserAttribute tripleToUserAttribute(String userId, String name, String value) { + default UserAttribute tripleToUserAttribute(UUID userId, String name, String value) { return UserAttribute.builder() .userId(userId) .name(name) diff --git a/dbrepo-user-service/services/src/main/java/at/tuwien/repository/jpa/CredentialRepository.java b/dbrepo-user-service/services/src/main/java/at/tuwien/repository/jpa/CredentialRepository.java index eb43a5af74d5863735c9f532351a4f40bb6f35aa..d204a19345e7d27eec347ad8ea9b9a98ab997b1f 100644 --- a/dbrepo-user-service/services/src/main/java/at/tuwien/repository/jpa/CredentialRepository.java +++ b/dbrepo-user-service/services/src/main/java/at/tuwien/repository/jpa/CredentialRepository.java @@ -4,7 +4,9 @@ import at.tuwien.entities.user.Credential; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; +import java.util.UUID; + @Repository -public interface CredentialRepository extends JpaRepository<Credential, String> { +public interface CredentialRepository extends JpaRepository<Credential, UUID> { } diff --git a/dbrepo-user-service/services/src/main/java/at/tuwien/repository/jpa/RealmRepository.java b/dbrepo-user-service/services/src/main/java/at/tuwien/repository/jpa/RealmRepository.java index db0443c0a78c3c8c2d653edf15901c9a3f2e4686..aabd612289f0130745444ceafe3f8fc67bd0bfd0 100644 --- a/dbrepo-user-service/services/src/main/java/at/tuwien/repository/jpa/RealmRepository.java +++ b/dbrepo-user-service/services/src/main/java/at/tuwien/repository/jpa/RealmRepository.java @@ -1,13 +1,14 @@ package at.tuwien.repository.jpa; -import at.tuwien.entities.auth.Realm; +import at.tuwien.entities.user.Realm; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; import java.util.Optional; +import java.util.UUID; @Repository -public interface RealmRepository extends JpaRepository<Realm, String> { +public interface RealmRepository extends JpaRepository<Realm, UUID> { Optional<Realm> findByName(String name); diff --git a/dbrepo-user-service/services/src/main/java/at/tuwien/repository/jpa/RoleMappingRepository.java b/dbrepo-user-service/services/src/main/java/at/tuwien/repository/jpa/RoleMappingRepository.java index fd7261d3a85245155a6254fee75223a5c4d97bff..8669937f1d599162999a44dc28d5d8f9fdf73f04 100644 --- a/dbrepo-user-service/services/src/main/java/at/tuwien/repository/jpa/RoleMappingRepository.java +++ b/dbrepo-user-service/services/src/main/java/at/tuwien/repository/jpa/RoleMappingRepository.java @@ -4,6 +4,8 @@ import at.tuwien.entities.user.RoleMapping; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; +import java.util.UUID; + @Repository -public interface RoleMappingRepository extends JpaRepository<RoleMapping, String> { +public interface RoleMappingRepository extends JpaRepository<RoleMapping, UUID> { } diff --git a/dbrepo-user-service/services/src/main/java/at/tuwien/repository/jpa/RoleRepository.java b/dbrepo-user-service/services/src/main/java/at/tuwien/repository/jpa/RoleRepository.java index 6efb6c207110626771b2e67234e5779a0a23e2dc..a3a4713f6864a9539344e5c413583e468863c4fe 100644 --- a/dbrepo-user-service/services/src/main/java/at/tuwien/repository/jpa/RoleRepository.java +++ b/dbrepo-user-service/services/src/main/java/at/tuwien/repository/jpa/RoleRepository.java @@ -5,9 +5,10 @@ import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; import java.util.Optional; +import java.util.UUID; @Repository -public interface RoleRepository extends JpaRepository<Role, String> { +public interface RoleRepository extends JpaRepository<Role, UUID> { Optional<Role> findByName(String name); } diff --git a/dbrepo-user-service/services/src/main/java/at/tuwien/repository/jpa/UserAttributeRepository.java b/dbrepo-user-service/services/src/main/java/at/tuwien/repository/jpa/UserAttributeRepository.java index 08077e1525c52223220c166f6a8b4abc4f08270a..e0c8531399f55fd72429eb7ead6f92e10c54fdf8 100644 --- a/dbrepo-user-service/services/src/main/java/at/tuwien/repository/jpa/UserAttributeRepository.java +++ b/dbrepo-user-service/services/src/main/java/at/tuwien/repository/jpa/UserAttributeRepository.java @@ -6,12 +6,11 @@ import org.springframework.stereotype.Repository; import java.util.List; import java.util.Optional; +import java.util.UUID; @Repository -public interface UserAttributeRepository extends JpaRepository<UserAttribute, String> { +public interface UserAttributeRepository extends JpaRepository<UserAttribute, UUID> { - List<UserAttribute> findByUser(String userId); - - Optional<UserAttribute> findByUserIdAndName(String userId, String name); + Optional<UserAttribute> findByUserIdAndName(UUID userId, String name); } diff --git a/dbrepo-user-service/services/src/main/java/at/tuwien/repository/jpa/UserRepository.java b/dbrepo-user-service/services/src/main/java/at/tuwien/repository/jpa/UserRepository.java index 289a4abae21670ed954124a9a5f8b9d951685906..48e7ab240f644a583d2bdbb9a54b8322a500b804 100644 --- a/dbrepo-user-service/services/src/main/java/at/tuwien/repository/jpa/UserRepository.java +++ b/dbrepo-user-service/services/src/main/java/at/tuwien/repository/jpa/UserRepository.java @@ -5,9 +5,10 @@ import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; import java.util.Optional; +import java.util.UUID; @Repository -public interface UserRepository extends JpaRepository<User, String> { +public interface UserRepository extends JpaRepository<User, UUID> { Optional<User> findByUsername(String username); diff --git a/dbrepo-user-service/services/src/main/java/at/tuwien/service/RealmService.java b/dbrepo-user-service/services/src/main/java/at/tuwien/service/RealmService.java index 768b437a715f78830e3b1a8182cbc90a4a514614..6c93de60862f459c1ca80db0f7493babf36a8531 100644 --- a/dbrepo-user-service/services/src/main/java/at/tuwien/service/RealmService.java +++ b/dbrepo-user-service/services/src/main/java/at/tuwien/service/RealmService.java @@ -1,6 +1,6 @@ package at.tuwien.service; -import at.tuwien.entities.auth.Realm; +import at.tuwien.entities.user.Realm; import at.tuwien.exception.RealmNotFoundException; public interface RealmService { diff --git a/dbrepo-user-service/services/src/main/java/at/tuwien/service/UserAttributeService.java b/dbrepo-user-service/services/src/main/java/at/tuwien/service/UserAttributeService.java index e3471adb395d5c3a56fc8775c977340b48fecb69..d8af9940ad232d4f7160362b0efa703146dffd0e 100644 --- a/dbrepo-user-service/services/src/main/java/at/tuwien/service/UserAttributeService.java +++ b/dbrepo-user-service/services/src/main/java/at/tuwien/service/UserAttributeService.java @@ -3,14 +3,13 @@ package at.tuwien.service; import at.tuwien.entities.user.UserAttribute; import at.tuwien.exception.UserAttributeNotFoundException; -import java.util.List; +import java.util.UUID; public interface UserAttributeService { - List<UserAttribute> findAll(String userId); - UserAttribute find(String userId, String name) throws UserAttributeNotFoundException; + UserAttribute find(UUID userId, String name) throws UserAttributeNotFoundException; - UserAttribute update(String userId, String name, String value) throws UserAttributeNotFoundException; + UserAttribute update(UUID userId, String name, String value) throws UserAttributeNotFoundException; UserAttribute create(UserAttribute userAttribute); } diff --git a/dbrepo-user-service/services/src/main/java/at/tuwien/service/UserService.java b/dbrepo-user-service/services/src/main/java/at/tuwien/service/UserService.java index 4f64b63e02c50d587ce298ce0f6743aa67444ed7..c607aedaa7e24f26cd0b1bd136678f7db2ec5a36 100644 --- a/dbrepo-user-service/services/src/main/java/at/tuwien/service/UserService.java +++ b/dbrepo-user-service/services/src/main/java/at/tuwien/service/UserService.java @@ -4,13 +4,14 @@ import at.tuwien.api.auth.SignupRequestDto; import at.tuwien.api.user.UserPasswordDto; import at.tuwien.api.user.UserThemeSetDto; import at.tuwien.api.user.UserUpdateDto; -import at.tuwien.entities.auth.Realm; +import at.tuwien.entities.user.Realm; import at.tuwien.entities.user.Role; import at.tuwien.entities.user.User; import at.tuwien.exception.*; import java.security.Principal; import java.util.List; +import java.util.UUID; public interface UserService { @@ -21,26 +22,16 @@ public interface UserService { */ List<User> findAll(); - /** - * Finds a user by username. - * - * @param username The username. - * @return The user. - * @throws UserNotFoundException The user was not found in the metadata database. - */ - User findByUsername(String username) throws UserNotFoundException; - - User findById(String id) throws UserNotFoundException; - User create(SignupRequestDto data, Realm realm, Role role) throws RemoteUnavailableException, UserNotFoundException, UserAlreadyExistsException; - User modify(String id, UserUpdateDto data, Principal principal) throws UserNotFoundException, ForeignUserException, UserAttributeNotFoundException; + User modify(UUID id, UserUpdateDto data, Principal principal) throws UserNotFoundException, ForeignUserException, UserAttributeNotFoundException; - User updatePassword(String id, UserPasswordDto data, Principal principal) throws UserNotFoundException, + User updatePassword(UUID id, UserPasswordDto data, Principal principal) throws UserNotFoundException, ForeignUserException; - User toggleTheme(String id, UserThemeSetDto data, Principal principal) throws UserNotFoundException, ForeignUserException, UserAttributeNotFoundException; + User toggleTheme(UUID id, UserThemeSetDto data, Principal principal) throws UserNotFoundException, ForeignUserException, UserAttributeNotFoundException; + - User find(String id) throws UserNotFoundException; + User find(UUID id) throws UserNotFoundException; } diff --git a/dbrepo-user-service/services/src/main/java/at/tuwien/service/impl/RealmServiceImpl.java b/dbrepo-user-service/services/src/main/java/at/tuwien/service/impl/RealmServiceImpl.java index 6c971add7fe6deed7968b00a7980e868dfad382c..b499b6c43bde74e44902af54109e464ee4c147a4 100644 --- a/dbrepo-user-service/services/src/main/java/at/tuwien/service/impl/RealmServiceImpl.java +++ b/dbrepo-user-service/services/src/main/java/at/tuwien/service/impl/RealmServiceImpl.java @@ -1,6 +1,6 @@ package at.tuwien.service.impl; -import at.tuwien.entities.auth.Realm; +import at.tuwien.entities.user.Realm; import at.tuwien.exception.RealmNotFoundException; import at.tuwien.repository.jpa.RealmRepository; import at.tuwien.service.RealmService; diff --git a/dbrepo-user-service/services/src/main/java/at/tuwien/service/impl/UserAttributeServiceImpl.java b/dbrepo-user-service/services/src/main/java/at/tuwien/service/impl/UserAttributeServiceImpl.java index 6771f33a9cbfffef8377a0c931b74d248799a45b..14885f60f09fcb029818e9c517ad84a584c3176e 100644 --- a/dbrepo-user-service/services/src/main/java/at/tuwien/service/impl/UserAttributeServiceImpl.java +++ b/dbrepo-user-service/services/src/main/java/at/tuwien/service/impl/UserAttributeServiceImpl.java @@ -10,6 +10,7 @@ import org.springframework.stereotype.Service; import java.util.List; import java.util.Optional; +import java.util.UUID; @Log4j2 @Service @@ -23,12 +24,7 @@ public class UserAttributeServiceImpl implements UserAttributeService { } @Override - public List<UserAttribute> findAll(String userId) { - return userAttributeRepository.findByUser(userId); - } - - @Override - public UserAttribute find(String userId, String name) throws UserAttributeNotFoundException { + public UserAttribute find(UUID userId, String name) throws UserAttributeNotFoundException { final Optional<UserAttribute> optional = userAttributeRepository.findByUserIdAndName(userId, name); if (optional.isEmpty()) { log.error("Failed to find user attribute with name {}", name); @@ -38,7 +34,7 @@ public class UserAttributeServiceImpl implements UserAttributeService { } @Override - public UserAttribute update(String userId, String name, String value) throws UserAttributeNotFoundException { + public UserAttribute update(UUID userId, String name, String value) throws UserAttributeNotFoundException { final UserAttribute entity = find(userId, name); entity.setValue(value); return userAttributeRepository.save(entity); diff --git a/dbrepo-user-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java b/dbrepo-user-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java index 569eb90a4f15d522a962371196ac534ae3372445..96fceaa61d76576ac66f04b2b44589977ddf633f 100644 --- a/dbrepo-user-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java +++ b/dbrepo-user-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java @@ -4,13 +4,11 @@ import at.tuwien.api.auth.SignupRequestDto; import at.tuwien.api.user.UserPasswordDto; import at.tuwien.api.user.UserThemeSetDto; import at.tuwien.api.user.UserUpdateDto; -import at.tuwien.entities.auth.Realm; import at.tuwien.entities.user.*; import at.tuwien.exception.*; import at.tuwien.mapper.UserMapper; import at.tuwien.repository.jpa.CredentialRepository; import at.tuwien.repository.jpa.RoleMappingRepository; -import at.tuwien.repository.jpa.UserAttributeRepository; import at.tuwien.repository.jpa.UserRepository; import at.tuwien.service.UserAttributeService; import at.tuwien.service.UserService; @@ -30,6 +28,7 @@ import java.security.spec.KeySpec; import java.time.Instant; import java.util.List; import java.util.Optional; +import java.util.UUID; @Log4j2 @Service @@ -64,26 +63,6 @@ public class UserServiceImpl implements UserService { return userRepository.findAll(); } - @Override - public User findByUsername(String username) throws UserNotFoundException { - final Optional<User> optional = userRepository.findByUsername(username); - if (optional.isEmpty()) { - log.error("Failed to retrieve user with username {}", username); - throw new UserNotFoundException("Failed to retrieve user"); - } - return optional.get(); - } - - @Override - public User findById(String id) throws UserNotFoundException { - final Optional<User> optional = userRepository.findById(id); - if (optional.isEmpty()) { - log.error("Failed to retrieve user with id {}", id); - throw new UserNotFoundException("Failed to retrieve user"); - } - return optional.get(); - } - @Override public User create(SignupRequestDto data, Realm realm, Role role) throws RemoteUnavailableException, UserNotFoundException, UserAlreadyExistsException { @@ -141,10 +120,10 @@ public class UserServiceImpl implements UserService { } @Override - public User modify(String id, UserUpdateDto data, Principal principal) throws UserNotFoundException, + public User modify(UUID id, UserUpdateDto data, Principal principal) throws UserNotFoundException, ForeignUserException, UserAttributeNotFoundException { /* check */ - User user = findById(id); + User user = find(id); if (!user.getUsername().equals(principal.getName())) { log.error("Failed to modify user: attempting to modify other user"); throw new ForeignUserException("Failed to modify user: attempting to modify other user"); @@ -161,10 +140,10 @@ public class UserServiceImpl implements UserService { } @Override - public User updatePassword(String id, UserPasswordDto data, Principal principal) throws UserNotFoundException, + public User updatePassword(UUID id, UserPasswordDto data, Principal principal) throws UserNotFoundException, ForeignUserException { /* check */ - final User user = findById(id); + final User user = find(id); if (!user.getUsername().equals(principal.getName())) { log.error("Failed to modify user: attempting to modify other user"); throw new ForeignUserException("Failed to modify user: attempting to modify other user"); @@ -191,10 +170,10 @@ public class UserServiceImpl implements UserService { } @Override - public User toggleTheme(String id, UserThemeSetDto data, Principal principal) throws UserNotFoundException, + public User toggleTheme(UUID id, UserThemeSetDto data, Principal principal) throws UserNotFoundException, ForeignUserException, UserAttributeNotFoundException { /* check */ - final User user = findById(id); + final User user = find(id); if (!user.getUsername().equals(principal.getName())) { log.error("Failed to modify user: attempting to modify other user"); throw new ForeignUserException("Failed to modify user: attempting to modify other user"); @@ -205,7 +184,7 @@ public class UserServiceImpl implements UserService { } @Override - public User find(String id) throws UserNotFoundException { + public User find(UUID id) throws UserNotFoundException { final Optional<User> optional = userRepository.findById(id); if (optional.isEmpty()) { log.error("Failed to retrieve user with id {}", id);