diff --git a/buildAndRun.sh b/buildAndRun.sh index 0a83112666df019a6fd727fd84dde55f1e410c69..1b9b70158c0f2277082d758175fc2b8469ba9ddd 100755 --- a/buildAndRun.sh +++ b/buildAndRun.sh @@ -1,3 +1,3 @@ ./quickBuildToJar.sh docker build . -t gltron/mozen -docker run --name mozen -d -p 8007:8181 gltron/mozen \ No newline at end of file +docker-compose up -d \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 301901a7827811e2c9586628fdec5867f80341b5..b668036a6ad00ff77d1e6e17d7e27674041e1bd6 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,7 +1,7 @@ version: '3' services: # https://docs.linuxserver.io/images/docker-mariadb - mariadb: + mozen_mariadb: image: linuxserver/mariadb container_name: mozen_mariadb environment: @@ -10,23 +10,17 @@ services: - MYSQL_ROOT_PASSWORD=ROOT_ACCESS_PASSWORD - TZ=Europe/Paris - MYSQL_DATABASE=MOZEN_DB - - MYSQL_USER=mozen + - MYSQL_USER=mozen_user - MYSQL_PASSWORD=1234 volumes: - - path_to_data:/config - ports: - - 3306:3306 + - /data/mozen_db_data:/config restart: unless-stopped - mozen: + mozen_web: depends_on: - - mariadb - image: mozen - container_name: mozen - environment: - - DB_PORT=3306 - - DB_USER=mozen - - DB_PASSWORD=1234 + - mozen_mariadb + image: gltron/mozen + container_name: mozen_web ports: - - 80:8181 + - 8007:8181 restart: unless-stopped diff --git a/mozen/pom.xml b/mozen/pom.xml index 956a989d57ce1bb584106b99046affd9c54ca124..993375b9df8e869dbf616b1f9741dc3b9fcde032 100644 --- a/mozen/pom.xml +++ b/mozen/pom.xml @@ -23,10 +23,6 @@ <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-mail</artifactId> - </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> @@ -46,11 +42,11 @@ <version>0.9.1</version> </dependency> <dependency> - <groupId>org.postgresql</groupId> - <artifactId>postgresql</artifactId> - <scope>runtime</scope> + <groupId>org.mariadb.jdbc</groupId> + <artifactId>mariadb-java-client</artifactId> + <version>2.6.0</version> </dependency> - + <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> diff --git a/mozen/src/main/java/mozen/MozenApplication.java b/mozen/src/main/java/mozen/MozenApplication.java index fa1e6554caef703ec43288d35a9b7863af5cec2e..015cef3e0d8467fde1ad790fa6b18b56587085ab 100644 --- a/mozen/src/main/java/mozen/MozenApplication.java +++ b/mozen/src/main/java/mozen/MozenApplication.java @@ -1,8 +1,5 @@ package mozen; -import javax.persistence.EntityManagerFactory; -import javax.sql.DataSource; - import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.domain.EntityScan; @@ -10,14 +7,7 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.PropertySource; import org.springframework.data.jpa.repository.config.EnableJpaRepositories; -import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder; -import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType; -import org.springframework.orm.jpa.JpaTransactionManager; -import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; -import org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor; -import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; -import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.annotation.EnableTransactionManagement; @SpringBootApplication @@ -33,36 +23,6 @@ public class MozenApplication { return new BCryptPasswordEncoder(); } - @Bean - public DataSource dataSource() { - EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder(); - return builder.setType(EmbeddedDatabaseType.HSQL).build(); - } - - @Bean - public LocalContainerEntityManagerFactoryBean entityManagerFactory() { - HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter(); - vendorAdapter.setGenerateDdl(true); - - LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean(); - factory.setJpaVendorAdapter(vendorAdapter); - factory.setPackagesToScan("mozen.model"); - factory.setDataSource(dataSource()); - return factory; - } - - @Bean - public PlatformTransactionManager transactionManager(EntityManagerFactory emf) { - JpaTransactionManager transactionManager = new JpaTransactionManager(); - transactionManager.setEntityManagerFactory(emf); - return transactionManager; - } - - @Bean - public PersistenceAnnotationBeanPostProcessor annotationProcessor() { - return new PersistenceAnnotationBeanPostProcessor(); - } - public static void main(String[] args) { SpringApplication.run(MozenApplication.class, args); } diff --git a/mozen/src/main/java/mozen/auth/JwtAuthenticationFilter.java b/mozen/src/main/java/mozen/auth/JwtAuthenticationFilter.java index d600d31eaf00a076524983a80a1afdf752e912d2..7eaa46ae37ed85744a6e6adf527d76ea4c9d3465 100644 --- a/mozen/src/main/java/mozen/auth/JwtAuthenticationFilter.java +++ b/mozen/src/main/java/mozen/auth/JwtAuthenticationFilter.java @@ -26,6 +26,8 @@ public class JwtAuthenticationFilter extends UsernamePasswordAuthenticationFilte public JwtAuthenticationFilter(AuthenticationManager authenticationManager){ this.authenticationManager = authenticationManager; + + setFilterProcessesUrl("/api/users/login"); } @Override diff --git a/mozen/src/main/java/mozen/auth/WebSecurity.java b/mozen/src/main/java/mozen/auth/WebSecurity.java index e42b9763282af70f18bc25171d74a16619354375..18fe1dbca80e1163f8bd4116ef724d78e4d6403a 100644 --- a/mozen/src/main/java/mozen/auth/WebSecurity.java +++ b/mozen/src/main/java/mozen/auth/WebSecurity.java @@ -37,27 +37,30 @@ public class WebSecurity extends WebSecurityConfigurerAdapter{ // PUBLIC SECTION .requestMatchers(PathRequest.toStaticResources().atCommonLocations()).permitAll() .antMatchers("/").permitAll() - .antMatchers(HttpMethod.POST, "/login").permitAll() - .antMatchers(HttpMethod.POST, "/users/signup").permitAll() - .antMatchers(HttpMethod.GET, "/search").permitAll() - .antMatchers(HttpMethod.GET, "/comments").permitAll() - .antMatchers(HttpMethod.GET, "/tags").permitAll() - .antMatchers(HttpMethod.GET, "/models").permitAll() - .antMatchers(HttpMethod.GET, "/models/download").permitAll() - .antMatchers(HttpMethod.GET, "/layers/download").permitAll() + .antMatchers(HttpMethod.POST, "/api/users/login").permitAll() + .antMatchers(HttpMethod.POST, "/api/users/signup").permitAll() + .antMatchers(HttpMethod.GET, "/api/search").permitAll() + .antMatchers(HttpMethod.GET, "/api/comments").permitAll() + .antMatchers(HttpMethod.GET, "/api/tags").permitAll() + .antMatchers(HttpMethod.GET, "/api/models").permitAll() + .antMatchers(HttpMethod.GET, "/api/models/download").permitAll() + .antMatchers(HttpMethod.GET, "/api/layers/download").permitAll() // ADMIN SECTION - .antMatchers(HttpMethod.GET, "/models/setVerified").hasRole("ADMIN") - .antMatchers(HttpMethod.GET, "/users/setAdmin").hasRole("ADMIN") - .antMatchers(HttpMethod.DELETE, "/tags").hasRole("ADMIN") - .antMatchers(HttpMethod.DELETE, "/tags/category").hasRole("ADMIN") - .antMatchers(HttpMethod.POST, "/tags/category").hasRole("ADMIN") - .antMatchers(HttpMethod.GET, "/models/list").hasRole("ADMIN") - .antMatchers(HttpMethod.GET, "/users/list").hasRole("ADMIN") - .antMatchers(HttpMethod.GET, "/comments/list").hasRole("ADMIN") + .antMatchers(HttpMethod.GET, "/api/models/setVerified").hasRole("ADMIN") + .antMatchers(HttpMethod.GET, "/api/users/setAdmin").hasRole("ADMIN") + .antMatchers(HttpMethod.DELETE, "/api/tags").hasRole("ADMIN") + .antMatchers(HttpMethod.DELETE, "/api/tags/category").hasRole("ADMIN") + .antMatchers(HttpMethod.POST, "/api/tags/category").hasRole("ADMIN") + .antMatchers(HttpMethod.GET, "/api/models/list").hasRole("ADMIN") + .antMatchers(HttpMethod.GET, "/api/users/list").hasRole("ADMIN") + .antMatchers(HttpMethod.GET, "/api/comments/list").hasRole("ADMIN") // USER SECTION - .anyRequest().authenticated() + .antMatchers("/api/**").authenticated() + + // DEFAULT + .anyRequest().permitAll() .and() .addFilter(new JwtAuthenticationFilter(authenticationManager())) .addFilter(new JwtAuthorizationFilter(authenticationManager())) diff --git a/mozen/src/main/java/mozen/web/CommentController.java b/mozen/src/main/java/mozen/web/CommentController.java index 29931a0a606d9a7e192bf3201f6c792d3836003d..f8234ea5500ded2a0f516046ccbe2a826ac33d89 100644 --- a/mozen/src/main/java/mozen/web/CommentController.java +++ b/mozen/src/main/java/mozen/web/CommentController.java @@ -22,7 +22,7 @@ import mozen.model.User; import mozen.utils.UserHelper; @RestController -@RequestMapping("/comments") +@RequestMapping("/api/comments") @CrossOrigin public class CommentController { @Autowired diff --git a/mozen/src/main/java/mozen/web/CustomLayerController.java b/mozen/src/main/java/mozen/web/CustomLayerController.java index ce3e2dfeebd792fe51d5a6cbc88238e1d655017c..0ed31f197c06363d185f72588426d174323d5c73 100644 --- a/mozen/src/main/java/mozen/web/CustomLayerController.java +++ b/mozen/src/main/java/mozen/web/CustomLayerController.java @@ -22,7 +22,7 @@ import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam; @RestController -@RequestMapping("/layers") +@RequestMapping("/api/layers") @CrossOrigin public class CustomLayerController { @Autowired diff --git a/mozen/src/main/java/mozen/web/ModelController.java b/mozen/src/main/java/mozen/web/ModelController.java index 11d6b47bafbbbf602a02396667b2cce4596c52e8..69e852234d001f660f062d01a29400225dd6d720 100644 --- a/mozen/src/main/java/mozen/web/ModelController.java +++ b/mozen/src/main/java/mozen/web/ModelController.java @@ -30,7 +30,7 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; @RestController -@RequestMapping("/models") +@RequestMapping("/api/models") @CrossOrigin public class ModelController { @Autowired diff --git a/mozen/src/main/java/mozen/web/SearchController.java b/mozen/src/main/java/mozen/web/SearchController.java index 8d6c0fbfb8490154482cdf151272cc2ede9705b4..a4aaddaabe70282ab662da909fc52ca925bf66cb 100644 --- a/mozen/src/main/java/mozen/web/SearchController.java +++ b/mozen/src/main/java/mozen/web/SearchController.java @@ -13,7 +13,7 @@ import mozen.business.IModelManager; import mozen.messages.SearchResult; @RestController -@RequestMapping("/search") +@RequestMapping("/api/search") @CrossOrigin public class SearchController { @Autowired diff --git a/mozen/src/main/java/mozen/web/TagController.java b/mozen/src/main/java/mozen/web/TagController.java index e245ba6df9a9e4cc4bd528ae3af6ae67ac3ecd57..abff07d81299dfa1397406eb953d55bf7e0b74f8 100644 --- a/mozen/src/main/java/mozen/web/TagController.java +++ b/mozen/src/main/java/mozen/web/TagController.java @@ -22,7 +22,7 @@ import mozen.messages.TagMessage; import mozen.model.TagCategory; @RestController -@RequestMapping("/tags") +@RequestMapping("/api/tags") @CrossOrigin public class TagController { @Autowired diff --git a/mozen/src/main/java/mozen/web/UserController.java b/mozen/src/main/java/mozen/web/UserController.java index 4a9f4d9e019ee0cd5786467edaefc66768f0a306..c5504ad728f00c06893a0fb9d13f81e18db414cf 100644 --- a/mozen/src/main/java/mozen/web/UserController.java +++ b/mozen/src/main/java/mozen/web/UserController.java @@ -29,7 +29,7 @@ import mozen.utils.JwtUtils; import mozen.utils.UserHelper; @RestController -@RequestMapping("/users") +@RequestMapping("/api/users") @CrossOrigin public class UserController { @Autowired diff --git a/mozen/src/main/java/mozen/web/VoteController.java b/mozen/src/main/java/mozen/web/VoteController.java index ad0913c66606e052582cd028f3e359fbb059d878..e8a2ceb081fab8fd9fc9219f4073fda92f4f6e6a 100644 --- a/mozen/src/main/java/mozen/web/VoteController.java +++ b/mozen/src/main/java/mozen/web/VoteController.java @@ -19,7 +19,7 @@ import mozen.utils.UserHelper; import org.springframework.web.bind.annotation.RequestParam; @RestController -@RequestMapping("/vote") +@RequestMapping("/api/vote") @CrossOrigin public class VoteController { @Autowired diff --git a/mozen/src/main/resources/application.properties b/mozen/src/main/resources/application.properties index eb021a5f4350993619f1dd704a728cd33b308fc1..4d10c8991625874e9442803c1b173e43dd415bca 100644 --- a/mozen/src/main/resources/application.properties +++ b/mozen/src/main/resources/application.properties @@ -1,12 +1,11 @@ - server.port=8181 # H2 -spring.datasource.driverClassName=org.hsqldb.jdbcDriver -spring.datasource.url=jdbc:hsqldb:mem:mydb -spring.datasource.username=SA -spring.datasource.password= -spring.jpa.database-platform=org.hibernate.dialect.H2Dialect +#spring.datasource.driverClassName=org.hsqldb.jdbcDriver +#spring.datasource.url=jdbc:hsqldb:mem:mydb +#spring.datasource.username=SA +#spring.datasource.password= +#spring.jpa.database-platform=org.hibernate.dialect.H2Dialect # MySQL #spring.datasource.url=jdbc:mysql://localhost:3306/test @@ -15,6 +14,20 @@ spring.jpa.database-platform=org.hibernate.dialect.H2Dialect #spring.datasource.driver-class-name=com.mysql.jdbc.Driver #spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect +# MARIADB +#spring.datasource.url=jdbc:mariadb://localhost:3306/MOZEN_DB +#spring.datasource.username=mozen_user +#spring.datasource.password=1234 +#spring.datasource.driver-class-name=org.mariadb.jdbc.Driver +#spring.jpa.hibernate.ddl-auto=update + +# DOCKER + MARIADB +spring.datasource.url=jdbc:mariadb://mozen_mariadb:3306/MOZEN_DB +spring.datasource.username=mozen_user +spring.datasource.password=1234 +spring.datasource.driver-class-name=org.mariadb.jdbc.Driver +spring.jpa.hibernate.ddl-auto=update + spring.servlet.multipart.max-file-size=10GB spring.servlet.multipart.max-request-size=10GB diff --git a/mozen/src/test/resources/application.properties b/mozen/src/test/resources/application.properties new file mode 100644 index 0000000000000000000000000000000000000000..ebdca00328a5a9ab106993ea726e123bb0bfed15 --- /dev/null +++ b/mozen/src/test/resources/application.properties @@ -0,0 +1,5 @@ +spring.datasource.driverClassName=org.hsqldb.jdbcDriver +spring.datasource.url=jdbc:hsqldb:mem:mydb +spring.datasource.username=SA +spring.datasource.password= +spring.jpa.database-platform=org.hibernate.dialect.H2Dialect \ No newline at end of file