From 1cb9290afce1820ed5bce0b7f41a18bb2a81f286 Mon Sep 17 00:00:00 2001 From: Martin Weise <martin.weise@tuwien.ac.at> Date: Thu, 31 Aug 2023 15:56:22 +0200 Subject: [PATCH] Fixed initial setup --- .../java/at/tuwien/api/error/ApiErrorDto.java | 2 +- .../at/tuwien/endpoints/DatabaseEndpoint.java | 1 - .../at/tuwien/endpoints/UserEndpoint.java | 12 ++++++--- .../endpoints/UserEndpointUnitTest.java | 11 ++++++-- .../service/UserServiceIntegrationTest.java | 6 ++--- .../tuwien/service/UserServiceUnitTest.java | 2 +- .../at/tuwien/gateway/KeycloakGateway.java | 7 ++---- .../gateway/impl/KeycloakGatewayImpl.java | 16 ++++++------ .../java/at/tuwien/service/UserService.java | 2 +- .../tuwien/service/impl/UserServiceImpl.java | 2 +- dbrepo-ui/pages/signup.vue | 11 +------- docker-compose.yml | 25 ------------------- 12 files changed, 36 insertions(+), 61 deletions(-) diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/error/ApiErrorDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/error/ApiErrorDto.java index 4cb84a15c0..c531bde678 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/error/ApiErrorDto.java +++ b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/error/ApiErrorDto.java @@ -17,7 +17,7 @@ import jakarta.validation.constraints.NotNull; public class ApiErrorDto { @NotNull(message = "http status is required") - @Schema(example = "STATUS") + @Schema(example = "NOT_FOUND") private HttpStatus status; @NotNull(message = "message is required") diff --git a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/DatabaseEndpoint.java b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/DatabaseEndpoint.java index 5b31688b8a..4c77a4ac25 100644 --- a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/DatabaseEndpoint.java +++ b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/DatabaseEndpoint.java @@ -146,7 +146,6 @@ public class DatabaseEndpoint { principal); final User user = userService.findByUsername(principal.getName()); final Database database = databaseService.create(createDto, principal); - messageQueueService.createUser(user.getUsername()); messageQueueService.createExchange(database, principal); queryStoreService.create(database.getId(), principal); databaseAccessRepository.save(databaseMapper.defaultCreatorAccess(database, UserUtil.getId(principal))); diff --git a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/UserEndpoint.java b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/UserEndpoint.java index 88f29fa457..c4d587c99c 100644 --- a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/UserEndpoint.java +++ b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/UserEndpoint.java @@ -7,6 +7,7 @@ import at.tuwien.entities.user.User; import at.tuwien.exception.*; import at.tuwien.mapper.UserMapper; import at.tuwien.service.DatabaseService; +import at.tuwien.service.MessageQueueService; import at.tuwien.service.UserService; import at.tuwien.utils.UserUtil; import io.micrometer.core.annotation.Timed; @@ -40,13 +41,16 @@ public class UserEndpoint { private final UserMapper userMapper; private final UserService userService; private final DatabaseService databaseService; + private final MessageQueueService messageQueueService; @Autowired - public UserEndpoint(UserMapper userMapper, UserService userService, DatabaseService databaseService) { + public UserEndpoint(UserMapper userMapper, UserService userService, DatabaseService databaseService, + MessageQueueService messageQueueService) { this.userMapper = userMapper; this.userService = userService; this.databaseService = databaseService; + this.messageQueueService = messageQueueService; } @GetMapping @@ -99,14 +103,14 @@ public class UserEndpoint { }) public ResponseEntity<UserBriefDto> create(@NotNull @Valid @RequestBody SignupRequestDto data) throws RealmNotFoundException, UserAlreadyExistsException, UserEmailAlreadyExistsException, - UserNotFoundException, KeycloakRemoteException, AccessDeniedException { + UserNotFoundException, KeycloakRemoteException, AccessDeniedException, BrokerVirtualHostCreationException { log.debug("endpoint create a user, data={}", data); /* check */ userService.validateUsernameNotExists(data.getUsername()); userService.validateEmailNotExists(data.getEmail()); /* create */ - final User user = userService.create(data); - final UserBriefDto dto = userMapper.userToUserBriefDto(user); + final UserBriefDto dto = userMapper.userToUserBriefDto(userService.create(data)); + messageQueueService.createUser(dto.getUsername()); log.trace("create user resulted in dto {}", dto); return ResponseEntity.status(HttpStatus.CREATED) .body(dto); diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/UserEndpointUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/UserEndpointUnitTest.java index 1cf017ec7b..21b81f10e9 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/UserEndpointUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/UserEndpointUnitTest.java @@ -7,6 +7,7 @@ import at.tuwien.api.auth.SignupRequestDto; import at.tuwien.api.user.*; import at.tuwien.entities.user.User; import at.tuwien.exception.*; +import at.tuwien.service.MessageQueueService; import at.tuwien.service.UserService; import lombok.extern.log4j.Log4j2; import org.junit.jupiter.api.Test; @@ -40,6 +41,9 @@ public class UserEndpointUnitTest extends BaseUnitTest { @MockBean private UserService userService; + @MockBean + private MessageQueueService messageQueueService; + @Autowired private UserEndpoint userEndpoint; @@ -63,7 +67,7 @@ public class UserEndpointUnitTest extends BaseUnitTest { @WithAnonymousUser public void create_anonymous_succeeds() throws UserNotFoundException, UserEmailAlreadyExistsException, RealmNotFoundException, UserAlreadyExistsException, KeycloakRemoteException, - at.tuwien.exception.AccessDeniedException { + at.tuwien.exception.AccessDeniedException, BrokerVirtualHostCreationException { final SignupRequestDto request = SignupRequestDto.builder() .email(USER_1_EMAIL) .username(USER_1_USERNAME) @@ -300,11 +304,14 @@ public class UserEndpointUnitTest extends BaseUnitTest { protected void create_generic(SignupRequestDto data, User user) throws UserEmailAlreadyExistsException, RealmNotFoundException, UserAlreadyExistsException, UserNotFoundException, KeycloakRemoteException, - AccessDeniedException { + AccessDeniedException, BrokerVirtualHostCreationException { /* mock */ when(userService.create(data)) .thenReturn(user); + doNothing() + .when(messageQueueService) + .createUser(anyString()); /* test */ final ResponseEntity<UserBriefDto> response = userEndpoint.create(data); diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/UserServiceIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/UserServiceIntegrationTest.java index d1e0857433..ad229d6aa3 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/UserServiceIntegrationTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/UserServiceIntegrationTest.java @@ -92,7 +92,7 @@ public class UserServiceIntegrationTest extends BaseUnitTest { @Test public void create_succeeds() throws UserAlreadyExistsException, UserNotFoundException, KeycloakRemoteException, - AccessDeniedException { + AccessDeniedException, UserEmailAlreadyExistsException { final SignupRequestDto request = SignupRequestDto.builder() .username(USER_2_USERNAME) .password(USER_2_PASSWORD) @@ -113,7 +113,7 @@ public class UserServiceIntegrationTest extends BaseUnitTest { .build(); /* test */ - assertThrows(UserAlreadyExistsException.class, () -> { + assertThrows(UserEmailAlreadyExistsException.class, () -> { userService.create(request); }); } @@ -168,7 +168,7 @@ public class UserServiceIntegrationTest extends BaseUnitTest { @Test public void updatePassword_succeeds() throws KeycloakRemoteException, AccessDeniedException, UserNotFoundException, - UserAlreadyExistsException { + UserAlreadyExistsException, UserEmailAlreadyExistsException { final UserPasswordDto request = UserPasswordDto.builder() .password(USER_3_PASSWORD) .build(); diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/UserServiceUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/UserServiceUnitTest.java index 1d79b4ad86..35fc49b369 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/UserServiceUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/UserServiceUnitTest.java @@ -78,7 +78,7 @@ public class UserServiceUnitTest extends BaseUnitTest { @Test public void create_succeeds() throws UserNotFoundException, KeycloakRemoteException, AccessDeniedException, - UserAlreadyExistsException { + UserAlreadyExistsException, UserEmailAlreadyExistsException { /* mock */ when(userRepository.findById(USER_1_ID)) diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/KeycloakGateway.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/KeycloakGateway.java index a4823fe124..612ee2eb37 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/KeycloakGateway.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/KeycloakGateway.java @@ -3,16 +3,13 @@ package at.tuwien.gateway; import at.tuwien.api.keycloak.UserCreateDto; import at.tuwien.api.keycloak.UserDto; import at.tuwien.api.user.UserPasswordDto; -import at.tuwien.exception.AccessDeniedException; -import at.tuwien.exception.KeycloakRemoteException; -import at.tuwien.exception.UserAlreadyExistsException; -import at.tuwien.exception.UserNotFoundException; +import at.tuwien.exception.*; import java.util.UUID; public interface KeycloakGateway { - void createUser(UserCreateDto data) throws AccessDeniedException, KeycloakRemoteException, UserAlreadyExistsException; + void createUser(UserCreateDto data) throws AccessDeniedException, KeycloakRemoteException, UserAlreadyExistsException, UserEmailAlreadyExistsException; void updateUserCredentials(UUID id, UserPasswordDto password) throws AccessDeniedException, KeycloakRemoteException; diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/impl/KeycloakGatewayImpl.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/impl/KeycloakGatewayImpl.java index 9fb6673818..05602afae5 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/impl/KeycloakGatewayImpl.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/impl/KeycloakGatewayImpl.java @@ -3,10 +3,7 @@ package at.tuwien.gateway.impl; import at.tuwien.api.keycloak.*; import at.tuwien.api.user.UserPasswordDto; import at.tuwien.config.KeycloakConfig; -import at.tuwien.exception.AccessDeniedException; -import at.tuwien.exception.KeycloakRemoteException; -import at.tuwien.exception.UserAlreadyExistsException; -import at.tuwien.exception.UserNotFoundException; +import at.tuwien.exception.*; import at.tuwien.gateway.KeycloakGateway; import at.tuwien.mapper.UserMapper; import lombok.extern.log4j.Log4j2; @@ -57,7 +54,7 @@ public class KeycloakGatewayImpl implements KeycloakGateway { @Override public void createUser(UserCreateDto data) throws AccessDeniedException, KeycloakRemoteException, - UserAlreadyExistsException { + UserAlreadyExistsException, UserEmailAlreadyExistsException { /* obtain admin token */ final HttpHeaders headers = new HttpHeaders(); headers.set("Accept", "application/json"); @@ -70,8 +67,13 @@ public class KeycloakGatewayImpl implements KeycloakGateway { log.error("Failed to create user: {}", e.getMessage()); throw new KeycloakRemoteException("Failed to create user: " + e.getMessage()); } catch (HttpClientErrorException.Conflict e) { - log.error("Conflict when creating user: {}", e.getMessage()); - throw new UserAlreadyExistsException("Conflict when creating user: " + e.getMessage()); + if (e.getMessage().contains("same email")) { + log.error("Conflict when creating user: {}", e.getMessage()); + throw new UserEmailAlreadyExistsException("Conflict when creating user: " + e.getMessage()); + } else { + log.error("Conflict when creating user: {}", e.getMessage()); + throw new UserAlreadyExistsException("Conflict when creating user: " + e.getMessage()); + } } if (!response.getStatusCode().equals(HttpStatus.CREATED)) { log.error("Failed to create user: status {} was not expected", response.getStatusCode().value()); diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/UserService.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/UserService.java index 6a35daf1c0..3b94ad5d90 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/UserService.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/UserService.java @@ -43,7 +43,7 @@ public interface UserService { * @throws UserAlreadyExistsException The user already exists in the metadata database. */ User create(SignupRequestDto data) throws UserAlreadyExistsException, AccessDeniedException, - KeycloakRemoteException, UserNotFoundException; + KeycloakRemoteException, UserNotFoundException, UserEmailAlreadyExistsException; /** * Updates the user information for a user with given id in the metadata database. diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java index deec706f9a..d6862071b9 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java @@ -64,7 +64,7 @@ public class UserServiceImpl implements UserService { @Override public User create(SignupRequestDto data) throws UserAlreadyExistsException, AccessDeniedException, - KeycloakRemoteException, UserNotFoundException { + KeycloakRemoteException, UserNotFoundException, UserEmailAlreadyExistsException { /* create at authentication service */ final User entity = User.builder() .username(data.getUsername()) diff --git a/dbrepo-ui/pages/signup.vue b/dbrepo-ui/pages/signup.vue index 6cfd8b1eb6..499bd33f16 100644 --- a/dbrepo-ui/pages/signup.vue +++ b/dbrepo-ui/pages/signup.vue @@ -8,12 +8,6 @@ <v-form ref="form" v-model="valid" @submit.prevent="submit"> <v-card flat tile> <v-card-text> - <v-alert - v-if="mailVerify" - border="left" - color="info"> - Before you can use the repository, you will need to <i>confirm</i> your email address, make sure to check your spam folder. - </v-alert> <v-row dense> <v-col sm="6"> <v-text-field @@ -108,9 +102,6 @@ export default { loadingColor () { return this.error ? 'red lighten-2' : 'primary' }, - mailVerify () { - return this.$config.mailVerify - } }, mounted () { this.loadUsers() @@ -123,7 +114,7 @@ export default { this.loading = true UserService.create(this.createAccount) .then(() => { - this.$toast.success(`Success! ${this.mailVerify ? 'Check your inbox!' : ''}`) + this.$toast.success('Success!') this.$router.push('/login') this.loading = false }) diff --git a/docker-compose.yml b/docker-compose.yml index 50676005b5..cba9b9c741 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -240,31 +240,6 @@ services: logging: driver: json-file - dbrepo-search-sync-agent: - restart: "no" - container_name: dbrepo-search-sync-agent - hostname: search-startup-agent - build: ./dbrepo-search-sync-agent - image: dbrepo-search-sync-agent - networks: - core: - env_file: - - .env - healthcheck: - test: wget -qO- localhost:9050/actuator/health/readiness | grep -q "UP" || exit 1 - interval: 10s - timeout: 5s - retries: 12 - depends_on: - dbrepo-metadata-db: - condition: service_healthy - dbrepo-search-db: - condition: service_started - dbrepo-authentication-service: - condition: service_healthy - logging: - driver: json-file - dbrepo-ui: restart: "no" container_name: dbrepo-ui -- GitLab