From 2a6e7c176c673977bd282194ef7c4552d044d579 Mon Sep 17 00:00:00 2001 From: hitanshu310 Date: Sun, 5 Jul 2026 15:35:46 +0530 Subject: [PATCH 1/8] Hithomelabs/HomeLabDocker#86: chore: scaffold multi-module Gradle structure --- build.gradle | 73 +++++++++++------------------------------------ gradle.properties | 2 ++ settings.gradle | 4 +++ 3 files changed, 23 insertions(+), 56 deletions(-) create mode 100644 gradle.properties create mode 100644 settings.gradle diff --git a/build.gradle b/build.gradle index 3fc8ac4..ee63164 100644 --- a/build.gradle +++ b/build.gradle @@ -1,62 +1,23 @@ plugins { id 'java' - id 'org.springframework.boot' version '3.4.5' - id 'io.spring.dependency-management' version '1.1.7' + id 'org.springframework.boot' version '3.4.5' apply false + id 'io.spring.dependency-management' version '1.1.7' apply false } -group = 'com.hithomelabs' -version = '0.0.1-SNAPSHOT' +subprojects { + apply plugin: 'java' + apply plugin: 'io.spring.dependency-management' -java { - toolchain { - languageVersion = JavaLanguageVersion.of(17) - } + group = 'com.hithomelabs' + version = '0.0.1-SNAPSHOT' + + java { + toolchain { + languageVersion = JavaLanguageVersion.of(17) + } + } + + repositories { + mavenCentral() + } } - -test { - systemProperty 'spring.profiles.active', 'ci' - useJUnitPlatform { - excludeTags 'integration' - } - testLogging { - events "passed", "skipped", "failed", "standardOut", "standardError" - exceptionFormat "full" // shows full stack trace - showStandardStreams = true // shows println/log output - } -} - -tasks.register('integrationTestOnly', Test) { - useJUnitPlatform { - includeTags 'integration' - } - description = 'Runs only integration tests tagged with @Tag("integration")' - group = 'verification' - testLogging { - events "passed", "skipped", "failed" - exceptionFormat "full" - showStandardStreams = true - } -} - -repositories { - mavenCentral() -} - -dependencies { - implementation group: 'org.springdoc', name: 'springdoc-openapi-starter-webmvc-ui', version: '2.8.5' - implementation group: 'org.springframework.boot', name:'spring-boot-starter-oauth2-client', version: '3.5.5' - implementation 'org.springframework.boot:spring-boot-starter-web' - compileOnly 'org.projectlombok:lombok:1.18.30' - annotationProcessor 'org.projectlombok:lombok:1.18.30' - testImplementation 'org.springframework.boot:spring-boot-starter-test' - testImplementation 'org.springframework.security:spring-security-test' - testRuntimeOnly 'org.junit.platform:junit-platform-launcher' - implementation 'org.springframework.boot:spring-boot-starter-data-jpa' - runtimeOnly 'org.postgresql:postgresql' - implementation 'org.hibernate.validator:hibernate-validator' - runtimeOnly 'com.h2database:h2' -} - -tasks.named('test') { - useJUnitPlatform() -} \ No newline at end of file diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 0000000..abe1fb4 --- /dev/null +++ b/gradle.properties @@ -0,0 +1,2 @@ +version=0.0.1-SNAPSHOT +group=com.hithomelabs diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 0000000..932528f --- /dev/null +++ b/settings.gradle @@ -0,0 +1,4 @@ +rootProject.name = 'cftunnels' +include 'common' +include 'cftunnels-service' +include 'portainer-automation' -- 2.45.2 From 0c2e186ba7fcf0030c59c9732806b72f81c04764 Mon Sep 17 00:00:00 2001 From: hitanshu310 Date: Sun, 5 Jul 2026 15:35:50 +0530 Subject: [PATCH 2/8] Hithomelabs/HomeLabDocker#86: refactor: move cftunnels source into :cftunnels-service module --- Dockerfile | 4 - cftunnels-service/Dockerfile | 12 +++ cftunnels-service/build.gradle | 46 +++++++++++ .../cftunnels}/CfTunnelsApplication.java | 4 +- .../Config/AuthoritiesToGroupMapping.java | 6 +- .../cftunnels}/Config/CloudflareConfig.java | 2 +- .../Config/CustomOidcUserConfiguration.java | 2 +- .../cftunnels}/Config/OpenApiConfig.java | 2 +- .../Config/Security/SecuirtyConfig.java | 4 +- .../Controllers/TunnelController.java | 30 +++---- .../cftunnels}/Entity/Mapping.java | 2 +- .../cftunnels}/Entity/Protocol.java | 2 +- .../cftunnels}/Entity/Request.java | 2 +- .../hithomelabs/cftunnels}/Entity/Tunnel.java | 2 +- .../hithomelabs/cftunnels}/Entity/User.java | 2 +- .../Exceptions/ExternalServiceException.java | 2 +- .../Headers/AuthKeyEmailHeader.java | 4 +- .../cftunnels}/Models/Authorities.java | 2 +- .../hithomelabs/cftunnels}/Models/Config.java | 2 +- .../hithomelabs/cftunnels}/Models/Groups.java | 2 +- .../cftunnels}/Models/Ingress.java | 2 +- .../hithomelabs/cftunnels}/Models/Result.java | 2 +- .../cftunnels}/Models/TunnelResponse.java | 2 +- .../cftunnels}/Models/TunnelResult.java | 2 +- .../cftunnels}/Models/TunnelsResponse.java | 2 +- .../Repositories/MappingRepository.java | 4 +- .../Repositories/RequestRepository.java | 4 +- .../Repositories/TunnelRepository.java | 4 +- .../Repositories/UserRepository.java | 4 +- .../Services/CloudflareAPIService.java | 22 +++--- .../Services/MappingRequestService.java | 22 +++--- .../main/resources/application-ci.properties | 0 .../application-integration.properties | 0 .../resources/application-local.properties | 0 .../resources/application-prod.properties | 0 .../resources/application-test.properties | 0 .../main/resources/application.properties | 0 .../src}/main/resources/schema.sql | 0 .../cftunnels}/CfTunnelsApplicationTests.java | 2 +- .../Controllers/TunnelControllerTest.java | 78 +++++++++---------- .../CoudflareApiIntegrationTest.java | 18 ++--- .../Repositories/RequestRepositoryTest.java | 12 +-- .../Services/CloudflareAPIServiceTest.java | 24 +++--- .../cftunnels}/TestUtils/Util.java | 2 +- .../data/tunnelResponseLargeIngress.json | 0 .../data/tunnelResponseSmallIngress.json | 0 .../src}/test/resources/docker-compose.yaml | 0 .../CFTunnels/Config/RestTemplateConfig.java | 22 ------ 48 files changed, 197 insertions(+), 165 deletions(-) delete mode 100644 Dockerfile create mode 100644 cftunnels-service/Dockerfile create mode 100644 cftunnels-service/build.gradle rename {src/main/java/com/hithomelabs/CFTunnels => cftunnels-service/src/main/java/com/hithomelabs/cftunnels}/CfTunnelsApplication.java (93%) rename {src/main/java/com/hithomelabs/CFTunnels => cftunnels-service/src/main/java/com/hithomelabs/cftunnels}/Config/AuthoritiesToGroupMapping.java (88%) rename {src/main/java/com/hithomelabs/CFTunnels => cftunnels-service/src/main/java/com/hithomelabs/cftunnels}/Config/CloudflareConfig.java (97%) rename {src/main/java/com/hithomelabs/CFTunnels => cftunnels-service/src/main/java/com/hithomelabs/cftunnels}/Config/CustomOidcUserConfiguration.java (97%) rename {src/main/java/com/hithomelabs/CFTunnels => cftunnels-service/src/main/java/com/hithomelabs/cftunnels}/Config/OpenApiConfig.java (98%) rename {src/main/java/com/hithomelabs/CFTunnels => cftunnels-service/src/main/java/com/hithomelabs/cftunnels}/Config/Security/SecuirtyConfig.java (92%) rename {src/main/java/com/hithomelabs/CFTunnels => cftunnels-service/src/main/java/com/hithomelabs/cftunnels}/Controllers/TunnelController.java (95%) rename {src/main/java/com/hithomelabs/CFTunnels => cftunnels-service/src/main/java/com/hithomelabs/cftunnels}/Entity/Mapping.java (98%) rename {src/main/java/com/hithomelabs/CFTunnels => cftunnels-service/src/main/java/com/hithomelabs/cftunnels}/Entity/Protocol.java (96%) rename {src/main/java/com/hithomelabs/CFTunnels => cftunnels-service/src/main/java/com/hithomelabs/cftunnels}/Entity/Request.java (98%) rename {src/main/java/com/hithomelabs/CFTunnels => cftunnels-service/src/main/java/com/hithomelabs/cftunnels}/Entity/Tunnel.java (97%) rename {src/main/java/com/hithomelabs/CFTunnels => cftunnels-service/src/main/java/com/hithomelabs/cftunnels}/Entity/User.java (97%) rename {src/main/java/com/hithomelabs/CFTunnels => cftunnels-service/src/main/java/com/hithomelabs/cftunnels}/Exceptions/ExternalServiceException.java (75%) rename {src/main/java/com/hithomelabs/CFTunnels => cftunnels-service/src/main/java/com/hithomelabs/cftunnels}/Headers/AuthKeyEmailHeader.java (85%) rename {src/main/java/com/hithomelabs/CFTunnels => cftunnels-service/src/main/java/com/hithomelabs/cftunnels}/Models/Authorities.java (86%) rename {src/main/java/com/hithomelabs/CFTunnels => cftunnels-service/src/main/java/com/hithomelabs/cftunnels}/Models/Config.java (95%) rename {src/main/java/com/hithomelabs/CFTunnels => cftunnels-service/src/main/java/com/hithomelabs/cftunnels}/Models/Groups.java (87%) rename {src/main/java/com/hithomelabs/CFTunnels => cftunnels-service/src/main/java/com/hithomelabs/cftunnels}/Models/Ingress.java (98%) rename {src/main/java/com/hithomelabs/CFTunnels => cftunnels-service/src/main/java/com/hithomelabs/cftunnels}/Models/Result.java (96%) rename {src/main/java/com/hithomelabs/CFTunnels => cftunnels-service/src/main/java/com/hithomelabs/cftunnels}/Models/TunnelResponse.java (90%) rename {src/main/java/com/hithomelabs/CFTunnels => cftunnels-service/src/main/java/com/hithomelabs/cftunnels}/Models/TunnelResult.java (89%) rename {src/main/java/com/hithomelabs/CFTunnels => cftunnels-service/src/main/java/com/hithomelabs/cftunnels}/Models/TunnelsResponse.java (92%) rename {src/main/java/com/hithomelabs/CFTunnels => cftunnels-service/src/main/java/com/hithomelabs/cftunnels}/Repositories/MappingRepository.java (69%) rename {src/main/java/com/hithomelabs/CFTunnels => cftunnels-service/src/main/java/com/hithomelabs/cftunnels}/Repositories/RequestRepository.java (90%) rename {src/main/java/com/hithomelabs/CFTunnels => cftunnels-service/src/main/java/com/hithomelabs/cftunnels}/Repositories/TunnelRepository.java (72%) rename {src/main/java/com/hithomelabs/CFTunnels => cftunnels-service/src/main/java/com/hithomelabs/cftunnels}/Repositories/UserRepository.java (75%) rename {src/main/java/com/hithomelabs/CFTunnels => cftunnels-service/src/main/java/com/hithomelabs/cftunnels}/Services/CloudflareAPIService.java (92%) rename {src/main/java/com/hithomelabs/CFTunnels => cftunnels-service/src/main/java/com/hithomelabs/cftunnels}/Services/MappingRequestService.java (89%) rename {src => cftunnels-service/src}/main/resources/application-ci.properties (100%) rename {src => cftunnels-service/src}/main/resources/application-integration.properties (100%) rename {src => cftunnels-service/src}/main/resources/application-local.properties (100%) rename {src => cftunnels-service/src}/main/resources/application-prod.properties (100%) rename {src => cftunnels-service/src}/main/resources/application-test.properties (100%) rename {src => cftunnels-service/src}/main/resources/application.properties (100%) rename {src => cftunnels-service/src}/main/resources/schema.sql (100%) rename {src/test/java/com/hithomelabs/CFTunnels => cftunnels-service/src/test/java/com/hithomelabs/cftunnels}/CfTunnelsApplicationTests.java (84%) rename {src/test/java/com/hithomelabs/CFTunnels => cftunnels-service/src/test/java/com/hithomelabs/cftunnels}/Controllers/TunnelControllerTest.java (89%) rename {src/test/java/com/hithomelabs/CFTunnels => cftunnels-service/src/test/java/com/hithomelabs/cftunnels}/Integration/CoudflareApiIntegrationTest.java (89%) rename {src/test/java/com/hithomelabs/CFTunnels => cftunnels-service/src/test/java/com/hithomelabs/cftunnels}/Repositories/RequestRepositoryTest.java (95%) rename {src/test/java/com/hithomelabs/CFTunnels => cftunnels-service/src/test/java/com/hithomelabs/cftunnels}/Services/CloudflareAPIServiceTest.java (93%) rename {src/test/java/com/hithomelabs/CFTunnels => cftunnels-service/src/test/java/com/hithomelabs/cftunnels}/TestUtils/Util.java (90%) rename {src => cftunnels-service/src}/test/resources/data/tunnelResponseLargeIngress.json (100%) rename {src => cftunnels-service/src}/test/resources/data/tunnelResponseSmallIngress.json (100%) rename {src => cftunnels-service/src}/test/resources/docker-compose.yaml (100%) delete mode 100644 src/main/java/com/hithomelabs/CFTunnels/Config/RestTemplateConfig.java diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index 1885003..0000000 --- a/Dockerfile +++ /dev/null @@ -1,4 +0,0 @@ -FROM openjdk:17-jdk -ARG JAR_FILE=target/*.jar -COPY ${JAR_FILE} app.jar -ENTRYPOINT ["java","-jar","/app.jar"] \ No newline at end of file diff --git a/cftunnels-service/Dockerfile b/cftunnels-service/Dockerfile new file mode 100644 index 0000000..e6820da --- /dev/null +++ b/cftunnels-service/Dockerfile @@ -0,0 +1,12 @@ +FROM openjdk:17-jdk as build +WORKDIR /app +COPY gradlew settings.gradle build.gradle ./ +COPY gradle ./gradle +COPY common ./common +COPY cftunnels-service ./cftunnels-service +COPY portainer-automation ./portainer-automation +RUN ./gradlew :cftunnels-service:bootJar + +FROM openjdk:17-jdk-slim +COPY --from=build /app/cftunnels-service/build/libs/*.jar app.jar +ENTRYPOINT ["java", "-jar", "/app.jar"] diff --git a/cftunnels-service/build.gradle b/cftunnels-service/build.gradle new file mode 100644 index 0000000..a17855f --- /dev/null +++ b/cftunnels-service/build.gradle @@ -0,0 +1,46 @@ +apply plugin: 'org.springframework.boot' + +dependencies { + implementation project(':common') + + implementation 'org.springframework.boot:spring-boot-starter-web' + implementation 'org.springframework.boot:spring-boot-starter-oauth2-client' + implementation 'org.springframework.boot:spring-boot-starter-data-jpa' + implementation 'org.springframework.boot:spring-boot-starter-security' + implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.8.5' + implementation 'org.hibernate.validator:hibernate-validator' + + runtimeOnly 'org.postgresql:postgresql' + runtimeOnly 'com.h2database:h2' + + compileOnly 'org.projectlombok:lombok' + annotationProcessor 'org.projectlombok:lombok' + + testImplementation 'org.springframework.boot:spring-boot-starter-test' + testImplementation 'org.springframework.security:spring-security-test' +} + +test { + systemProperty 'spring.profiles.active', 'ci' + useJUnitPlatform { + excludeTags 'integration' + } + testLogging { + events "passed", "skipped", "failed", "standardOut", "standardError" + exceptionFormat "full" + showStandardStreams = true + } +} + +tasks.register('integrationTestOnly', Test) { + useJUnitPlatform { + includeTags 'integration' + } + description = 'Runs only integration tests tagged with @Tag("integration")' + group = 'verification' + testLogging { + events "passed", "skipped", "failed" + exceptionFormat "full" + showStandardStreams = true + } +} diff --git a/src/main/java/com/hithomelabs/CFTunnels/CfTunnelsApplication.java b/cftunnels-service/src/main/java/com/hithomelabs/cftunnels/CfTunnelsApplication.java similarity index 93% rename from src/main/java/com/hithomelabs/CFTunnels/CfTunnelsApplication.java rename to cftunnels-service/src/main/java/com/hithomelabs/cftunnels/CfTunnelsApplication.java index 32ef9f9..0e71b1b 100644 --- a/src/main/java/com/hithomelabs/CFTunnels/CfTunnelsApplication.java +++ b/cftunnels-service/src/main/java/com/hithomelabs/cftunnels/CfTunnelsApplication.java @@ -1,4 +1,4 @@ -package com.hithomelabs.CFTunnels; +package com.hithomelabs.cftunnels; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @@ -32,7 +32,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; * @see Cloudflare Tunnel Documentation * @since 1.0.0 */ -@SpringBootApplication +@SpringBootApplication(scanBasePackages = "com.hithomelabs") public class CfTunnelsApplication { /** diff --git a/src/main/java/com/hithomelabs/CFTunnels/Config/AuthoritiesToGroupMapping.java b/cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Config/AuthoritiesToGroupMapping.java similarity index 88% rename from src/main/java/com/hithomelabs/CFTunnels/Config/AuthoritiesToGroupMapping.java rename to cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Config/AuthoritiesToGroupMapping.java index b323700..419a2a8 100644 --- a/src/main/java/com/hithomelabs/CFTunnels/Config/AuthoritiesToGroupMapping.java +++ b/cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Config/AuthoritiesToGroupMapping.java @@ -1,7 +1,7 @@ -package com.hithomelabs.CFTunnels.Config; +package com.hithomelabs.cftunnels.Config; -import com.hithomelabs.CFTunnels.Models.Authorities; -import com.hithomelabs.CFTunnels.Models.Groups; +import com.hithomelabs.cftunnels.Models.Authorities; +import com.hithomelabs.cftunnels.Models.Groups; import org.springframework.context.annotation.Configuration; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; diff --git a/src/main/java/com/hithomelabs/CFTunnels/Config/CloudflareConfig.java b/cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Config/CloudflareConfig.java similarity index 97% rename from src/main/java/com/hithomelabs/CFTunnels/Config/CloudflareConfig.java rename to cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Config/CloudflareConfig.java index 8d880e3..f503deb 100644 --- a/src/main/java/com/hithomelabs/CFTunnels/Config/CloudflareConfig.java +++ b/cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Config/CloudflareConfig.java @@ -1,4 +1,4 @@ -package com.hithomelabs.CFTunnels.Config; +package com.hithomelabs.cftunnels.Config; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Configuration; diff --git a/src/main/java/com/hithomelabs/CFTunnels/Config/CustomOidcUserConfiguration.java b/cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Config/CustomOidcUserConfiguration.java similarity index 97% rename from src/main/java/com/hithomelabs/CFTunnels/Config/CustomOidcUserConfiguration.java rename to cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Config/CustomOidcUserConfiguration.java index 22a4e64..9024866 100644 --- a/src/main/java/com/hithomelabs/CFTunnels/Config/CustomOidcUserConfiguration.java +++ b/cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Config/CustomOidcUserConfiguration.java @@ -1,4 +1,4 @@ -package com.hithomelabs.CFTunnels.Config; +package com.hithomelabs.cftunnels.Config; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; diff --git a/src/main/java/com/hithomelabs/CFTunnels/Config/OpenApiConfig.java b/cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Config/OpenApiConfig.java similarity index 98% rename from src/main/java/com/hithomelabs/CFTunnels/Config/OpenApiConfig.java rename to cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Config/OpenApiConfig.java index 72639fe..836b676 100644 --- a/src/main/java/com/hithomelabs/CFTunnels/Config/OpenApiConfig.java +++ b/cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Config/OpenApiConfig.java @@ -1,4 +1,4 @@ -package com.hithomelabs.CFTunnels.Config; +package com.hithomelabs.cftunnels.Config; import io.swagger.v3.oas.models.Components; import io.swagger.v3.oas.models.OpenAPI; diff --git a/src/main/java/com/hithomelabs/CFTunnels/Config/Security/SecuirtyConfig.java b/cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Config/Security/SecuirtyConfig.java similarity index 92% rename from src/main/java/com/hithomelabs/CFTunnels/Config/Security/SecuirtyConfig.java rename to cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Config/Security/SecuirtyConfig.java index 5cd6646..6dd3073 100644 --- a/src/main/java/com/hithomelabs/CFTunnels/Config/Security/SecuirtyConfig.java +++ b/cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Config/Security/SecuirtyConfig.java @@ -1,6 +1,6 @@ -package com.hithomelabs.CFTunnels.Config.Security; +package com.hithomelabs.cftunnels.Config.Security; -import com.hithomelabs.CFTunnels.Config.CustomOidcUserConfiguration; +import com.hithomelabs.cftunnels.Config.CustomOidcUserConfiguration; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; diff --git a/src/main/java/com/hithomelabs/CFTunnels/Controllers/TunnelController.java b/cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Controllers/TunnelController.java similarity index 95% rename from src/main/java/com/hithomelabs/CFTunnels/Controllers/TunnelController.java rename to cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Controllers/TunnelController.java index d4e3962..c6ea6e8 100644 --- a/src/main/java/com/hithomelabs/CFTunnels/Controllers/TunnelController.java +++ b/cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Controllers/TunnelController.java @@ -1,20 +1,20 @@ -package com.hithomelabs.CFTunnels.Controllers; +package com.hithomelabs.cftunnels.Controllers; import com.fasterxml.jackson.core.JsonProcessingException; -import com.hithomelabs.CFTunnels.Config.AuthoritiesToGroupMapping; -import com.hithomelabs.CFTunnels.Config.CloudflareConfig; -import com.hithomelabs.CFTunnels.Config.RestTemplateConfig; -import com.hithomelabs.CFTunnels.Entity.Request; -import com.hithomelabs.CFTunnels.Entity.Tunnel; -import com.hithomelabs.CFTunnels.Entity.User; -import com.hithomelabs.CFTunnels.Headers.AuthKeyEmailHeader; -import com.hithomelabs.CFTunnels.Models.Config; -import com.hithomelabs.CFTunnels.Models.Ingress; -import com.hithomelabs.CFTunnels.Models.TunnelResponse; -import com.hithomelabs.CFTunnels.Models.TunnelsResponse; -import com.hithomelabs.CFTunnels.Repositories.UserRepository; -import com.hithomelabs.CFTunnels.Services.CloudflareAPIService; -import com.hithomelabs.CFTunnels.Services.MappingRequestService; +import com.hithomelabs.cftunnels.Config.AuthoritiesToGroupMapping; +import com.hithomelabs.cftunnels.Config.CloudflareConfig; +import com.hithomelabs.cftunnels.Config.RestTemplateConfig; +import com.hithomelabs.cftunnels.Entity.Request; +import com.hithomelabs.cftunnels.Entity.Tunnel; +import com.hithomelabs.cftunnels.Entity.User; +import com.hithomelabs.cftunnels.Headers.AuthKeyEmailHeader; +import com.hithomelabs.cftunnels.Models.Config; +import com.hithomelabs.cftunnels.Models.Ingress; +import com.hithomelabs.cftunnels.Models.TunnelResponse; +import com.hithomelabs.cftunnels.Models.TunnelsResponse; +import com.hithomelabs.cftunnels.Repositories.UserRepository; +import com.hithomelabs.cftunnels.Services.CloudflareAPIService; +import com.hithomelabs.cftunnels.Services.MappingRequestService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.security.SecurityRequirement; import org.springframework.beans.factory.annotation.Autowired; diff --git a/src/main/java/com/hithomelabs/CFTunnels/Entity/Mapping.java b/cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Entity/Mapping.java similarity index 98% rename from src/main/java/com/hithomelabs/CFTunnels/Entity/Mapping.java rename to cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Entity/Mapping.java index e89f674..f3b8c0b 100644 --- a/src/main/java/com/hithomelabs/CFTunnels/Entity/Mapping.java +++ b/cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Entity/Mapping.java @@ -1,4 +1,4 @@ -package com.hithomelabs.CFTunnels.Entity; +package com.hithomelabs.cftunnels.Entity; import jakarta.persistence.*; import lombok.AllArgsConstructor; diff --git a/src/main/java/com/hithomelabs/CFTunnels/Entity/Protocol.java b/cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Entity/Protocol.java similarity index 96% rename from src/main/java/com/hithomelabs/CFTunnels/Entity/Protocol.java rename to cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Entity/Protocol.java index 0932524..6f82403 100644 --- a/src/main/java/com/hithomelabs/CFTunnels/Entity/Protocol.java +++ b/cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Entity/Protocol.java @@ -1,4 +1,4 @@ -package com.hithomelabs.CFTunnels.Entity; +package com.hithomelabs.cftunnels.Entity; /** * Enum representing supported protocols for Cloudflare Tunnel ingress mappings. diff --git a/src/main/java/com/hithomelabs/CFTunnels/Entity/Request.java b/cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Entity/Request.java similarity index 98% rename from src/main/java/com/hithomelabs/CFTunnels/Entity/Request.java rename to cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Entity/Request.java index c66bcb4..b32f64b 100644 --- a/src/main/java/com/hithomelabs/CFTunnels/Entity/Request.java +++ b/cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Entity/Request.java @@ -1,4 +1,4 @@ -package com.hithomelabs.CFTunnels.Entity; +package com.hithomelabs.cftunnels.Entity; import jakarta.persistence.*; import lombok.AllArgsConstructor; diff --git a/src/main/java/com/hithomelabs/CFTunnels/Entity/Tunnel.java b/cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Entity/Tunnel.java similarity index 97% rename from src/main/java/com/hithomelabs/CFTunnels/Entity/Tunnel.java rename to cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Entity/Tunnel.java index 8892caf..bfd043c 100644 --- a/src/main/java/com/hithomelabs/CFTunnels/Entity/Tunnel.java +++ b/cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Entity/Tunnel.java @@ -1,4 +1,4 @@ -package com.hithomelabs.CFTunnels.Entity; +package com.hithomelabs.cftunnels.Entity; import jakarta.persistence.*; import lombok.AllArgsConstructor; diff --git a/src/main/java/com/hithomelabs/CFTunnels/Entity/User.java b/cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Entity/User.java similarity index 97% rename from src/main/java/com/hithomelabs/CFTunnels/Entity/User.java rename to cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Entity/User.java index eb1336b..38ef5dc 100644 --- a/src/main/java/com/hithomelabs/CFTunnels/Entity/User.java +++ b/cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Entity/User.java @@ -1,4 +1,4 @@ -package com.hithomelabs.CFTunnels.Entity; +package com.hithomelabs.cftunnels.Entity; import jakarta.persistence.*; import jakarta.validation.constraints.Size; diff --git a/src/main/java/com/hithomelabs/CFTunnels/Exceptions/ExternalServiceException.java b/cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Exceptions/ExternalServiceException.java similarity index 75% rename from src/main/java/com/hithomelabs/CFTunnels/Exceptions/ExternalServiceException.java rename to cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Exceptions/ExternalServiceException.java index 2cf144a..681b5ad 100644 --- a/src/main/java/com/hithomelabs/CFTunnels/Exceptions/ExternalServiceException.java +++ b/cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Exceptions/ExternalServiceException.java @@ -1,4 +1,4 @@ -package com.hithomelabs.CFTunnels.Exceptions; +package com.hithomelabs.cftunnels.Exceptions; public class ExternalServiceException extends RuntimeException { public ExternalServiceException(String message) { super(message); } diff --git a/src/main/java/com/hithomelabs/CFTunnels/Headers/AuthKeyEmailHeader.java b/cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Headers/AuthKeyEmailHeader.java similarity index 85% rename from src/main/java/com/hithomelabs/CFTunnels/Headers/AuthKeyEmailHeader.java rename to cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Headers/AuthKeyEmailHeader.java index 8252c9c..ca17233 100644 --- a/src/main/java/com/hithomelabs/CFTunnels/Headers/AuthKeyEmailHeader.java +++ b/cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Headers/AuthKeyEmailHeader.java @@ -1,6 +1,6 @@ -package com.hithomelabs.CFTunnels.Headers; +package com.hithomelabs.cftunnels.Headers; -import com.hithomelabs.CFTunnels.Config.CloudflareConfig; +import com.hithomelabs.cftunnels.Config.CloudflareConfig; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpHeaders; import org.springframework.stereotype.Component; diff --git a/src/main/java/com/hithomelabs/CFTunnels/Models/Authorities.java b/cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Models/Authorities.java similarity index 86% rename from src/main/java/com/hithomelabs/CFTunnels/Models/Authorities.java rename to cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Models/Authorities.java index f26a17b..db8a162 100644 --- a/src/main/java/com/hithomelabs/CFTunnels/Models/Authorities.java +++ b/cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Models/Authorities.java @@ -1,4 +1,4 @@ -package com.hithomelabs.CFTunnels.Models; +package com.hithomelabs.cftunnels.Models; public class Authorities { diff --git a/src/main/java/com/hithomelabs/CFTunnels/Models/Config.java b/cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Models/Config.java similarity index 95% rename from src/main/java/com/hithomelabs/CFTunnels/Models/Config.java rename to cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Models/Config.java index dd9196b..85ad76e 100644 --- a/src/main/java/com/hithomelabs/CFTunnels/Models/Config.java +++ b/cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Models/Config.java @@ -1,4 +1,4 @@ -package com.hithomelabs.CFTunnels.Models; +package com.hithomelabs.cftunnels.Models; import com.fasterxml.jackson.annotation.*; diff --git a/src/main/java/com/hithomelabs/CFTunnels/Models/Groups.java b/cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Models/Groups.java similarity index 87% rename from src/main/java/com/hithomelabs/CFTunnels/Models/Groups.java rename to cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Models/Groups.java index f7c213d..765df9b 100644 --- a/src/main/java/com/hithomelabs/CFTunnels/Models/Groups.java +++ b/cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Models/Groups.java @@ -1,4 +1,4 @@ -package com.hithomelabs.CFTunnels.Models; +package com.hithomelabs.cftunnels.Models; public class Groups { diff --git a/src/main/java/com/hithomelabs/CFTunnels/Models/Ingress.java b/cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Models/Ingress.java similarity index 98% rename from src/main/java/com/hithomelabs/CFTunnels/Models/Ingress.java rename to cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Models/Ingress.java index 05d22ab..6c3c51e 100644 --- a/src/main/java/com/hithomelabs/CFTunnels/Models/Ingress.java +++ b/cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Models/Ingress.java @@ -1,4 +1,4 @@ -package com.hithomelabs.CFTunnels.Models; +package com.hithomelabs.cftunnels.Models; import lombok.AllArgsConstructor; import lombok.Getter; diff --git a/src/main/java/com/hithomelabs/CFTunnels/Models/Result.java b/cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Models/Result.java similarity index 96% rename from src/main/java/com/hithomelabs/CFTunnels/Models/Result.java rename to cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Models/Result.java index a7930fc..b1189c3 100644 --- a/src/main/java/com/hithomelabs/CFTunnels/Models/Result.java +++ b/cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Models/Result.java @@ -1,4 +1,4 @@ -package com.hithomelabs.CFTunnels.Models; +package com.hithomelabs.cftunnels.Models; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; diff --git a/src/main/java/com/hithomelabs/CFTunnels/Models/TunnelResponse.java b/cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Models/TunnelResponse.java similarity index 90% rename from src/main/java/com/hithomelabs/CFTunnels/Models/TunnelResponse.java rename to cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Models/TunnelResponse.java index f5a4fb4..e604a11 100644 --- a/src/main/java/com/hithomelabs/CFTunnels/Models/TunnelResponse.java +++ b/cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Models/TunnelResponse.java @@ -1,4 +1,4 @@ -package com.hithomelabs.CFTunnels.Models; +package com.hithomelabs.cftunnels.Models; import lombok.AllArgsConstructor; import lombok.Getter; diff --git a/src/main/java/com/hithomelabs/CFTunnels/Models/TunnelResult.java b/cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Models/TunnelResult.java similarity index 89% rename from src/main/java/com/hithomelabs/CFTunnels/Models/TunnelResult.java rename to cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Models/TunnelResult.java index 5c5e7b6..72e7293 100644 --- a/src/main/java/com/hithomelabs/CFTunnels/Models/TunnelResult.java +++ b/cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Models/TunnelResult.java @@ -1,4 +1,4 @@ -package com.hithomelabs.CFTunnels.Models; +package com.hithomelabs.cftunnels.Models; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import lombok.AllArgsConstructor; diff --git a/src/main/java/com/hithomelabs/CFTunnels/Models/TunnelsResponse.java b/cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Models/TunnelsResponse.java similarity index 92% rename from src/main/java/com/hithomelabs/CFTunnels/Models/TunnelsResponse.java rename to cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Models/TunnelsResponse.java index 0a0af90..a3c5eac 100644 --- a/src/main/java/com/hithomelabs/CFTunnels/Models/TunnelsResponse.java +++ b/cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Models/TunnelsResponse.java @@ -1,4 +1,4 @@ -package com.hithomelabs.CFTunnels.Models; +package com.hithomelabs.cftunnels.Models; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import lombok.AllArgsConstructor; diff --git a/src/main/java/com/hithomelabs/CFTunnels/Repositories/MappingRepository.java b/cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Repositories/MappingRepository.java similarity index 69% rename from src/main/java/com/hithomelabs/CFTunnels/Repositories/MappingRepository.java rename to cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Repositories/MappingRepository.java index 73b469c..7b5869f 100644 --- a/src/main/java/com/hithomelabs/CFTunnels/Repositories/MappingRepository.java +++ b/cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Repositories/MappingRepository.java @@ -1,6 +1,6 @@ -package com.hithomelabs.CFTunnels.Repositories; +package com.hithomelabs.cftunnels.Repositories; -import com.hithomelabs.CFTunnels.Entity.Mapping; +import com.hithomelabs.cftunnels.Entity.Mapping; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; diff --git a/src/main/java/com/hithomelabs/CFTunnels/Repositories/RequestRepository.java b/cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Repositories/RequestRepository.java similarity index 90% rename from src/main/java/com/hithomelabs/CFTunnels/Repositories/RequestRepository.java rename to cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Repositories/RequestRepository.java index 0b89b5c..1b8049f 100644 --- a/src/main/java/com/hithomelabs/CFTunnels/Repositories/RequestRepository.java +++ b/cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Repositories/RequestRepository.java @@ -1,6 +1,6 @@ -package com.hithomelabs.CFTunnels.Repositories; +package com.hithomelabs.cftunnels.Repositories; -import com.hithomelabs.CFTunnels.Entity.Request; +import com.hithomelabs.cftunnels.Entity.Request; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; diff --git a/src/main/java/com/hithomelabs/CFTunnels/Repositories/TunnelRepository.java b/cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Repositories/TunnelRepository.java similarity index 72% rename from src/main/java/com/hithomelabs/CFTunnels/Repositories/TunnelRepository.java rename to cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Repositories/TunnelRepository.java index 719d3ce..f08d803 100644 --- a/src/main/java/com/hithomelabs/CFTunnels/Repositories/TunnelRepository.java +++ b/cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Repositories/TunnelRepository.java @@ -1,6 +1,6 @@ -package com.hithomelabs.CFTunnels.Repositories; +package com.hithomelabs.cftunnels.Repositories; -import com.hithomelabs.CFTunnels.Entity.Tunnel; +import com.hithomelabs.cftunnels.Entity.Tunnel; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; diff --git a/src/main/java/com/hithomelabs/CFTunnels/Repositories/UserRepository.java b/cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Repositories/UserRepository.java similarity index 75% rename from src/main/java/com/hithomelabs/CFTunnels/Repositories/UserRepository.java rename to cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Repositories/UserRepository.java index a1038a7..ecbd83c 100644 --- a/src/main/java/com/hithomelabs/CFTunnels/Repositories/UserRepository.java +++ b/cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Repositories/UserRepository.java @@ -1,6 +1,6 @@ -package com.hithomelabs.CFTunnels.Repositories; +package com.hithomelabs.cftunnels.Repositories; -import com.hithomelabs.CFTunnels.Entity.User; +import com.hithomelabs.cftunnels.Entity.User; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; diff --git a/src/main/java/com/hithomelabs/CFTunnels/Services/CloudflareAPIService.java b/cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Services/CloudflareAPIService.java similarity index 92% rename from src/main/java/com/hithomelabs/CFTunnels/Services/CloudflareAPIService.java rename to cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Services/CloudflareAPIService.java index 6d0084a..35ff374 100644 --- a/src/main/java/com/hithomelabs/CFTunnels/Services/CloudflareAPIService.java +++ b/cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Services/CloudflareAPIService.java @@ -1,15 +1,15 @@ -package com.hithomelabs.CFTunnels.Services; +package com.hithomelabs.cftunnels.Services; -import com.hithomelabs.CFTunnels.Config.CloudflareConfig; -import com.hithomelabs.CFTunnels.Entity.Tunnel; -import com.hithomelabs.CFTunnels.Exceptions.ExternalServiceException; -import com.hithomelabs.CFTunnels.Headers.AuthKeyEmailHeader; -import com.hithomelabs.CFTunnels.Models.Config; -import com.hithomelabs.CFTunnels.Models.Ingress; -import com.hithomelabs.CFTunnels.Models.TunnelResponse; -import com.hithomelabs.CFTunnels.Models.TunnelResult; -import com.hithomelabs.CFTunnels.Models.TunnelsResponse; -import com.hithomelabs.CFTunnels.Repositories.TunnelRepository; +import com.hithomelabs.cftunnels.Config.CloudflareConfig; +import com.hithomelabs.cftunnels.Entity.Tunnel; +import com.hithomelabs.cftunnels.Exceptions.ExternalServiceException; +import com.hithomelabs.cftunnels.Headers.AuthKeyEmailHeader; +import com.hithomelabs.cftunnels.Models.Config; +import com.hithomelabs.cftunnels.Models.Ingress; +import com.hithomelabs.cftunnels.Models.TunnelResponse; +import com.hithomelabs.cftunnels.Models.TunnelResult; +import com.hithomelabs.cftunnels.Models.TunnelsResponse; +import com.hithomelabs.cftunnels.Repositories.TunnelRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataAccessException; import org.springframework.http.*; diff --git a/src/main/java/com/hithomelabs/CFTunnels/Services/MappingRequestService.java b/cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Services/MappingRequestService.java similarity index 89% rename from src/main/java/com/hithomelabs/CFTunnels/Services/MappingRequestService.java rename to cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Services/MappingRequestService.java index ba86144..22c8566 100644 --- a/src/main/java/com/hithomelabs/CFTunnels/Services/MappingRequestService.java +++ b/cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Services/MappingRequestService.java @@ -1,15 +1,15 @@ -package com.hithomelabs.CFTunnels.Services; +package com.hithomelabs.cftunnels.Services; -import com.hithomelabs.CFTunnels.Entity.Mapping; -import com.hithomelabs.CFTunnels.Entity.Protocol; -import com.hithomelabs.CFTunnels.Entity.Request; -import com.hithomelabs.CFTunnels.Entity.Tunnel; -import com.hithomelabs.CFTunnels.Entity.User; -import com.hithomelabs.CFTunnels.Models.Ingress; -import com.hithomelabs.CFTunnels.Repositories.MappingRepository; -import com.hithomelabs.CFTunnels.Repositories.RequestRepository; -import com.hithomelabs.CFTunnels.Repositories.TunnelRepository; -import com.hithomelabs.CFTunnels.Repositories.UserRepository; +import com.hithomelabs.cftunnels.Entity.Mapping; +import com.hithomelabs.cftunnels.Entity.Protocol; +import com.hithomelabs.cftunnels.Entity.Request; +import com.hithomelabs.cftunnels.Entity.Tunnel; +import com.hithomelabs.cftunnels.Entity.User; +import com.hithomelabs.cftunnels.Models.Ingress; +import com.hithomelabs.cftunnels.Repositories.MappingRepository; +import com.hithomelabs.cftunnels.Repositories.RequestRepository; +import com.hithomelabs.cftunnels.Repositories.TunnelRepository; +import com.hithomelabs.cftunnels.Repositories.UserRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.security.oauth2.core.oidc.user.OidcUser; diff --git a/src/main/resources/application-ci.properties b/cftunnels-service/src/main/resources/application-ci.properties similarity index 100% rename from src/main/resources/application-ci.properties rename to cftunnels-service/src/main/resources/application-ci.properties diff --git a/src/main/resources/application-integration.properties b/cftunnels-service/src/main/resources/application-integration.properties similarity index 100% rename from src/main/resources/application-integration.properties rename to cftunnels-service/src/main/resources/application-integration.properties diff --git a/src/main/resources/application-local.properties b/cftunnels-service/src/main/resources/application-local.properties similarity index 100% rename from src/main/resources/application-local.properties rename to cftunnels-service/src/main/resources/application-local.properties diff --git a/src/main/resources/application-prod.properties b/cftunnels-service/src/main/resources/application-prod.properties similarity index 100% rename from src/main/resources/application-prod.properties rename to cftunnels-service/src/main/resources/application-prod.properties diff --git a/src/main/resources/application-test.properties b/cftunnels-service/src/main/resources/application-test.properties similarity index 100% rename from src/main/resources/application-test.properties rename to cftunnels-service/src/main/resources/application-test.properties diff --git a/src/main/resources/application.properties b/cftunnels-service/src/main/resources/application.properties similarity index 100% rename from src/main/resources/application.properties rename to cftunnels-service/src/main/resources/application.properties diff --git a/src/main/resources/schema.sql b/cftunnels-service/src/main/resources/schema.sql similarity index 100% rename from src/main/resources/schema.sql rename to cftunnels-service/src/main/resources/schema.sql diff --git a/src/test/java/com/hithomelabs/CFTunnels/CfTunnelsApplicationTests.java b/cftunnels-service/src/test/java/com/hithomelabs/cftunnels/CfTunnelsApplicationTests.java similarity index 84% rename from src/test/java/com/hithomelabs/CFTunnels/CfTunnelsApplicationTests.java rename to cftunnels-service/src/test/java/com/hithomelabs/cftunnels/CfTunnelsApplicationTests.java index 721ec19..26a3076 100644 --- a/src/test/java/com/hithomelabs/CFTunnels/CfTunnelsApplicationTests.java +++ b/cftunnels-service/src/test/java/com/hithomelabs/cftunnels/CfTunnelsApplicationTests.java @@ -1,4 +1,4 @@ -package com.hithomelabs.CFTunnels; +package com.hithomelabs.cftunnels; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; diff --git a/src/test/java/com/hithomelabs/CFTunnels/Controllers/TunnelControllerTest.java b/cftunnels-service/src/test/java/com/hithomelabs/cftunnels/Controllers/TunnelControllerTest.java similarity index 89% rename from src/test/java/com/hithomelabs/CFTunnels/Controllers/TunnelControllerTest.java rename to cftunnels-service/src/test/java/com/hithomelabs/cftunnels/Controllers/TunnelControllerTest.java index e2ad575..9d49582 100644 --- a/src/test/java/com/hithomelabs/CFTunnels/Controllers/TunnelControllerTest.java +++ b/cftunnels-service/src/test/java/com/hithomelabs/cftunnels/Controllers/TunnelControllerTest.java @@ -1,21 +1,21 @@ -package com.hithomelabs.CFTunnels.Controllers; +package com.hithomelabs.cftunnels.Controllers; import com.fasterxml.jackson.databind.ObjectMapper; -import com.hithomelabs.CFTunnels.Config.AuthoritiesToGroupMapping; -import com.hithomelabs.CFTunnels.Config.CloudflareConfig; -import com.hithomelabs.CFTunnels.Config.RestTemplateConfig; -import com.hithomelabs.CFTunnels.Headers.AuthKeyEmailHeader; -import com.hithomelabs.CFTunnels.Entity.Request; -import com.hithomelabs.CFTunnels.Entity.Tunnel; -import com.hithomelabs.CFTunnels.Models.Authorities; -import com.hithomelabs.CFTunnels.Models.Config; -import com.hithomelabs.CFTunnels.Models.Groups; -import com.hithomelabs.CFTunnels.Models.TunnelResponse; -import com.hithomelabs.CFTunnels.Models.TunnelResult; -import com.hithomelabs.CFTunnels.Models.TunnelsResponse; -import com.hithomelabs.CFTunnels.Repositories.UserRepository; -import com.hithomelabs.CFTunnels.Services.CloudflareAPIService; -import com.hithomelabs.CFTunnels.Services.MappingRequestService; +import com.hithomelabs.cftunnels.Config.AuthoritiesToGroupMapping; +import com.hithomelabs.cftunnels.Config.CloudflareConfig; +import com.hithomelabs.cftunnels.Config.RestTemplateConfig; +import com.hithomelabs.cftunnels.Headers.AuthKeyEmailHeader; +import com.hithomelabs.cftunnels.Entity.Request; +import com.hithomelabs.cftunnels.Entity.Tunnel; +import com.hithomelabs.cftunnels.Models.Authorities; +import com.hithomelabs.cftunnels.Models.Config; +import com.hithomelabs.cftunnels.Models.Groups; +import com.hithomelabs.cftunnels.Models.TunnelResponse; +import com.hithomelabs.cftunnels.Models.TunnelResult; +import com.hithomelabs.cftunnels.Models.TunnelsResponse; +import com.hithomelabs.cftunnels.Repositories.UserRepository; +import com.hithomelabs.cftunnels.Services.CloudflareAPIService; +import com.hithomelabs.cftunnels.Services.MappingRequestService; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -38,7 +38,7 @@ import org.springframework.data.domain.Page; import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.PageRequest; -import static com.hithomelabs.CFTunnels.TestUtils.Util.getClassPathDataResource; +import static com.hithomelabs.cftunnels.TestUtils.Util.getClassPathDataResource; import static org.hamcrest.core.IsIterableContaining.hasItem; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; @@ -207,9 +207,9 @@ class TunnelControllerTest { @Test @DisplayName("should return list of requests") void getAllRequests_Success() throws Exception { - List requests = Arrays.asList( - createTestRequest(UUID.randomUUID(), com.hithomelabs.CFTunnels.Entity.Request.RequestStatus.PENDING), - createTestRequest(UUID.randomUUID(), com.hithomelabs.CFTunnels.Entity.Request.RequestStatus.APPROVED) + List requests = Arrays.asList( + createTestRequest(UUID.randomUUID(), com.hithomelabs.cftunnels.Entity.Request.RequestStatus.PENDING), + createTestRequest(UUID.randomUUID(), com.hithomelabs.cftunnels.Entity.Request.RequestStatus.APPROVED) ); when(mappingRequestService.getAllRequests()).thenReturn(requests); @@ -227,11 +227,11 @@ class TunnelControllerTest { @DisplayName("should create mapping request successfully") void createTunnelMappingRequest_Success() throws Exception { UUID tunnelId = UUID.randomUUID(); - com.hithomelabs.CFTunnels.Entity.Request createdRequest = new com.hithomelabs.CFTunnels.Entity.Request(); + com.hithomelabs.cftunnels.Entity.Request createdRequest = new com.hithomelabs.cftunnels.Entity.Request(); createdRequest.setId(UUID.randomUUID()); - createdRequest.setStatus(com.hithomelabs.CFTunnels.Entity.Request.RequestStatus.PENDING); + createdRequest.setStatus(com.hithomelabs.cftunnels.Entity.Request.RequestStatus.PENDING); - when(mappingRequestService.createMappingRequest(any(String.class), any(com.hithomelabs.CFTunnels.Models.Ingress.class), any())).thenReturn(createdRequest); + when(mappingRequestService.createMappingRequest(any(String.class), any(com.hithomelabs.cftunnels.Models.Ingress.class), any())).thenReturn(createdRequest); mockMvc.perform(post("/cloudflare/tunnels/configure/{tunnelId}/requests", tunnelId.toString()) .with(oauth2Login().oauth2User(buildOidcUser("developer", Groups.HOMELAB_DEVELOPER))) @@ -247,15 +247,15 @@ class TunnelControllerTest { @DisplayName("should approve mapping request successfully") void approveMappingRequest_Success() throws Exception { UUID requestId = UUID.randomUUID(); - com.hithomelabs.CFTunnels.Entity.User approverUser = new com.hithomelabs.CFTunnels.Entity.User(); + com.hithomelabs.cftunnels.Entity.User approverUser = new com.hithomelabs.cftunnels.Entity.User(); approverUser.setEmail("approver@example.com"); approverUser.setName("Approver"); - com.hithomelabs.CFTunnels.Entity.Request approvedRequest = new com.hithomelabs.CFTunnels.Entity.Request(); + com.hithomelabs.cftunnels.Entity.Request approvedRequest = new com.hithomelabs.cftunnels.Entity.Request(); approvedRequest.setId(requestId); - approvedRequest.setStatus(com.hithomelabs.CFTunnels.Entity.Request.RequestStatus.APPROVED); + approvedRequest.setStatus(com.hithomelabs.cftunnels.Entity.Request.RequestStatus.APPROVED); - when(mappingRequestService.approveRequest(eq(requestId), any(com.hithomelabs.CFTunnels.Entity.User.class))) + when(mappingRequestService.approveRequest(eq(requestId), any(com.hithomelabs.cftunnels.Entity.User.class))) .thenReturn(approvedRequest); when(userRepository.findByEmail("approver@example.com")) .thenReturn(java.util.Optional.of(approverUser)); @@ -272,11 +272,11 @@ class TunnelControllerTest { @DisplayName("should return 404 when request not found") void approveMappingRequest_NotFound() throws Exception { UUID requestId = UUID.randomUUID(); - com.hithomelabs.CFTunnels.Entity.User approverUser = new com.hithomelabs.CFTunnels.Entity.User(); + com.hithomelabs.cftunnels.Entity.User approverUser = new com.hithomelabs.cftunnels.Entity.User(); approverUser.setEmail("approver@example.com"); approverUser.setName("Approver"); - when(mappingRequestService.approveRequest(eq(requestId), any(com.hithomelabs.CFTunnels.Entity.User.class))) + when(mappingRequestService.approveRequest(eq(requestId), any(com.hithomelabs.cftunnels.Entity.User.class))) .thenThrow(new NoSuchElementException("Request not found")); when(userRepository.findByEmail("approver@example.com")) .thenReturn(java.util.Optional.of(approverUser)); @@ -291,11 +291,11 @@ class TunnelControllerTest { @DisplayName("should return 500 when mapping creation fails") void approveMappingRequest_InternalServerError() throws Exception { UUID requestId = UUID.randomUUID(); - com.hithomelabs.CFTunnels.Entity.User approverUser = new com.hithomelabs.CFTunnels.Entity.User(); + com.hithomelabs.cftunnels.Entity.User approverUser = new com.hithomelabs.cftunnels.Entity.User(); approverUser.setEmail("approver@example.com"); approverUser.setName("Approver"); - when(mappingRequestService.approveRequest(eq(requestId), any(com.hithomelabs.CFTunnels.Entity.User.class))) + when(mappingRequestService.approveRequest(eq(requestId), any(com.hithomelabs.cftunnels.Entity.User.class))) .thenThrow(new RuntimeException("Failed to add mapping to Cloudflare")); when(userRepository.findByEmail("approver@example.com")) .thenReturn(java.util.Optional.of(approverUser)); @@ -310,15 +310,15 @@ class TunnelControllerTest { @DisplayName("should reject mapping request successfully") void rejectMappingRequest_Success() throws Exception { UUID requestId = UUID.randomUUID(); - com.hithomelabs.CFTunnels.Entity.User rejecterUser = new com.hithomelabs.CFTunnels.Entity.User(); + com.hithomelabs.cftunnels.Entity.User rejecterUser = new com.hithomelabs.cftunnels.Entity.User(); rejecterUser.setEmail("rejecter@example.com"); rejecterUser.setName("Rejecter"); - com.hithomelabs.CFTunnels.Entity.Request rejectedRequest = new com.hithomelabs.CFTunnels.Entity.Request(); + com.hithomelabs.cftunnels.Entity.Request rejectedRequest = new com.hithomelabs.cftunnels.Entity.Request(); rejectedRequest.setId(requestId); - rejectedRequest.setStatus(com.hithomelabs.CFTunnels.Entity.Request.RequestStatus.REJECTED); + rejectedRequest.setStatus(com.hithomelabs.cftunnels.Entity.Request.RequestStatus.REJECTED); - when(mappingRequestService.rejectRequest(eq(requestId), any(com.hithomelabs.CFTunnels.Entity.User.class))) + when(mappingRequestService.rejectRequest(eq(requestId), any(com.hithomelabs.cftunnels.Entity.User.class))) .thenReturn(rejectedRequest); when(userRepository.findByEmail("rejecter@example.com")) .thenReturn(java.util.Optional.of(rejecterUser)); @@ -335,11 +335,11 @@ class TunnelControllerTest { @DisplayName("should return 404 when rejecting non-existent request") void rejectMappingRequest_NotFound() throws Exception { UUID requestId = UUID.randomUUID(); - com.hithomelabs.CFTunnels.Entity.User rejecterUser = new com.hithomelabs.CFTunnels.Entity.User(); + com.hithomelabs.cftunnels.Entity.User rejecterUser = new com.hithomelabs.cftunnels.Entity.User(); rejecterUser.setEmail("rejecter@example.com"); rejecterUser.setName("Rejecter"); - when(mappingRequestService.rejectRequest(eq(requestId), any(com.hithomelabs.CFTunnels.Entity.User.class))) + when(mappingRequestService.rejectRequest(eq(requestId), any(com.hithomelabs.cftunnels.Entity.User.class))) .thenThrow(new NoSuchElementException("Request not found")); when(userRepository.findByEmail("rejecter@example.com")) .thenReturn(java.util.Optional.of(rejecterUser)); @@ -354,11 +354,11 @@ class TunnelControllerTest { @DisplayName("should return 409 when rejecting already processed request") void rejectMappingRequest_Conflict() throws Exception { UUID requestId = UUID.randomUUID(); - com.hithomelabs.CFTunnels.Entity.User rejecterUser = new com.hithomelabs.CFTunnels.Entity.User(); + com.hithomelabs.cftunnels.Entity.User rejecterUser = new com.hithomelabs.cftunnels.Entity.User(); rejecterUser.setEmail("rejecter@example.com"); rejecterUser.setName("Rejecter"); - when(mappingRequestService.rejectRequest(eq(requestId), any(com.hithomelabs.CFTunnels.Entity.User.class))) + when(mappingRequestService.rejectRequest(eq(requestId), any(com.hithomelabs.cftunnels.Entity.User.class))) .thenThrow(new IllegalStateException("Request is not in PENDING status")); when(userRepository.findByEmail("rejecter@example.com")) .thenReturn(java.util.Optional.of(rejecterUser)); diff --git a/src/test/java/com/hithomelabs/CFTunnels/Integration/CoudflareApiIntegrationTest.java b/cftunnels-service/src/test/java/com/hithomelabs/cftunnels/Integration/CoudflareApiIntegrationTest.java similarity index 89% rename from src/test/java/com/hithomelabs/CFTunnels/Integration/CoudflareApiIntegrationTest.java rename to cftunnels-service/src/test/java/com/hithomelabs/cftunnels/Integration/CoudflareApiIntegrationTest.java index 0ceb02b..769b98a 100644 --- a/src/test/java/com/hithomelabs/CFTunnels/Integration/CoudflareApiIntegrationTest.java +++ b/cftunnels-service/src/test/java/com/hithomelabs/cftunnels/Integration/CoudflareApiIntegrationTest.java @@ -1,13 +1,13 @@ -package com.hithomelabs.CFTunnels.Integration; +package com.hithomelabs.cftunnels.Integration; -import com.hithomelabs.CFTunnels.Config.CloudflareConfig; -import com.hithomelabs.CFTunnels.Headers.AuthKeyEmailHeader; -import com.hithomelabs.CFTunnels.Models.Config; -import com.hithomelabs.CFTunnels.Models.Ingress; -import com.hithomelabs.CFTunnels.Models.TunnelResponse; -import com.hithomelabs.CFTunnels.Models.TunnelResult; -import com.hithomelabs.CFTunnels.Models.TunnelsResponse; -import com.hithomelabs.CFTunnels.Services.CloudflareAPIService; +import com.hithomelabs.cftunnels.Config.CloudflareConfig; +import com.hithomelabs.cftunnels.Headers.AuthKeyEmailHeader; +import com.hithomelabs.cftunnels.Models.Config; +import com.hithomelabs.cftunnels.Models.Ingress; +import com.hithomelabs.cftunnels.Models.TunnelResponse; +import com.hithomelabs.cftunnels.Models.TunnelResult; +import com.hithomelabs.cftunnels.Models.TunnelsResponse; +import com.hithomelabs.cftunnels.Services.CloudflareAPIService; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; diff --git a/src/test/java/com/hithomelabs/CFTunnels/Repositories/RequestRepositoryTest.java b/cftunnels-service/src/test/java/com/hithomelabs/cftunnels/Repositories/RequestRepositoryTest.java similarity index 95% rename from src/test/java/com/hithomelabs/CFTunnels/Repositories/RequestRepositoryTest.java rename to cftunnels-service/src/test/java/com/hithomelabs/cftunnels/Repositories/RequestRepositoryTest.java index 257c315..5c42de7 100644 --- a/src/test/java/com/hithomelabs/CFTunnels/Repositories/RequestRepositoryTest.java +++ b/cftunnels-service/src/test/java/com/hithomelabs/cftunnels/Repositories/RequestRepositoryTest.java @@ -1,10 +1,10 @@ -package com.hithomelabs.CFTunnels.Repositories; +package com.hithomelabs.cftunnels.Repositories; -import com.hithomelabs.CFTunnels.Entity.Mapping; -import com.hithomelabs.CFTunnels.Entity.Protocol; -import com.hithomelabs.CFTunnels.Entity.Request; -import com.hithomelabs.CFTunnels.Entity.Tunnel; -import com.hithomelabs.CFTunnels.Entity.User; +import com.hithomelabs.cftunnels.Entity.Mapping; +import com.hithomelabs.cftunnels.Entity.Protocol; +import com.hithomelabs.cftunnels.Entity.Request; +import com.hithomelabs.cftunnels.Entity.Tunnel; +import com.hithomelabs.cftunnels.Entity.User; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; diff --git a/src/test/java/com/hithomelabs/CFTunnels/Services/CloudflareAPIServiceTest.java b/cftunnels-service/src/test/java/com/hithomelabs/cftunnels/Services/CloudflareAPIServiceTest.java similarity index 93% rename from src/test/java/com/hithomelabs/CFTunnels/Services/CloudflareAPIServiceTest.java rename to cftunnels-service/src/test/java/com/hithomelabs/cftunnels/Services/CloudflareAPIServiceTest.java index 67f7349..bf4a304 100644 --- a/src/test/java/com/hithomelabs/CFTunnels/Services/CloudflareAPIServiceTest.java +++ b/cftunnels-service/src/test/java/com/hithomelabs/cftunnels/Services/CloudflareAPIServiceTest.java @@ -1,17 +1,17 @@ -package com.hithomelabs.CFTunnels.Services; +package com.hithomelabs.cftunnels.Services; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; -import com.hithomelabs.CFTunnels.Config.CloudflareConfig; -import com.hithomelabs.CFTunnels.Entity.Tunnel; -import com.hithomelabs.CFTunnels.Exceptions.ExternalServiceException; -import com.hithomelabs.CFTunnels.Headers.AuthKeyEmailHeader; -import com.hithomelabs.CFTunnels.Models.Config; -import com.hithomelabs.CFTunnels.Models.Ingress; -import com.hithomelabs.CFTunnels.Models.TunnelResponse; -import com.hithomelabs.CFTunnels.Models.TunnelResult; -import com.hithomelabs.CFTunnels.Models.TunnelsResponse; -import com.hithomelabs.CFTunnels.Repositories.TunnelRepository; +import com.hithomelabs.cftunnels.Config.CloudflareConfig; +import com.hithomelabs.cftunnels.Entity.Tunnel; +import com.hithomelabs.cftunnels.Exceptions.ExternalServiceException; +import com.hithomelabs.cftunnels.Headers.AuthKeyEmailHeader; +import com.hithomelabs.cftunnels.Models.Config; +import com.hithomelabs.cftunnels.Models.Ingress; +import com.hithomelabs.cftunnels.Models.TunnelResponse; +import com.hithomelabs.cftunnels.Models.TunnelResult; +import com.hithomelabs.cftunnels.Models.TunnelsResponse; +import com.hithomelabs.cftunnels.Repositories.TunnelRepository; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; @@ -26,7 +26,7 @@ import java.util.NoSuchElementException; import java.util.Optional; import java.util.UUID; -import static com.hithomelabs.CFTunnels.TestUtils.Util.getClassPathDataResource; +import static com.hithomelabs.cftunnels.TestUtils.Util.getClassPathDataResource; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.mockito.ArgumentMatchers.any; diff --git a/src/test/java/com/hithomelabs/CFTunnels/TestUtils/Util.java b/cftunnels-service/src/test/java/com/hithomelabs/cftunnels/TestUtils/Util.java similarity index 90% rename from src/test/java/com/hithomelabs/CFTunnels/TestUtils/Util.java rename to cftunnels-service/src/test/java/com/hithomelabs/cftunnels/TestUtils/Util.java index a5f8c36..de86241 100644 --- a/src/test/java/com/hithomelabs/CFTunnels/TestUtils/Util.java +++ b/cftunnels-service/src/test/java/com/hithomelabs/cftunnels/TestUtils/Util.java @@ -1,4 +1,4 @@ -package com.hithomelabs.CFTunnels.TestUtils; +package com.hithomelabs.cftunnels.TestUtils; import org.springframework.core.io.ClassPathResource; diff --git a/src/test/resources/data/tunnelResponseLargeIngress.json b/cftunnels-service/src/test/resources/data/tunnelResponseLargeIngress.json similarity index 100% rename from src/test/resources/data/tunnelResponseLargeIngress.json rename to cftunnels-service/src/test/resources/data/tunnelResponseLargeIngress.json diff --git a/src/test/resources/data/tunnelResponseSmallIngress.json b/cftunnels-service/src/test/resources/data/tunnelResponseSmallIngress.json similarity index 100% rename from src/test/resources/data/tunnelResponseSmallIngress.json rename to cftunnels-service/src/test/resources/data/tunnelResponseSmallIngress.json diff --git a/src/test/resources/docker-compose.yaml b/cftunnels-service/src/test/resources/docker-compose.yaml similarity index 100% rename from src/test/resources/docker-compose.yaml rename to cftunnels-service/src/test/resources/docker-compose.yaml diff --git a/src/main/java/com/hithomelabs/CFTunnels/Config/RestTemplateConfig.java b/src/main/java/com/hithomelabs/CFTunnels/Config/RestTemplateConfig.java deleted file mode 100644 index 2edcdfc..0000000 --- a/src/main/java/com/hithomelabs/CFTunnels/Config/RestTemplateConfig.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.hithomelabs.CFTunnels.Config; - -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.SerializationFeature; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; -import org.springframework.web.client.RestTemplate; - -@Configuration -public class RestTemplateConfig { - - @Bean - public RestTemplate restTemplate() { - RestTemplate restTemplate = new RestTemplate(); - MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(); - converter.setObjectMapper(new ObjectMapper().enable(SerializationFeature.WRAP_ROOT_VALUE).setSerializationInclusion(JsonInclude.Include.NON_NULL)); - restTemplate.getMessageConverters().add(0, converter); - return restTemplate; - } -} -- 2.45.2 From ee1762711d58d663552bec5f72f413a8826de2e5 Mon Sep 17 00:00:00 2001 From: hitanshu310 Date: Sun, 5 Jul 2026 15:35:53 +0530 Subject: [PATCH 3/8] Hithomelabs/HomeLabDocker#86: feat: add :common module with RestTemplateConfig --- common/build.gradle | 10 +++++++++ .../common/config/RestTemplateConfig.java | 22 +++++++++++++++++++ 2 files changed, 32 insertions(+) create mode 100644 common/build.gradle create mode 100644 common/src/main/java/com/hithomelabs/common/config/RestTemplateConfig.java diff --git a/common/build.gradle b/common/build.gradle new file mode 100644 index 0000000..e9aac46 --- /dev/null +++ b/common/build.gradle @@ -0,0 +1,10 @@ +dependencies { + implementation 'org.springframework:spring-web' + implementation 'com.fasterxml.jackson.core:jackson-databind' + implementation 'org.apache.httpcomponents.client5:httpclient5' + + compileOnly 'org.projectlombok:lombok' + annotationProcessor 'org.projectlombok:lombok' + + testImplementation 'org.junit.jupiter:junit-jupiter' +} diff --git a/common/src/main/java/com/hithomelabs/common/config/RestTemplateConfig.java b/common/src/main/java/com/hithomelabs/common/config/RestTemplateConfig.java new file mode 100644 index 0000000..298d3fe --- /dev/null +++ b/common/src/main/java/com/hithomelabs/common/config/RestTemplateConfig.java @@ -0,0 +1,22 @@ +package com.hithomelabs.common.config; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; +import org.springframework.web.client.RestTemplate; + +@Configuration +public class RestTemplateConfig { + + @Bean + public RestTemplate restTemplate() { + RestTemplate restTemplate = new RestTemplate(); + MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(); + converter.setObjectMapper(new ObjectMapper().enable(SerializationFeature.WRAP_ROOT_VALUE).setSerializationInclusion(JsonInclude.Include.NON_NULL)); + restTemplate.getMessageConverters().add(0, converter); + return restTemplate; + } +} -- 2.45.2 From 0c6944685f9c7f3fbf331dc7f4731e0888c7c0e8 Mon Sep 17 00:00:00 2001 From: hitanshu310 Date: Sun, 5 Jul 2026 15:35:58 +0530 Subject: [PATCH 4/8] Hithomelabs/HomeLabDocker#86: chore: add :portainer-automation scaffold --- portainer-automation/build.gradle | 14 ++++++++++++++ .../portainer/PortainerAutomationApplication.java | 12 ++++++++++++ .../src/main/resources/application.properties | 1 + 3 files changed, 27 insertions(+) create mode 100644 portainer-automation/build.gradle create mode 100644 portainer-automation/src/main/java/com/hithomelabs/portainer/PortainerAutomationApplication.java create mode 100644 portainer-automation/src/main/resources/application.properties diff --git a/portainer-automation/build.gradle b/portainer-automation/build.gradle new file mode 100644 index 0000000..bbe3892 --- /dev/null +++ b/portainer-automation/build.gradle @@ -0,0 +1,14 @@ +apply plugin: 'org.springframework.boot' + +dependencies { + implementation project(':common') + + implementation 'org.springframework.boot:spring-boot-starter-web' + implementation 'org.springframework.boot:spring-boot-starter-validation' + + compileOnly 'org.projectlombok:lombok' + annotationProcessor 'org.projectlombok:lombok' + annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor' + + testImplementation 'org.springframework.boot:spring-boot-starter-test' +} diff --git a/portainer-automation/src/main/java/com/hithomelabs/portainer/PortainerAutomationApplication.java b/portainer-automation/src/main/java/com/hithomelabs/portainer/PortainerAutomationApplication.java new file mode 100644 index 0000000..a848ca2 --- /dev/null +++ b/portainer-automation/src/main/java/com/hithomelabs/portainer/PortainerAutomationApplication.java @@ -0,0 +1,12 @@ +package com.hithomelabs.portainer; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class PortainerAutomationApplication { + + public static void main(String[] args) { + SpringApplication.run(PortainerAutomationApplication.class, args); + } +} diff --git a/portainer-automation/src/main/resources/application.properties b/portainer-automation/src/main/resources/application.properties new file mode 100644 index 0000000..4d360de --- /dev/null +++ b/portainer-automation/src/main/resources/application.properties @@ -0,0 +1 @@ +server.port=8081 -- 2.45.2 From 4abec13ec44ac6c984992d9e5c923638620a69c1 Mon Sep 17 00:00:00 2001 From: hitanshu310 Date: Sun, 5 Jul 2026 15:36:02 +0530 Subject: [PATCH 5/8] Hithomelabs/HomeLabDocker#86: ci: update workflows for multi-module paths --- .gitea/workflows/test_image_build_push.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitea/workflows/test_image_build_push.yml b/.gitea/workflows/test_image_build_push.yml index 3d0178c..cb9770d 100644 --- a/.gitea/workflows/test_image_build_push.yml +++ b/.gitea/workflows/test_image_build_push.yml @@ -56,7 +56,7 @@ jobs: username: hitanshu password: ${{ secrets.TOKEN }} - name: Gradle build - run: ./gradlew bootBuildImage --imageName=192.168.0.100:8928/hithomelabs/cftunnels:${{ needs.tag.outputs.new_version }} + run: ./gradlew :cftunnels-service:bootBuildImage --imageName=192.168.0.100:8928/hithomelabs/cftunnels:${{ needs.tag.outputs.new_version }} - name: Tag image as test run: docker tag 192.168.0.100:8928/hithomelabs/cftunnels:${{ needs.tag.outputs.new_version }} 192.168.0.100:8928/hithomelabs/cftunnels:test - name: Push to Gitea Registry -- 2.45.2 From 4a3e2777db7d72ca23b0805fd2897b9c9fd80762 Mon Sep 17 00:00:00 2001 From: hitanshu310 Date: Sun, 5 Jul 2026 15:38:00 +0530 Subject: [PATCH 6/8] Hithomelabs/HomeLabDocker#86: fix: add BOM import and update RestTemplateConfig imports --- build.gradle | 6 ++++++ .../hithomelabs/cftunnels/Controllers/TunnelController.java | 2 +- .../cftunnels/Controllers/TunnelControllerTest.java | 2 +- common/build.gradle | 1 + 4 files changed, 9 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index ee63164..e4086dd 100644 --- a/build.gradle +++ b/build.gradle @@ -20,4 +20,10 @@ subprojects { repositories { mavenCentral() } + + dependencyManagement { + imports { + mavenBom "org.springframework.boot:spring-boot-dependencies:3.4.5" + } + } } diff --git a/cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Controllers/TunnelController.java b/cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Controllers/TunnelController.java index c6ea6e8..0a2e9ff 100644 --- a/cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Controllers/TunnelController.java +++ b/cftunnels-service/src/main/java/com/hithomelabs/cftunnels/Controllers/TunnelController.java @@ -3,7 +3,7 @@ package com.hithomelabs.cftunnels.Controllers; import com.fasterxml.jackson.core.JsonProcessingException; import com.hithomelabs.cftunnels.Config.AuthoritiesToGroupMapping; import com.hithomelabs.cftunnels.Config.CloudflareConfig; -import com.hithomelabs.cftunnels.Config.RestTemplateConfig; +import com.hithomelabs.common.config.RestTemplateConfig; import com.hithomelabs.cftunnels.Entity.Request; import com.hithomelabs.cftunnels.Entity.Tunnel; import com.hithomelabs.cftunnels.Entity.User; diff --git a/cftunnels-service/src/test/java/com/hithomelabs/cftunnels/Controllers/TunnelControllerTest.java b/cftunnels-service/src/test/java/com/hithomelabs/cftunnels/Controllers/TunnelControllerTest.java index 9d49582..d9e41a0 100644 --- a/cftunnels-service/src/test/java/com/hithomelabs/cftunnels/Controllers/TunnelControllerTest.java +++ b/cftunnels-service/src/test/java/com/hithomelabs/cftunnels/Controllers/TunnelControllerTest.java @@ -3,7 +3,7 @@ package com.hithomelabs.cftunnels.Controllers; import com.fasterxml.jackson.databind.ObjectMapper; import com.hithomelabs.cftunnels.Config.AuthoritiesToGroupMapping; import com.hithomelabs.cftunnels.Config.CloudflareConfig; -import com.hithomelabs.cftunnels.Config.RestTemplateConfig; +import com.hithomelabs.common.config.RestTemplateConfig; import com.hithomelabs.cftunnels.Headers.AuthKeyEmailHeader; import com.hithomelabs.cftunnels.Entity.Request; import com.hithomelabs.cftunnels.Entity.Tunnel; diff --git a/common/build.gradle b/common/build.gradle index e9aac46..4af833f 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -1,4 +1,5 @@ dependencies { + implementation 'org.springframework:spring-context' implementation 'org.springframework:spring-web' implementation 'com.fasterxml.jackson.core:jackson-databind' implementation 'org.apache.httpcomponents.client5:httpclient5' -- 2.45.2 From d500a8b276baaf524a49551bc69afae95cd86fc3 Mon Sep 17 00:00:00 2001 From: hitanshu310 Date: Sun, 5 Jul 2026 16:12:24 +0530 Subject: [PATCH 7/8] Hithomelabs/CFTunnels#86: ci: replace Gradle wrapper validation with offline checksum --- .gitea/workflows/test_build.yml | 5 +++-- gradle/wrapper/gradle-wrapper.jar.sha256 | 1 + 2 files changed, 4 insertions(+), 2 deletions(-) create mode 100644 gradle/wrapper/gradle-wrapper.jar.sha256 diff --git a/.gitea/workflows/test_build.yml b/.gitea/workflows/test_build.yml index ae070cd..e74e123 100644 --- a/.gitea/workflows/test_build.yml +++ b/.gitea/workflows/test_build.yml @@ -14,7 +14,8 @@ jobs: with: distribution: 'zulu' java-version: '17' - - name: Validate Gradle Wrapper - uses: gradle/actions/wrapper-validation@v3 + - name: Validate Gradle Wrapper (offline checksum) + run: | + sha256sum --check gradle/wrapper/gradle-wrapper.jar.sha256 - name: Gradle build run: ./gradlew build --info \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.jar.sha256 b/gradle/wrapper/gradle-wrapper.jar.sha256 new file mode 100644 index 0000000..fdb15aa --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.jar.sha256 @@ -0,0 +1 @@ +81a82aaea5abcc8ff68b3dfcb58b3c3c429378efd98e7433460610fecd7ae45f gradle/wrapper/gradle-wrapper.jar -- 2.45.2 From 040c0e9b09f77d3181dd1595cc5c1a70f7fb3ba2 Mon Sep 17 00:00:00 2001 From: Dave the Dev Date: Sun, 5 Jul 2026 10:51:47 +0000 Subject: [PATCH 8/8] ci: fix Gradle wrapper validation in test_image_build_push.yml --- .gitea/workflows/test_image_build_push.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.gitea/workflows/test_image_build_push.yml b/.gitea/workflows/test_image_build_push.yml index cb9770d..478f162 100644 --- a/.gitea/workflows/test_image_build_push.yml +++ b/.gitea/workflows/test_image_build_push.yml @@ -40,8 +40,9 @@ jobs: run: | apk add --no-cache openjdk17-jdk echo "JAVA_HOME=/usr/lib/jvm/java-17-openjdk" >> "$GITHUB_ENV" - - name: Validate Gradle Wrapper - uses: gradle/actions/wrapper-validation@v3 + - name: Validate Gradle Wrapper (offline checksum) + run: | + sha256sum --check gradle/wrapper/gradle-wrapper.jar.sha256 - name: Create and push tag run: | echo "New version: ${{ needs.tag.outputs.new_version }}" @@ -63,4 +64,3 @@ jobs: run: | docker push 192.168.0.100:8928/hithomelabs/cftunnels:test docker push 192.168.0.100:8928/hithomelabs/cftunnels:${{ needs.tag.outputs.new_version }} - -- 2.45.2