Change default data path to $XDG_DATA_HOME/signal-cli

Closes #152 and #125
This commit is contained in:
AsamK 2018-12-08 18:26:54 +01:00
parent ffbc356218
commit 337f84ed21
4 changed files with 50 additions and 16 deletions

View file

@ -53,9 +53,11 @@ For more information read the [man page](https://github.com/AsamK/signal-cli/blo
The password and cryptographic keys are created when registering and stored in the current users home directory:
$HOME/.config/signal/data/
`$XDG_DATA_HOME/signal-cli/data/` (`$HOME/.local/share/signal-cli/data/`)
For legacy users, the old config directory is used as a fallback:
For legacy users, the old config directories are used as a fallback:
$HOME/.config/signal/data/
$HOME/.config/textsecure/data/

View file

@ -35,7 +35,7 @@ Options
*--config* CONFIG::
Set the path, where to store the config.
Make sure you have full read/write access to the given directory.
(Default: $HOME/.config/signal)
(Default: `$XDG_DATA_HOME/signal-cli` (`$HOME/.local/share/signal-cli`))
*-u* USERNAME, *--username* USERNAME::
Specify your phone number, that will be your identifier.
@ -259,9 +259,11 @@ Files
The password and cryptographic keys are created when registering and stored in the
current users home directory, the directory can be changed with *--config*:
$HOME/.config/signal/
`$XDG_DATA_HOME/signal-cli/` (`$HOME/.local/share/signal-cli/`)
For legacy users, the old config directory is used as a fallback:
For legacy users, the old config directories are used as a fallback:
$HOME/.config/signal/
$HOME/.config/textsecure/

View file

@ -24,6 +24,7 @@ import org.asamk.Signal;
import org.asamk.signal.commands.*;
import org.asamk.signal.manager.BaseConfig;
import org.asamk.signal.manager.Manager;
import org.asamk.signal.util.IOUtils;
import org.asamk.signal.util.SecurityProvider;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.freedesktop.dbus.DBusConnection;
@ -80,18 +81,12 @@ public class Main {
return 3;
}
} else {
String settingsPath = ns.getString("config");
if (TextUtils.isEmpty(settingsPath)) {
settingsPath = System.getProperty("user.home") + "/.config/signal";
if (!new File(settingsPath).exists()) {
String legacySettingsPath = System.getProperty("user.home") + "/.config/textsecure";
if (new File(legacySettingsPath).exists()) {
settingsPath = legacySettingsPath;
}
}
String dataPath = ns.getString("config");
if (TextUtils.isEmpty(dataPath)) {
dataPath = getDefaultDataPath();
}
m = new Manager(username, settingsPath);
m = new Manager(username, dataPath);
ts = m;
try {
m.init();
@ -134,6 +129,32 @@ public class Main {
}
}
/**
* Uses $XDG_DATA_HOME/signal-cli if it exists, or if none of the legacy directories exist:
* - $HOME/.config/signal
* - $HOME/.config/textsecure
*
* @return the data directory to be used by signal-cli.
*/
private static String getDefaultDataPath() {
String dataPath = IOUtils.getDataHomeDir() + "/signal-cli";
if (new File(dataPath).exists()) {
return dataPath;
}
String legacySettingsPath = System.getProperty("user.home") + "/.config/signal";
if (new File(legacySettingsPath).exists()) {
return legacySettingsPath;
}
legacySettingsPath = System.getProperty("user.home") + "/.config/textsecure";
if (new File(legacySettingsPath).exists()) {
return legacySettingsPath;
}
return dataPath;
}
private static Namespace parseArgs(String[] args) {
ArgumentParser parser = ArgumentParsers.newFor("signal-cli")
.build()
@ -145,7 +166,7 @@ public class Main {
.help("Show package version.")
.action(Arguments.version());
parser.addArgument("--config")
.help("Set the path, where to store the config (Default: $HOME/.config/signal).");
.help("Set the path, where to store the config (Default: $XDG_DATA_HOME/signal-cli , $HOME/.local/share/signal-cli).");
MutuallyExclusiveGroup mut = parser.addMutuallyExclusiveGroup();
mut.addArgument("-u", "--username")

View file

@ -57,4 +57,13 @@ public class IOUtils {
Files.createFile(file);
}
}
public static String getDataHomeDir() {
String dataHome = System.getenv("XDG_DATA_HOME");
if (dataHome != null) {
return dataHome;
}
return System.getProperty("user.home") + "/.local/share";
}
}