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: 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/ $HOME/.config/textsecure/data/

View file

@ -35,7 +35,7 @@ Options
*--config* CONFIG:: *--config* CONFIG::
Set the path, where to store the config. Set the path, where to store the config.
Make sure you have full read/write access to the given directory. 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:: *-u* USERNAME, *--username* USERNAME::
Specify your phone number, that will be your identifier. 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 The password and cryptographic keys are created when registering and stored in the
current users home directory, the directory can be changed with *--config*: 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/ $HOME/.config/textsecure/

View file

@ -24,6 +24,7 @@ import org.asamk.Signal;
import org.asamk.signal.commands.*; import org.asamk.signal.commands.*;
import org.asamk.signal.manager.BaseConfig; import org.asamk.signal.manager.BaseConfig;
import org.asamk.signal.manager.Manager; import org.asamk.signal.manager.Manager;
import org.asamk.signal.util.IOUtils;
import org.asamk.signal.util.SecurityProvider; import org.asamk.signal.util.SecurityProvider;
import org.bouncycastle.jce.provider.BouncyCastleProvider; import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.freedesktop.dbus.DBusConnection; import org.freedesktop.dbus.DBusConnection;
@ -80,18 +81,12 @@ public class Main {
return 3; return 3;
} }
} else { } else {
String settingsPath = ns.getString("config"); String dataPath = ns.getString("config");
if (TextUtils.isEmpty(settingsPath)) { if (TextUtils.isEmpty(dataPath)) {
settingsPath = System.getProperty("user.home") + "/.config/signal"; dataPath = getDefaultDataPath();
if (!new File(settingsPath).exists()) {
String legacySettingsPath = System.getProperty("user.home") + "/.config/textsecure";
if (new File(legacySettingsPath).exists()) {
settingsPath = legacySettingsPath;
}
}
} }
m = new Manager(username, settingsPath); m = new Manager(username, dataPath);
ts = m; ts = m;
try { try {
m.init(); 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) { private static Namespace parseArgs(String[] args) {
ArgumentParser parser = ArgumentParsers.newFor("signal-cli") ArgumentParser parser = ArgumentParsers.newFor("signal-cli")
.build() .build()
@ -145,7 +166,7 @@ public class Main {
.help("Show package version.") .help("Show package version.")
.action(Arguments.version()); .action(Arguments.version());
parser.addArgument("--config") 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(); MutuallyExclusiveGroup mut = parser.addMutuallyExclusiveGroup();
mut.addArgument("-u", "--username") mut.addArgument("-u", "--username")

View file

@ -57,4 +57,13 @@ public class IOUtils {
Files.createFile(file); 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";
}
} }