From a9774a159b263ad71337c8a20225eab568d1a3a6 Mon Sep 17 00:00:00 2001 From: Daniel Lublin <daniel@lublin.se> Date: Tue, 21 Sep 2021 11:47:01 +0200 Subject: [PATCH] Provide the typical dir for storing data --- .../briarproject/mailbox/cli/JavaCliModule.kt | 43 ++++++++++++++++++- 1 file changed, 41 insertions(+), 2 deletions(-) diff --git a/mailbox-cli/src/main/java/org/briarproject/mailbox/cli/JavaCliModule.kt b/mailbox-cli/src/main/java/org/briarproject/mailbox/cli/JavaCliModule.kt index cb2b1a40..4db2940b 100644 --- a/mailbox-cli/src/main/java/org/briarproject/mailbox/cli/JavaCliModule.kt +++ b/mailbox-cli/src/main/java/org/briarproject/mailbox/cli/JavaCliModule.kt @@ -9,7 +9,16 @@ import org.briarproject.mailbox.core.db.DatabaseConfig import org.briarproject.mailbox.core.event.DefaultEventExecutorModule import org.briarproject.mailbox.core.system.DefaultTaskSchedulerModule import org.briarproject.mailbox.core.tor.JavaTorModule +import org.slf4j.Logger +import org.slf4j.LoggerFactory.getLogger import java.io.File +import java.io.File.separator +import java.io.IOException +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 javax.inject.Singleton @Module( @@ -22,12 +31,42 @@ import javax.inject.Singleton ) @InstallIn(SingletonComponent::class) internal class JavaCliModule { + + companion object { + private val LOG: Logger = getLogger(JavaCliModule::class.java) + + private val DEFAULT_DATAHOME = System.getProperty("user.home") + + separator + ".local" + separator + "share" + private val DATAHOME_SUBDIR = "briar-mailbox" + } + @Singleton @Provides fun provideDatabaseConfig() = object : DatabaseConfig { override fun getDatabaseDirectory(): File { - // TODO: use a correct location - return File("/tmp") + val dataHome = when (val custom = System.getenv("XDG_DATA_HOME").orEmpty()) { + "" -> File(DEFAULT_DATAHOME) + else -> File(custom) + } + if (!dataHome.exists() || !dataHome.isDirectory()) { + throw IOException("datahome missing or not a directory: ${dataHome.absolutePath}") + } + + val dataDir = File(dataHome.absolutePath + separator + DATAHOME_SUBDIR) + if (!dataDir.exists() && !dataDir.mkdirs()) { + throw IOException("datadir could not be created: ${dataDir.absolutePath}") + } else if (!dataDir.isDirectory()) { + throw IOException("datadir is not a directory: ${dataDir.absolutePath}") + } + + val perms = HashSet<PosixFilePermission>() + perms.add(OWNER_READ) + perms.add(OWNER_WRITE) + perms.add(OWNER_EXECUTE) + setPosixFilePermissions(dataDir.toPath(), perms) + + LOG.info("Datadir set to: " + dataDir.absolutePath) + return dataDir } } } -- GitLab