From 014bbfcc1057a14326919c3c885e6977d4215fbb Mon Sep 17 00:00:00 2001 From: wingio Date: Thu, 30 Mar 2023 13:30:52 -0400 Subject: [PATCH] Fix: Move keystore back to app storage --- app/build.gradle.kts | 4 +- .../vendetta/manager/installer/util/Signer.kt | 56 ++++++++++--------- 2 files changed, 33 insertions(+), 27 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 3e2950b..3de6524 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -14,8 +14,8 @@ android { applicationId = "dev.beefers.vendetta.manager" minSdk = 24 targetSdk = 33 - versionCode = 1060 - versionName = "1.0.6" + versionCode = 1061 + versionName = "1.0.61" buildConfigField("String", "GIT_BRANCH", "\"${getCurrentBranch()}\"") buildConfigField("String", "GIT_COMMIT", "\"${getLatestCommit()}\"") diff --git a/app/src/main/java/dev/beefers/vendetta/manager/installer/util/Signer.kt b/app/src/main/java/dev/beefers/vendetta/manager/installer/util/Signer.kt index 94f3f1f..e635325 100644 --- a/app/src/main/java/dev/beefers/vendetta/manager/installer/util/Signer.kt +++ b/app/src/main/java/dev/beefers/vendetta/manager/installer/util/Signer.kt @@ -12,6 +12,7 @@ import org.koin.core.component.KoinComponent import org.koin.core.component.inject import java.io.File import java.math.BigInteger +import java.nio.file.Path import java.security.KeyPairGenerator import java.security.KeyStore import java.security.PrivateKey @@ -20,39 +21,32 @@ import java.security.cert.Certificate import java.security.cert.X509Certificate import java.util.Date import java.util.Locale +import kotlin.io.path.Path +import kotlin.io.path.moveTo object Signer : KoinComponent { private val password = "password".toCharArray() - private val cacheDir = inject().value.cacheDir + private val context by inject() + private val cacheDir = context.cacheDir + private val filesDir = context.filesDir - val keyStore: File - get() { - lateinit var ks: File - cacheDir.resolve("ks.keystore").also { - if (it.exists()) { - it.copyTo(Constants.VENDETTA_DIR.resolve("ks.keystore"), true) - it.delete() - } + val keyStore: File by lazy { + val ks = filesDir.resolve("ks.keystore") + migrate(cacheDir, filesDir) + migrate(Constants.VENDETTA_DIR, filesDir) + ks.also { + if (!it.exists()) { + it.createNewFile() + newKeystore(it) } - Constants.VENDETTA_DIR.resolve("ks.keystore").also { - if (!it.exists()) { - Constants.VENDETTA_DIR.mkdir() - newKeystore(it) - } - ks = it - } - return ks } + ks + } private val signerConfig: ApkSigner.SignerConfig by lazy { val keyStore = KeyStore.getInstance(KeyStore.getDefaultType()) - cacheDir.resolve("ks.keystore").also { - if (!it.exists()) { - cacheDir.mkdir() - newKeystore(it) - } - }.inputStream().use { stream -> + this.keyStore.inputStream().use { stream -> keyStore.load(stream, null) } @@ -66,13 +60,13 @@ object Signer : KoinComponent { ).build() } - private fun newKeystore(out: File?) { + private fun newKeystore(out: File) { val key = createKey() with(KeyStore.getInstance(KeyStore.getDefaultType())) { load(null, password) setKeyEntry("alias", key.privateKey, password, arrayOf(key.publicKey)) - store(out?.outputStream(), password) + store(out.outputStream(), password) } } @@ -125,5 +119,17 @@ object Signer : KoinComponent { outputApk.renameTo(apkFile) } + private fun migrate(oldDir: File, newDir: File) { + oldDir.resolve("ks.keystore").also { + if (it.exists()) { + Path(it.absolutePath) + .moveTo( + Path(newDir.resolve("ks.keystore").absolutePath), + overwrite = true + ) + } + } + } + private class KeySet(val publicKey: X509Certificate, val privateKey: PrivateKey) } \ No newline at end of file