From 85f63405617ab79f1108e71bb35c00a50fd1622e Mon Sep 17 00:00:00 2001 From: Arpit Mohan Date: Thu, 23 May 2024 13:59:57 +0530 Subject: [PATCH] fix: Remove the feature to download docker-compose file from admin settings (#33682) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Description Fixes #`Issue Number` ## Automation /ok-to-test tags="@tag.Settings,@tag.Sanity" ### :mag: Cypress test results > [!TIP] > 🟢 🟢 🟢 All cypress tests have passed! 🎉 🎉 🎉 > Workflow run: > Commit: 200f008e602d5173a6167209b8b7804c086e8fb8 > Cypress dashboard url: Click here! ## Communication Should the DevRel and Marketing teams inform users about this change? - [ ] Yes - [x] No --- app/client/src/ce/api/UserApi.tsx | 1 - .../ce/pages/AdminSettings/config/general.tsx | 18 ------- .../ce/InstanceAdminControllerCE.java | 7 --- .../server/solutions/ce/EnvManagerCE.java | 3 -- .../server/solutions/ce/EnvManagerCEImpl.java | 30 ----------- .../server/solutions/EnvManagerTest.java | 51 ------------------- 6 files changed, 110 deletions(-) diff --git a/app/client/src/ce/api/UserApi.tsx b/app/client/src/ce/api/UserApi.tsx index 4e436cccaa..16c5976c42 100644 --- a/app/client/src/ce/api/UserApi.tsx +++ b/app/client/src/ce/api/UserApi.tsx @@ -102,7 +102,6 @@ export class UserApi extends Api { static superUserURL = "v1/users/super"; static adminSettingsURL = "v1/admin/env"; static restartServerURL = "v1/admin/restart"; - static downloadConfigURL = "v1/admin/env/download"; static sendTestEmailURL = "/v1/admin/send-test-email"; static async createUser( diff --git a/app/client/src/ce/pages/AdminSettings/config/general.tsx b/app/client/src/ce/pages/AdminSettings/config/general.tsx index 8127b6a53e..9427a7228e 100644 --- a/app/client/src/ce/pages/AdminSettings/config/general.tsx +++ b/app/client/src/ce/pages/AdminSettings/config/general.tsx @@ -1,7 +1,5 @@ import React from "react"; import { isEmail } from "utils/formhelpers"; -import { apiRequestConfig } from "api/Api"; -import UserApi from "@appsmith/api/UserApi"; import type { AdminConfigType, Setting, @@ -48,21 +46,6 @@ export const APPSMITH_ADMIN_EMAILS_SETTING: Setting = { }, }; -export const APPSMITH_DOWNLOAD_DOCKER_COMPOSE_FILE_SETTING: Setting = { - id: "APPSMITH_DOWNLOAD_DOCKER_COMPOSE_FILE", - action: () => { - const { host, protocol } = window.location; - window.open( - `${protocol}//${host}${apiRequestConfig.baseURL}${UserApi.downloadConfigURL}`, - "_blank", - ); - }, - category: SettingCategories.GENERAL, - controlType: SettingTypes.BUTTON, - label: "Generated docker compose file", - text: "Download", -}; - export const APPSMITH_DISABLE_TELEMETRY_SETTING: Setting = { id: "APPSMITH_DISABLE_TELEMETRY", name: "APPSMITH_DISABLE_TELEMETRY", @@ -204,7 +187,6 @@ export const config: AdminConfigType = { settings: [ APPSMITH_INSTANCE_NAME_SETTING_SETTING, APPSMITH_ADMIN_EMAILS_SETTING, - APPSMITH_DOWNLOAD_DOCKER_COMPOSE_FILE_SETTING, APPSMITH_DISABLE_TELEMETRY_SETTING, APPSMITH_HIDE_WATERMARK_SETTING, APPSMITH_SHOW_ROLES_AND_GROUPS_SETTING, diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/controllers/ce/InstanceAdminControllerCE.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/controllers/ce/InstanceAdminControllerCE.java index 868418d752..ab08fec819 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/controllers/ce/InstanceAdminControllerCE.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/controllers/ce/InstanceAdminControllerCE.java @@ -36,13 +36,6 @@ public class InstanceAdminControllerCE { return envManager.getAllNonEmpty().map(data -> new ResponseDTO<>(HttpStatus.OK.value(), data, null)); } - @JsonView(Views.Public.class) - @GetMapping("/env/download") - public Mono download(ServerWebExchange exchange) { - log.debug("Getting all env configuration"); - return envManager.download(exchange); - } - @Deprecated @JsonView(Views.Public.class) @PutMapping( diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/solutions/ce/EnvManagerCE.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/solutions/ce/EnvManagerCE.java index dae179bca3..f415b642f6 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/solutions/ce/EnvManagerCE.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/solutions/ce/EnvManagerCE.java @@ -4,7 +4,6 @@ import com.appsmith.server.domains.User; import com.appsmith.server.dtos.TestEmailConfigRequestDTO; import org.springframework.http.codec.multipart.Part; import org.springframework.util.MultiValueMap; -import org.springframework.web.server.ServerWebExchange; import reactor.core.publisher.Mono; import java.util.List; @@ -40,6 +39,4 @@ public interface EnvManagerCE { Mono restartWithoutAclCheck(); Mono sendTestEmail(TestEmailConfigRequestDTO requestDTO); - - Mono download(ServerWebExchange exchange); } diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/solutions/ce/EnvManagerCEImpl.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/solutions/ce/EnvManagerCEImpl.java index 1997283a82..e21a319193 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/solutions/ce/EnvManagerCEImpl.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/solutions/ce/EnvManagerCEImpl.java @@ -35,28 +35,20 @@ import lombok.Getter; import lombok.extern.slf4j.Slf4j; import org.apache.commons.beanutils.ConvertUtils; import org.jetbrains.annotations.NotNull; -import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.buffer.DataBufferUtils; -import org.springframework.core.io.buffer.DefaultDataBufferFactory; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpStatus; import org.springframework.http.codec.multipart.FilePart; import org.springframework.http.codec.multipart.Part; -import org.springframework.http.server.reactive.ServerHttpResponse; import org.springframework.mail.MailException; import org.springframework.mail.SimpleMailMessage; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.mail.javamail.JavaMailSenderImpl; import org.springframework.util.MultiValueMap; import org.springframework.util.StringUtils; -import org.springframework.web.server.ServerWebExchange; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; import reactor.util.function.Tuple2; import reactor.util.function.Tuples; -import java.io.File; -import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.lang.reflect.Field; @@ -803,26 +795,4 @@ public class EnvManagerCEImpl implements EnvManagerCE { return Mono.just(TRUE); }); } - - @Override - public Mono download(ServerWebExchange exchange) { - return verifyCurrentUserIsSuper().flatMap(user -> { - try { - File envFile = Path.of(commonConfig.getEnvFilePath()).toFile(); - FileInputStream envFileInputStream = new FileInputStream(envFile); - InputStream resourceFile = new ClassPathResource("docker-compose.yml").getInputStream(); - byte[] byteArray = fileUtils.createZip( - new FileUtils.ZipSourceFile(envFileInputStream, "stacks/configuration/docker.env"), - new FileUtils.ZipSourceFile(resourceFile, "docker-compose.yml")); - final ServerHttpResponse response = exchange.getResponse(); - response.setStatusCode(HttpStatus.OK); - response.getHeaders().set(HttpHeaders.CONTENT_TYPE, "application/zip"); - response.getHeaders().set("Content-Disposition", "attachment; filename=\"appsmith-config.zip\""); - return response.writeWith(Mono.just(new DefaultDataBufferFactory().wrap(byteArray))); - } catch (IOException e) { - log.error("failed to generate zip file", e); - return Mono.error(new AppsmithException(AppsmithError.INTERNAL_SERVER_ERROR)); - } - }); - } } diff --git a/app/server/appsmith-server/src/test/java/com/appsmith/server/solutions/EnvManagerTest.java b/app/server/appsmith-server/src/test/java/com/appsmith/server/solutions/EnvManagerTest.java index 3458e4610e..ad829c97a6 100644 --- a/app/server/appsmith-server/src/test/java/com/appsmith/server/solutions/EnvManagerTest.java +++ b/app/server/appsmith-server/src/test/java/com/appsmith/server/solutions/EnvManagerTest.java @@ -24,22 +24,16 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mockito; import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.http.HttpHeaders; -import org.springframework.http.server.reactive.ServerHttpResponse; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.test.context.junit.jupiter.SpringExtension; -import org.springframework.web.server.ServerWebExchange; import reactor.core.publisher.Mono; import reactor.test.StepVerifier; -import java.io.File; -import java.io.IOException; import java.util.HashMap; import java.util.Map; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; -import static org.mockito.ArgumentMatchers.any; @ExtendWith(SpringExtension.class) @Slf4j @@ -294,51 +288,6 @@ public class EnvManagerTest { "APPSMITH_DISABLE_TELEMETRY='some quotes '\"'\"'inside'\"'\"' it'"); } - @Test - public void download_UserIsNotSuperUser_ThrowsAccessDenied() { - User user = new User(); - user.setEmail("sample-super-user"); - Mockito.when(sessionUserService.getCurrentUser()).thenReturn(Mono.just(user)); - Mockito.when(userService.findByEmail(user.getEmail())).thenReturn(Mono.just(user)); - Mockito.when(userUtils.isCurrentUserSuperUser()).thenReturn(Mono.just(false)); - - ServerWebExchange exchange = Mockito.mock(ServerWebExchange.class); - ServerHttpResponse response = Mockito.mock(ServerHttpResponse.class); - HttpHeaders headers = new HttpHeaders(); - - StepVerifier.create(envManager.download(exchange)) - .expectErrorMessage(AppsmithError.UNAUTHORIZED_ACCESS.getMessage()) - .verify(); - } - - @Test - public void download_UserIsSuperUser_ReturnsZip() throws IOException { - User user = new User(); - user.setEmail("sample-super-user"); - Mockito.when(sessionUserService.getCurrentUser()).thenReturn(Mono.just(user)); - Mockito.when(userService.findByEmail(user.getEmail())).thenReturn(Mono.just(user)); - Mockito.when(userUtils.isCurrentUserSuperUser()).thenReturn(Mono.just(true)); - - // create a temp file for docker env - File file = File.createTempFile("envmanager-test-docker-file", "env"); - file.deleteOnExit(); - - Mockito.when(commonConfig.getEnvFilePath()).thenReturn(file.getAbsolutePath()); - Mockito.when(fileUtils.createZip(any())).thenReturn(new byte[1024]); - - ServerWebExchange exchange = Mockito.mock(ServerWebExchange.class); - ServerHttpResponse response = Mockito.mock(ServerHttpResponse.class); - HttpHeaders headers = new HttpHeaders(); - Mockito.when(response.getHeaders()).thenReturn(headers); - Mockito.when(exchange.getResponse()).thenReturn(response); - Mockito.when(response.writeWith(any())).thenReturn(Mono.empty()); - - StepVerifier.create(envManager.download(exchange)).verifyComplete(); - - assertThat(headers.getContentType().toString()).isEqualTo("application/zip"); - assertThat(headers.getContentDisposition().toString()).containsIgnoringCase("appsmith-config.zip"); - } - @Test public void sendTestEmail_WhenUserNotSuperUser_ThrowsException() { User user = new User();