Skip to content

Commit

Permalink
WIP
Browse files Browse the repository at this point in the history
  • Loading branch information
dnlkoch committed Oct 8, 2021
1 parent 90b2177 commit cb35590
Show file tree
Hide file tree
Showing 11 changed files with 447 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ public abstract class BaseService<T extends BaseCrudRepository<S, Long> & JpaSpe
@Autowired
ObjectMapper objectMapper;

@Autowired
@Autowired(required = false)
protected AuditReader auditReader;

@Autowired
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package de.terrestris.shogun.lib.config;

import org.hibernate.envers.AuditReader;
import org.hibernate.envers.AuditReaderFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.persistence.EntityManagerFactory;

@Configuration
public class AuditConfig {

private final EntityManagerFactory entityManagerFactory;

AuditConfig(EntityManagerFactory entityManagerFactory) {
this.entityManagerFactory = entityManagerFactory;
}

@Bean
AuditReader auditReader() {
return AuditReaderFactory.get(entityManagerFactory.createEntityManager());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,12 @@

import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import de.terrestris.shogun.lib.envers.ShogunEnversRevisionRepositoryFactoryBean;
import org.hibernate.envers.AuditReader;
import org.hibernate.envers.AuditReaderFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.Environment;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.orm.jpa.JpaTransactionManager;
Expand All @@ -33,15 +35,20 @@
import org.testcontainers.containers.JdbcDatabaseContainer;
import org.testcontainers.containers.PostgreSQLContainer;

import javax.persistence.EntityManager;
import javax.sql.DataSource;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

@Configuration(proxyBeanMethods = false)
@EnableJpaRepositories(basePackages = "de.terrestris.shogun.lib.repository")
@PropertySource("jdbc.properties")
@EnableJpaRepositories(
basePackages = "de.terrestris.shogun.lib.repository",
repositoryFactoryBeanClass = ShogunEnversRevisionRepositoryFactoryBean.class
)
//@TestPropertySource("jdbc.properties")
//@PropertySource("jdbc.properties")
@EnableTransactionManagement
public class JdbcConfiguration {

Expand Down Expand Up @@ -73,22 +80,31 @@ public DataSource dataSource(final JdbcDatabaseContainer databaseContainer) {
return dataSource;
}

private LocalContainerEntityManagerFactoryBean entityManagerFactory;

@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
LocalContainerEntityManagerFactoryBean result = new LocalContainerEntityManagerFactoryBean();

result.setDataSource(dataSource(postgreSQLContainer()));
result.setPackagesToScan(env.getProperty("shogun.model.packages"));
//result.setPackagesToScan(env.getProperty("shogun.model.packages"));
result.setPackagesToScan("de.terrestris.shogun.lib.model");
result.setJpaVendorAdapter(jpaVendorAdapter());

Map<String, Object> jpaProperties = new HashMap<>();
jpaProperties.put("hibernate.hbm2ddl.auto", env.getProperty("hibernate.hbm2ddl.auto"));
jpaProperties.put("hibernate.dialect", env.getProperty("hibernate.dialect"));
jpaProperties.put("hibernate.show_sql", env.getProperty("hibernate.show_sql"));
jpaProperties.put("hibernate.format_sql", env.getProperty("hibernate.format_sql"));
// jpaProperties.put("hibernate.hbm2ddl.auto", env.getProperty("hibernate.hbm2ddl.auto"));
// jpaProperties.put("hibernate.dialect", env.getProperty("hibernate.dialect"));
// jpaProperties.put("hibernate.show_sql", env.getProperty("hibernate.show_sql"));
// jpaProperties.put("hibernate.format_sql", env.getProperty("hibernate.format_sql"));
jpaProperties.put("hibernate.hbm2ddl.auto", "update");
jpaProperties.put("hibernate.dialect", "org.hibernate.dialect.PostgreSQLDialect");
jpaProperties.put("hibernate.show_sql", "false");
jpaProperties.put("hibernate.format_sql", "false");

result.setJpaPropertyMap(jpaProperties);

this.entityManagerFactory = result;

return result;
}

Expand All @@ -104,4 +120,8 @@ public PlatformTransactionManager transactionManager() {
return transactionManager;
}

// @Bean
// AuditReader auditReader() {
// return AuditReaderFactory.get(this.entityManagerFactory);
// }
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package de.terrestris.shogun.lib.config;

import de.terrestris.shogun.lib.security.access.BasePermissionEvaluator;
import de.terrestris.shogun.lib.security.access.entity.BaseEntityPermissionEvaluator;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.access.expression.method.DefaultMethodSecurityExpressionHandler;
import org.springframework.security.access.expression.method.MethodSecurityExpressionHandler;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
import org.springframework.security.config.annotation.method.configuration.GlobalMethodSecurityConfiguration;

import java.util.List;

@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class MethodSecurityConfig extends GlobalMethodSecurityConfiguration {

@Autowired
private BasePermissionEvaluator basePermissionEvaluator;

@Autowired
private List<BaseEntityPermissionEvaluator> permissionEvaluators;

@Override
protected MethodSecurityExpressionHandler createExpressionHandler() {
DefaultMethodSecurityExpressionHandler expressionHandler =
new DefaultMethodSecurityExpressionHandler();
expressionHandler.setPermissionEvaluator(basePermissionEvaluator);

return expressionHandler;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package de.terrestris.shogun.lib.config;

import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
@EnableWebMvc
@EnableAutoConfiguration
@ComponentScan(basePackages = {
"de.terrestris.shoguncore.controller"
})
public class WebConfig implements WebMvcConfigurer { }
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package de.terrestris.shogun.lib.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.anyRequest()
.authenticated()
.and()
.csrf()
.disable();
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package de.terrestris.shogun.lib.controller;

import de.terrestris.shogun.lib.model.Application;
import de.terrestris.shogun.lib.repository.ApplicationRepository;
import org.junit.After;
import org.junit.Before;
import org.springframework.test.context.ContextConfiguration;

import java.util.ArrayList;
import java.util.List;

@ContextConfiguration(classes = {
Application.class
})
public class ApplicationControllerTest extends BaseControllerTest<ApplicationController, ApplicationRepository, Application> {

@Before
public void setBasePath() {
basePath = "/applications";
}

@Before
public void setEntityClass() {
entityClass = Application.class;
}

@Before
public void insertTestData() {
Application entity1 = new Application();
Application entity2 = new Application();
Application entity3 = new Application();

entity1.setName("Application 1");
entity2.setName("Application 2");
entity3.setName("Application 3");

ArrayList<Application> entities = new ArrayList<>();

entities.add(entity1);
entities.add(entity2);
entities.add(entity3);

List<Application> persistedEntities = (List<Application>) repository.saveAll(entities);

testData = persistedEntities;
}

@After
public void cleanupTestData() {
repository.deleteAll(testData);
}

}
Loading

0 comments on commit cb35590

Please sign in to comment.