diff --git a/src/main/kotlin/org/briarproject/briar/desktop/DesktopModule.kt b/src/main/kotlin/org/briarproject/briar/desktop/DesktopModule.kt index d9a0545a4b888e5fbf153366cec4c33c6cdef089..aaa11bb431b10935b96894e55c1e109fd4be7d76 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 0000000000000000000000000000000000000000..e6fffe3672a0e87962a7a64cd39a6431f5b0e2d8 --- /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 e2b47625b384183a4584aaaafc57e6fea078dadb..5a4e72ec8597505b4503779cfd44a47a0bafc3d4 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 e89c442918e678ed08a3f11752814a1ac66c8c75..9bb81c253b4739a2070513865839d5fac51b1fa3 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 } }