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 4db2940b9e4a58f0f9b09c771bc02fa32b300f89..dfa08b350f49ff75e9f0a51512151ec2baa27c0b 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,6 +9,7 @@ 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.briarproject.mailbox.core.util.LogUtils.info import org.slf4j.Logger import org.slf4j.LoggerFactory.getLogger import java.io.File @@ -37,36 +38,48 @@ internal class JavaCliModule { private val DEFAULT_DATAHOME = System.getProperty("user.home") + separator + ".local" + separator + "share" - private val DATAHOME_SUBDIR = "briar-mailbox" + private const val DATAHOME_SUBDIR = "briar-mailbox" } @Singleton @Provides fun provideDatabaseConfig() = object : DatabaseConfig { override fun getDatabaseDirectory(): File { - 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 dataDir = getDataDir() + val dbDir = File(dataDir, "db") + if (!dbDir.exists() && !dbDir.mkdirs()) { + throw IOException("dbDir could not be created: ${dbDir.absolutePath}") + } else if (!dbDir.isDirectory) { + throw IOException("dbDir is not a directory: ${dbDir.absolutePath}") } + return dbDir + } + } - val perms = HashSet<PosixFilePermission>() - perms.add(OWNER_READ) - perms.add(OWNER_WRITE) - perms.add(OWNER_EXECUTE) - setPosixFilePermissions(dataDir.toPath(), perms) + private fun getDataDir(): File { + 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}") + } - LOG.info("Datadir set to: " + dataDir.absolutePath) - return dataDir + 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 } + }