From 7b89c4535384ac049271799046144c46b30e62f5 Mon Sep 17 00:00:00 2001
From: Thomas <gltron3000@gmail.com>
Date: Tue, 26 May 2020 17:38:53 +0200
Subject: [PATCH] Fixed deployment config

---
 buildAndRun.sh                                |  2 +-
 docker-compose.yml                            | 22 ++++------
 mozen/pom.xml                                 | 12 ++----
 .../src/main/java/mozen/MozenApplication.java | 40 -------------------
 .../mozen/auth/JwtAuthenticationFilter.java   |  2 +
 .../src/main/java/mozen/auth/WebSecurity.java | 37 +++++++++--------
 .../java/mozen/web/CommentController.java     |  2 +-
 .../java/mozen/web/CustomLayerController.java |  2 +-
 .../main/java/mozen/web/ModelController.java  |  2 +-
 .../main/java/mozen/web/SearchController.java |  2 +-
 .../main/java/mozen/web/TagController.java    |  2 +-
 .../main/java/mozen/web/UserController.java   |  2 +-
 .../main/java/mozen/web/VoteController.java   |  2 +-
 .../src/main/resources/application.properties | 25 +++++++++---
 .../src/test/resources/application.properties |  5 +++
 15 files changed, 66 insertions(+), 93 deletions(-)
 create mode 100644 mozen/src/test/resources/application.properties

diff --git a/buildAndRun.sh b/buildAndRun.sh
index 0a83112..1b9b701 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 301901a..b668036 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 956a989..993375b 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 fa1e655..015cef3 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 d600d31..7eaa46a 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 e42b976..18fe1db 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 29931a0..f8234ea 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 ce3e2df..0ed31f1 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 11d6b47..69e8522 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 8d6c0fb..a4aadda 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 e245ba6..abff07d 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 4a9f4d9..c5504ad 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 ad0913c..e8a2ceb 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 eb021a5..4d10c89 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 0000000..ebdca00
--- /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
-- 
GitLab