forked from Hithomelabs/CFTunnels
Compare commits
6 Commits
32083f6ceb
...
4a3e2777db
| Author | SHA1 | Date | |
|---|---|---|---|
| 4a3e2777db | |||
| 4abec13ec4 | |||
| 0c6944685f | |||
| ee1762711d | |||
| 0c2e186ba7 | |||
| 2a6e7c176c |
@ -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
|
||||
|
||||
@ -1,4 +0,0 @@
|
||||
FROM openjdk:17-jdk
|
||||
ARG JAR_FILE=target/*.jar
|
||||
COPY ${JAR_FILE} app.jar
|
||||
ENTRYPOINT ["java","-jar","/app.jar"]
|
||||
73
build.gradle
73
build.gradle
@ -1,62 +1,29 @@
|
||||
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'
|
||||
|
||||
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
|
||||
}
|
||||
}
|
||||
java {
|
||||
toolchain {
|
||||
languageVersion = JavaLanguageVersion.of(17)
|
||||
}
|
||||
}
|
||||
|
||||
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()
|
||||
}
|
||||
|
||||
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()
|
||||
dependencyManagement {
|
||||
imports {
|
||||
mavenBom "org.springframework.boot:spring-boot-dependencies:3.4.5"
|
||||
}
|
||||
}
|
||||
}
|
||||
12
cftunnels-service/Dockerfile
Normal file
12
cftunnels-service/Dockerfile
Normal file
@ -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"]
|
||||
46
cftunnels-service/build.gradle
Normal file
46
cftunnels-service/build.gradle
Normal file
@ -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
|
||||
}
|
||||
}
|
||||
@ -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 <a href="https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/install-negative">Cloudflare Tunnel Documentation</a>
|
||||
* @since 1.0.0
|
||||
*/
|
||||
@SpringBootApplication
|
||||
@SpringBootApplication(scanBasePackages = "com.hithomelabs")
|
||||
public class CfTunnelsApplication {
|
||||
|
||||
/**
|
||||
@ -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;
|
||||
@ -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;
|
||||
@ -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;
|
||||
@ -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;
|
||||
@ -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;
|
||||
@ -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.common.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;
|
||||
@ -1,4 +1,4 @@
|
||||
package com.hithomelabs.CFTunnels.Entity;
|
||||
package com.hithomelabs.cftunnels.Entity;
|
||||
|
||||
import jakarta.persistence.*;
|
||||
import lombok.AllArgsConstructor;
|
||||
@ -1,4 +1,4 @@
|
||||
package com.hithomelabs.CFTunnels.Entity;
|
||||
package com.hithomelabs.cftunnels.Entity;
|
||||
|
||||
/**
|
||||
* Enum representing supported protocols for Cloudflare Tunnel ingress mappings.
|
||||
@ -1,4 +1,4 @@
|
||||
package com.hithomelabs.CFTunnels.Entity;
|
||||
package com.hithomelabs.cftunnels.Entity;
|
||||
|
||||
import jakarta.persistence.*;
|
||||
import lombok.AllArgsConstructor;
|
||||
@ -1,4 +1,4 @@
|
||||
package com.hithomelabs.CFTunnels.Entity;
|
||||
package com.hithomelabs.cftunnels.Entity;
|
||||
|
||||
import jakarta.persistence.*;
|
||||
import lombok.AllArgsConstructor;
|
||||
@ -1,4 +1,4 @@
|
||||
package com.hithomelabs.CFTunnels.Entity;
|
||||
package com.hithomelabs.cftunnels.Entity;
|
||||
|
||||
import jakarta.persistence.*;
|
||||
import jakarta.validation.constraints.Size;
|
||||
@ -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); }
|
||||
@ -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;
|
||||
@ -1,4 +1,4 @@
|
||||
package com.hithomelabs.CFTunnels.Models;
|
||||
package com.hithomelabs.cftunnels.Models;
|
||||
|
||||
public class Authorities {
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package com.hithomelabs.CFTunnels.Models;
|
||||
package com.hithomelabs.cftunnels.Models;
|
||||
|
||||
import com.fasterxml.jackson.annotation.*;
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package com.hithomelabs.CFTunnels.Models;
|
||||
package com.hithomelabs.cftunnels.Models;
|
||||
|
||||
public class Groups {
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package com.hithomelabs.CFTunnels.Models;
|
||||
package com.hithomelabs.cftunnels.Models;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
@ -1,4 +1,4 @@
|
||||
package com.hithomelabs.CFTunnels.Models;
|
||||
package com.hithomelabs.cftunnels.Models;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package com.hithomelabs.CFTunnels.Models;
|
||||
package com.hithomelabs.cftunnels.Models;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
@ -1,4 +1,4 @@
|
||||
package com.hithomelabs.CFTunnels.Models;
|
||||
package com.hithomelabs.cftunnels.Models;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||
import lombok.AllArgsConstructor;
|
||||
@ -1,4 +1,4 @@
|
||||
package com.hithomelabs.CFTunnels.Models;
|
||||
package com.hithomelabs.cftunnels.Models;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||
import lombok.AllArgsConstructor;
|
||||
@ -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;
|
||||
|
||||
@ -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;
|
||||
@ -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;
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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.*;
|
||||
@ -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;
|
||||
@ -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;
|
||||
@ -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.common.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<com.hithomelabs.CFTunnels.Entity.Request> requests = Arrays.asList(
|
||||
createTestRequest(UUID.randomUUID(), com.hithomelabs.CFTunnels.Entity.Request.RequestStatus.PENDING),
|
||||
createTestRequest(UUID.randomUUID(), com.hithomelabs.CFTunnels.Entity.Request.RequestStatus.APPROVED)
|
||||
List<com.hithomelabs.cftunnels.Entity.Request> 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));
|
||||
@ -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;
|
||||
@ -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;
|
||||
@ -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;
|
||||
@ -1,4 +1,4 @@
|
||||
package com.hithomelabs.CFTunnels.TestUtils;
|
||||
package com.hithomelabs.cftunnels.TestUtils;
|
||||
|
||||
import org.springframework.core.io.ClassPathResource;
|
||||
|
||||
11
common/build.gradle
Normal file
11
common/build.gradle
Normal file
@ -0,0 +1,11 @@
|
||||
dependencies {
|
||||
implementation 'org.springframework:spring-context'
|
||||
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'
|
||||
}
|
||||
@ -1,4 +1,4 @@
|
||||
package com.hithomelabs.CFTunnels.Config;
|
||||
package com.hithomelabs.common.config;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
2
gradle.properties
Normal file
2
gradle.properties
Normal file
@ -0,0 +1,2 @@
|
||||
version=0.0.1-SNAPSHOT
|
||||
group=com.hithomelabs
|
||||
14
portainer-automation/build.gradle
Normal file
14
portainer-automation/build.gradle
Normal file
@ -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'
|
||||
}
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1 @@
|
||||
server.port=8081
|
||||
4
settings.gradle
Normal file
4
settings.gradle
Normal file
@ -0,0 +1,4 @@
|
||||
rootProject.name = 'cftunnels'
|
||||
include 'common'
|
||||
include 'cftunnels-service'
|
||||
include 'portainer-automation'
|
||||
Loading…
Reference in New Issue
Block a user