From 8d8b8c2b9aeb77d568b1fe30b4e82d95cdc67e55 Mon Sep 17 00:00:00 2001 From: Richard Li Date: Thu, 26 Sep 2024 15:21:59 -0700 Subject: [PATCH 1/2] Use standard util for setting POSIX file permissions --- .../services/cwc/editor/context/project/EncoderServer.kt | 9 +++++---- .../aws/toolkits/jetbrains/utils/ZipDecompressor.kt | 5 ++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/editor/context/project/EncoderServer.kt b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/editor/context/project/EncoderServer.kt index 9907331f687..d97f68a23db 100644 --- a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/editor/context/project/EncoderServer.kt +++ b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/editor/context/project/EncoderServer.kt @@ -22,6 +22,7 @@ import org.apache.commons.codec.digest.DigestUtils import software.amazon.awssdk.utils.UserHomeDirectoryUtils import software.aws.toolkits.core.utils.createParentDirectories import software.aws.toolkits.core.utils.exists +import software.aws.toolkits.core.utils.filePermissions import software.aws.toolkits.core.utils.getLogger import software.aws.toolkits.core.utils.info import software.aws.toolkits.core.utils.tryDirOp @@ -163,9 +164,9 @@ class EncoderServer(val project: Project) : Disposable { } } } - if (manifestManager.currentOs != "windows") { - makeFileExecutable(nodePath) - } + + makeFileExecutable(nodePath) + val files = cachePath.toFile().listFiles() if (files.isNotEmpty()) { val filenames = files.map { it.name } @@ -224,7 +225,7 @@ class EncoderServer(val project: Project) : Disposable { PosixFilePermission.OTHERS_READ, PosixFilePermission.OTHERS_EXECUTE, ) - Files.setPosixFilePermissions(filePath, permissions) + filePath.filePermissions(permissions) } private fun unzipFile(zipFilePath: Path, destDir: Path) { diff --git a/plugins/toolkit/jetbrains-core/src/software/aws/toolkits/jetbrains/utils/ZipDecompressor.kt b/plugins/toolkit/jetbrains-core/src/software/aws/toolkits/jetbrains/utils/ZipDecompressor.kt index 2e1858dc7ed..dcaa0c78830 100644 --- a/plugins/toolkit/jetbrains-core/src/software/aws/toolkits/jetbrains/utils/ZipDecompressor.kt +++ b/plugins/toolkit/jetbrains-core/src/software/aws/toolkits/jetbrains/utils/ZipDecompressor.kt @@ -8,6 +8,7 @@ import com.intellij.openapi.util.io.FileUtil import org.apache.commons.compress.archivers.zip.ZipArchiveEntry import org.apache.commons.compress.archivers.zip.ZipFile import org.apache.commons.compress.utils.SeekableInMemoryByteChannel +import software.aws.toolkits.core.utils.filePermissions import java.io.File import java.io.FileOutputStream import java.io.IOException @@ -39,9 +40,7 @@ class ZipDecompressor(sourceBytes: ByteArray) : AutoCloseable { zipStream.copyTo(outputStream) } - if (SystemInfo.isUnix) { - Files.setPosixFilePermissions(outputFile.toPath(), convertPermissions(zipEntry.unixMode)) - } + outputFile.toPath().filePermissions(convertPermissions(zipEntry.unixMode)) } } From 1ac66b18bb1c8c00c879625a68c657571b4c002d Mon Sep 17 00:00:00 2001 From: Richard Li Date: Thu, 26 Sep 2024 15:27:45 -0700 Subject: [PATCH 2/2] dead code --- .../jetbrains/utils/ZipDecompressor.kt | 90 ------------------- 1 file changed, 90 deletions(-) delete mode 100644 plugins/toolkit/jetbrains-core/src/software/aws/toolkits/jetbrains/utils/ZipDecompressor.kt diff --git a/plugins/toolkit/jetbrains-core/src/software/aws/toolkits/jetbrains/utils/ZipDecompressor.kt b/plugins/toolkit/jetbrains-core/src/software/aws/toolkits/jetbrains/utils/ZipDecompressor.kt deleted file mode 100644 index dcaa0c78830..00000000000 --- a/plugins/toolkit/jetbrains-core/src/software/aws/toolkits/jetbrains/utils/ZipDecompressor.kt +++ /dev/null @@ -1,90 +0,0 @@ -// Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. -// SPDX-License-Identifier: Apache-2.0 - -package software.aws.toolkits.jetbrains.utils - -import com.intellij.openapi.util.SystemInfo -import com.intellij.openapi.util.io.FileUtil -import org.apache.commons.compress.archivers.zip.ZipArchiveEntry -import org.apache.commons.compress.archivers.zip.ZipFile -import org.apache.commons.compress.utils.SeekableInMemoryByteChannel -import software.aws.toolkits.core.utils.filePermissions -import java.io.File -import java.io.FileOutputStream -import java.io.IOException -import java.nio.file.Files -import java.nio.file.attribute.PosixFilePermission - -// TODO: Write tests -class ZipDecompressor(sourceBytes: ByteArray) : AutoCloseable { - private val zipFile = ZipFile(SeekableInMemoryByteChannel(sourceBytes)) - private val zipEntries = zipFile.entries.toList() - private val directorySplitRegex = Regex.fromLiteral("""[/\\]""") - - fun extract(destination: File) { - zipEntries.forEach { - val outputFile = outputFile(destination, it.name) - // TODO: Handle symlink if we ever need it - when { - it.isDirectory -> FileUtil.createDirectory(outputFile) - else -> createFile(outputFile, it) - } - } - } - - private fun createFile(outputFile: File, zipEntry: ZipArchiveEntry) { - zipFile.getInputStream(zipEntry).use { zipStream -> - FileUtil.createParentDirs(outputFile) - - FileOutputStream(outputFile).use { outputStream -> - zipStream.copyTo(outputStream) - } - - outputFile.toPath().filePermissions(convertPermissions(zipEntry.unixMode)) - } - } - - private fun outputFile(outputDir: File, entryName: String): File { - if (entryName.split(directorySplitRegex).contains("..")) { - throw IOException("Entry name attempting to traverse up directory: $entryName") - } - - return File(outputDir, entryName) - } - - private fun convertPermissions(mode: Int): Set { - val permissions = mutableSetOf() - if ((mode and 400) > 0) { - permissions.add(PosixFilePermission.OWNER_READ) - } - if ((mode and 200) > 0) { - permissions.add(PosixFilePermission.OWNER_WRITE) - } - if ((mode and 100) > 0) { - permissions.add(PosixFilePermission.OWNER_EXECUTE) - } - if ((mode and 40) > 0) { - permissions.add(PosixFilePermission.GROUP_READ) - } - if ((mode and 20) > 0) { - permissions.add(PosixFilePermission.GROUP_WRITE) - } - if ((mode and 10) > 0) { - permissions.add(PosixFilePermission.GROUP_EXECUTE) - } - if ((mode and 4) > 0) { - permissions.add(PosixFilePermission.OTHERS_READ) - } - if ((mode and 2) > 0) { - permissions.add(PosixFilePermission.OTHERS_WRITE) - } - if ((mode and 1) > 0) { - permissions.add(PosixFilePermission.OTHERS_EXECUTE) - } - return permissions - } - - override fun close() { - zipFile.close() - } -}