Skip to content
Snippets Groups Projects
Unverified Commit aaaa32c8 authored by Martin Weise's avatar Martin Weise
Browse files

Fixed ElasticSearch

parent 6d5a6d70
No related branches found
No related tags found
2 merge requests!81New stable release,!80Multiple features connected with user management and ownership of databases
This commit is part of merge request !81. Comments created here will be created in the context of that merge request.
Showing
with 228 additions and 238 deletions
package at.tuwien; package at.tuwien;
import at.tuwien.api.database.DatabaseCreateDto;
import at.tuwien.api.database.DatabaseModifyDto;
import at.tuwien.api.database.LanguageTypeDto;
import at.tuwien.api.database.LicenseDto;
import at.tuwien.entities.container.Container; import at.tuwien.entities.container.Container;
import at.tuwien.entities.container.image.ContainerImage; import at.tuwien.entities.container.image.ContainerImage;
import at.tuwien.entities.container.image.ContainerImageEnvironmentItem; import at.tuwien.entities.container.image.ContainerImageEnvironmentItem;
import at.tuwien.entities.container.image.ContainerImageEnvironmentItemType; import at.tuwien.entities.container.image.ContainerImageEnvironmentItemType;
import at.tuwien.entities.database.Database; import at.tuwien.entities.database.Database;
import at.tuwien.entities.database.License;
import at.tuwien.entities.database.table.Table; import at.tuwien.entities.database.table.Table;
import at.tuwien.entities.user.User;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.test.context.TestPropertySource; import org.springframework.test.context.TestPropertySource;
import java.time.Instant; import java.time.Instant;
...@@ -22,7 +29,26 @@ public abstract class BaseUnitTest { ...@@ -22,7 +29,26 @@ public abstract class BaseUnitTest {
public final static String BROKER_IMAGE = "rabbitmq"; public final static String BROKER_IMAGE = "rabbitmq";
public final static String BROKER_TAG = "3-alpine"; public final static String BROKER_TAG = "3-alpine";
public final static String SEARCH_NAME = "fda-search-mock-service";
public final static String SEARCH_IP = "172.29.0.3";
public final static String SEARCH_HOSTNAME = "fda-search-mock-service";
public final static String SEARCH_IMAGE = "elasticsearch";
public final static String SEARCH_TAG = "7.13.4";
public final static Long USER_1_ID = 1L;
public final static String USER_1_USERNAME = "junit"; public final static String USER_1_USERNAME = "junit";
public final static String USER_1_PASSWORD = "junit";
public final static String USER_1_EMAIL = "junit@ossdip.at";
public final static Boolean USER_1_VERIFIED = true;
public final static Boolean USER_1_THEME = false;
public final static User USER_1 = User.builder()
.id(USER_1_ID)
.username(USER_1_USERNAME)
.email(USER_1_EMAIL)
.emailVerified(USER_1_VERIFIED)
.themeDark(USER_1_THEME)
.build();
public final static Long IMAGE_1_ID = 1L; public final static Long IMAGE_1_ID = 1L;
public final static String IMAGE_1_REPOSITORY = "mariadb"; public final static String IMAGE_1_REPOSITORY = "mariadb";
...@@ -61,15 +87,50 @@ public abstract class BaseUnitTest { ...@@ -61,15 +87,50 @@ public abstract class BaseUnitTest {
.value("mariadb") .value("mariadb")
.build()); .build());
public final static String LICENSE_1_IDENTIFIER = "MIT";
public final static String LICENSE_1_URI = "https://opensource.org/licenses/MIT";
public final static License LICENSE_1 = License.builder()
.identifier(LICENSE_1_IDENTIFIER)
.uri(LICENSE_1_URI)
.build();
public final static LicenseDto LICENSE_1_DTO = LicenseDto.builder()
.identifier(LICENSE_1_IDENTIFIER)
.uri(LICENSE_1_URI)
.build();
public final static Long DATABASE_1_ID = 1L; public final static Long DATABASE_1_ID = 1L;
public final static String DATABASE_1_NAME = "Weather"; public final static String DATABASE_1_NAME = "Weather";
public final static String DATABASE_1_DESCRIPTION = "Weather somewhere in the world"; public final static String DATABASE_1_DESCRIPTION = "Weather somewhere in the world";
public final static String DATABASE_1_PUBLISHER = "TU Wien";
public final static Boolean DATABASE_1_PUBLIC = false; public final static Boolean DATABASE_1_PUBLIC = false;
public final static String DATABASE_1_INTERNALNAME = "weather"; public final static String DATABASE_1_INTERNALNAME = "weather";
public final static String DATABASE_1_EXCHANGE = "fda." + DATABASE_1_INTERNALNAME; public final static String DATABASE_1_EXCHANGE = "fda." + DATABASE_1_INTERNALNAME;
public final static Instant DATABASE_1_CREATED = Instant.now().minus(1, HOURS); public final static Instant DATABASE_1_CREATED = Instant.now().minus(1, HOURS);
public final static Instant DATABASE_1_UPDATED = Instant.now(); public final static Instant DATABASE_1_UPDATED = Instant.now();
public final static DatabaseCreateDto DATABASE_1_CREATE = DatabaseCreateDto.builder()
.name(DATABASE_1_NAME)
.isPublic(DATABASE_1_PUBLIC)
.description(DATABASE_1_DESCRIPTION)
.build();
public final static DatabaseModifyDto DATABASE_1_UPDATE1 = DatabaseModifyDto.builder()
.isPublic(DATABASE_1_PUBLIC)
.description(DATABASE_1_DESCRIPTION)
.language(LanguageTypeDto.EN)
.build();
public final static DatabaseModifyDto DATABASE_1_UPDATE2 = DatabaseModifyDto.builder()
.isPublic(DATABASE_1_PUBLIC)
.description(DATABASE_1_DESCRIPTION)
.language(LanguageTypeDto.EN)
.license(LICENSE_1_DTO)
.publication("2022-08-01")
.publisher(DATABASE_1_PUBLISHER)
.build();
public final static Long DATABASE_2_ID = 2L; public final static Long DATABASE_2_ID = 2L;
public final static String DATABASE_2_NAME = "Weather AT"; public final static String DATABASE_2_NAME = "Weather AT";
public final static Boolean DATABASE_2_PUBLIC = false; public final static Boolean DATABASE_2_PUBLIC = false;
......
...@@ -35,7 +35,7 @@ public class DockerConfig { ...@@ -35,7 +35,7 @@ public class DockerConfig {
.withDockerHttpClient(dockerHttpClient) .withDockerHttpClient(dockerHttpClient)
.build(); .build();
public static void startContainer(Container container) throws InterruptedException { public static void startContainer(Container container, Integer seconds) throws InterruptedException {
final InspectContainerResponse inspect = dockerClient.inspectContainerCmd(container.getHash()) final InspectContainerResponse inspect = dockerClient.inspectContainerCmd(container.getHash())
.exec(); .exec();
log.trace("container {} state {}", container.getHash(), inspect.getState().getStatus()); log.trace("container {} state {}", container.getHash(), inspect.getState().getStatus());
...@@ -45,10 +45,14 @@ public class DockerConfig { ...@@ -45,10 +45,14 @@ public class DockerConfig {
log.trace("container {} needs to be started", container.getHash()); log.trace("container {} needs to be started", container.getHash());
dockerClient.startContainerCmd(container.getHash()) dockerClient.startContainerCmd(container.getHash())
.exec(); .exec();
Thread.sleep(12 * 1000L); Thread.sleep(seconds * 1000L);
log.debug("container {} was started", container.getHash()); log.debug("container {} was started", container.getHash());
} }
public static void startContainer(Container container) throws InterruptedException {
startContainer(container, 15);
}
public static void createContainer(Container container) { public static void createContainer(Container container) {
final CreateContainerResponse response = dockerClient.createContainerCmd(container.getImage().getRepository() + ":" + container.getImage().getTag()) final CreateContainerResponse response = dockerClient.createContainerCmd(container.getImage().getRepository() + ":" + container.getImage().getTag())
.withHostConfig(hostConfig.withNetworkMode("fda-userdb")) .withHostConfig(hostConfig.withNetworkMode("fda-userdb"))
...@@ -73,4 +77,14 @@ public class DockerConfig { ...@@ -73,4 +77,14 @@ public class DockerConfig {
log.debug("container {} was stopped", container.getHash()); log.debug("container {} was stopped", container.getHash());
} }
public static void removeContainer(Container container) {
final InspectContainerResponse inspect = dockerClient.inspectContainerCmd(container.getHash())
.exec();
log.trace("container {} state {}", container.getHash(), inspect.getState().getStatus());
log.trace("container {} needs to be removed", container.getHash());
dockerClient.removeContainerCmd(container.getHash())
.exec();
log.debug("container {} was removed", container.getHash());
}
} }
...@@ -8,13 +8,14 @@ import at.tuwien.entities.container.Container; ...@@ -8,13 +8,14 @@ import at.tuwien.entities.container.Container;
import at.tuwien.entities.database.Database; import at.tuwien.entities.database.Database;
import at.tuwien.exception.*; import at.tuwien.exception.*;
import at.tuwien.repository.elastic.DatabaseidxRepository; import at.tuwien.repository.elastic.DatabaseidxRepository;
import at.tuwien.repository.jpa.ContainerRepository; import at.tuwien.repository.jpa.*;
import at.tuwien.repository.jpa.DatabaseRepository;
import at.tuwien.repository.jpa.ImageRepository;
import at.tuwien.service.impl.HibernateConnector; import at.tuwien.service.impl.HibernateConnector;
import at.tuwien.service.impl.MariaDbServiceImpl; import at.tuwien.service.impl.MariaDbServiceImpl;
import com.github.dockerjava.api.command.CreateContainerResponse; import com.github.dockerjava.api.command.CreateContainerResponse;
import com.github.dockerjava.api.exception.NotModifiedException; import com.github.dockerjava.api.exception.NotModifiedException;
import com.github.dockerjava.api.model.Bind;
import com.github.dockerjava.api.model.ExposedPort;
import com.github.dockerjava.api.model.HostConfig;
import com.github.dockerjava.api.model.Network; import com.github.dockerjava.api.model.Network;
import com.rabbitmq.client.Channel; import com.rabbitmq.client.Channel;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
...@@ -24,6 +25,7 @@ import org.junit.jupiter.api.extension.ExtendWith; ...@@ -24,6 +25,7 @@ import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.context.junit.jupiter.SpringExtension; import org.springframework.test.context.junit.jupiter.SpringExtension;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
...@@ -31,8 +33,7 @@ import org.springframework.transaction.annotation.Transactional; ...@@ -31,8 +33,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.security.Principal; import java.security.Principal;
import java.util.Optional; import java.util.Optional;
import static at.tuwien.config.DockerConfig.dockerClient; import static at.tuwien.config.DockerConfig.*;
import static at.tuwien.config.DockerConfig.hostConfig;
import static org.junit.jupiter.api.Assertions.*; import static org.junit.jupiter.api.Assertions.*;
@Log4j2 @Log4j2
...@@ -47,25 +48,28 @@ public class DatabaseServiceIntegrationTest extends BaseUnitTest { ...@@ -47,25 +48,28 @@ public class DatabaseServiceIntegrationTest extends BaseUnitTest {
@MockBean @MockBean
private Channel channel; private Channel channel;
@MockBean
private DatabaseidxRepository databaseidxRepository;
@Autowired @Autowired
private ImageRepository imageRepository; private ImageRepository imageRepository;
@Autowired @Autowired
private DatabaseRepository databaseRepository; private MariaDbServiceImpl databaseService;
@Autowired @Autowired
private ContainerRepository containerRepository; private UserRepository userRepository;
@Autowired @Autowired
private MariaDbServiceImpl databaseService; private LicenseRepository licenseRepository;
@Autowired
private ContainerRepository containerRepository;
@Autowired @Autowired
private HibernateConnector hibernateConnector; private PasswordEncoder passwordEncoder;
private static Container CONTAINER_BROKER; private static final Container CONTAINER_SEARCH = Container.builder()
.name(SEARCH_NAME)
.internalName(SEARCH_NAME)
.build();
@BeforeAll @BeforeAll
public static void beforeAll() throws InterruptedException { public static void beforeAll() throws InterruptedException {
...@@ -86,46 +90,47 @@ public class DatabaseServiceIntegrationTest extends BaseUnitTest { ...@@ -86,46 +90,47 @@ public class DatabaseServiceIntegrationTest extends BaseUnitTest {
.withEnableIpv6(false) .withEnableIpv6(false)
.exec(); .exec();
/* create amqp */ /* create elastic search */
final CreateContainerResponse broker = dockerClient.createContainerCmd(BROKER_IMAGE + ":" + BROKER_TAG) final CreateContainerResponse search = dockerClient.createContainerCmd(SEARCH_IMAGE + ":" + SEARCH_TAG)
.withHostConfig(hostConfig.withNetworkMode("fda-public")) .withHostConfig(hostConfig.withNetworkMode("fda-public"))
.withName(BROKER_NAME) .withName(SEARCH_NAME)
.withIpv4Address(BROKER_IP) .withIpv4Address(SEARCH_IP)
.withHostName(BROKER_HOSTNAME) .withHostName(SEARCH_HOSTNAME)
.withHostConfig(new HostConfig()
.withPortBindings())
.withEnv("discovery.type=single-node", "ES_JAVA_OPTS=-Xms512m -Xmx512m", "logger.level=WARN")
.exec(); .exec();
CONTAINER_SEARCH.setHash(search.getId());
/* start elastic search */
startContainer(CONTAINER_SEARCH, 30);
}
/* create mariadb */ @Transactional
final CreateContainerResponse container1 = dockerClient.createContainerCmd(IMAGE_1_REPOSITORY + ":" + IMAGE_1_TAG) @BeforeEach
.withEnv(IMAGE_1_ENV) public void beforeEach() throws InterruptedException {
/* create fda-userdb-u01 */
final CreateContainerResponse response1 = dockerClient.createContainerCmd(IMAGE_1_REPOSITORY + ":" + IMAGE_1_TAG)
.withHostConfig(hostConfig.withNetworkMode("fda-userdb")) .withHostConfig(hostConfig.withNetworkMode("fda-userdb"))
.withName(CONTAINER_1_NAME) .withName(CONTAINER_1_NAME)
.withIpv4Address(CONTAINER_1_IP) .withIpv4Address(CONTAINER_1_IP)
.withHostName(CONTAINER_1_INTERNALNAME) .withHostName(CONTAINER_1_INTERNALNAME)
.withEnv("MARIADB_ROOT_PASSWORD=mariadb", "MARIADB_USER=mariadb", "MARIADB_PASSWORD=mariadb")
.exec(); .exec();
final CreateContainerResponse container2 = dockerClient.createContainerCmd(IMAGE_1_REPOSITORY + ":" + IMAGE_1_TAG) CONTAINER_1.setHash(response1.getId());
.withEnv(IMAGE_2_ENV) /* start fda-userdb-u01 */
.withHostConfig(hostConfig.withNetworkMode("fda-userdb")) startContainer(CONTAINER_1);
.withName(CONTAINER_2_NAME) /* metadata db */
.withIpv4Address(CONTAINER_2_IP) licenseRepository.save(LICENSE_1);
.withHostName(CONTAINER_2_INTERNALNAME) containerRepository.save(CONTAINER_1);
.exec(); USER_1.setPassword(passwordEncoder.encode(USER_1_PASSWORD));
userRepository.save(USER_1);
/* start container */ imageRepository.save(IMAGE_1);
CONTAINER_1.setHash(container1.getId());
CONTAINER_2.setHash(container2.getId());
CONTAINER_BROKER = Container.builder()
.hash(broker.getId())
.build();
} }
@Transactional @AfterEach
@BeforeEach public void afterEach() {
public void beforeEach() { stopContainer(CONTAINER_1);
imageRepository.save(IMAGE_1); removeContainer(CONTAINER_1);
DATABASE_1.setContainer(CONTAINER_1);
DATABASE_2.setContainer(CONTAINER_2);
databaseRepository.save(DATABASE_1);
databaseRepository.save(DATABASE_2);
} }
@AfterAll @AfterAll
...@@ -155,161 +160,46 @@ public class DatabaseServiceIntegrationTest extends BaseUnitTest { ...@@ -155,161 +160,46 @@ public class DatabaseServiceIntegrationTest extends BaseUnitTest {
}); });
} }
// @Transactional @Test
// @Test public void create_succeeds() throws UserNotFoundException, DatabaseNameExistsException,
// public void create_succeeds() throws ImageNotSupportedException, ContainerNotFoundException, DatabaseConnectionException, QueryMalformedException, ImageNotSupportedException, AmqpException,
// DatabaseMalformedException, AmqpException, ContainerConnectionException, InterruptedException, ContainerNotFoundException, ContainerConnectionException, DatabaseMalformedException {
// UserNotFoundException { final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
// final DatabaseCreateDto request = DatabaseCreateDto.builder()
// .name(DATABASE_1_NAME) /* test */
// .isPublic(DATABASE_1_PUBLIC) databaseService.create(CONTAINER_1_ID, DATABASE_1_CREATE, principal);
// .build(); }
// final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
// @Test
// /* mock */ public void update_succeeds() throws UserNotFoundException, DatabaseNameExistsException,
// DockerConfig.startContainer(CONTAINER_BROKER); DatabaseConnectionException, QueryMalformedException, ImageNotSupportedException, AmqpException,
// DockerConfig.startContainer(CONTAINER_1); ContainerNotFoundException, ContainerConnectionException, DatabaseMalformedException,
// LicenseNotFoundException, DatabaseNotFoundException {
// /* test */
// final Database response = databaseService.create(CONTAINER_1_ID, request, principal); final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
// assertEquals(DATABASE_1_NAME, response.getName());
// assertEquals(DATABASE_1_PUBLIC, response.getIsPublic()); /* mock */
// assertEquals(CONTAINER_1_ID, response.getContainer().getId()); databaseService.create(CONTAINER_1_ID, DATABASE_1_CREATE, principal);
// }
// /* test */
// @Test databaseService.modify(CONTAINER_1_ID, DATABASE_1_ID, DATABASE_1_UPDATE1);
// public void create_notFound_fails() throws InterruptedException { }
// final DatabaseCreateDto request = DatabaseCreateDto.builder()
// .name(DATABASE_1_NAME) @Test
// .isPublic(DATABASE_1_PUBLIC) public void update_license_succeeds() throws UserNotFoundException, DatabaseNameExistsException,
// .build(); DatabaseConnectionException, QueryMalformedException, ImageNotSupportedException, AmqpException,
// final Principal principal = new BasicUserPrincipal(USER_1_USERNAME); ContainerNotFoundException, ContainerConnectionException, DatabaseMalformedException,
// LicenseNotFoundException, DatabaseNotFoundException {
// /* mock */
// DockerConfig.startContainer(CONTAINER_BROKER); final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
// DockerConfig.startContainer(CONTAINER_1);
// /* mock */
// /* test */ databaseService.create(CONTAINER_1_ID, DATABASE_1_CREATE, principal);
// assertThrows(ContainerNotFoundException.class, () -> {
// databaseService.create(9999L, request, principal); /* test */
// }); databaseService.modify(CONTAINER_1_ID, DATABASE_1_ID, DATABASE_1_UPDATE1);
// } databaseService.modify(CONTAINER_1_ID, DATABASE_1_ID, DATABASE_1_UPDATE2);
// log.trace("");
// @Test }
// public void create_duplicate_fails() throws InterruptedException {
// final DatabaseCreateDto request = DatabaseCreateDto.builder()
// .name(DATABASE_1_NAME)
// .isPublic(DATABASE_1_PUBLIC)
// .build();
// final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
//
// /* mock */
// DockerConfig.startContainer(CONTAINER_BROKER);
// DockerConfig.startContainer(CONTAINER_1);
//
// /* test */
// assertThrows(DatabaseMalformedException.class, () -> {
// databaseService.create(CONTAINER_1_ID, request, principal);
// });
// }
//
// @Test
// public void create_notRunning_fails() throws InterruptedException {
// final DatabaseCreateDto request = DatabaseCreateDto.builder()
// .name(DATABASE_1_NAME)
// .isPublic(DATABASE_1_PUBLIC)
// .build();
// final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
//
// /* mock */
// DockerConfig.startContainer(CONTAINER_BROKER);
// DockerConfig.stopContainer(CONTAINER_1);
//
// /* test */
// assertThrows(ContainerConnectionException.class, () -> {
// databaseService.create(CONTAINER_1_ID, request, principal);
// });
// }
//
// @Test
// public void delete_succeeds() throws DatabaseNotFoundException, ImageNotSupportedException,
// DatabaseMalformedException, AmqpException, InterruptedException, ContainerConnectionException {
// final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
//
// /* mock */
// DockerConfig.startContainer(CONTAINER_BROKER);
// DockerConfig.startContainer(CONTAINER_2);
//
// /* test */
// databaseService.delete(CONTAINER_2_ID, DATABASE_2_ID, principal);
// final Optional<Database> response = databaseRepository.findById(DATABASE_2_ID);
// assertTrue(response.isEmpty());
// }
//
// @Test
// public void delete_notFound_fails() throws InterruptedException {
// final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
//
// /* mock */
// DockerConfig.startContainer(CONTAINER_BROKER);
//
// /* test */
// assertThrows(DatabaseNotFoundException.class, () -> {
// databaseService.delete(CONTAINER_1_ID, 9999L, principal);
// });
// }
//
// @Test
// public void delete_notRunning_fails() throws InterruptedException {
// final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
//
// /* mock */
// DockerConfig.startContainer(CONTAINER_BROKER);
// DockerConfig.stopContainer(CONTAINER_1);
//
// /* test */
// assertThrows(ContainerConnectionException.class, () -> {
// databaseService.delete(CONTAINER_1_ID, DATABASE_1_ID, principal);
// });
// }
//
// @Test
// public void modify_notFound_fails() {
// final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
//
// /* test */
// assertThrows(DatabaseNotFoundException.class, () -> {
// databaseService.delete(CONTAINER_1_ID, 9999L, principal);
// });
// }
//
// @Test
// public void find_succeeds() throws DatabaseNotFoundException, InterruptedException {
// final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
//
// /* mock */
// DockerConfig.startContainer(CONTAINER_BROKER);
// DockerConfig.startContainer(CONTAINER_1);
//
// /* test */
// final Database response = databaseService.findById(CONTAINER_1_ID, DATABASE_1_ID, principal);
// assertEquals(DATABASE_1_ID, response.getId());
// assertEquals(DATABASE_1_NAME, response.getName());
// assertEquals(DATABASE_1_PUBLIC, response.getIsPublic());
// }
//
// @Test
// public void find_notFound_fails() throws InterruptedException {
// final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
//
// /* mock */
// DockerConfig.startContainer(CONTAINER_BROKER);
// DockerConfig.startContainer(CONTAINER_1);
//
// /* test */
// assertThrows(DatabaseNotFoundException.class, () -> {
// databaseService.findById(CONTAINER_1_ID, 9999L, principal);
// });
// }
} }
spring.profiles.active=test-noelastic
# disable discovery # disable discovery
spring.cloud.discovery.enabled = false spring.cloud.discovery.enabled = false
......
package at.tuwien.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
@Configuration
public class SecurityConfig {
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}
...@@ -130,6 +130,10 @@ public class MariaDbServiceImpl extends HibernateConnector implements DatabaseSe ...@@ -130,6 +130,10 @@ public class MariaDbServiceImpl extends HibernateConnector implements DatabaseSe
databaseRepository.deleteById(databaseId); databaseRepository.deleteById(databaseId);
log.info("Deleted database with id {}", databaseId); log.info("Deleted database with id {}", databaseId);
log.debug("deleted database {}", database); log.debug("deleted database {}", database);
// delete in database_index - elastic search
databaseidxRepository.delete(database);
log.info("Deleted database in elastic search with id {}", databaseId);
log.debug("deleted database in elastic search {}", database);
} }
@Override @Override
...@@ -158,9 +162,9 @@ public class MariaDbServiceImpl extends HibernateConnector implements DatabaseSe ...@@ -158,9 +162,9 @@ public class MariaDbServiceImpl extends HibernateConnector implements DatabaseSe
final PreparedStatement preparedStatement1 = databaseMapper.imageToRawGrantReadonlyAccessQuery(connection); final PreparedStatement preparedStatement1 = databaseMapper.imageToRawGrantReadonlyAccessQuery(connection);
preparedStatement1.executeUpdate(); preparedStatement1.executeUpdate();
} catch (SQLException e) { } catch (SQLException e) {
log.error("Failed to delete database"); log.error("Failed to create database");
log.debug("failed to delete database {}, reason: {}", database, e.getMessage()); log.debug("failed to create database {}, reason: {}", database, e.getMessage());
throw new DatabaseMalformedException("Failed to execute and map time-versioned query", e); throw new DatabaseMalformedException("Failed to execute query", e);
} finally { } finally {
dataSource.close(); dataSource.close();
} }
...@@ -170,12 +174,14 @@ public class MariaDbServiceImpl extends HibernateConnector implements DatabaseSe ...@@ -170,12 +174,14 @@ public class MariaDbServiceImpl extends HibernateConnector implements DatabaseSe
database.setIsPublic(createDto.getIsPublic()); database.setIsPublic(createDto.getIsPublic());
final User creator = userService.findByUsername(principal.getName()); final User creator = userService.findByUsername(principal.getName());
database.setCreator(creator); database.setCreator(creator);
final Database out = databaseRepository.save(database); final Database dbdb = databaseRepository.save(database);
log.info("Created database with id {}", out.getId()); log.info("Created database with id {}", dbdb.getId());
log.debug("created database {}", out); log.debug("created database {}", dbdb);
// save in database_index - elastic search // save in database_index - elastic search
// databaseidxRepository.save(database); final Database edb = databaseidxRepository.save(database);
return out; log.info("Saved database in elastic search with id {}", edb.getId());
log.debug("saved database in elastic search {}", edb);
return dbdb;
} }
@Override @Override
...@@ -186,20 +192,27 @@ public class MariaDbServiceImpl extends HibernateConnector implements DatabaseSe ...@@ -186,20 +192,27 @@ public class MariaDbServiceImpl extends HibernateConnector implements DatabaseSe
if (modifyDto.getContactPerson() != null) { if (modifyDto.getContactPerson() != null) {
database.setContact(userService.findByUsername(modifyDto.getContactPerson())); database.setContact(userService.findByUsername(modifyDto.getContactPerson()));
} }
if (modifyDto.getLicense() != null) {
final License license = licenseService.find(modifyDto.getLicense().getIdentifier()); final License license = licenseService.find(modifyDto.getLicense().getIdentifier());
log.info("Found license with identifier {}", modifyDto.getLicense().getIdentifier());
log.debug("found license {}", license);
database.setLicense(license);
}
database.setIsPublic(modifyDto.getIsPublic()); database.setIsPublic(modifyDto.getIsPublic());
database.setDescription(modifyDto.getDescription()); database.setDescription(modifyDto.getDescription());
database.setPublisher(modifyDto.getPublisher()); database.setPublisher(modifyDto.getPublisher());
database.setPublication(modifyDto.getPublication()); database.setPublication(modifyDto.getPublication());
database.setLanguage(databaseMapper.languageTypeDtoToLanguageType(modifyDto.getLanguage())); database.setLanguage(databaseMapper.languageTypeDtoToLanguageType(modifyDto.getLanguage()));
database.setLicense(license);
final Database out = databaseRepository.save(database); final Database dbdb = databaseRepository.save(database);
/* update entity in metadata database */ /* update entity in metadata database */
log.info("Updated database with id {}", out.getId()); log.info("Updated database with id {}", dbdb.getId());
log.debug("updated database {}", out); log.debug("updated database {}", dbdb);
// save in database_index - elastic search // save in database_index - elastic search
// databaseidxRepository.save(database); final Database edb = databaseidxRepository.save(database);
return out; log.info("Updated database in elastic search with id {}", edb.getId());
log.debug("updated database in elastic search {}", edb);
return dbdb;
} }
} }
...@@ -57,6 +57,7 @@ public class Container { ...@@ -57,6 +57,7 @@ public class Container {
@Column @Column
private Integer port; private Integer port;
@org.springframework.data.annotation.Transient
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.MERGE) @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.MERGE)
@JoinColumns({ @JoinColumns({
@JoinColumn(name = "id", referencedColumnName = "id", insertable = false, updatable = false) @JoinColumn(name = "id", referencedColumnName = "id", insertable = false, updatable = false)
......
...@@ -72,6 +72,7 @@ public class ContainerImage { ...@@ -72,6 +72,7 @@ public class ContainerImage {
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "image") @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "image")
private List<ContainerImageDate> dateFormats; private List<ContainerImageDate> dateFormats;
@org.springframework.data.annotation.Transient
@ToString.Exclude @ToString.Exclude
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.MERGE, mappedBy = "image") @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.MERGE, mappedBy = "image")
private List<Container> containers; private List<Container> containers;
......
...@@ -34,6 +34,7 @@ public class ContainerImageDate { ...@@ -34,6 +34,7 @@ public class ContainerImageDate {
@Column(name = "iid") @Column(name = "iid")
private Long iid; private Long iid;
@org.springframework.data.annotation.Transient
@ToString.Exclude @ToString.Exclude
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.MERGE) @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.MERGE)
@JoinColumn(name = "iid", insertable = false, updatable = false) @JoinColumn(name = "iid", insertable = false, updatable = false)
......
...@@ -10,8 +10,6 @@ import org.hibernate.annotations.Where; ...@@ -10,8 +10,6 @@ import org.hibernate.annotations.Where;
import org.springframework.data.annotation.CreatedDate; import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate; import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.elasticsearch.annotations.Document; import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;
import org.springframework.data.jpa.domain.support.AuditingEntityListener; import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.*; import javax.persistence.*;
...@@ -33,7 +31,6 @@ import java.util.List; ...@@ -33,7 +31,6 @@ import java.util.List;
}) })
public class Database { public class Database {
@Field(type = FieldType.Integer)
@Id @Id
@EqualsAndHashCode.Include @EqualsAndHashCode.Include
@GeneratedValue(generator = "database-sequence") @GeneratedValue(generator = "database-sequence")
...@@ -44,14 +41,12 @@ public class Database { ...@@ -44,14 +41,12 @@ public class Database {
) )
private Long id; private Long id;
@Field(index = false)
@ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL) @ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinColumns({ @JoinColumns({
@JoinColumn(name = "Creator", referencedColumnName = "UserID") @JoinColumn(name = "Creator", referencedColumnName = "UserID")
}) })
private User creator; private User creator;
@Field(index = false)
@ToString.Exclude @ToString.Exclude
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL) @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumns({ @JoinColumns({
...@@ -59,61 +54,49 @@ public class Database { ...@@ -59,61 +54,49 @@ public class Database {
}) })
private Container container; private Container container;
@Field(type = FieldType.Text)
@Column(nullable = false) @Column(nullable = false)
private String name; private String name;
@Field(index = false)
@ElementCollection @ElementCollection
@CollectionTable(name = "mdb_databases_subjects", joinColumns = { @CollectionTable(name = "mdb_databases_subjects", joinColumns = {
@JoinColumn(name = "dbid", referencedColumnName = "id") @JoinColumn(name = "dbid", referencedColumnName = "id")
}) })
private List<String> subjects; private List<String> subjects;
@Field(type = FieldType.Text)
@Column(nullable = false) @Column(nullable = false)
private String internalName; private String internalName;
@Field(type = FieldType.Text)
@Column(nullable = false) @Column(nullable = false)
private String exchange; private String exchange;
@Field(type = FieldType.Text)
@Column @Column
private String description; private String description;
@Field(type = FieldType.Text)
@Column @Column
private String publisher; private String publisher;
@Field(type = FieldType.Text)
@Column @Column
private String publication; private String publication;
@Field(index = false)
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.MERGE) @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.MERGE)
@JoinColumns({ @JoinColumns({
@JoinColumn(name = "contactperson", referencedColumnName = "UserID", insertable = false, updatable = false) @JoinColumn(name = "contactperson", referencedColumnName = "UserID", insertable = false, updatable = false)
}) })
private User contact; private User contact;
@Field(index = false)
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL) @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumns({ @JoinColumns({
@JoinColumn(name = "tdbid", referencedColumnName = "id", insertable = false, updatable = false) @JoinColumn(name = "tdbid", referencedColumnName = "id", insertable = false, updatable = false)
}) })
private List<Table> tables; private List<Table> tables;
@Field(type = FieldType.Boolean)
@Column(nullable = false) @Column(nullable = false)
private Boolean isPublic; private Boolean isPublic;
@Field(index = false)
@Column(columnDefinition = "enum('EN', 'DE', 'OTHER')") @Column(columnDefinition = "enum('EN', 'DE', 'OTHER')")
@Enumerated(EnumType.STRING) @Enumerated(EnumType.STRING)
private LanguageType language; private LanguageType language;
@Field(index = false)
@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL) @OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumns({ @JoinColumns({
@JoinColumn(name = "License", referencedColumnName = "identifier") @JoinColumn(name = "License", referencedColumnName = "identifier")
......
...@@ -66,6 +66,7 @@ public class Table { ...@@ -66,6 +66,7 @@ public class Table {
@Column(name = "tdescription") @Column(name = "tdescription")
private String description; private String description;
@org.springframework.data.annotation.Transient
@ToString.Exclude @ToString.Exclude
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.MERGE) @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.MERGE)
@JoinColumn(name = "tdbid", insertable = false, updatable = false) @JoinColumn(name = "tdbid", insertable = false, updatable = false)
......
...@@ -60,6 +60,7 @@ public class TableColumn implements Comparable<TableColumn> { ...@@ -60,6 +60,7 @@ public class TableColumn implements Comparable<TableColumn> {
@JoinColumn(name = "dfid", referencedColumnName = "id", insertable = false, updatable = false) @JoinColumn(name = "dfid", referencedColumnName = "id", insertable = false, updatable = false)
private ContainerImageDate dateFormat; private ContainerImageDate dateFormat;
@org.springframework.data.annotation.Transient
@ToString.Exclude @ToString.Exclude
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.MERGE) @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.MERGE)
@JoinColumns({ @JoinColumns({
......
...@@ -27,6 +27,7 @@ public class Concept { ...@@ -27,6 +27,7 @@ public class Concept {
@Column(name = "name", nullable = false) @Column(name = "name", nullable = false)
private String name; private String name;
@org.springframework.data.annotation.Transient
@ToString.Exclude @ToString.Exclude
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.MERGE) @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.MERGE)
@JoinTable(name = "mdb_columns_concepts", @JoinTable(name = "mdb_columns_concepts",
......
...@@ -45,6 +45,7 @@ public class Creator { ...@@ -45,6 +45,7 @@ public class Creator {
@Column @Column
private String orcid; private String orcid;
@org.springframework.data.annotation.Transient
@ToString.Exclude @ToString.Exclude
@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY) @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinColumn(name = "pid", referencedColumnName = "id", insertable = false, updatable = false) @JoinColumn(name = "pid", referencedColumnName = "id", insertable = false, updatable = false)
......
...@@ -42,6 +42,7 @@ public class Token { ...@@ -42,6 +42,7 @@ public class Token {
@Column(nullable = false) @Column(nullable = false)
private Boolean processed; private Boolean processed;
@org.springframework.data.annotation.Transient
@ToString.Exclude @ToString.Exclude
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL) @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumns({ @JoinColumns({
......
package at.tuwien.entities.user; package at.tuwien.entities.user;
import lombok.*; import lombok.*;
import org.hibernate.annotations.ColumnDefault;
import org.hibernate.annotations.GenericGenerator; import org.hibernate.annotations.GenericGenerator;
import org.springframework.data.annotation.CreatedDate; import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate; import org.springframework.data.annotation.LastModifiedDate;
......
...@@ -223,10 +223,16 @@ export default { ...@@ -223,10 +223,16 @@ export default {
console.debug('user data', res.data) console.debug('user data', res.data)
this.user = res.data this.user = res.data
} catch (err) { } catch (err) {
const { status } = err.response
if (status === 401) {
console.error('Token expired', err)
this.logout()
} else {
console.error('user data', err) console.error('user data', err)
this.$toast.error('Failed to load user') this.$toast.error('Failed to load user')
this.error = true this.error = true
} }
}
this.loadingUser = false this.loadingUser = false
}, },
setTheme () { setTheme () {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment