From b16007081a62e3a13fd9d34781ec4ae0274bbda0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Sebastian=20K=C3=BCrten?= <sebastian@mobanisto.de>
Date: Thu, 7 Oct 2021 13:04:06 +0200
Subject: [PATCH] Create FileUtils.setRWX(); use more Path API instead of File

---
 .../briar/desktop/DesktopModule.kt            | 11 +++---
 .../briarproject/briar/desktop/FileUtils.kt   | 27 +++++++++++++
 .../org/briarproject/briar/desktop/Main.kt    | 38 +++++++------------
 .../briar/desktop/RunWithTemporaryAccount.kt  | 24 +-----------
 4 files changed, 48 insertions(+), 52 deletions(-)
 create mode 100644 src/main/kotlin/org/briarproject/briar/desktop/FileUtils.kt

diff --git a/src/main/kotlin/org/briarproject/briar/desktop/DesktopModule.kt b/src/main/kotlin/org/briarproject/briar/desktop/DesktopModule.kt
index d9a0545a4b..aaa11bb431 100644
--- a/src/main/kotlin/org/briarproject/briar/desktop/DesktopModule.kt
+++ b/src/main/kotlin/org/briarproject/briar/desktop/DesktopModule.kt
@@ -25,6 +25,7 @@ import org.briarproject.bramble.system.JavaSystemModule
 import org.briarproject.bramble.util.OsUtils.isLinux
 import org.briarproject.bramble.util.OsUtils.isMac
 import java.io.File
+import java.nio.file.Path
 import java.util.Collections.emptyList
 import javax.inject.Singleton
 
@@ -43,7 +44,7 @@ import javax.inject.Singleton
         SocksModule::class
     ]
 )
