diff --git a/.gitignore b/.gitignore index dfef11fec1a6a560e16005d6dab3446ff596505d..66476749a8ca30c053fcf1e4e1de49adc875bf76 100644 --- a/.gitignore +++ b/.gitignore @@ -19,3 +19,5 @@ goofy-client/apps/coverage/ .attach** .factorypath + +http-client.private.env.json \ No newline at end of file diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/xdomea/ExportData.java b/alfa-xdomea/src/main/java/de/ozgcloud/xdomea/ExportData.java index 1470dc7023aaea7e56c24fcd62d7b40a4dcb90bc..754feda58e4dbf0c56278174e8666e47d7cf01b0 100644 --- a/alfa-xdomea/src/main/java/de/ozgcloud/xdomea/ExportData.java +++ b/alfa-xdomea/src/main/java/de/ozgcloud/xdomea/ExportData.java @@ -10,5 +10,5 @@ import lombok.ToString; @Builder(toBuilder = true) @NoArgsConstructor(access = AccessLevel.PRIVATE) @ToString -class ExportData { +public class ExportData { } diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/xdomea/XDomeaService.java b/alfa-xdomea/src/main/java/de/ozgcloud/xdomea/XDomeaService.java index 1589b93d639f90ba208bd4ec04235ad317c2256b..272041f9b389642c45f68f4bac7c79d155f9d7f7 100644 --- a/alfa-xdomea/src/main/java/de/ozgcloud/xdomea/XDomeaService.java +++ b/alfa-xdomea/src/main/java/de/ozgcloud/xdomea/XDomeaService.java @@ -1,7 +1,7 @@ package de.ozgcloud.xdomea; -import java.io.ByteArrayOutputStream; import java.io.IOException; +import java.io.OutputStream; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; @@ -10,19 +10,16 @@ import org.springframework.stereotype.Service; import de.itvsh.kop.common.errorhandling.TechnicalException; @Service -class XDomeaService { +public class XDomeaService { - public ByteArrayOutputStream createExport(ExportData exportData) { - ByteArrayOutputStream outputBytes = new ByteArrayOutputStream(); - try (ZipOutputStream zipOutputStream = new ZipOutputStream(outputBytes)) { + public void writeExport(ExportData exportData, OutputStream out) { + try (ZipOutputStream zipOutputStream = new ZipOutputStream(out)) { putZipEntry("export_test.txt", "test", zipOutputStream); } catch (IOException ioe) { throw new TechnicalException("Error creating zip file with Vorgang export", ioe); } - - return outputBytes; } private void putZipEntry(String fileName, String fileData, ZipOutputStream zipOutputStream) throws IOException { diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/xdomea/XDomeaServiceTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/xdomea/XDomeaServiceTest.java index 0a3a7c716d2fd70089eb73cde64933d3b1985b6c..47c10845d9ef8dbdbb4352464c25a4c4c840e152 100644 --- a/alfa-xdomea/src/test/java/de/ozgcloud/xdomea/XDomeaServiceTest.java +++ b/alfa-xdomea/src/test/java/de/ozgcloud/xdomea/XDomeaServiceTest.java @@ -2,6 +2,8 @@ package de.ozgcloud.xdomea; import static org.assertj.core.api.Assertions.*; +import java.io.ByteArrayOutputStream; + import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; @@ -10,14 +12,15 @@ class XDomeaServiceTest { private XDomeaService service = new XDomeaService(); @Nested - class TestCreateExport { + class TestWriteExport { @Test - void shouldCreate() { - var zipBytesStream = service.createExport(ExportDataTestFactory.create()); + void shouldWriteBytes() { + var out = new ByteArrayOutputStream(); + service.writeExport(ExportDataTestFactory.create(), out); - assertThat(zipBytesStream).isNotNull(); - assertThat(zipBytesStream.toByteArray()).hasSizeGreaterThan(100); + assertThat(out).isNotNull(); + assertThat(out.toByteArray()).hasSizeGreaterThan(100); } } diff --git a/goofy-server/pom.xml b/goofy-server/pom.xml index c4a969c5b4c91a25387634c4a7b2b342f189ebfb..ce0c100cffe56742cf59883094bd10df8c062bf0 100644 --- a/goofy-server/pom.xml +++ b/goofy-server/pom.xml @@ -24,232 +24,240 @@ --> <project xmlns="http://maven.apache.org/POM/4.0.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> - - <modelVersion>4.0.0</modelVersion> - - <parent> - <groupId>de.itvsh.ozg</groupId> - <artifactId>goofy</artifactId> - <version>1.13.0-SNAPSHOT</version> - </parent> - - <artifactId>goofy-server</artifactId> - <name>Goofy Server</name> - <description>Projekt packaging deployment artefact</description> - <packaging>jar</packaging> - - <properties> - <maven.compiler.source>${java.version}</maven.compiler.source> - <maven.compiler.target>${java.version}</maven.compiler.target> - - <spring-boot.build-image.imageName>docker.ozg-sh.de/goofy:build-latest</spring-boot.build-image.imageName> - </properties> - - <dependencies> - <!-- Spring --> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter</artifactId> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-log4j2</artifactId> - </dependency> - - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-web</artifactId> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-hateoas</artifactId> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-validation</artifactId> - </dependency> - - <dependency> - <groupId>net.devh</groupId> - <artifactId>grpc-client-spring-boot-starter</artifactId> - </dependency> - - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-actuator</artifactId> - </dependency> - - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-security</artifactId> - </dependency> - - <dependency> - <groupId>org.keycloak</groupId> - <artifactId>keycloak-spring-boot-starter</artifactId> - </dependency> - <dependency> - <groupId>org.keycloak</groupId> - <artifactId>keycloak-admin-client</artifactId> - </dependency> - - <!-- jwt --> - <dependency> - <groupId>com.auth0</groupId> - <artifactId>java-jwt</artifactId> - </dependency> - <dependency> - <groupId>io.jsonwebtoken</groupId> - <artifactId>jjwt</artifactId> - </dependency> - - <!-- own projects --> - <dependency> - <groupId>de.itvsh.ozg.pluto</groupId> - <artifactId>pluto-interface</artifactId> - </dependency> - <dependency> - <groupId>de.itvsh.ozg.pluto</groupId> - <artifactId>pluto-utils</artifactId> - </dependency> - <dependency> - <groupId>de.itvsh.kop.common</groupId> - <artifactId>kop-common-pdf</artifactId> - </dependency> - <dependency> - <groupId>de.itvsh.kop.user</groupId> - <artifactId>user-manager-interface</artifactId> - </dependency> - - <!-- tools --> - <dependency> - <groupId>org.mapstruct</groupId> - <artifactId>mapstruct</artifactId> - </dependency> - <dependency> - <groupId>org.jsoup</groupId> - <artifactId>jsoup</artifactId> - </dependency> - - <!-- aspectJ --> - <dependency> - <groupId>org.aspectj</groupId> - <artifactId>aspectjweaver</artifactId> - </dependency> - <dependency> - <groupId>org.aspectj</groupId> - <artifactId>aspectjrt</artifactId> - </dependency> - - <!-- Dev --> - <dependency> - <groupId>org.projectlombok</groupId> - <artifactId>lombok</artifactId> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-devtools</artifactId> - <scope>runtime</scope> - </dependency> - - <!-- commons --> - <dependency> - <groupId>org.apache.commons</groupId> - <artifactId>commons-lang3</artifactId> - </dependency> - <dependency> - <groupId>commons-io</groupId> - <artifactId>commons-io</artifactId> - </dependency> - <dependency> - <groupId>commons-beanutils</groupId> - <artifactId>commons-beanutils</artifactId> - </dependency> - - <!-- Test --> - <dependency> - <groupId>org.springframework.security</groupId> - <artifactId>spring-security-test</artifactId> - <scope>test</scope> - </dependency> - <dependency> - <groupId>de.itvsh.ozg.pluto</groupId> - <artifactId>pluto-utils</artifactId> - <type>test-jar</type> - <scope>test</scope> - <version>${pluto.version}</version> - </dependency> - - <dependency> - <groupId>com.thedeanda</groupId> - <artifactId>lorem</artifactId> - </dependency> - - </dependencies> - - <build> - <finalName>${project.artifactId}</finalName> - <plugins> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-compiler-plugin</artifactId> - </plugin> - <plugin> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-maven-plugin</artifactId> - <configuration> - <docker> - <publishRegistry> - <username>${docker-username}</username> - <password>${docker-password}</password> - <url>${docker-url}</url> - </publishRegistry> - </docker> - </configuration> - </plugin> - - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-failsafe-plugin</artifactId> - </plugin> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-surefire-plugin</artifactId> - </plugin> - <plugin> - <groupId>org.jacoco</groupId> - <artifactId>jacoco-maven-plugin</artifactId> - </plugin> - <plugin> - <groupId>pl.project13.maven</groupId> - <artifactId>git-commit-id-plugin</artifactId> - </plugin> - - - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-resources-plugin</artifactId> - <executions> - <execution> - <id>copy-client</id> - <phase>compile</phase> - <goals> - <goal>copy-resources</goal> - </goals> - <configuration> - <outputDirectory>${project.build.directory}/classes/META-INF/resources</outputDirectory> - <resources> - <resource> - <directory>../${project.parent.artifactId}-client/dist/apps/goofy/</directory> - </resource> - </resources> - </configuration> - </execution> - </executions> - </plugin> - </plugins> - </build> + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> + + <modelVersion>4.0.0</modelVersion> + + <parent> + <groupId>de.itvsh.ozg</groupId> + <artifactId>goofy</artifactId> + <version>1.13.0-SNAPSHOT</version> + </parent> + + <artifactId>goofy-server</artifactId> + <name>Goofy Server</name> + <description>Projekt packaging deployment artefact</description> + <packaging>jar</packaging> + + <properties> + <maven.compiler.source>${java.version}</maven.compiler.source> + <maven.compiler.target>${java.version}</maven.compiler.target> + + <spring-boot.build-image.imageName>docker.ozg-sh.de/goofy:build-latest + </spring-boot.build-image.imageName> + </properties> + + <dependencies> + <dependency> + <groupId>de.itvsh.ozg</groupId> + <artifactId>alfa-xdomea</artifactId> + <version>${project.version}</version> + </dependency> + + <!-- Spring --> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter</artifactId> + </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-log4j2</artifactId> + </dependency> + + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-web</artifactId> + </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-hateoas</artifactId> + </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-validation</artifactId> + </dependency> + + <dependency> + <groupId>net.devh</groupId> + <artifactId>grpc-client-spring-boot-starter</artifactId> + </dependency> + + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-actuator</artifactId> + </dependency> + + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-security</artifactId> + </dependency> + + <dependency> + <groupId>org.keycloak</groupId> + <artifactId>keycloak-spring-boot-starter</artifactId> + </dependency> + <dependency> + <groupId>org.keycloak</groupId> + <artifactId>keycloak-admin-client</artifactId> + </dependency> + + <!-- jwt --> + <dependency> + <groupId>com.auth0</groupId> + <artifactId>java-jwt</artifactId> + </dependency> + <dependency> + <groupId>io.jsonwebtoken</groupId> + <artifactId>jjwt</artifactId> + </dependency> + + <!-- own projects --> + <dependency> + <groupId>de.itvsh.ozg.pluto</groupId> + <artifactId>pluto-interface</artifactId> + </dependency> + <dependency> + <groupId>de.itvsh.ozg.pluto</groupId> + <artifactId>pluto-utils</artifactId> + </dependency> + <dependency> + <groupId>de.itvsh.kop.common</groupId> + <artifactId>kop-common-pdf</artifactId> + </dependency> + <dependency> + <groupId>de.itvsh.kop.user</groupId> + <artifactId>user-manager-interface</artifactId> + </dependency> + + <!-- tools --> + <dependency> + <groupId>org.mapstruct</groupId> + <artifactId>mapstruct</artifactId> + </dependency> + <dependency> + <groupId>org.jsoup</groupId> + <artifactId>jsoup</artifactId> + </dependency> + + <!-- aspectJ --> + <dependency> + <groupId>org.aspectj</groupId> + <artifactId>aspectjweaver</artifactId> + </dependency> + <dependency> + <groupId>org.aspectj</groupId> + <artifactId>aspectjrt</artifactId> + </dependency> + + <!-- Dev --> + <dependency> + <groupId>org.projectlombok</groupId> + <artifactId>lombok</artifactId> + </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-devtools</artifactId> + <scope>runtime</scope> + </dependency> + + <!-- commons --> + <dependency> + <groupId>org.apache.commons</groupId> + <artifactId>commons-lang3</artifactId> + </dependency> + <dependency> + <groupId>commons-io</groupId> + <artifactId>commons-io</artifactId> + </dependency> + <dependency> + <groupId>commons-beanutils</groupId> + <artifactId>commons-beanutils</artifactId> + </dependency> + + <!-- Test --> + <dependency> + <groupId>org.springframework.security</groupId> + <artifactId>spring-security-test</artifactId> + <scope>test</scope> + </dependency> + <dependency> + <groupId>de.itvsh.ozg.pluto</groupId> + <artifactId>pluto-utils</artifactId> + <type>test-jar</type> + <scope>test</scope> + <version>${pluto.version}</version> + </dependency> + + <dependency> + <groupId>com.thedeanda</groupId> + <artifactId>lorem</artifactId> + </dependency> + + </dependencies> + + <build> + <finalName>${project.artifactId}</finalName> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-compiler-plugin</artifactId> + </plugin> + <plugin> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-maven-plugin</artifactId> + <configuration> + <docker> + <publishRegistry> + <username>${docker-username}</username> + <password>${docker-password}</password> + <url>${docker-url}</url> + </publishRegistry> + </docker> + </configuration> + </plugin> + + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-failsafe-plugin</artifactId> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-surefire-plugin</artifactId> + </plugin> + <plugin> + <groupId>org.jacoco</groupId> + <artifactId>jacoco-maven-plugin</artifactId> + </plugin> + <plugin> + <groupId>pl.project13.maven</groupId> + <artifactId>git-commit-id-plugin</artifactId> + </plugin> + + + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-resources-plugin</artifactId> + <executions> + <execution> + <id>copy-client</id> + <phase>compile</phase> + <goals> + <goal>copy-resources</goal> + </goals> + <configuration> + <outputDirectory>${project.build.directory}/classes/META-INF/resources + </outputDirectory> + <resources> + <resource> + <directory>../${project.parent.artifactId}-client/dist/apps/goofy/</directory> + </resource> + </resources> + </configuration> + </execution> + </executions> + </plugin> + </plugins> + </build> </project> diff --git a/goofy-server/src/main/java/de/ozgcloud/alfa/vorgangexport/VorgangExportByVorgangController.java b/goofy-server/src/main/java/de/ozgcloud/alfa/vorgangexport/VorgangExportByVorgangController.java new file mode 100644 index 0000000000000000000000000000000000000000..5d4ef5d11579d415d8a26c4be57bfe047d14e684 --- /dev/null +++ b/goofy-server/src/main/java/de/ozgcloud/alfa/vorgangexport/VorgangExportByVorgangController.java @@ -0,0 +1,40 @@ +package de.ozgcloud.alfa.vorgangexport; + +import java.util.UUID; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody; + +import de.ozgcloud.xdomea.ExportData; +import de.ozgcloud.xdomea.XDomeaService; + +@RestController +@RequestMapping(VorgangExportByVorgangController.BASE_PATH) +class VorgangExportByVorgangController { + + public static final String BASE_PATH = "/api/vorgangs"; // NOSONAR + public static final String EXPORT_VORGANG_SUB_PATH = "/{vorgangId}/export"; // NOSONAR + public static final String EXPORT_VORGANG_PATH = BASE_PATH + EXPORT_VORGANG_SUB_PATH; + + @Autowired + private XDomeaService xDomeaService; + + @GetMapping(value = EXPORT_VORGANG_SUB_PATH, produces = "application/zip") + public ResponseEntity<StreamingResponseBody> exportVorgang(@PathVariable String vorgangId) { + return ResponseEntity.ok() + .header(HttpHeaders.CONTENT_DISPOSITION, String.format("attachment; filename=%s", generateVorgangExportFilename())) + .contentType(MediaType.valueOf("application/zip")) + .body(out -> xDomeaService.writeExport(ExportData.builder().build(), out)); + } + + String generateVorgangExportFilename() { + return String.format("%s_Abgabe.Abgabe.0401.xdomea", UUID.randomUUID()); + } +} diff --git a/goofy-server/src/test/java/de/ozgcloud/alfa/vorgangexport/VorgangExportByVorgangControllerTest.java b/goofy-server/src/test/java/de/ozgcloud/alfa/vorgangexport/VorgangExportByVorgangControllerTest.java new file mode 100644 index 0000000000000000000000000000000000000000..3acf2d9bcd370c1a4040736ec43845b3b56a1b9d --- /dev/null +++ b/goofy-server/src/test/java/de/ozgcloud/alfa/vorgangexport/VorgangExportByVorgangControllerTest.java @@ -0,0 +1,87 @@ +package de.ozgcloud.alfa.vorgangexport; + +import static org.assertj.core.api.AssertionsForInterfaceTypes.*; +import static org.mockito.Mockito.*; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; + +import java.io.IOException; +import java.util.regex.Pattern; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.mockito.ArgumentCaptor; +import org.mockito.Captor; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Spy; +import org.springframework.http.HttpHeaders; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.ResultActions; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; + +import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; +import de.ozgcloud.xdomea.ExportData; +import de.ozgcloud.xdomea.XDomeaService; + +class VorgangExportByVorgangControllerTest { + + @Spy + @InjectMocks + private VorgangExportByVorgangController controller; + + @Mock + private XDomeaService xDomeaService; + + private MockMvc mockMvc; + + @BeforeEach + void init() { + mockMvc = MockMvcBuilders.standaloneSetup(controller).build(); + } + + @Nested + class TestExportVorgang { + + private static final String VORGANG_EXPORT_FILENAME = "00000000-0000-0000-0000-000000000000_Abgabe.Abgabe.0401.xml"; + + @BeforeEach + void init() throws IOException { + doReturn(VORGANG_EXPORT_FILENAME).when(controller).generateVorgangExportFilename(); + } + + @Captor + private ArgumentCaptor<ExportData> exportDataArgumentCaptor; + + @Test + void shouldHaveContentDispositonHeader() throws Exception { + doRequest().andExpect(header().string(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=" + VORGANG_EXPORT_FILENAME)); + } + + @Test + void shouldCallXDomeaService() throws Exception { + doRequest(); + + verify(xDomeaService).writeExport(exportDataArgumentCaptor.capture(), any()); + assertThat(exportDataArgumentCaptor.getValue()).isNotNull(); + } + + private ResultActions doRequest() throws Exception { + return mockMvc.perform(get(VorgangExportByVorgangController.EXPORT_VORGANG_PATH, VorgangHeaderTestFactory.ID)).andExpect(status().isOk()); + } + } + + @Nested + class TestGenerateVorgangExportFilename { + + @Test + void shouldMatchPattern() { + var filename = controller.generateVorgangExportFilename(); + + assertThat(filename).matches( + Pattern.compile("^[0-9a-f]{8,8}-[0-9a-f]{4,4}-[0-9a-f]{4,4}-[0-9a-f]{4,4}-[0-9a-f]{12,12}_Abgabe.Abgabe.0401.xdomea")); + } + } + +} \ No newline at end of file diff --git a/http-client/auth.http b/http-client/auth.http new file mode 100644 index 0000000000000000000000000000000000000000..fc39d0c72e06a06e4d209153c348005a3b88dd48 --- /dev/null +++ b/http-client/auth.http @@ -0,0 +1,13 @@ +### get token +POST {{keycloak-url }}/realms/by-kiel-dev/protocol/openid-connect/token +Content-Type: application/x-www-form-urlencoded + +client_id = alfa & +grant_type = password & +scope = openid & +username = {{ user_sabine }} & +password = {{ pass_sabine }} + +> {% + client.global.set("jwt", response.body.access_token) +%} \ No newline at end of file diff --git a/http-client/dms.http b/http-client/dms.http new file mode 100644 index 0000000000000000000000000000000000000000..a4b581a0f70bf85da011b9b76e080b9dc1a8fba7 --- /dev/null +++ b/http-client/dms.http @@ -0,0 +1,2 @@ +GET {{ alfa-url }}/api/vorgangs/abc/export +Authorization: Bearer {{ jwt }} \ No newline at end of file diff --git a/http-client/http-client.env.json b/http-client/http-client.env.json new file mode 100644 index 0000000000000000000000000000000000000000..3ac90916fb1bc3153dd7d2e8c29ee94cde1621de --- /dev/null +++ b/http-client/http-client.env.json @@ -0,0 +1,8 @@ +{ + "remotekc": { + "keycloak-url": "https://sso.dev.by.ozg-cloud.de" + }, + "local": { + "alfa-url": "http://localhost:4300" + } +} \ No newline at end of file