Skip to content
This repository was archived by the owner on Oct 15, 2024. It is now read-only.

Commit 4d5b32d

Browse files
committed
Revert "feat: put new SSH layer behind a feature flag"
This reverts commit fb8d74f.
1 parent 424f654 commit 4d5b32d

File tree

9 files changed

+32
-127
lines changed

9 files changed

+32
-127
lines changed

app/src/main/java/app/passwordstore/ui/settings/RepositorySettings.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import androidx.fragment.app.FragmentActivity
1515
import app.passwordstore.R
1616
import app.passwordstore.data.repo.PasswordRepository
1717
import app.passwordstore.injection.prefs.GitPreferences
18+
import app.passwordstore.ssh.SSHKeyManager
1819
import app.passwordstore.ui.git.config.GitConfigActivity
1920
import app.passwordstore.ui.git.config.GitServerConfigActivity
2021
import app.passwordstore.ui.proxy.ProxySelectorActivity
@@ -28,7 +29,6 @@ import app.passwordstore.util.extensions.snackbar
2829
import app.passwordstore.util.extensions.unsafeLazy
2930
import app.passwordstore.util.settings.GitSettings
3031
import app.passwordstore.util.settings.PreferenceKeys
31-
import app.passwordstore.util.ssh.SSHFacade
3232
import com.github.michaelbull.result.onFailure
3333
import com.github.michaelbull.result.runCatching
3434
import com.google.android.material.dialog.MaterialAlertDialogBuilder
@@ -44,11 +44,11 @@ import de.Maxr1998.modernpreferences.helpers.switch
4444

