diff options
Diffstat (limited to 'app/src/main/java/org/pacien/tincapp/commands/TincApp.kt')
-rw-r--r-- | app/src/main/java/org/pacien/tincapp/commands/TincApp.kt | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/app/src/main/java/org/pacien/tincapp/commands/TincApp.kt b/app/src/main/java/org/pacien/tincapp/commands/TincApp.kt index b18a39b..b564b6a 100644 --- a/app/src/main/java/org/pacien/tincapp/commands/TincApp.kt +++ b/app/src/main/java/org/pacien/tincapp/commands/TincApp.kt | |||
@@ -1,9 +1,14 @@ | |||
1 | package org.pacien.tincapp.commands | 1 | package org.pacien.tincapp.commands |
2 | 2 | ||
3 | import java8.util.concurrent.CompletableFuture | 3 | import java8.util.concurrent.CompletableFuture |
4 | import org.pacien.tincapp.R | ||
4 | import org.pacien.tincapp.commands.Executor.runAsyncTask | 5 | import org.pacien.tincapp.commands.Executor.runAsyncTask |
6 | import org.pacien.tincapp.context.App | ||
5 | import org.pacien.tincapp.context.AppPaths | 7 | import org.pacien.tincapp.context.AppPaths |
8 | import org.pacien.tincapp.data.TincConfiguration | ||
6 | import org.pacien.tincapp.data.VpnInterfaceConfiguration | 9 | import org.pacien.tincapp.data.VpnInterfaceConfiguration |
10 | import org.pacien.tincapp.utils.PemUtils | ||
11 | import java.io.FileNotFoundException | ||
7 | 12 | ||
8 | /** | 13 | /** |
9 | * @author pacien | 14 | * @author pacien |
@@ -16,6 +21,16 @@ object TincApp { | |||
16 | private fun listScripts(netName: String) = AppPaths.confDir(netName).listFiles { f -> f.name in STATIC_SCRIPTS } + | 21 | private fun listScripts(netName: String) = AppPaths.confDir(netName).listFiles { f -> f.name in STATIC_SCRIPTS } + |
17 | AppPaths.hostsDir(netName).listFiles { f -> SCRIPT_SUFFIXES.any { f.name.endsWith(it) } } | 22 | AppPaths.hostsDir(netName).listFiles { f -> SCRIPT_SUFFIXES.any { f.name.endsWith(it) } } |
18 | 23 | ||
24 | fun listPrivateKeys(netName: String) = try { | ||
25 | TincConfiguration.fromTincConfiguration(AppPaths.existing(AppPaths.tincConfFile(netName))).let { | ||
26 | listOf( | ||
27 | it.privateKeyFile ?: AppPaths.defaultRsaPrivateKeyFile(netName), | ||
28 | it.ed25519PrivateKeyFile ?: AppPaths.defaultEd25519PrivateKeyFile(netName)) | ||
29 | } | ||
30 | } catch (e: FileNotFoundException) { | ||
31 | throw FileNotFoundException(App.getResources().getString(R.string.message_network_config_not_found_format, e.message!!)) | ||
32 | } | ||
33 | |||
19 | fun removeScripts(netName: String): CompletableFuture<Void> = runAsyncTask { | 34 | fun removeScripts(netName: String): CompletableFuture<Void> = runAsyncTask { |
20 | listScripts(netName).forEach { it.delete() } | 35 | listScripts(netName).forEach { it.delete() } |
21 | } | 36 | } |
@@ -26,4 +41,13 @@ object TincApp { | |||
26 | .write(AppPaths.netConfFile(netName)) | 41 | .write(AppPaths.netConfFile(netName)) |
27 | } | 42 | } |
28 | 43 | ||
44 | fun setPassphrase(netName: String, currentPassphrase: String? = null, newPassphrase: String?): CompletableFuture<Void> = runAsyncTask { | ||
45 | listPrivateKeys(netName) | ||
46 | .filter { it.exists() } | ||
47 | .map { Pair(PemUtils.read(it), it) } | ||
48 | .map { Pair(PemUtils.decrypt(it.first, currentPassphrase), it.second) } | ||
49 | .map { Pair(if (newPassphrase?.isNotEmpty() == true) PemUtils.encrypt(it.first, newPassphrase) else it.first, it.second) } | ||
50 | .forEach { PemUtils.write(it.first, it.second.writer()) } | ||
51 | } | ||
52 | |||
29 | } | 53 | } |