-internal class DesktopModule(private val appDir: File) {
+internal class DesktopModule(private val appDir: Path) {
 
     @Provides
     @Singleton
@@ -52,15 +53,15 @@ internal class DesktopModule(private val appDir: File) {
     @Provides
     @Singleton
     internal fun provideDatabaseConfig(): DatabaseConfig {
-        val dbDir = File(appDir, "db")
-        val keyDir = File(appDir, "key")
-        return DesktopDatabaseConfig(dbDir, keyDir)
+        val dbDir = appDir.resolve("db")
+        val keyDir = appDir.resolve("key")
+        return DesktopDatabaseConfig(dbDir.toFile(), keyDir.toFile())
     }
 
     @Provides
     @TorDirectory
     internal fun provideTorDirectory(): File {
-        return File(appDir, "tor")
+        return appDir.resolve("tor").toFile()
     }
 
     @Provides
diff --git a/src/main/kotlin/org/briarproject/briar/desktop/FileUtils.kt b/src/main/kotlin/org/briarproject/briar/desktop/FileUtils.kt
new file mode 100644
index 0000000000..e6fffe3672
--- /dev/null
+++ b/src/main/kotlin/org/briarproject/briar/desktop/FileUtils.kt
@@ -0,0 +1,27 @@
+package org.briarproject.briar.desktop
+
+import org.briarproject.bramble.util.OsUtils
+import java.nio.file.Files
+import java.nio.file.Path
+import java.nio.file.attribute.PosixFilePermission
+
+object FileUtils {
+
+    /**
+     * Sets read, write and executable flags for the specified file in a platform independent manner.
+     */
+    fun setRWX(file: Path) {
+        if (OsUtils.isLinux() || OsUtils.isMac()) {
+            val perms = HashSet<PosixFilePermission>()
+            perms.add(PosixFilePermission.OWNER_READ)
+            perms.add(PosixFilePermission.OWNER_WRITE)
+            perms.add(PosixFilePermission.OWNER_EXECUTE)
+            Files.setPosixFilePermissions(file, perms)
+        } else if (OsUtils.isWindows()) {
+            val f = file.toFile()
+            f.setReadable(true, true)
+            f.setWritable(true, true)
+            f.setExecutable(true, true)
+        }
+    }
+}
diff --git a/src/main/kotlin/org/briarproject/briar/desktop/Main.kt b/src/main/kotlin/org/briarproject/briar/desktop/Main.kt
index e2b47625b3..5a4e72ec85 100644
--- a/src/main/kotlin/org/briarproject/briar/desktop/Main.kt
+++ b/src/main/kotlin/org/briarproject/briar/desktop/Main.kt
@@ -8,19 +8,13 @@ import com.github.ajalt.clikt.parameters.options.default
 import com.github.ajalt.clikt.parameters.options.flag
 import com.github.ajalt.clikt.parameters.options.option
 import org.briarproject.bramble.BrambleCoreEagerSingletons
-import org.briarproject.bramble.util.OsUtils.isLinux
-import org.briarproject.bramble.util.OsUtils.isMac
-import org.briarproject.bramble.util.OsUtils.isWindows
 import org.briarproject.briar.BriarCoreEagerSingletons
-import java.io.File
 import java.io.File.separator
 import java.io.IOException
 import java.lang.System.getProperty
-import java.nio.file.Files.setPosixFilePermissions
-import java.nio.file.attribute.PosixFilePermission
-import java.nio.file.attribute.PosixFilePermission.OWNER_EXECUTE
-import java.nio.file.attribute.PosixFilePermission.OWNER_READ
-import java.nio.file.attribute.PosixFilePermission.OWNER_WRITE
+import java.nio.file.Files
+import java.nio.file.Path
+import java.nio.file.Paths
 import java.util.logging.Level.ALL
 import java.util.logging.Level.INFO
 import java.util.logging.Level.WARNING
@@ -70,24 +64,18 @@ private class Main : CliktCommand(
         app.getUI().startBriar()
     }
 
-    private fun getDataDir(): File {
-        val file = File(dataDir)
-        if (!file.exists() && !file.mkdirs()) {
-            throw IOException("Could not create directory: ${file.absolutePath}")
-        } else if (!file.isDirectory) {
-            throw IOException("Data dir is not a directory: ${file.absolutePath}")
+    private fun getDataDir(): Path {
+        val file = Paths.get(dataDir)
+        if (!Files.exists(file)) {
+            Files.createDirectories(file)
+            if (!Files.exists(file)) {
+                throw IOException("Could not create directory: ${file.toAbsolutePath()}")
+            }
         }
-        if (isLinux() || isMac()) {
-            val perms = HashSet<PosixFilePermission>()
-            perms.add(OWNER_READ)
-            perms.add(OWNER_WRITE)
-            perms.add(OWNER_EXECUTE)
-            setPosixFilePermissions(file.toPath(), perms)
-        } else if (isWindows()) {
-            file.setReadable(true, true)
-            file.setWritable(true, true)
-            file.setExecutable(true, true)
+        if (!Files.isDirectory(file)) {
+            throw IOException("Data dir is not a directory: ${file.toAbsolutePath()}")
         }
+        FileUtils.setRWX(file)
         return file
     }
 }
diff --git a/src/test/kotlin/org/briarproject/briar/desktop/RunWithTemporaryAccount.kt b/src/test/kotlin/org/briarproject/briar/desktop/RunWithTemporaryAccount.kt
index e89c442918..9bb81c253b 100644
--- a/src/test/kotlin/org/briarproject/briar/desktop/RunWithTemporaryAccount.kt
+++ b/src/test/kotlin/org/briarproject/briar/desktop/RunWithTemporaryAccount.kt
@@ -2,20 +2,11 @@ package org.briarproject.briar.desktop
 
 import androidx.compose.ui.ExperimentalComposeUiApi
 import androidx.compose.ui.window.application
-import org.apache.commons.io.FileUtils
 import org.briarproject.bramble.BrambleCoreEagerSingletons
-import org.briarproject.bramble.util.OsUtils.isLinux
-import org.briarproject.bramble.util.OsUtils.isMac
-import org.briarproject.bramble.util.OsUtils.isWindows
 import org.briarproject.briar.BriarCoreEagerSingletons
 import java.io.IOException
 import java.nio.file.Files
-import java.nio.file.Files.setPosixFilePermissions
 import java.nio.file.Path
-import java.nio.file.attribute.PosixFilePermission
-import java.nio.file.attribute.PosixFilePermission.OWNER_EXECUTE
-import java.nio.file.attribute.PosixFilePermission.OWNER_READ
-import java.nio.file.attribute.PosixFilePermission.OWNER_WRITE
 import java.util.logging.Level.INFO
 import java.util.logging.LogManager
 import kotlin.io.path.absolute
@@ -36,7 +27,7 @@ internal class RunWithTemporaryAccount(val customization: BriarDesktopTestApp.()
 
         app.getShutdownManager().addShutdownHook {
             println("deleting temporary account at $dataDir")
-            FileUtils.deleteDirectory(dataDir.toFile())
+            org.apache.commons.io.FileUtils.deleteDirectory(dataDir.toFile())
         }
 
         // We need to load the eager singletons directly after making the
@@ -70,18 +61,7 @@ internal class RunWithTemporaryAccount(val customization: BriarDesktopTestApp.()
         } else if (!Files.isDirectory(dataDir)) {
             throw IOException("Data dir is not a directory: ${dataDir.absolute()}")
         }
-        if (isLinux() || isMac()) {
-            val perms = HashSet<PosixFilePermission>()
-            perms.add(OWNER_READ)
-            perms.add(OWNER_WRITE)
-            perms.add(OWNER_EXECUTE)
-            setPosixFilePermissions(dataDir, perms)
-        } else if (isWindows()) {
-            val file = dataDir.toFile()
-            file.setReadable(true, true)
-            file.setWritable(true, true)
-            file.setExecutable(true, true)
-        }
+        FileUtils.setRWX(dataDir)
         return dataDir
     }
 }
-- 
GitLab