4545
class RepositorySettings(
4646
private val activity: FragmentActivity,
47-
private val sshFacade: SSHFacade,
47+
private val sshKeyManager: SSHKeyManager,
4848
) : SettingsProvider {
4949
private val generateSshKey =
5050
activity.registerForActivityResult(StartActivityForResult()) {
51-
showSshKeyPref?.visible = sshFacade.canShowPublicKey()
51+
showSshKeyPref?.visible = sshKeyManager.canShowPublicKey()
5252
}
5353

5454
private val hiltEntryPoint by unsafeLazy {
@@ -113,7 +113,7 @@ class RepositorySettings(
113113
showSshKeyPref =
114114
pref(PreferenceKeys.SSH_SEE_KEY) {
115115
titleRes = R.string.pref_ssh_see_key_title
116-
visible = PasswordRepository.isGitRepo() && sshFacade.canShowPublicKey()
116+
visible = PasswordRepository.isGitRepo() && sshKeyManager.canShowPublicKey()
117117
onClick {
118118
ShowSshKeyFragment().show(activity.supportFragmentManager, "public_key")
119119
true

app/src/main/java/app/passwordstore/ui/settings/SettingsActivity.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ import androidx.appcompat.app.AppCompatActivity
1111
import androidx.core.os.BundleCompat
1212
import app.passwordstore.R
1313
import app.passwordstore.databinding.ActivityPreferenceRecyclerviewBinding
14+
import app.passwordstore.ssh.SSHKeyManager
1415
import app.passwordstore.util.extensions.viewBinding
15-
import app.passwordstore.util.ssh.SSHFacade
1616
import com.google.android.material.dialog.MaterialAlertDialogBuilder
1717
import dagger.hilt.android.AndroidEntryPoint
1818
import de.Maxr1998.modernpreferences.Preference
@@ -24,7 +24,7 @@ import javax.inject.Inject
2424
@AndroidEntryPoint
2525
class SettingsActivity : AppCompatActivity() {
2626

27-
@Inject lateinit var sshFacade: SSHFacade
27+
@Inject lateinit var sshKeyManager: SSHKeyManager
2828
private lateinit var repositorySettings: RepositorySettings
2929
private val miscSettings = MiscSettings(this)
3030
private val autofillSettings = AutofillSettings(this)
@@ -40,7 +40,7 @@ class SettingsActivity : AppCompatActivity() {
4040
super.onCreate(savedInstanceState)
4141
setContentView(binding.root)
4242
Preference.Config.dialogBuilderFactory = { context -> MaterialAlertDialogBuilder(context) }
43-
repositorySettings = RepositorySettings(this, sshFacade)
43+
repositorySettings = RepositorySettings(this, sshKeyManager)
4444
val screen =
4545
screen(this) {
4646
subScreen {

app/src/main/java/app/passwordstore/ui/sshkeygen/ShowSshKeyFragment.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,19 +9,19 @@ import android.content.Intent
99
import android.os.Bundle
1010
import androidx.fragment.app.DialogFragment
1111
import app.passwordstore.R
12-
import app.passwordstore.util.ssh.SSHFacade
12+
import app.passwordstore.ssh.SSHKeyManager
1313
import com.google.android.material.dialog.MaterialAlertDialogBuilder
1414
import dagger.hilt.android.AndroidEntryPoint
1515
import javax.inject.Inject
1616

1717
@AndroidEntryPoint
1818
class ShowSshKeyFragment : DialogFragment() {
1919

20-
@Inject lateinit var sshFacade: SSHFacade
20+
@Inject lateinit var sshKeyManager: SSHKeyManager
2121

2222
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
2323
val activity = requireActivity()
24-
val publicKey = sshFacade.publicKey()
24+
val publicKey = sshKeyManager.publicKey()
2525
return MaterialAlertDialogBuilder(requireActivity()).run {
2626
setMessage(getString(R.string.ssh_keygen_message, publicKey))
2727
setTitle(R.string.your_public_key)

app/src/main/java/app/passwordstore/ui/sshkeygen/SshKeyGenActivity.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,12 @@ import app.passwordstore.R
1818
import app.passwordstore.databinding.ActivitySshKeygenBinding
1919
import app.passwordstore.injection.prefs.GitPreferences
2020
import app.passwordstore.ssh.SSHKeyAlgorithm
21+
import app.passwordstore.ssh.SSHKeyManager
2122
import app.passwordstore.util.auth.BiometricAuthenticator
2223
import app.passwordstore.util.auth.BiometricAuthenticator.Result
2324
import app.passwordstore.util.coroutines.DispatcherProvider
2425
import app.passwordstore.util.extensions.keyguardManager
2526
import app.passwordstore.util.extensions.viewBinding
26-
import app.passwordstore.util.ssh.SSHFacade
2727
import com.github.michaelbull.result.fold
2828
import com.github.michaelbull.result.runCatching
2929
import com.google.android.material.dialog.MaterialAlertDialogBuilder
@@ -40,7 +40,7 @@ class SshKeyGenActivity : AppCompatActivity() {
4040
private var sshKeyAlgorithm = SSHKeyAlgorithm.ECDSA
4141
private val binding by viewBinding(ActivitySshKeygenBinding::inflate)
4242
@GitPreferences @Inject lateinit var gitPrefs: SharedPreferences
43-
@Inject lateinit var sshFacade: SSHFacade
43+
@Inject lateinit var sshKeyManager: SSHKeyManager
4444
@Inject lateinit var dispatcherProvider: DispatcherProvider
4545

4646
override fun onCreate(savedInstanceState: Bundle?) {
@@ -49,7 +49,7 @@ class SshKeyGenActivity : AppCompatActivity() {
4949
supportActionBar?.setDisplayHomeAsUpEnabled(true)
5050
with(binding) {
5151
generate.setOnClickListener {
52-
if (sshFacade.keyExists()) {
52+
if (sshKeyManager.keyExists()) {
5353
MaterialAlertDialogBuilder(this@SshKeyGenActivity).run {
5454
setTitle(R.string.ssh_keygen_existing_title)
5555
setMessage(R.string.ssh_keygen_existing_message)
@@ -127,7 +127,7 @@ class SshKeyGenActivity : AppCompatActivity() {
127127
if (result !is Result.Success)
128128
throw UserNotAuthenticatedException(getString(R.string.biometric_auth_generic_failure))
129129
}
130-
sshFacade.generateKey(sshKeyAlgorithm, requireAuthentication)
130+
sshKeyManager.generateKey(sshKeyAlgorithm, requireAuthentication)
131131
}
132132
}
133133
// Check if we still need this

app/src/main/java/app/passwordstore/ui/sshkeygen/SshKeyImportActivity.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import androidx.activity.result.contract.ActivityResultContracts
1212
import androidx.appcompat.app.AppCompatActivity
1313
import androidx.lifecycle.lifecycleScope
1414
import app.passwordstore.R
15-
import app.passwordstore.util.ssh.SSHFacade
15+
import app.passwordstore.ssh.SSHKeyManager
1616
import com.github.michaelbull.result.onFailure
1717
import com.github.michaelbull.result.runCatching
1818
import com.google.android.material.dialog.MaterialAlertDialogBuilder
@@ -23,7 +23,7 @@ import kotlinx.coroutines.launch
2323
@AndroidEntryPoint
2424
class SshKeyImportActivity : AppCompatActivity() {
2525

26-
@Inject lateinit var sshFacade: SSHFacade
26+
@Inject lateinit var sshKeyManager: SSHKeyManager
2727

2828
private val sshKeyImportAction =
2929
registerForActivityResult(ActivityResultContracts.OpenDocument()) { uri: Uri? ->
@@ -33,7 +33,7 @@ class SshKeyImportActivity : AppCompatActivity() {
3333
}
3434
runCatching {
3535
lifecycleScope.launch {
36-
sshFacade.importKey(uri)
36+
sshKeyManager.importKey(uri)
3737
Toast.makeText(
3838
this@SshKeyImportActivity,
3939
resources.getString(R.string.ssh_key_success_dialog_title),
@@ -55,7 +55,7 @@ class SshKeyImportActivity : AppCompatActivity() {
5555

5656
override fun onCreate(savedInstanceState: Bundle?) {
5757
super.onCreate(savedInstanceState)
58-
if (sshFacade.keyExists()) {
58+
if (sshKeyManager.keyExists()) {
5959
MaterialAlertDialogBuilder(this@SshKeyImportActivity).run {
6060
setTitle(R.string.ssh_keygen_existing_title)
6161
setMessage(R.string.ssh_keygen_existing_message)

app/src/main/java/app/passwordstore/util/features/Feature.kt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,6 @@ enum class Feature(
1313
val configKey: String,
1414
) {
1515

16-
/** Opt into the new SSH layer implemented as a freestanding module. */
17-
EnableNewSSHLayer(false, "enable_new_ssh"),
18-
1916
/** Opt into a cache layer for PGP passphrases. */
2017
EnablePGPPassphraseCache(false, "enable_gpg_passphrase_cache"),
2118
}

app/src/main/java/app/passwordstore/util/git/operation/GitOperation.kt

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import androidx.appcompat.app.AppCompatActivity
99
import androidx.fragment.app.FragmentActivity
1010
import app.passwordstore.R
1111
import app.passwordstore.data.repo.PasswordRepository
12+
import app.passwordstore.ssh.SSHKeyManager
1213
import app.passwordstore.ui.sshkeygen.SshKeyGenActivity
1314
import app.passwordstore.ui.sshkeygen.SshKeyImportActivity
1415
import app.passwordstore.util.auth.BiometricAuthenticator
@@ -22,7 +23,6 @@ import app.passwordstore.util.git.GitCommandExecutor
2223
import app.passwordstore.util.git.sshj.SshAuthMethod
2324
import app.passwordstore.util.git.sshj.SshjSessionFactory
2425
import app.passwordstore.util.settings.AuthMode
25-
import app.passwordstore.util.ssh.SSHFacade
2626
import com.github.michaelbull.result.Err
2727
import com.github.michaelbull.result.Ok
2828
import com.github.michaelbull.result.Result
@@ -71,7 +71,7 @@ abstract class GitOperation(protected val callingActivity: FragmentActivity) {
7171
callingActivity.applicationContext,
7272
GitOperationEntryPoint::class.java
7373
)
74-
private val sshFacade = hiltEntryPoint.sshFacade()
74+
private val sshKeyManager = hiltEntryPoint.sshKeyManager()
7575
protected val repository = PasswordRepository.repository!!
7676
protected val git = Git(repository)
7777
private val authActivity
@@ -121,8 +121,7 @@ abstract class GitOperation(protected val callingActivity: FragmentActivity) {
121121
authMethod: SshAuthMethod,
122122
credentialsProvider: CredentialsProvider? = null
123123
) {
124-
sshSessionFactory =
125-
SshjSessionFactory(authMethod, hostKeyFile, sshFacade, hiltEntryPoint.dispatcherProvider())
124+
sshSessionFactory = SshjSessionFactory(authMethod, hostKeyFile, sshKeyManager, hiltEntryPoint.dispatcherProvider())
126125
commands.filterIsInstance<TransportCommand<*, *>>().forEach { command ->
127126
command.setTransportConfigCallback { transport: Transport ->
128127
(transport as? SshTransport)?.sshSessionFactory = sshSessionFactory
@@ -170,8 +169,8 @@ abstract class GitOperation(protected val callingActivity: FragmentActivity) {
170169
suspend fun executeAfterAuthentication(authMode: AuthMode): Result<Unit, Throwable> {
171170
when (authMode) {
172171
AuthMode.SshKey ->
173-
if (sshFacade.keyExists()) {
174-
if (sshFacade.needsAuthentication()) {
172+
if (sshKeyManager.keyExists()) {
173+
if (sshKeyManager.needsAuthentication()) {
175174
val result =
176175
withContext(hiltEntryPoint.dispatcherProvider().main()) {
177176
suspendCoroutine { cont ->
@@ -248,7 +247,7 @@ abstract class GitOperation(protected val callingActivity: FragmentActivity) {
248247
@EntryPoint
249248
@InstallIn(SingletonComponent::class)
250249
interface GitOperationEntryPoint {
251-
fun sshFacade(): SSHFacade
250+
fun sshKeyManager(): SSHKeyManager
252251

253252
fun dispatcherProvider(): DispatcherProvider
254253
}

app/src/main/java/app/passwordstore/util/git/sshj/SshjSessionFactory.kt

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@ package app.passwordstore.util.git.sshj
66

77
import android.util.Base64
88
import androidx.appcompat.app.AppCompatActivity
9+
import app.passwordstore.ssh.SSHKeyManager
910
import app.passwordstore.util.coroutines.DispatcherProvider
1011
import app.passwordstore.util.git.operation.CredentialFinder
1112
import app.passwordstore.util.settings.AuthMode
12-
import app.passwordstore.util.ssh.SSHFacade
1313
import com.github.michaelbull.result.getOrElse
1414
import com.github.michaelbull.result.runCatching
1515
import java.io.File
@@ -71,7 +71,7 @@ abstract class InteractivePasswordFinder(private val dispatcherProvider: Dispatc
7171
class SshjSessionFactory(
7272
private val authMethod: SshAuthMethod,
7373
private val hostKeyFile: File,
74-
private val sshFacade: SSHFacade,
74+
private val sshKeyManager: SSHKeyManager,
7575
private val dispatcherProvider: DispatcherProvider,
7676
) : SshSessionFactory() {
7777

@@ -84,12 +84,10 @@ class SshjSessionFactory(
8484
tms: Int
8585
): RemoteSession {
8686
return currentSession
87-
?: SshjSession(uri, uri.user, authMethod, hostKeyFile, sshFacade, dispatcherProvider)
88-
.connect()
89-
.also {
90-
logcat { "New SSH connection created" }
91-
currentSession = it
92-
}
87+
?: SshjSession(uri, uri.user, authMethod, hostKeyFile, dispatcherProvider, sshKeyManager).connect().also {
88+
logcat { "New SSH connection created" }
89+
currentSession = it
90+
}
9391
}
9492

9593
fun close() {
@@ -130,8 +128,8 @@ private class SshjSession(
130128
private val username: String,
131129
private val authMethod: SshAuthMethod,
132130
private val hostKeyFile: File,
133-
private val sshFacade: SSHFacade,
134131
private val dispatcherProvider: DispatcherProvider,
132+
private val sshKeyManager: SSHKeyManager,
135133
) : RemoteSession {
136134

137135
private lateinit var ssh: SSHClient
@@ -167,10 +165,7 @@ private class SshjSession(
167165
is SshAuthMethod.SshKey -> {
168166
val pubkeyAuth =
169167
AuthPublickey(
170-
sshFacade.keyProvider(
171-
ssh,
172-
CredentialFinder(authMethod.activity, AuthMode.SshKey, dispatcherProvider)
173-
)
168+
sshKeyManager.keyProvider(ssh, CredentialFinder(authMethod.activity, AuthMode.SshKey, dispatcherProvider))
174169
)
175170
ssh.auth(username, pubkeyAuth, passwordAuth)
176171
}

app/src/main/java/app/passwordstore/util/ssh/SSHFacade.kt

Lines changed: 0 additions & 86 deletions
This file was deleted.

0 commit comments

Comments
 (0)