From 18d5c8bff7fb365e0c307e27aff2cbb3c40e252a Mon Sep 17 00:00:00 2001 From: FunixG Date: Wed, 12 Jul 2023 11:32:05 +0200 Subject: [PATCH 1/2] Migrated to microservices --- .../clients/FunixBotCommandClient.java | 15 --- .../fr/funixgaming/api/client/TestApp.java | 15 --- .../api/client/beans/JsonHelper.java | 36 ------- api/src/test/resources/application.properties | 34 ------- entrypointPteroq.sh | 16 ---- local.Dockerfile | 25 ----- modules/core/client/pom.xml | 21 ++++ .../client/clients/FeignTokenInterceptor.java | 8 +- modules/core/pom.xml | 28 ++++++ modules/core/service/pom.xml | 21 ++++ .../configs/FunixGamingCoreConfig.java | 24 +++++ modules/core/test/pom.xml | 39 ++++++++ .../api/core/test}/ResourceTestHandler.java | 10 +- modules/funixbot/client/pom.xml | 29 ++++++ .../client/clients/FunixBotCommandClient.java | 15 +++ .../clients/FunixBotUserExperienceClient.java | 10 +- .../client}/dtos/FunixBotCommandDTO.java | 2 +- .../dtos/FunixBotUserExperienceDTO.java | 2 +- {api => modules/funixbot}/pom.xml | 18 ++-- {service => modules/funixbot/service}/pom.xml | 59 ++++++------ .../service/FunixGamingFunixBotApp.java | 17 ++++ .../service}/entities/FunixBotCommand.java | 3 +- .../entities/FunixBotUserExperience.java | 2 +- .../mappers/FunixBotCommandMapper.java | 10 ++ .../mappers/FunixBotUserExperienceMapper.java | 13 +-- .../FunixBotCommandRepository.java | 4 +- .../FunixBotUserExperienceRepository.java | 4 +- .../resources/FunixBotCommandResource.java | 8 +- .../FunixBotUserExperienceResource.java | 8 +- .../service/security/WebSecurity.java | 23 +++++ .../services/FunixBotCommandsService.java | 10 +- .../FunixBotUserExperienceService.java | 10 +- .../src/main/resources/application.properties | 17 ++-- .../DISABLED_V1.0.0__init_funixbot_api.sql | 23 +++++ .../service}/TestFunixBotUserExperience.java | 10 +- .../src/test/resources/application.properties | 9 ++ pom.xml | 10 +- pterodactyl.Dockerfile | 31 ------ .../docker_funixgaming_api/config/init.sql | 2 - .../docker_funixgaming_api/docker-compose.yml | 42 -------- .../api/server/FunixGamingApiApp.java | 19 ---- .../components/FunixGamingWebSecurity.java | 75 --------------- .../auth/components/JwtTokenFilter.java | 95 ------------------- .../api/server/auth/entities/Session.java | 14 --- .../api/server/configs/EncryptionString.java | 25 ----- .../server/configs/FunixGamingApiConfig.java | 25 ----- .../configs/FunixGamingApiEncryption.java | 8 -- .../mappers/FunixBotCommandMapper.java | 19 ---- .../resources/application-docker.properties | 9 -- .../resources/application-local.properties | 18 ---- .../main/resources/db/migration/V1__init.sql | 76 --------------- .../db/migration/V2__fix_twitch_auth.sql | 1 - .../db/migration/V3__add_twitch_event_sub.sql | 8 -- .../V4__funixproductions_migration.sql | 5 - service/src/main/resources/logback.xml | 24 ----- .../src/test/resources/application.properties | 12 --- service/src/test/resources/views/login.html | 56 ----------- .../src/test/resources/views/register.html | 60 ------------ 58 files changed, 362 insertions(+), 870 deletions(-) delete mode 100644 api/src/main/java/fr/funixgaming/api/client/funixbot/clients/FunixBotCommandClient.java delete mode 100644 api/src/test/java/fr/funixgaming/api/client/TestApp.java delete mode 100644 api/src/test/java/fr/funixgaming/api/client/beans/JsonHelper.java delete mode 100644 api/src/test/resources/application.properties delete mode 100644 entrypointPteroq.sh delete mode 100644 local.Dockerfile create mode 100644 modules/core/client/pom.xml rename api/src/main/java/fr/funixgaming/api/client/config/FeignConfig.java => modules/core/client/src/main/java/fr/funixgaming/api/core/client/clients/FeignTokenInterceptor.java (54%) create mode 100644 modules/core/pom.xml create mode 100644 modules/core/service/pom.xml create mode 100644 modules/core/service/src/main/java/fr/funixgaming/api/core/service/configs/FunixGamingCoreConfig.java create mode 100644 modules/core/test/pom.xml rename {service/src/test/java/fr/funixgaming/api/server => modules/core/test/src/main/java/fr/funixgaming/api/core/test}/ResourceTestHandler.java (88%) create mode 100644 modules/funixbot/client/pom.xml create mode 100644 modules/funixbot/client/src/main/java/fr/funixgaming/api/funixbot/client/clients/FunixBotCommandClient.java rename {api/src/main/java/fr/funixgaming/api/client/funixbot => modules/funixbot/client/src/main/java/fr/funixgaming/api/funixbot/client}/clients/FunixBotUserExperienceClient.java (63%) rename {api/src/main/java/fr/funixgaming/api/client/funixbot => modules/funixbot/client/src/main/java/fr/funixgaming/api/funixbot/client}/dtos/FunixBotCommandDTO.java (85%) rename {api/src/main/java/fr/funixgaming/api/client/funixbot => modules/funixbot/client/src/main/java/fr/funixgaming/api/funixbot/client}/dtos/FunixBotUserExperienceDTO.java (90%) rename {api => modules/funixbot}/pom.xml (67%) rename {service => modules/funixbot/service}/pom.xml (68%) create mode 100644 modules/funixbot/service/src/main/java/fr/funixgaming/api/funixbot/service/FunixGamingFunixBotApp.java rename {service/src/main/java/fr/funixgaming/api/server/funixbot => modules/funixbot/service/src/main/java/fr/funixgaming/api/funixbot/service}/entities/FunixBotCommand.java (88%) rename {service/src/main/java/fr/funixgaming/api/server/funixbot => modules/funixbot/service/src/main/java/fr/funixgaming/api/funixbot/service}/entities/FunixBotUserExperience.java (93%) create mode 100644 modules/funixbot/service/src/main/java/fr/funixgaming/api/funixbot/service/mappers/FunixBotCommandMapper.java rename {service/src/main/java/fr/funixgaming/api/server/funixbot => modules/funixbot/service/src/main/java/fr/funixgaming/api/funixbot/service}/mappers/FunixBotUserExperienceMapper.java (65%) rename {service/src/main/java/fr/funixgaming/api/server/funixbot => modules/funixbot/service/src/main/java/fr/funixgaming/api/funixbot/service}/repositories/FunixBotCommandRepository.java (70%) rename {service/src/main/java/fr/funixgaming/api/server/funixbot => modules/funixbot/service/src/main/java/fr/funixgaming/api/funixbot/service}/repositories/FunixBotUserExperienceRepository.java (63%) rename {service/src/main/java/fr/funixgaming/api/server/funixbot => modules/funixbot/service/src/main/java/fr/funixgaming/api/funixbot/service}/resources/FunixBotCommandResource.java (67%) rename {service/src/main/java/fr/funixgaming/api/server/funixbot => modules/funixbot/service/src/main/java/fr/funixgaming/api/funixbot/service}/resources/FunixBotUserExperienceResource.java (72%) create mode 100644 modules/funixbot/service/src/main/java/fr/funixgaming/api/funixbot/service/security/WebSecurity.java rename {service/src/main/java/fr/funixgaming/api/server/funixbot => modules/funixbot/service/src/main/java/fr/funixgaming/api/funixbot/service}/services/FunixBotCommandsService.java (56%) rename {service/src/main/java/fr/funixgaming/api/server/funixbot => modules/funixbot/service/src/main/java/fr/funixgaming/api/funixbot/service}/services/FunixBotUserExperienceService.java (75%) rename {service => modules/funixbot/service}/src/main/resources/application.properties (69%) create mode 100644 modules/funixbot/service/src/main/resources/db.migration/DISABLED_V1.0.0__init_funixbot_api.sql rename {service/src/test/java/fr/funixgaming/api/server/funixbot => modules/funixbot/service/src/test/java/fr/funixgaming/api/funixbot/service}/TestFunixBotUserExperience.java (95%) create mode 100644 modules/funixbot/service/src/test/resources/application.properties delete mode 100644 pterodactyl.Dockerfile delete mode 100644 service/docker_funixgaming_api/config/init.sql delete mode 100644 service/docker_funixgaming_api/docker-compose.yml delete mode 100644 service/src/main/java/fr/funixgaming/api/server/FunixGamingApiApp.java delete mode 100644 service/src/main/java/fr/funixgaming/api/server/auth/components/FunixGamingWebSecurity.java delete mode 100644 service/src/main/java/fr/funixgaming/api/server/auth/components/JwtTokenFilter.java delete mode 100644 service/src/main/java/fr/funixgaming/api/server/auth/entities/Session.java delete mode 100644 service/src/main/java/fr/funixgaming/api/server/configs/EncryptionString.java delete mode 100644 service/src/main/java/fr/funixgaming/api/server/configs/FunixGamingApiConfig.java delete mode 100644 service/src/main/java/fr/funixgaming/api/server/configs/FunixGamingApiEncryption.java delete mode 100644 service/src/main/java/fr/funixgaming/api/server/funixbot/mappers/FunixBotCommandMapper.java delete mode 100644 service/src/main/resources/application-docker.properties delete mode 100644 service/src/main/resources/application-local.properties delete mode 100644 service/src/main/resources/db/migration/V1__init.sql delete mode 100644 service/src/main/resources/db/migration/V2__fix_twitch_auth.sql delete mode 100644 service/src/main/resources/db/migration/V3__add_twitch_event_sub.sql delete mode 100644 service/src/main/resources/db/migration/V4__funixproductions_migration.sql delete mode 100644 service/src/main/resources/logback.xml delete mode 100644 service/src/test/resources/application.properties delete mode 100644 service/src/test/resources/views/login.html delete mode 100644 service/src/test/resources/views/register.html diff --git a/api/src/main/java/fr/funixgaming/api/client/funixbot/clients/FunixBotCommandClient.java b/api/src/main/java/fr/funixgaming/api/client/funixbot/clients/FunixBotCommandClient.java deleted file mode 100644 index a978e19b..00000000 --- a/api/src/main/java/fr/funixgaming/api/client/funixbot/clients/FunixBotCommandClient.java +++ /dev/null @@ -1,15 +0,0 @@ -package fr.funixgaming.api.client.funixbot.clients; - -import com.funixproductions.core.crud.clients.CrudClient; -import fr.funixgaming.api.client.config.FeignConfig; -import fr.funixgaming.api.client.funixbot.dtos.FunixBotCommandDTO; -import org.springframework.cloud.openfeign.FeignClient; - -@FeignClient( - name = "FunixBotCommands", - url = "${funixgaming.api.app-domain-url}", - path = "/funixbot/command/", - configuration = FeignConfig.class -) -public interface FunixBotCommandClient extends CrudClient { -} diff --git a/api/src/test/java/fr/funixgaming/api/client/TestApp.java b/api/src/test/java/fr/funixgaming/api/client/TestApp.java deleted file mode 100644 index 951fae8b..00000000 --- a/api/src/test/java/fr/funixgaming/api/client/TestApp.java +++ /dev/null @@ -1,15 +0,0 @@ -package fr.funixgaming.api.client; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cloud.openfeign.EnableFeignClients; -import org.springframework.data.web.config.EnableSpringDataWebSupport; - -@SpringBootApplication(scanBasePackages = "fr.funixgaming.api") -@EnableFeignClients(basePackages = "fr.funixgaming.api") -@EnableSpringDataWebSupport -public class TestApp { - public static void main(String[] args) { - SpringApplication.run(TestApp.class); - } -} diff --git a/api/src/test/java/fr/funixgaming/api/client/beans/JsonHelper.java b/api/src/test/java/fr/funixgaming/api/client/beans/JsonHelper.java deleted file mode 100644 index fa0c0178..00000000 --- a/api/src/test/java/fr/funixgaming/api/client/beans/JsonHelper.java +++ /dev/null @@ -1,36 +0,0 @@ -package fr.funixgaming.api.client.beans; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.google.gson.Gson; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Component; - -import java.lang.reflect.Type; - -@Component -@RequiredArgsConstructor -public class JsonHelper { - - private final ObjectMapper objectMapper; - - public String toJson(T object) throws JsonProcessingException { - return objectMapper.writeValueAsString(object); - } - - public T fromJson(String payload, Class clazz) throws JsonProcessingException { - return objectMapper.readValue(payload, clazz); - } - - public T fromJson(String payload, TypeReference clazz) throws JsonProcessingException { - return objectMapper.readValue(payload, clazz); - } - - public T fromJson(String payload, Type type) { - final Gson gson = new Gson(); - - return gson.fromJson(payload, type); - } - -} diff --git a/api/src/test/resources/application.properties b/api/src/test/resources/application.properties deleted file mode 100644 index d6a8c346..00000000 --- a/api/src/test/resources/application.properties +++ /dev/null @@ -1,34 +0,0 @@ -spring.datasource.url=jdbc:h2:mem:test -spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect - -spring.jpa.open-in-view=false -spring.flyway.enabled=false -spring.jpa.generate-ddl=true -spring.jpa.hibernate.ddl-auto=create - -server.port=4040 - -config.api.ip-whitelist=127.0.0.1 -config.api.disable-whitelist=true -config.api.proxied=false - -google.recaptcha.key.disabled=true -google.domain=https://www.google.com - -funix.api.app-domain-url=http://localhost:6643 -funix.api.user-api-username=funixtest -funix.api.user-api-password=passwordfunix -funix.api.email=this@gmail.com -funix.api.password-specials=11 -funix.api.password-numbers=10 -funix.api.password-caps=12 -funix.api.password-min=13 - -spring.mail.host=127.0.0.1 -spring.mail.port=3025 -spring.mail.tls=false -spring.mail.ssl=false -spring.mail.debug=true -sping.mail.auth=false -spring.mail.username=oui -spring.mail.password=oui diff --git a/entrypointPteroq.sh b/entrypointPteroq.sh deleted file mode 100644 index 60c28697..00000000 --- a/entrypointPteroq.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/bash -cd /home/container - -echo "Get latest server.jar" -rm server.jar -cp /home/java/server.jar server.jar - -echo "Java version" -java --version - -# Replace Startup Variables -MODIFIED_STARTUP=`eval echo $(echo ${STARTUP} | sed -e 's/{{/${/g' -e 's/}}/}/g')` -echo ":/home/container$ ${MODIFIED_STARTUP}" - -# Run the Server -${MODIFIED_STARTUP} \ No newline at end of file diff --git a/local.Dockerfile b/local.Dockerfile deleted file mode 100644 index 72c57ee8..00000000 --- a/local.Dockerfile +++ /dev/null @@ -1,25 +0,0 @@ -FROM maven:3-openjdk-17 AS MAVEN - -MAINTAINER Antoine PRONNIER, - -WORKDIR /container/funixgaming-api/ - -COPY pom.xml . - -COPY api/pom.xml ./api/ -COPY api/src ./api/src - -COPY service/pom.xml ./service/ -COPY service/src ./service/src - -RUN mvn clean package -B -RUN rm service/target/funixgaming-api-server-*-javadoc.jar -RUN rm service/target/funixgaming-api-server-*-sources.jar - -FROM openjdk:17 AS FINAL - -WORKDIR /container/java - -COPY --from=MAVEN /container/funixgaming-api/service/target/funixgaming-api-server-*.jar /container/java/server.jar - -ENTRYPOINT ["java", "-jar", "/container/java/server.jar", "-Dspring.profiles.active=docker"] diff --git a/modules/core/client/pom.xml b/modules/core/client/pom.xml new file mode 100644 index 00000000..f8e3018b --- /dev/null +++ b/modules/core/client/pom.xml @@ -0,0 +1,21 @@ + + + 4.0.0 + + fr.funixgaming.api.core + funixgaming-core + 1.3.0.0 + + + fr.funixgaming.api.core.client + funixgaming-core-client + + + ${java.version} + ${java.version} + UTF-8 + + + \ No newline at end of file diff --git a/api/src/main/java/fr/funixgaming/api/client/config/FeignConfig.java b/modules/core/client/src/main/java/fr/funixgaming/api/core/client/clients/FeignTokenInterceptor.java similarity index 54% rename from api/src/main/java/fr/funixgaming/api/client/config/FeignConfig.java rename to modules/core/client/src/main/java/fr/funixgaming/api/core/client/clients/FeignTokenInterceptor.java index 9a68b5dc..ce23a43e 100644 --- a/api/src/main/java/fr/funixgaming/api/client/config/FeignConfig.java +++ b/modules/core/client/src/main/java/fr/funixgaming/api/core/client/clients/FeignTokenInterceptor.java @@ -1,15 +1,15 @@ -package fr.funixgaming.api.client.config; +package fr.funixgaming.api.core.client.clients; import feign.RequestInterceptor; import feign.RequestTemplate; import org.springframework.http.HttpHeaders; -public class FeignConfig implements RequestInterceptor { +public class FeignTokenInterceptor implements RequestInterceptor { - private final String accessToken = System.getenv("FUNIXPRODUCTIONS_API_AUTH_TOKEN"); + private final String barerToken = System.getenv("FUNIXPRODUCTIONS_API_TOKEN"); @Override public void apply(RequestTemplate requestTemplate) { - requestTemplate.header(HttpHeaders.AUTHORIZATION, "Bearer " + accessToken); + requestTemplate.header(HttpHeaders.AUTHORIZATION, "Bearer " + barerToken); } } diff --git a/modules/core/pom.xml b/modules/core/pom.xml new file mode 100644 index 00000000..ec6580ea --- /dev/null +++ b/modules/core/pom.xml @@ -0,0 +1,28 @@ + + + 4.0.0 + + fr.funixgaming.api + funixgaming-api + 1.3.0.0 + ../../pom.xml + + + fr.funixgaming.api.core + funixgaming-core + pom + + client + service + test + + + + ${java.version} + ${java.version} + UTF-8 + + + \ No newline at end of file diff --git a/modules/core/service/pom.xml b/modules/core/service/pom.xml new file mode 100644 index 00000000..cf542d32 --- /dev/null +++ b/modules/core/service/pom.xml @@ -0,0 +1,21 @@ + + + 4.0.0 + + fr.funixgaming.api.core + funixgaming-core + 1.3.0.0 + + + fr.funixgaming.api.core.service + funixgaming-core-service + + + ${java.version} + ${java.version} + UTF-8 + + + \ No newline at end of file diff --git a/modules/core/service/src/main/java/fr/funixgaming/api/core/service/configs/FunixGamingCoreConfig.java b/modules/core/service/src/main/java/fr/funixgaming/api/core/service/configs/FunixGamingCoreConfig.java new file mode 100644 index 00000000..917359ea --- /dev/null +++ b/modules/core/service/src/main/java/fr/funixgaming/api/core/service/configs/FunixGamingCoreConfig.java @@ -0,0 +1,24 @@ +package fr.funixgaming.api.core.service.configs; + +import com.funixproductions.core.tools.network.IPUtils; +import lombok.Getter; +import lombok.Setter; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Getter +@Setter +@Configuration +public class FunixGamingCoreConfig { + + /** + * Determines of the API is behind a proxy. + */ + private boolean appProxied = true; + + @Bean + public IPUtils ipUtils() { + return new IPUtils(appProxied); + } + +} diff --git a/modules/core/test/pom.xml b/modules/core/test/pom.xml new file mode 100644 index 00000000..459ca472 --- /dev/null +++ b/modules/core/test/pom.xml @@ -0,0 +1,39 @@ + + + 4.0.0 + + fr.funixgaming.api.core + funixgaming-core + 1.3.0.0 + + + fr.funixgaming.api.core.test + funixgaming-core-test + + + ${java.version} + ${java.version} + UTF-8 + + + + + com.funixproductions.api.user.client + funixproductions-user-client + ${com.funixproductions.api.version} + + + + org.mockito + mockito-core + + + + org.springframework.boot + spring-boot-starter-test + + + + \ No newline at end of file diff --git a/service/src/test/java/fr/funixgaming/api/server/ResourceTestHandler.java b/modules/core/test/src/main/java/fr/funixgaming/api/core/test/ResourceTestHandler.java similarity index 88% rename from service/src/test/java/fr/funixgaming/api/server/ResourceTestHandler.java rename to modules/core/test/src/main/java/fr/funixgaming/api/core/test/ResourceTestHandler.java index 7f3c88c0..c398e177 100644 --- a/service/src/test/java/fr/funixgaming/api/server/ResourceTestHandler.java +++ b/modules/core/test/src/main/java/fr/funixgaming/api/core/test/ResourceTestHandler.java @@ -1,8 +1,9 @@ -package fr.funixgaming.api.server; +package fr.funixgaming.api.core.test; -import com.funixproductions.api.client.user.clients.UserAuthClient; -import com.funixproductions.api.client.user.dtos.UserDTO; -import com.funixproductions.api.client.user.enums.UserRole; + +import com.funixproductions.api.user.client.clients.UserAuthClient; +import com.funixproductions.api.user.client.dtos.UserDTO; +import com.funixproductions.api.user.client.enums.UserRole; import org.springframework.boot.test.mock.mockito.MockBean; import java.util.Date; @@ -12,6 +13,7 @@ import static org.mockito.Mockito.reset; import static org.mockito.Mockito.when; + /** * SpringBootTest * RunWith(MockitoJUnitRunner.class) diff --git a/modules/funixbot/client/pom.xml b/modules/funixbot/client/pom.xml new file mode 100644 index 00000000..040c5521 --- /dev/null +++ b/modules/funixbot/client/pom.xml @@ -0,0 +1,29 @@ + + + 4.0.0 + + fr.funixgaming.api.funixbot + funixgaming-funixbot + 1.3.0.0 + + + fr.funixgaming.api.funixbot.client + funixgaming-funixbot-client + + + ${java.version} + ${java.version} + UTF-8 + + + + + fr.funixgaming.api.core.client + funixgaming-core-client + ${fr.funixgaming.api.version} + + + + \ No newline at end of file diff --git a/modules/funixbot/client/src/main/java/fr/funixgaming/api/funixbot/client/clients/FunixBotCommandClient.java b/modules/funixbot/client/src/main/java/fr/funixgaming/api/funixbot/client/clients/FunixBotCommandClient.java new file mode 100644 index 00000000..a681ad50 --- /dev/null +++ b/modules/funixbot/client/src/main/java/fr/funixgaming/api/funixbot/client/clients/FunixBotCommandClient.java @@ -0,0 +1,15 @@ +package fr.funixgaming.api.funixbot.client.clients; + +import com.funixproductions.core.crud.clients.CrudClient; +import fr.funixgaming.api.core.client.clients.FeignTokenInterceptor; +import fr.funixgaming.api.funixbot.client.dtos.FunixBotCommandDTO; +import org.springframework.cloud.openfeign.FeignClient; + +@FeignClient( + name = "FunixBotCommands", + url = "${funixgaming.api.funixbot.app-domain-url}", + path = "/funixbot/command/", + configuration = FeignTokenInterceptor.class +) +public interface FunixBotCommandClient extends CrudClient { +} diff --git a/api/src/main/java/fr/funixgaming/api/client/funixbot/clients/FunixBotUserExperienceClient.java b/modules/funixbot/client/src/main/java/fr/funixgaming/api/funixbot/client/clients/FunixBotUserExperienceClient.java similarity index 63% rename from api/src/main/java/fr/funixgaming/api/client/funixbot/clients/FunixBotUserExperienceClient.java rename to modules/funixbot/client/src/main/java/fr/funixgaming/api/funixbot/client/clients/FunixBotUserExperienceClient.java index a6c96fa7..2df50f93 100644 --- a/api/src/main/java/fr/funixgaming/api/client/funixbot/clients/FunixBotUserExperienceClient.java +++ b/modules/funixbot/client/src/main/java/fr/funixgaming/api/funixbot/client/clients/FunixBotUserExperienceClient.java @@ -1,17 +1,17 @@ -package fr.funixgaming.api.client.funixbot.clients; +package fr.funixgaming.api.funixbot.client.clients; import com.funixproductions.core.crud.clients.CrudClient; -import fr.funixgaming.api.client.config.FeignConfig; -import fr.funixgaming.api.client.funixbot.dtos.FunixBotUserExperienceDTO; +import fr.funixgaming.api.core.client.clients.FeignTokenInterceptor; +import fr.funixgaming.api.funixbot.client.dtos.FunixBotUserExperienceDTO; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; @FeignClient( name = "FunixBotUserExperience", - url = "${funixgaming.api.app-domain-url}", + url = "${funixgaming.api.funixbot.app-domain-url}", path = "/funixbot/user/exp/", - configuration = FeignConfig.class + configuration = FeignTokenInterceptor.class ) public interface FunixBotUserExperienceClient extends CrudClient { diff --git a/api/src/main/java/fr/funixgaming/api/client/funixbot/dtos/FunixBotCommandDTO.java b/modules/funixbot/client/src/main/java/fr/funixgaming/api/funixbot/client/dtos/FunixBotCommandDTO.java similarity index 85% rename from api/src/main/java/fr/funixgaming/api/client/funixbot/dtos/FunixBotCommandDTO.java rename to modules/funixbot/client/src/main/java/fr/funixgaming/api/funixbot/client/dtos/FunixBotCommandDTO.java index 088eebb7..663ec88b 100644 --- a/api/src/main/java/fr/funixgaming/api/client/funixbot/dtos/FunixBotCommandDTO.java +++ b/modules/funixbot/client/src/main/java/fr/funixgaming/api/funixbot/client/dtos/FunixBotCommandDTO.java @@ -1,4 +1,4 @@ -package fr.funixgaming.api.client.funixbot.dtos; +package fr.funixgaming.api.funixbot.client.dtos; import com.funixproductions.core.crud.dtos.ApiDTO; import jakarta.validation.constraints.NotBlank; diff --git a/api/src/main/java/fr/funixgaming/api/client/funixbot/dtos/FunixBotUserExperienceDTO.java b/modules/funixbot/client/src/main/java/fr/funixgaming/api/funixbot/client/dtos/FunixBotUserExperienceDTO.java similarity index 90% rename from api/src/main/java/fr/funixgaming/api/client/funixbot/dtos/FunixBotUserExperienceDTO.java rename to modules/funixbot/client/src/main/java/fr/funixgaming/api/funixbot/client/dtos/FunixBotUserExperienceDTO.java index 1f832c21..0d37c422 100644 --- a/api/src/main/java/fr/funixgaming/api/client/funixbot/dtos/FunixBotUserExperienceDTO.java +++ b/modules/funixbot/client/src/main/java/fr/funixgaming/api/funixbot/client/dtos/FunixBotUserExperienceDTO.java @@ -1,4 +1,4 @@ -package fr.funixgaming.api.client.funixbot.dtos; +package fr.funixgaming.api.funixbot.client.dtos; import com.funixproductions.core.crud.dtos.ApiDTO; import jakarta.validation.constraints.NotBlank; diff --git a/api/pom.xml b/modules/funixbot/pom.xml similarity index 67% rename from api/pom.xml rename to modules/funixbot/pom.xml index 1d7037ee..a43fd1c2 100644 --- a/api/pom.xml +++ b/modules/funixbot/pom.xml @@ -3,16 +3,20 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - - funixgaming-api fr.funixgaming.api - 1.2.9.1 - ../pom.xml + funixgaming-api + 1.3.0.0 + ../../pom.xml - fr.funixgaming.api.client - funixgaming-api-client + fr.funixgaming.api.funixbot + funixgaming-funixbot + pom + + client + service + ${java.version} @@ -20,4 +24,4 @@ UTF-8 - + \ No newline at end of file diff --git a/service/pom.xml b/modules/funixbot/service/pom.xml similarity index 68% rename from service/pom.xml rename to modules/funixbot/service/pom.xml index b45fccd3..30f49eb3 100644 --- a/service/pom.xml +++ b/modules/funixbot/service/pom.xml @@ -3,17 +3,14 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - - funixgaming-api - fr.funixgaming.api - 1.2.9.1 - ../pom.xml + fr.funixgaming.api.funixbot + funixgaming-funixbot + 1.3.0.0 - fr.funixgaming.api.server - funixgaming-api-server - jar + fr.funixgaming.api.funixbot.service + funixgaming-funixbot-service ${java.version} @@ -23,38 +20,24 @@ - com.funixproductions.api.client - funixproductions-api-client - ${com.funixproductions.api.version} - - - - fr.funixgaming.api.client - funixgaming-api-client + fr.funixgaming.api.funixbot.client + funixgaming-funixbot-client ${fr.funixgaming.api.version} - org.springframework.security - spring-security-core - ${org.springframeork.security.version} - - - - - org.springframework.security - spring-security-config - ${org.springframeork.security.version} + com.funixproductions.api.user.client + funixproductions-user-client + ${com.funixproductions.api.version} - - org.springframework.security - spring-security-web - ${org.springframeork.security.version} + fr.funixgaming.api.core.service + funixgaming-core-service + ${fr.funixgaming.api.version} - + org.postgresql postgresql @@ -67,6 +50,18 @@ flyway-maven-plugin ${org.flywaydb.version} + + + org.springframework.boot + spring-boot-starter-actuator + + + + fr.funixgaming.api.core.test + funixgaming-core-test + ${fr.funixgaming.api.version} + test + @@ -94,7 +89,7 @@ org.springframework.boot spring-boot-configuration-processor - ${org.springframeork.boot.annotation.version} + ${org.springframework.boot.annotation.version} diff --git a/modules/funixbot/service/src/main/java/fr/funixgaming/api/funixbot/service/FunixGamingFunixBotApp.java b/modules/funixbot/service/src/main/java/fr/funixgaming/api/funixbot/service/FunixGamingFunixBotApp.java new file mode 100644 index 00000000..ebcad726 --- /dev/null +++ b/modules/funixbot/service/src/main/java/fr/funixgaming/api/funixbot/service/FunixGamingFunixBotApp.java @@ -0,0 +1,17 @@ +package fr.funixgaming.api.funixbot.service; + +import com.funixproductions.api.user.client.clients.UserAuthClient; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.openfeign.EnableFeignClients; + +@EnableFeignClients(clients = UserAuthClient.class) +@SpringBootApplication(scanBasePackages = { + "com.funixproductions", + "fr.funixgaming" +}) +public class FunixGamingFunixBotApp { + public static void main(String[] args) { + SpringApplication.run(FunixGamingFunixBotApp.class, args); + } +} \ No newline at end of file diff --git a/service/src/main/java/fr/funixgaming/api/server/funixbot/entities/FunixBotCommand.java b/modules/funixbot/service/src/main/java/fr/funixgaming/api/funixbot/service/entities/FunixBotCommand.java similarity index 88% rename from service/src/main/java/fr/funixgaming/api/server/funixbot/entities/FunixBotCommand.java rename to modules/funixbot/service/src/main/java/fr/funixgaming/api/funixbot/service/entities/FunixBotCommand.java index 7174eca7..fc80c40f 100644 --- a/service/src/main/java/fr/funixgaming/api/server/funixbot/entities/FunixBotCommand.java +++ b/modules/funixbot/service/src/main/java/fr/funixgaming/api/funixbot/service/entities/FunixBotCommand.java @@ -1,4 +1,4 @@ -package fr.funixgaming.api.server.funixbot.entities; +package fr.funixgaming.api.funixbot.service.entities; import com.funixproductions.core.crud.entities.ApiEntity; import jakarta.persistence.Column; @@ -6,7 +6,6 @@ import lombok.Getter; import lombok.Setter; - @Getter @Setter @Entity(name = "funixbot_commands") diff --git a/service/src/main/java/fr/funixgaming/api/server/funixbot/entities/FunixBotUserExperience.java b/modules/funixbot/service/src/main/java/fr/funixgaming/api/funixbot/service/entities/FunixBotUserExperience.java similarity index 93% rename from service/src/main/java/fr/funixgaming/api/server/funixbot/entities/FunixBotUserExperience.java rename to modules/funixbot/service/src/main/java/fr/funixgaming/api/funixbot/service/entities/FunixBotUserExperience.java index 3887654b..bcfed5e6 100644 --- a/service/src/main/java/fr/funixgaming/api/server/funixbot/entities/FunixBotUserExperience.java +++ b/modules/funixbot/service/src/main/java/fr/funixgaming/api/funixbot/service/entities/FunixBotUserExperience.java @@ -1,4 +1,4 @@ -package fr.funixgaming.api.server.funixbot.entities; +package fr.funixgaming.api.funixbot.service.entities; import com.funixproductions.core.crud.entities.ApiEntity; import jakarta.persistence.Column; diff --git a/modules/funixbot/service/src/main/java/fr/funixgaming/api/funixbot/service/mappers/FunixBotCommandMapper.java b/modules/funixbot/service/src/main/java/fr/funixgaming/api/funixbot/service/mappers/FunixBotCommandMapper.java new file mode 100644 index 00000000..82fc7a91 --- /dev/null +++ b/modules/funixbot/service/src/main/java/fr/funixgaming/api/funixbot/service/mappers/FunixBotCommandMapper.java @@ -0,0 +1,10 @@ +package fr.funixgaming.api.funixbot.service.mappers; + +import com.funixproductions.core.crud.mappers.ApiMapper; +import fr.funixgaming.api.funixbot.client.dtos.FunixBotCommandDTO; +import fr.funixgaming.api.funixbot.service.entities.FunixBotCommand; +import org.mapstruct.Mapper; + +@Mapper(componentModel = "spring") +public interface FunixBotCommandMapper extends ApiMapper { +} diff --git a/service/src/main/java/fr/funixgaming/api/server/funixbot/mappers/FunixBotUserExperienceMapper.java b/modules/funixbot/service/src/main/java/fr/funixgaming/api/funixbot/service/mappers/FunixBotUserExperienceMapper.java similarity index 65% rename from service/src/main/java/fr/funixgaming/api/server/funixbot/mappers/FunixBotUserExperienceMapper.java rename to modules/funixbot/service/src/main/java/fr/funixgaming/api/funixbot/service/mappers/FunixBotUserExperienceMapper.java index 788ae0d9..b9253a8b 100644 --- a/service/src/main/java/fr/funixgaming/api/server/funixbot/mappers/FunixBotUserExperienceMapper.java +++ b/modules/funixbot/service/src/main/java/fr/funixgaming/api/funixbot/service/mappers/FunixBotUserExperienceMapper.java @@ -1,9 +1,10 @@ -package fr.funixgaming.api.server.funixbot.mappers; +package fr.funixgaming.api.funixbot.service.mappers; import com.funixproductions.core.crud.mappers.ApiMapper; -import fr.funixgaming.api.client.funixbot.dtos.FunixBotUserExperienceDTO; -import fr.funixgaming.api.server.funixbot.entities.FunixBotUserExperience; -import org.mapstruct.*; +import fr.funixgaming.api.funixbot.client.dtos.FunixBotUserExperienceDTO; +import fr.funixgaming.api.funixbot.service.entities.FunixBotUserExperience; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; @Mapper(componentModel = "spring") public interface FunixBotUserExperienceMapper extends ApiMapper { @@ -17,8 +18,4 @@ public interface FunixBotUserExperienceMapper extends ApiMapper.AuthorizationManagerRequestMatcherRegistry> getUrlsMatchers() { + return ex -> ex + .requestMatchers(HttpMethod.GET, "/funixbot/**").permitAll() + .anyRequest().hasAuthority(UserRole.MODERATOR.getRole()); + } +} diff --git a/service/src/main/java/fr/funixgaming/api/server/funixbot/services/FunixBotCommandsService.java b/modules/funixbot/service/src/main/java/fr/funixgaming/api/funixbot/service/services/FunixBotCommandsService.java similarity index 56% rename from service/src/main/java/fr/funixgaming/api/server/funixbot/services/FunixBotCommandsService.java rename to modules/funixbot/service/src/main/java/fr/funixgaming/api/funixbot/service/services/FunixBotCommandsService.java index 595babd9..4a12149c 100644 --- a/service/src/main/java/fr/funixgaming/api/server/funixbot/services/FunixBotCommandsService.java +++ b/modules/funixbot/service/src/main/java/fr/funixgaming/api/funixbot/service/services/FunixBotCommandsService.java @@ -1,10 +1,10 @@ -package fr.funixgaming.api.server.funixbot.services; +package fr.funixgaming.api.funixbot.service.services; import com.funixproductions.core.crud.services.ApiService; -import fr.funixgaming.api.client.funixbot.dtos.FunixBotCommandDTO; -import fr.funixgaming.api.server.funixbot.entities.FunixBotCommand; -import fr.funixgaming.api.server.funixbot.mappers.FunixBotCommandMapper; -import fr.funixgaming.api.server.funixbot.repositories.FunixBotCommandRepository; +import fr.funixgaming.api.funixbot.client.dtos.FunixBotCommandDTO; +import fr.funixgaming.api.funixbot.service.entities.FunixBotCommand; +import fr.funixgaming.api.funixbot.service.mappers.FunixBotCommandMapper; +import fr.funixgaming.api.funixbot.service.repositories.FunixBotCommandRepository; import org.springframework.stereotype.Service; @Service diff --git a/service/src/main/java/fr/funixgaming/api/server/funixbot/services/FunixBotUserExperienceService.java b/modules/funixbot/service/src/main/java/fr/funixgaming/api/funixbot/service/services/FunixBotUserExperienceService.java similarity index 75% rename from service/src/main/java/fr/funixgaming/api/server/funixbot/services/FunixBotUserExperienceService.java rename to modules/funixbot/service/src/main/java/fr/funixgaming/api/funixbot/service/services/FunixBotUserExperienceService.java index be92cd1a..a9829e9c 100644 --- a/service/src/main/java/fr/funixgaming/api/server/funixbot/services/FunixBotUserExperienceService.java +++ b/modules/funixbot/service/src/main/java/fr/funixgaming/api/funixbot/service/services/FunixBotUserExperienceService.java @@ -1,10 +1,10 @@ -package fr.funixgaming.api.server.funixbot.services; +package fr.funixgaming.api.funixbot.service.services; import com.funixproductions.core.crud.services.ApiService; -import fr.funixgaming.api.client.funixbot.dtos.FunixBotUserExperienceDTO; -import fr.funixgaming.api.server.funixbot.entities.FunixBotUserExperience; -import fr.funixgaming.api.server.funixbot.mappers.FunixBotUserExperienceMapper; -import fr.funixgaming.api.server.funixbot.repositories.FunixBotUserExperienceRepository; +import fr.funixgaming.api.funixbot.client.dtos.FunixBotUserExperienceDTO; +import fr.funixgaming.api.funixbot.service.entities.FunixBotUserExperience; +import fr.funixgaming.api.funixbot.service.mappers.FunixBotUserExperienceMapper; +import fr.funixgaming.api.funixbot.service.repositories.FunixBotUserExperienceRepository; import org.springframework.data.domain.Sort; import org.springframework.stereotype.Service; diff --git a/service/src/main/resources/application.properties b/modules/funixbot/service/src/main/resources/application.properties similarity index 69% rename from service/src/main/resources/application.properties rename to modules/funixbot/service/src/main/resources/application.properties index 28a12a4e..f5ce9144 100644 --- a/service/src/main/resources/application.properties +++ b/modules/funixbot/service/src/main/resources/application.properties @@ -1,4 +1,4 @@ -server.port=${APP_PORT} +server.port=${SERVER_PORT} #Spring db config spring.datasource.driver-class-name=org.postgresql.Driver @@ -9,22 +9,23 @@ spring.datasource.hikari.maxLifeTime=500000 spring.jpa.hibernate.ddl-auto=none #Spring general config -spring.task.scheduling.pool.size=10 -spring.application.name=FunixGamingAPI +spring.task.scheduling.pool.size=8 +spring.application.name=FunixGaming-FunixBot spring.jpa.open-in-view=false spring.jpa.generate-ddl=false spring.jpa.properties.hibernate.jdbc.time_zone=Europe/Paris spring.jackson.time-zone=Europe/Paris -#Config for flyway +#Config flyway spring.flyway.sql-migration-prefix=V spring.flyway.repeatable-sql-migration-prefix=R spring.flyway.sql-migration-separator=__ spring.flyway.sql-migration-suffixes=.sql spring.flyway.enabled=true -#FunixGamingApi config -funixgaming.api.app-domain-url=https://api.funixgaming.fr +#Config feign client +funixproductions.api.user.app-domain-url=http://user -#FunixProductionsApi config -funixproductions.api.app-domain-url=https://api.funixproductions.com +#Health check +management.endpoints.web.exposure.include=health +management.endpoint.health.show-details=always \ No newline at end of file diff --git a/modules/funixbot/service/src/main/resources/db.migration/DISABLED_V1.0.0__init_funixbot_api.sql b/modules/funixbot/service/src/main/resources/db.migration/DISABLED_V1.0.0__init_funixbot_api.sql new file mode 100644 index 00000000..400c5b17 --- /dev/null +++ b/modules/funixbot/service/src/main/resources/db.migration/DISABLED_V1.0.0__init_funixbot_api.sql @@ -0,0 +1,23 @@ +create table funixbot_commands +( + id bigint generated by default as identity primary key, + created_at timestamp not null, + updated_at timestamp, + uuid varchar(255) not null constraint UK_command_public_id unique, + command varchar(30) not null constraint UK_command_name unique, + message varchar(255) not null +); + +create table funixbot_users_experience +( + id bigint generated by default as identity + primary key, + created_at timestamp not null, + updated_at timestamp, + uuid varchar(255) not null constraint UK_fbot_user_public_id unique, + last_message_date timestamp not null, + level integer not null, + twitch_user_id varchar(255) not null constraint UK_twitch_id_user unique, + xp integer not null, + xp_next_level integer not null +); diff --git a/service/src/test/java/fr/funixgaming/api/server/funixbot/TestFunixBotUserExperience.java b/modules/funixbot/service/src/test/java/fr/funixgaming/api/funixbot/service/TestFunixBotUserExperience.java similarity index 95% rename from service/src/test/java/fr/funixgaming/api/server/funixbot/TestFunixBotUserExperience.java rename to modules/funixbot/service/src/test/java/fr/funixgaming/api/funixbot/service/TestFunixBotUserExperience.java index 7e19f566..b3629aec 100644 --- a/service/src/test/java/fr/funixgaming/api/server/funixbot/TestFunixBotUserExperience.java +++ b/modules/funixbot/service/src/test/java/fr/funixgaming/api/funixbot/service/TestFunixBotUserExperience.java @@ -1,10 +1,10 @@ -package fr.funixgaming.api.server.funixbot; +package fr.funixgaming.api.funixbot.service; import com.funixproductions.core.test.beans.JsonHelper; -import fr.funixgaming.api.client.funixbot.dtos.FunixBotUserExperienceDTO; -import fr.funixgaming.api.server.ResourceTestHandler; -import fr.funixgaming.api.server.funixbot.entities.FunixBotUserExperience; -import fr.funixgaming.api.server.funixbot.repositories.FunixBotUserExperienceRepository; +import fr.funixgaming.api.core.test.ResourceTestHandler; +import fr.funixgaming.api.funixbot.client.dtos.FunixBotUserExperienceDTO; +import fr.funixgaming.api.funixbot.service.entities.FunixBotUserExperience; +import fr.funixgaming.api.funixbot.service.repositories.FunixBotUserExperienceRepository; import org.junit.jupiter.api.Test; import org.junit.runner.RunWith; import org.mockito.junit.MockitoJUnitRunner; diff --git a/modules/funixbot/service/src/test/resources/application.properties b/modules/funixbot/service/src/test/resources/application.properties new file mode 100644 index 00000000..2df69a47 --- /dev/null +++ b/modules/funixbot/service/src/test/resources/application.properties @@ -0,0 +1,9 @@ +spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect +spring.datasource.url=jdbc:h2:mem:test + +spring.flyway.enabled=false +spring.jpa.open-in-view=false +spring.jpa.generate-ddl=true +spring.jpa.hibernate.ddl-auto=create + +funixproductions.api.user.app-domain-url=http://user diff --git a/pom.xml b/pom.xml index ac553ba1..0a2a5c4e 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ fr.funixgaming.api funixgaming-api - 1.2.9.1 + 1.3.0.0 FunixGamingAPI Project used in Funix projects https://github.com/FunixProductions/FunixGaming-API @@ -15,12 +15,12 @@ com.funixproductions.api funixproductions-api - 1.0.1 + 1.2.1.2 - api - service + modules/core + modules/funixbot @@ -46,7 +46,7 @@ - 1.2.9.1 + 1.3.0.0 ${java.version} ${java.version} diff --git a/pterodactyl.Dockerfile b/pterodactyl.Dockerfile deleted file mode 100644 index e87c41b3..00000000 --- a/pterodactyl.Dockerfile +++ /dev/null @@ -1,31 +0,0 @@ -FROM maven:3-openjdk-17 AS MAVEN - -MAINTAINER Antoine PRONNIER, - -WORKDIR /container/funixgaming-api/ - -COPY pom.xml . - -COPY api/pom.xml ./api/ -COPY api/src ./api/src - -COPY service/pom.xml ./service/ -COPY service/src ./service/src - -RUN mvn clean package -B -RUN rm service/target/funixgaming-api-server-*-javadoc.jar -RUN rm service/target/funixgaming-api-server-*-sources.jar - -FROM openjdk:17 AS FINAL_PTEROQ - -MAINTAINER Antoine PRONNIER, - -USER container -ENV USER=container HOME=/home/container -WORKDIR /home/container - -COPY --from=MAVEN /container/funixgaming-api/service/target/funixgaming-api-server-*.jar /home/java/server.jar - -COPY ./entrypointPteroq.sh /entrypoint.sh - -CMD ["/bin/bash", "/entrypoint.sh"] diff --git a/service/docker_funixgaming_api/config/init.sql b/service/docker_funixgaming_api/config/init.sql deleted file mode 100644 index 08159a55..00000000 --- a/service/docker_funixgaming_api/config/init.sql +++ /dev/null @@ -1,2 +0,0 @@ -CREATE DATABASE funixgaming_api_local; -CREATE DATABASE funixgaming_api_docker; diff --git a/service/docker_funixgaming_api/docker-compose.yml b/service/docker_funixgaming_api/docker-compose.yml deleted file mode 100644 index 44acc375..00000000 --- a/service/docker_funixgaming_api/docker-compose.yml +++ /dev/null @@ -1,42 +0,0 @@ -version: "3.9" - -services: - - mysql: - image: postgres - container_name: funixgaming_api_db - hostname: funixgamingdb - volumes: - - ./config/init.sql:/docker-entrypoint-initdb.d/init.sql - - funixgaming_api_db:/var/lib/mysql - environment: - POSTGRES_PASSWORD: root - POSTGRES_USER: root - ports: - - "3306:5432" - - funixgaming-api: - build: - context: ../../ - dockerfile: local.Dockerfile - depends_on: - mysql: - condition: service_started - container_name: funixgaming-api - volumes: - - funixgaming_api_app:/container/java - hostname: funixgamingapi - environment: - - SPRING_PROFILES_ACTIVE=docker - ports: - - "8080:8080" - -#Don't forget to create network in docker : docker network create funixprod_net_local -networks: - default: - name: funixprod_net_local - external: true - -volumes: - funixgaming_api_db: - funixgaming_api_app: diff --git a/service/src/main/java/fr/funixgaming/api/server/FunixGamingApiApp.java b/service/src/main/java/fr/funixgaming/api/server/FunixGamingApiApp.java deleted file mode 100644 index 44d1c896..00000000 --- a/service/src/main/java/fr/funixgaming/api/server/FunixGamingApiApp.java +++ /dev/null @@ -1,19 +0,0 @@ -package fr.funixgaming.api.server; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cloud.openfeign.EnableFeignClients; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.scheduling.annotation.EnableScheduling; - -@EnableAsync -@EnableScheduling -@EnableFeignClients(basePackages = {"fr.funixgaming.api", "com.funixproductions.api.client"}) -@SpringBootApplication(scanBasePackages = {"fr.funixgaming.api", "com.funixproductions.core"}) -public class FunixGamingApiApp { - - public static void main(final String[] args) { - SpringApplication.run(FunixGamingApiApp.class, args); - } - -} diff --git a/service/src/main/java/fr/funixgaming/api/server/auth/components/FunixGamingWebSecurity.java b/service/src/main/java/fr/funixgaming/api/server/auth/components/FunixGamingWebSecurity.java deleted file mode 100644 index bccb4121..00000000 --- a/service/src/main/java/fr/funixgaming/api/server/auth/components/FunixGamingWebSecurity.java +++ /dev/null @@ -1,75 +0,0 @@ -package fr.funixgaming.api.server.auth.components; - -import com.funixproductions.api.client.user.enums.UserRole; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.http.HttpMethod; -import org.springframework.security.config.Customizer; -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.configurers.AbstractHttpConfigurer; -import org.springframework.security.config.http.SessionCreationPolicy; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.security.web.SecurityFilterChain; -import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; -import org.springframework.web.cors.CorsConfiguration; -import org.springframework.web.cors.UrlBasedCorsConfigurationSource; -import org.springframework.web.filter.CorsFilter; - -@Configuration -@EnableWebSecurity -public class FunixGamingWebSecurity { - - private final JwtTokenFilter jwtTokenFilter; - - public FunixGamingWebSecurity(JwtTokenFilter jwtTokenFilter) { - this.jwtTokenFilter = jwtTokenFilter; - - SecurityContextHolder.setStrategyName(SecurityContextHolder.MODE_INHERITABLETHREADLOCAL); - } - - @Bean - protected SecurityFilterChain filterChain(HttpSecurity http) throws Exception { - http = http.cors(httpSecurityCorsConfigurer ->httpSecurityCorsConfigurer.configurationSource(httpServletRequest -> { - final CorsConfiguration corsConfiguration = new CorsConfiguration(); - corsConfiguration.setAllowCredentials(true); - corsConfiguration.addAllowedOriginPattern("*"); - corsConfiguration.addAllowedHeader("*"); - corsConfiguration.addAllowedMethod("*"); - return corsConfiguration; - })).csrf(AbstractHttpConfigurer::disable) - - .sessionManagement(httpSecuritySessionManagementConfigurer -> - httpSecuritySessionManagementConfigurer.sessionCreationPolicy(SessionCreationPolicy.STATELESS)) - .exceptionHandling(Customizer.withDefaults()) - - .authorizeHttpRequests(exchanges -> exchanges - .requestMatchers(HttpMethod.GET, "/funixbot/**").permitAll() - .requestMatchers("/funixbot/**").hasAuthority(UserRole.MODERATOR.getRole()) - - .requestMatchers("/ws/admin/**").hasAuthority(UserRole.ADMIN.getRole()) - .requestMatchers("/ws/mod/**").hasAuthority(UserRole.MODERATOR.getRole()) - .requestMatchers("/ws/public/**").permitAll() - - .anyRequest().authenticated() - ).httpBasic(Customizer.withDefaults()) - .addFilterBefore(jwtTokenFilter, UsernamePasswordAuthenticationFilter.class); - - return http.build(); - } - - @Bean - public CorsFilter corsFilter() { - final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); - final CorsConfiguration config = new CorsConfiguration(); - - config.setAllowCredentials(true); - config.addAllowedOriginPattern("*"); - config.addAllowedHeader("*"); - config.addAllowedMethod("*"); - source.registerCorsConfiguration("/**", config); - return new CorsFilter(source); - } - - -} diff --git a/service/src/main/java/fr/funixgaming/api/server/auth/components/JwtTokenFilter.java b/service/src/main/java/fr/funixgaming/api/server/auth/components/JwtTokenFilter.java deleted file mode 100644 index ef02e1eb..00000000 --- a/service/src/main/java/fr/funixgaming/api/server/auth/components/JwtTokenFilter.java +++ /dev/null @@ -1,95 +0,0 @@ -package fr.funixgaming.api.server.auth.components; - -import com.funixproductions.api.client.user.clients.UserAuthClient; -import com.funixproductions.api.client.user.dtos.UserDTO; -import com.funixproductions.api.client.user.enums.UserRole; -import com.funixproductions.core.exceptions.ApiBadRequestException; -import com.funixproductions.core.exceptions.ApiException; -import com.google.common.cache.Cache; -import com.google.common.cache.CacheBuilder; -import com.google.common.net.HttpHeaders; -import feign.FeignException; -import fr.funixgaming.api.server.auth.entities.Session; -import jakarta.servlet.FilterChain; -import jakarta.servlet.ServletException; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; -import lombok.RequiredArgsConstructor; -import org.apache.logging.log4j.util.Strings; -import org.jetbrains.annotations.NotNull; -import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; -import org.springframework.security.core.authority.SimpleGrantedAuthority; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.stereotype.Component; -import org.springframework.web.filter.OncePerRequestFilter; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.TimeUnit; - -@Component -@RequiredArgsConstructor -public class JwtTokenFilter extends OncePerRequestFilter { - - private final UserAuthClient authClient; - - private final Cache sessionsCache = CacheBuilder.newBuilder() - .expireAfterAccess(10, TimeUnit.MINUTES).build(); - - @Override - protected void doFilterInternal(@NotNull HttpServletRequest request, - @NotNull HttpServletResponse response, - @NotNull FilterChain filterChain) throws ServletException, IOException { - final String header = request.getHeader(HttpHeaders.AUTHORIZATION); - - if (Strings.isEmpty(header) || !header.startsWith("Bearer ")) { - filterChain.doFilter(request, response); - return; - } - - try { - final UserDTO userDTO = fetchActualUser(header); - final Session session = new Session(userDTO, header, request); - final UsernamePasswordAuthenticationToken auth = new UsernamePasswordAuthenticationToken(session, null, getAuthoritiesFromUser(userDTO)); - - SecurityContextHolder.getContext().setAuthentication(auth); - filterChain.doFilter(request, response); - } catch (FeignException e) { - final String code = Integer.toString(e.status()); - - if (code.startsWith("5") || code.equals("-1")) { - throw new ApiException("Le serveur d'authentification est indisponible ou rencontre une erreur.", e); - } else { - throw new ApiBadRequestException("Vous n'avez pas le bon token d'authentification. Veuillez vous reconnecter.", e); - } - } - } - - private UserDTO fetchActualUser(final String headerAuth) throws FeignException { - UserDTO userDTO = this.sessionsCache.getIfPresent(headerAuth); - - if (userDTO == null) { - userDTO = this.authClient.current(headerAuth); - this.sessionsCache.put(headerAuth, userDTO); - } - return userDTO; - } - - private List getAuthoritiesFromUser(final UserDTO userDTO) { - final List authorities = new ArrayList<>(); - - authorities.add(new SimpleGrantedAuthority(UserRole.USER.getRole())); - - final UserRole role = userDTO.getRole(); - if (role == UserRole.ADMIN) { - authorities.addAll(List.of( - new SimpleGrantedAuthority(UserRole.ADMIN.getRole()), - new SimpleGrantedAuthority(UserRole.MODERATOR.getRole()) - )); - } else if (role == UserRole.MODERATOR) { - authorities.add(new SimpleGrantedAuthority(UserRole.MODERATOR.getRole())); - } - return authorities; - } -} diff --git a/service/src/main/java/fr/funixgaming/api/server/auth/entities/Session.java b/service/src/main/java/fr/funixgaming/api/server/auth/entities/Session.java deleted file mode 100644 index 340e2594..00000000 --- a/service/src/main/java/fr/funixgaming/api/server/auth/entities/Session.java +++ /dev/null @@ -1,14 +0,0 @@ -package fr.funixgaming.api.server.auth.entities; - -import com.funixproductions.api.client.user.dtos.UserDTO; -import jakarta.servlet.http.HttpServletRequest; -import lombok.Getter; -import lombok.RequiredArgsConstructor; - -@Getter -@RequiredArgsConstructor -public class Session { - private final UserDTO user; - private final String clientIp; - private final HttpServletRequest request; -} diff --git a/service/src/main/java/fr/funixgaming/api/server/configs/EncryptionString.java b/service/src/main/java/fr/funixgaming/api/server/configs/EncryptionString.java deleted file mode 100644 index 98ae5496..00000000 --- a/service/src/main/java/fr/funixgaming/api/server/configs/EncryptionString.java +++ /dev/null @@ -1,25 +0,0 @@ -package fr.funixgaming.api.server.configs; - -import com.funixproductions.core.tools.encryption.ApiConverter; -import jakarta.persistence.Converter; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Component; - -@Component -@Converter -@RequiredArgsConstructor -public class EncryptionString implements ApiConverter { - - private final FunixGamingApiEncryption encryption; - - @Override - public synchronized String convertToDatabaseColumn(String attribute) { - return encryption.convertToDatabase(attribute); - } - - @Override - public synchronized String convertToEntityAttribute(String dbData) { - return encryption.convertToEntity(dbData); - } - -} diff --git a/service/src/main/java/fr/funixgaming/api/server/configs/FunixGamingApiConfig.java b/service/src/main/java/fr/funixgaming/api/server/configs/FunixGamingApiConfig.java deleted file mode 100644 index fdddc9bf..00000000 --- a/service/src/main/java/fr/funixgaming/api/server/configs/FunixGamingApiConfig.java +++ /dev/null @@ -1,25 +0,0 @@ -package fr.funixgaming.api.server.configs; - -import com.funixproductions.core.tools.network.IPUtils; -import lombok.Getter; -import lombok.Setter; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -@Getter -@Setter -@Configuration -@ConfigurationProperties("funixgaming.api") -public class FunixGamingApiConfig { - - /** - * Tells the spring app to get ip client from headers or client socket - */ - private boolean appBehindProxy = true; - - @Bean - public IPUtils ipUtils() { - return new IPUtils(appBehindProxy); - } -} diff --git a/service/src/main/java/fr/funixgaming/api/server/configs/FunixGamingApiEncryption.java b/service/src/main/java/fr/funixgaming/api/server/configs/FunixGamingApiEncryption.java deleted file mode 100644 index 5245fd8d..00000000 --- a/service/src/main/java/fr/funixgaming/api/server/configs/FunixGamingApiEncryption.java +++ /dev/null @@ -1,8 +0,0 @@ -package fr.funixgaming.api.server.configs; - -import com.funixproductions.core.tools.encryption.Encryption; -import org.springframework.stereotype.Component; - -@Component -public class FunixGamingApiEncryption extends Encryption { -} diff --git a/service/src/main/java/fr/funixgaming/api/server/funixbot/mappers/FunixBotCommandMapper.java b/service/src/main/java/fr/funixgaming/api/server/funixbot/mappers/FunixBotCommandMapper.java deleted file mode 100644 index 33ead8a4..00000000 --- a/service/src/main/java/fr/funixgaming/api/server/funixbot/mappers/FunixBotCommandMapper.java +++ /dev/null @@ -1,19 +0,0 @@ -package fr.funixgaming.api.server.funixbot.mappers; - -import com.funixproductions.core.crud.mappers.ApiMapper; -import fr.funixgaming.api.client.funixbot.dtos.FunixBotCommandDTO; -import fr.funixgaming.api.server.funixbot.entities.FunixBotCommand; -import org.mapstruct.*; - -@Mapper(componentModel = "spring") -public interface FunixBotCommandMapper extends ApiMapper { - @Mapping(target = "uuid", source = "id") - @Mapping(target = "id", ignore = true) - FunixBotCommand toEntity(FunixBotCommandDTO dto); - - @Mapping(target = "id", source = "uuid") - FunixBotCommandDTO toDto(FunixBotCommand entity); - - @BeanMapping(nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE) - void patch(FunixBotCommand request, @MappingTarget FunixBotCommand toPatch); -} diff --git a/service/src/main/resources/application-docker.properties b/service/src/main/resources/application-docker.properties deleted file mode 100644 index 47963b0c..00000000 --- a/service/src/main/resources/application-docker.properties +++ /dev/null @@ -1,9 +0,0 @@ -server.port=8080 - -spring.datasource.url=jdbc:postgresql://funixgamingdb:5432/funixgaming_api_docker -spring.datasource.username=root -spring.datasource.password=root - -funixgaming.api.app-behind-proxy=false -funixgaming.api.app-domain-url=http://localhost:8080 -funixproductions.api.app-domain-url=http://funixproductionsapi:8082 diff --git a/service/src/main/resources/application-local.properties b/service/src/main/resources/application-local.properties deleted file mode 100644 index 38b8e6bd..00000000 --- a/service/src/main/resources/application-local.properties +++ /dev/null @@ -1,18 +0,0 @@ -server.port=8080 - -spring.datasource.url=jdbc:postgresql://localhost:3306/funixgaming_api_local -spring.datasource.username=root -spring.datasource.password=root - -google.recaptcha.key.site=site -google.recaptcha.key.secret=secret -google.recaptcha.key.threshold=0.7 -google.recaptcha.key.disabled=true - -spring.flyway.enabled=false -spring.jpa.generate-ddl=true -spring.jpa.hibernate.ddl-auto=create - -funixgaming.api.app-behind-proxy=false -funixgaming.api.app-domain-url=https://localhost:8080 -funixproductions.api.app-domain-url=https://localhost:4242 diff --git a/service/src/main/resources/db/migration/V1__init.sql b/service/src/main/resources/db/migration/V1__init.sql deleted file mode 100644 index f01b8db5..00000000 --- a/service/src/main/resources/db/migration/V1__init.sql +++ /dev/null @@ -1,76 +0,0 @@ -create table api_users -( - id bigint generated by default as identity primary key, - created_at timestamp not null, - updated_at timestamp, - uuid varchar(255) not null constraint UK_user_public_id unique, - banned boolean not null, - email varchar(255) not null, - password varchar(2000) not null, - role varchar(255) not null, - username varchar(255) not null constraint UK_user_username unique -); - -create table api_users_tokens -( - id bigint generated by default as identity primary key, - created_at timestamp not null, - updated_at timestamp, - uuid varchar(255) not null constraint UK_token_public_id unique, - expiration_date timestamp, - token varchar(2000) not null constraint UK_api_token unique, - user_id bigint not null constraint token_link_user references api_users -); - -create table funixbot_commands -( - id bigint generated by default as identity primary key, - created_at timestamp not null, - updated_at timestamp, - uuid varchar(255) not null constraint UK_command_public_id unique, - command varchar(30) not null constraint UK_command_name unique, - message varchar(255) not null -); - -create table funixbot_users_experience -( - id bigint generated by default as identity - primary key, - created_at timestamp not null, - updated_at timestamp, - uuid varchar(255) not null constraint UK_fbot_user_public_id unique, - last_message_date timestamp not null, - level integer not null, - twitch_user_id varchar(255) not null constraint UK_twitch_id_user unique, - xp integer not null, - xp_next_level integer not null -); - -create table funix_api_mails -( - id bigint generated by default as identity primary key, - created_at timestamp not null, - updated_at timestamp, - uuid varchar(255) not null constraint UK_mail_id_public unique, - from_mail varchar(255) not null, - subject varchar(255) not null, - text varchar(10000) not null, - to_mail varchar(255) not null, - send boolean not null -); - -create table twitch_client_tokens -( - id bigint generated by default as identity primary key, - created_at timestamp(6) not null, - updated_at timestamp(6), - uuid varchar(255) not null constraint twitch_client_tokens_public_id unique, - access_token varchar(255) not null constraint twitch_client_tokens_access_token unique, - expiration_date_token timestamp(6) not null, - o_auth_code varchar(255) not null constraint twitch_client_tokens_oauth unique, - refresh_token varchar(255) not null constraint twitch_client_tokens_refresh unique, - token_type varchar(255) not null, - twitch_user_id varchar(255) not null, - twitch_username varchar(255) not null, - user_id bigint not null constraint twitch_client_tokens_link_user references api_users -); diff --git a/service/src/main/resources/db/migration/V2__fix_twitch_auth.sql b/service/src/main/resources/db/migration/V2__fix_twitch_auth.sql deleted file mode 100644 index 25a83e98..00000000 --- a/service/src/main/resources/db/migration/V2__fix_twitch_auth.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE twitch_client_tokens DROP COLUMN token_type; diff --git a/service/src/main/resources/db/migration/V3__add_twitch_event_sub.sql b/service/src/main/resources/db/migration/V3__add_twitch_event_sub.sql deleted file mode 100644 index b22113a4..00000000 --- a/service/src/main/resources/db/migration/V3__add_twitch_event_sub.sql +++ /dev/null @@ -1,8 +0,0 @@ -create table twitch_event_sub_streamers -( - id bigint generated by default as identity primary key, - created_at timestamp not null, - updated_at timestamp, - uuid varchar(255) not null constraint UK_twitch_event_sub_streamers_public_id unique, - streamer_id varchar(255) not null constraint UK_twitch_event_sub_streamers_st_id unique -); diff --git a/service/src/main/resources/db/migration/V4__funixproductions_migration.sql b/service/src/main/resources/db/migration/V4__funixproductions_migration.sql deleted file mode 100644 index 094b05f9..00000000 --- a/service/src/main/resources/db/migration/V4__funixproductions_migration.sql +++ /dev/null @@ -1,5 +0,0 @@ -drop table if exists funix_api_mails; -drop table if exists twitch_event_sub_streamers; -drop table if exists twitch_client_tokens; -drop table if exists api_users_tokens; -drop table if exists api_users; diff --git a/service/src/main/resources/logback.xml b/service/src/main/resources/logback.xml deleted file mode 100644 index 8fec9515..00000000 --- a/service/src/main/resources/logback.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - - - - - logs/funix-api.log - - logs/funix-api.%d{yyyy-MM-dd}.log - 15 - - - %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - - - - - - - - - diff --git a/service/src/test/resources/application.properties b/service/src/test/resources/application.properties deleted file mode 100644 index ec1119ac..00000000 --- a/service/src/test/resources/application.properties +++ /dev/null @@ -1,12 +0,0 @@ -spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.H2Dialect -spring.datasource.url=jdbc:h2:mem:test - -spring.flyway.enabled=false -spring.jpa.open-in-view=false -spring.jpa.generate-ddl=true -spring.jpa.hibernate.ddl-auto=create - -funixgaming.api.app-domain-url=http://localhost:8080 -funixgaming.api.app-behind-proxy=false - -funixproductions.api.app-domain-url=http://localhost:8080 \ No newline at end of file diff --git a/service/src/test/resources/views/login.html b/service/src/test/resources/views/login.html deleted file mode 100644 index 0d602709..00000000 --- a/service/src/test/resources/views/login.html +++ /dev/null @@ -1,56 +0,0 @@ - - - - - FunixAPI - Auth test - - - -
-
-

-
-

- - -
- -
-

-
- -
- -
- - - diff --git a/service/src/test/resources/views/register.html b/service/src/test/resources/views/register.html deleted file mode 100644 index 87133bc9..00000000 --- a/service/src/test/resources/views/register.html +++ /dev/null @@ -1,60 +0,0 @@ - - - - - FunixAPI - Auth test - - - -
-
-

-
-

-
-

-
-

- - -
- -
-

-
- -
- -
- - - From 7420286eee58f073030397310bbbb9b3401de91c Mon Sep 17 00:00:00 2001 From: FunixG Date: Wed, 12 Jul 2023 11:43:52 +0200 Subject: [PATCH 2/2] Done microservice env kubernetes --- .github/workflows/build-production.yml | 121 ++++++++++++++++++ .../workflows/{main.yml => build-test.yml} | 9 +- .github/workflows/push-maven-central.yml | 71 ---------- Dockerfile | 14 ++ docker-compose.yml | 11 ++ .../config/certificates-ssl/certificate.yml | 13 ++ kubernetes/config/ingress.yml | 21 +++ kubernetes/deployServices.sh | 8 ++ .../microservices/funixbot-microservice.yml | 87 +++++++++++++ .../service/security/WebSecurity.java | 1 + 10 files changed, 277 insertions(+), 79 deletions(-) create mode 100644 .github/workflows/build-production.yml rename .github/workflows/{main.yml => build-test.yml} (69%) delete mode 100644 .github/workflows/push-maven-central.yml create mode 100644 Dockerfile create mode 100644 docker-compose.yml create mode 100644 kubernetes/config/certificates-ssl/certificate.yml create mode 100644 kubernetes/config/ingress.yml create mode 100644 kubernetes/deployServices.sh create mode 100644 kubernetes/microservices/funixbot-microservice.yml diff --git a/.github/workflows/build-production.yml b/.github/workflows/build-production.yml new file mode 100644 index 00000000..48b736b5 --- /dev/null +++ b/.github/workflows/build-production.yml @@ -0,0 +1,121 @@ +# This is a basic workflow to help you get started with Actions + +name: Push Maven realease + +on: + release: + types: [created] + +jobs: + publish-maven-central: + runs-on: ubuntu-latest + + permissions: + contents: read + + steps: + - name: Checkout code + uses: actions/checkout@v3 + + - id: import_gpg + name: Import GPG key + uses: crazy-max/ghaction-import-gpg@v5 + with: + gpg_private_key: ${{ secrets.OSSRH_GPG_SECRET_KEY }} + passphrase: ${{ secrets.OSSRH_GPG_SECRET_KEY_PASSWORD }} + + - name: Set up Java + uses: actions/setup-java@v3 + with: + java-version: '17' + distribution: 'temurin' + server-id: ossrh + server-username: MAVEN_USERNAME + server-password: MAVEN_PASSWORD + + - name: Publish to the Maven Central Repository + run: mvn --batch-mode clean deploy + env: + MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }} + MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }} + + build-production-maven: + runs-on: ubuntu-latest + + permissions: + contents: read + + steps: + - name: Checkout Code + uses: actions/checkout@v3 + + - id: import_gpg + name: Import GPG key + uses: crazy-max/ghaction-import-gpg@v5 + with: + gpg_private_key: ${{ secrets.OSSRH_GPG_SECRET_KEY }} + passphrase: ${{ secrets.OSSRH_GPG_SECRET_KEY_PASSWORD }} + + - name: Set up JDK 17 + uses: actions/setup-java@v2 + with: + java-version: '17' + distribution: 'temurin' + cache: maven + + - name: Build with Maven + run: mvn --batch-mode clean package + + - name: Publish Package Artifacts + uses: actions/upload-artifact@v3 + with: + name: maven-packages + path: modules/**/target/*.jar + + build-production-docker-images: + needs: build-production-maven + runs-on: ubuntu-latest + + permissions: + contents: read + packages: write + + steps: + - name: Login to GitHub Container Registry + uses: docker/login-action@v2 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Checkout source code + uses: actions/checkout@v3 + + - name: Download Package Artifacts + uses: actions/download-artifact@v3 + with: + name: maven-packages + path: modules + + - name: Build funixgaming api docker images and push + run: docker compose build --push + + update-kubernetes-cluster: + needs: + - build-production-docker-images + + runs-on: ubuntu-latest + + steps: + - name: Set up kubectl + uses: azure/k8s-set-context@v3 + with: + kubeconfig: ${{ secrets.KUBECONFIG }} + env: + KUBECONFIG: ${{ secrets.KUBECONFIG }} + + - name: Checkout source code + uses: actions/checkout@v3 + + - name: Update Kubernetes Cluster + run: cd kubernetes && chmod +x ./deployServices.sh && ./deployServices.sh diff --git a/.github/workflows/main.yml b/.github/workflows/build-test.yml similarity index 69% rename from .github/workflows/main.yml rename to .github/workflows/build-test.yml index 5d712764..3fbbdc84 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/build-test.yml @@ -18,13 +18,6 @@ jobs: - name: Checkout Code uses: actions/checkout@v3 - - id: import_gpg - name: Import GPG key - uses: crazy-max/ghaction-import-gpg@v5 - with: - gpg_private_key: ${{ secrets.OSSRH_GPG_SECRET_KEY }} - passphrase: ${{ secrets.OSSRH_GPG_SECRET_KEY_PASSWORD }} - - name: Set up JDK 17 uses: actions/setup-java@v2 with: @@ -33,4 +26,4 @@ jobs: cache: maven - name: Build with Maven - run: mvn --batch-mode --update-snapshots verify + run: mvn --batch-mode --update-snapshots clean verify -Dmaven.javadoc.skip -Dgpg.skip diff --git a/.github/workflows/push-maven-central.yml b/.github/workflows/push-maven-central.yml deleted file mode 100644 index 2b8df5f7..00000000 --- a/.github/workflows/push-maven-central.yml +++ /dev/null @@ -1,71 +0,0 @@ -# This is a basic workflow to help you get started with Actions - -name: Push Maven realease - -on: - release: - types: [created] - -jobs: - publish-maven-central: - runs-on: ubuntu-latest - - permissions: - contents: read - - steps: - - name: Checkout code - uses: actions/checkout@v3 - - - id: import_gpg - name: Import GPG key - uses: crazy-max/ghaction-import-gpg@v5 - with: - gpg_private_key: ${{ secrets.OSSRH_GPG_SECRET_KEY }} - passphrase: ${{ secrets.OSSRH_GPG_SECRET_KEY_PASSWORD }} - - - name: Set up Java - uses: actions/setup-java@v3 - with: - java-version: '17' - distribution: 'temurin' - server-id: ossrh - server-username: MAVEN_USERNAME - server-password: MAVEN_PASSWORD - - - name: Publish to the Maven Central Repository - run: mvn --batch-mode clean deploy - env: - MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }} - MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }} - - build-pterodactyl-image-and-restart-prod: - runs-on: ubuntu-latest - - permissions: - contents: read - packages: write - - steps: - - name: Checkout code - uses: actions/checkout@v3 - - - name: Login to GitHub Container Registry - uses: docker/login-action@v1 - with: - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Build and push funix api pterodactyl dockerfile - run: | - docker build . --tag ghcr.io/funixproductions/funix-pteroq-api:latest -f pterodactyl.Dockerfile - docker push ghcr.io/funixproductions/funix-pteroq-api:latest - - - name: Send start signal to restart funixapi with new version - run: | - curl "https://${{ secrets.PTERODACTYL_DOMAIN }}/api/client/servers/4eeba516/power?signal=restart" \ - -X POST \ - -H 'Accept: application/json' \ - -H 'Content-Type: application/json' \ - -H 'Authorization: Bearer ${{ secrets.PTERODACTYL_API_KEY }}' diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..5e616b3a --- /dev/null +++ b/Dockerfile @@ -0,0 +1,14 @@ +FROM openjdk:17-alpine + +ARG service_name +ARG service_base_dir +ENV SERVICE_NAME=${service_name} +ENV SERVICE_BASE_DIR=${service_base_dir} +ENV APP_VERSION=1.3.0.0 + +WORKDIR /container/java + +ADD ./modules/${SERVICE_BASE_DIR}/service/target/funixgaming-${SERVICE_NAME}-service-${APP_VERSION}.jar /container/java/service.jar + +WORKDIR /container/app +ENTRYPOINT ["/bin/sh", "-c", "java -jar -Xms150M -XX:MaxRAMPercentage=95.0 /container/java/service.jar"] diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 00000000..bc40badd --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,11 @@ +version: '3' + +services: + #FunixBot service + build-production-server-box-service: + image: ghcr.io/funixproductions/funixgaming-api-funixbot:latest + build: + context: . + args: + service_name: funixbot + service_base_dir: funixbot diff --git a/kubernetes/config/certificates-ssl/certificate.yml b/kubernetes/config/certificates-ssl/certificate.yml new file mode 100644 index 00000000..de4a7008 --- /dev/null +++ b/kubernetes/config/certificates-ssl/certificate.yml @@ -0,0 +1,13 @@ +apiVersion: cert-manager.io/v1 +kind: Certificate +metadata: + name: funixgaming-api-certificate + namespace: "funixproductions" +spec: + secretName: funixgaming-api-certificate-tls + issuerRef: + name: letsencrypt + kind: ClusterIssuer + commonName: "api.funixgaming.fr" + dnsNames: + - "api.funixgaming.fr" diff --git a/kubernetes/config/ingress.yml b/kubernetes/config/ingress.yml new file mode 100644 index 00000000..b47700b6 --- /dev/null +++ b/kubernetes/config/ingress.yml @@ -0,0 +1,21 @@ +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + namespace: 'funixproductions' + name: funixgaming-api-ingress + annotations: + spec.ingressClassName: traefik +spec: + tls: + - secretName: funixgaming-api-certificate-tls + rules: + - host: api.funixgaming.fr + http: + paths: + - path: /funixbot + pathType: Prefix + backend: + service: + name: funixbot-service + port: + number: 80 diff --git a/kubernetes/deployServices.sh b/kubernetes/deployServices.sh new file mode 100644 index 00000000..250d1c55 --- /dev/null +++ b/kubernetes/deployServices.sh @@ -0,0 +1,8 @@ +#Deploy microservices +ACTUAL_TIME=$(date +%s) + +sed -i "s/TIME-UPDATE-BUILD-FNG/${ACTUAL_TIME}/g" microservices/*.yml + +kubectl apply -f config/certificates-ssl/certificate.yml +kubectl apply -f config/ingress.yml +kubectl apply -f microservices diff --git a/kubernetes/microservices/funixbot-microservice.yml b/kubernetes/microservices/funixbot-microservice.yml new file mode 100644 index 00000000..7b87eef7 --- /dev/null +++ b/kubernetes/microservices/funixbot-microservice.yml @@ -0,0 +1,87 @@ +apiVersion: apps/v1 +kind: Deployment + +metadata: + name: server-box-microservice-deployment + namespace: 'funixproductions' + labels: + app: springboot + service: funixbot + +spec: + replicas: 2 + selector: + matchLabels: + app: springboot + service: funixbot + template: + metadata: + namespace: 'funixproductions' + annotations: + build-time: "TIME-UPDATE-BUILD-FNG" + labels: + app: springboot + service: funixbot + spec: + containers: + - name: springboot-funixbot + image: ghcr.io/funixproductions/funixgaming-api-funixbot:latest + ports: + - containerPort: 80 + resources: + limits: + memory: "700Mi" + imagePullPolicy: Always + readinessProbe: + httpGet: + path: /actuator/health + port: 80 + initialDelaySeconds: 10 + periodSeconds: 5 + env: + - name: APP_PORT + value: '80' + - name: DB_HOSTNAME + valueFrom: + configMapKeyRef: + key: postgres-url + name: postgres-config + - name: DB_PORT + valueFrom: + configMapKeyRef: + name: postgres-config + key: postgres-port + - name: DB_DATABASE + valueFrom: + configMapKeyRef: + name: postgres-config + key: postgres-db + - name: DB_USER + valueFrom: + secretKeyRef: + name: postgres-secret + key: postgres-user + - name: DB_PASSWORD + valueFrom: + secretKeyRef: + name: postgres-secret + key: postgres-password + +--- + +apiVersion: v1 +kind: Service + +metadata: + namespace: 'funixproductions' + name: funixbot-service + +spec: + type: ClusterIP + selector: + app: springboot + service: funixbot + ports: + - protocol: TCP + port: 80 + targetPort: 80 diff --git a/modules/funixbot/service/src/main/java/fr/funixgaming/api/funixbot/service/security/WebSecurity.java b/modules/funixbot/service/src/main/java/fr/funixgaming/api/funixbot/service/security/WebSecurity.java index 812f7a65..e407d99d 100644 --- a/modules/funixbot/service/src/main/java/fr/funixgaming/api/funixbot/service/security/WebSecurity.java +++ b/modules/funixbot/service/src/main/java/fr/funixgaming/api/funixbot/service/security/WebSecurity.java @@ -17,6 +17,7 @@ public class WebSecurity extends ApiWebSecurity { @Override public Customizer.AuthorizationManagerRequestMatcherRegistry> getUrlsMatchers() { return ex -> ex + .requestMatchers("/actuator/**").permitAll() .requestMatchers(HttpMethod.GET, "/funixbot/**").permitAll() .anyRequest().hasAuthority(UserRole.MODERATOR.getRole()); }