Skip to content

Commit b0ef7f8

Browse files
committed
fix: improve the distinction between hw-wo and wo wallets
1 parent 5b06083 commit b0ef7f8

File tree

6 files changed

+35
-31
lines changed

6 files changed

+35
-31
lines changed

common/src/commonMain/kotlin/com/blockstream/common/data/HwWatchOnlyCredentials.kt renamed to common/src/commonMain/kotlin/com/blockstream/common/data/MultipleWatchOnlyCredentials.kt

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,23 +7,27 @@ import kotlinx.serialization.Serializable
77
import kotlinx.serialization.json.Json
88

99
@Serializable
10-
data class HwWatchOnlyCredentials constructor(
10+
data class MultipleWatchOnlyCredentials constructor(
1111
@SerialName("credentials")
1212
val credentials: Map<String, WatchOnlyCredentials> = emptyMap(),
13-
) : GreenJson<HwWatchOnlyCredentials>() {
13+
) : GreenJson<MultipleWatchOnlyCredentials>() {
1414
override fun encodeDefaultsValues() = false
1515

1616
override fun kSerializer() = serializer()
1717

18-
fun toLoginCredentials() = LoginCredentialsParams(hwWatchOnlyCredentials = this)
18+
fun toLoginCredentials() = LoginCredentialsParams(multipleWatchOnlyCredentials = this)
1919

20-
companion object {
21-
fun fromByteArray(byteArray: ByteArray): HwWatchOnlyCredentials {
20+
fun isHwWatchOnly() = credentials.values.all { it.username.isNullOrBlank() && it.password.isNullOrBlank() }
21+
22+
fun isCoreDescriptors() = credentials.values.all { it.coreDescriptors != null }
23+
24+
companion object Companion {
25+
fun fromByteArray(byteArray: ByteArray): MultipleWatchOnlyCredentials {
2226
return Json.decodeFromString(byteArray.decodeToString())
2327
}
2428

25-
fun fromWatchOnlyCredentials(network: String, watchOnlyCredentials: WatchOnlyCredentials): HwWatchOnlyCredentials {
26-
return HwWatchOnlyCredentials(
29+
fun fromWatchOnlyCredentials(network: String, watchOnlyCredentials: WatchOnlyCredentials): MultipleWatchOnlyCredentials {
30+
return MultipleWatchOnlyCredentials(
2731
mapOf(network to watchOnlyCredentials)
2832
)
2933
}

common/src/commonMain/kotlin/com/blockstream/common/gdk/GdkSession.kt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ import com.blockstream.common.data.Denomination
1818
import com.blockstream.common.data.EnrichedAsset
1919
import com.blockstream.common.data.ExceptionWithSupportData
2020
import com.blockstream.common.data.GreenWallet
21-
import com.blockstream.common.data.HwWatchOnlyCredentials
2221
import com.blockstream.common.data.LogoutReason
22+
import com.blockstream.common.data.MultipleWatchOnlyCredentials
2323
import com.blockstream.common.data.RichWatchOnly
2424
import com.blockstream.common.data.SupportData
2525
import com.blockstream.common.database.wallet.LoginCredentials
@@ -1273,12 +1273,12 @@ class GdkSession constructor(
12731273
suspend fun loginWatchOnly(
12741274
wallet: GreenWallet,
12751275
loginCredentials: LoginCredentials? = null,
1276-
watchOnlyCredentials: HwWatchOnlyCredentials
1276+
watchOnlyCredentials: MultipleWatchOnlyCredentials
12771277
) {
12781278
loginWatchOnly(network = prominentNetwork(wallet, loginCredentials), wallet = wallet, watchOnlyCredentials = watchOnlyCredentials)
12791279
}
12801280

1281-
suspend fun loginWatchOnly(network: Network, wallet: GreenWallet?, watchOnlyCredentials: HwWatchOnlyCredentials): LoginData {
1281+
suspend fun loginWatchOnly(network: Network, wallet: GreenWallet?, watchOnlyCredentials: MultipleWatchOnlyCredentials): LoginData {
12821282
return loginWatchOnly(
12831283
network = network,
12841284
wallet = wallet,
@@ -1303,7 +1303,7 @@ class GdkSession constructor(
13031303

13041304
// WO Login
13051305
private suspend fun loginWatchOnly(network: Network, wallet: GreenWallet?, loginCredentialsParams: LoginCredentialsParams): LoginData {
1306-
val initNetworks = loginCredentialsParams.hwWatchOnlyCredentials?.credentials?.keys?.map {
1306+
val initNetworks = loginCredentialsParams.multipleWatchOnlyCredentials?.credentials?.keys?.map {
13071307
networkBy(it)
13081308
} ?: listOf(network)
13091309

@@ -1373,13 +1373,13 @@ class GdkSession constructor(
13731373

13741374
// TODO move all to StateFlow
13751375
// Warning, ordering matters for SecurityScreen
1376-
isHwWatchOnly = walletLoginCredentialsParams.hwWatchOnlyCredentials != null
1376+
isHwWatchOnly = walletLoginCredentialsParams.multipleWatchOnlyCredentials?.isHwWatchOnly() == true
13771377
_isWatchOnly.value = walletLoginCredentialsParams.isWatchOnly
13781378

13791379
isNoBlobWatchOnly = isWatchOnlyValue && richWatchOnly == null
13801380
isRichWatchOnly = isWatchOnlyValue && richWatchOnly != null
13811381
isCoreDescriptorWatchOnly =
1382-
isWatchOnlyValue && (walletLoginCredentialsParams.coreDescriptors != null || walletLoginCredentialsParams.hwWatchOnlyCredentials != null)
1382+
isWatchOnlyValue && (walletLoginCredentialsParams.coreDescriptors != null || walletLoginCredentialsParams.multipleWatchOnlyCredentials?.isCoreDescriptors() == true)
13831383
isAirgapped = isWatchOnlyValue && wallet?.isHardware ?: false
13841384

13851385
setupDeviceToSession(device)

common/src/commonMain/kotlin/com/blockstream/common/gdk/params/LoginCredentialsParams.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.blockstream.common.gdk.params
22

3-
import com.blockstream.common.data.HwWatchOnlyCredentials
3+
import com.blockstream.common.data.MultipleWatchOnlyCredentials
44
import com.blockstream.common.gdk.GreenJson
55
import com.blockstream.common.gdk.data.Credentials
66
import com.blockstream.common.gdk.data.PinData
@@ -29,7 +29,7 @@ data class LoginCredentialsParams @OptIn(ExperimentalSerializationApi::class) co
2929
@SerialName("core_descriptors")
3030
val coreDescriptors: List<String>? = null,
3131
@SerialName("hwWatchOnlyCredentials")
32-
val hwWatchOnlyCredentials: HwWatchOnlyCredentials? = null, // this value is not used by GDK, only from the app
32+
val multipleWatchOnlyCredentials: MultipleWatchOnlyCredentials? = null, // this value is not used by GDK, only from the app
3333
@SerialName("slip132_extended_pubkeys")
3434
val slip132ExtendedPubkeys: List<String>? = null,
3535
) : GreenJson<LoginCredentialsParams>() {
@@ -38,10 +38,10 @@ data class LoginCredentialsParams @OptIn(ExperimentalSerializationApi::class) co
3838
override fun kSerializer() = serializer()
3939

4040
val isWatchOnly
41-
get() = !username.isNullOrBlank() || !slip132ExtendedPubkeys.isNullOrEmpty() || !coreDescriptors.isNullOrEmpty() || hwWatchOnlyCredentials != null
41+
get() = !username.isNullOrBlank() || !slip132ExtendedPubkeys.isNullOrEmpty() || !coreDescriptors.isNullOrEmpty() || multipleWatchOnlyCredentials != null
4242

4343
fun hwWatchOnlyCredentialsToLoginCredentialsParams(network: String): LoginCredentialsParams? {
44-
return hwWatchOnlyCredentials?.credentials?.get(network)?.toLoginCredentials()
44+
return multipleWatchOnlyCredentials?.credentials?.get(network)?.toLoginCredentials()
4545
}
4646

4747
companion object {

common/src/commonMain/kotlin/com/blockstream/common/models/GreenViewModel.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@ import com.blockstream.common.data.Denomination
2222
import com.blockstream.common.data.DeviceIdentifier
2323
import com.blockstream.common.data.EncryptedData
2424
import com.blockstream.common.data.GreenWallet
25-
import com.blockstream.common.data.HwWatchOnlyCredentials
2625
import com.blockstream.common.data.LogoutReason
26+
import com.blockstream.common.data.MultipleWatchOnlyCredentials
2727
import com.blockstream.common.data.Promo
2828
import com.blockstream.common.data.Redact
2929
import com.blockstream.common.data.SupportData
@@ -1032,7 +1032,7 @@ open class GreenViewModel constructor(
10321032
val loginData = session.loginWatchOnly(
10331033
network = network,
10341034
wallet = null,
1035-
watchOnlyCredentials = HwWatchOnlyCredentials.fromWatchOnlyCredentials(
1035+
watchOnlyCredentials = MultipleWatchOnlyCredentials.fromWatchOnlyCredentials(
10361036
network = network.id,
10371037
watchOnlyCredentials = watchOnlyCredentials
10381038
)
@@ -1114,7 +1114,7 @@ open class GreenViewModel constructor(
11141114
session.loginWatchOnly(
11151115
network = network,
11161116
wallet = wallet,
1117-
watchOnlyCredentials = HwWatchOnlyCredentials.fromWatchOnlyCredentials(
1117+
watchOnlyCredentials = MultipleWatchOnlyCredentials.fromWatchOnlyCredentials(
11181118
network = network.id,
11191119
watchOnlyCredentials = watchOnlyCredentials
11201120
)

common/src/commonMain/kotlin/com/blockstream/common/models/login/LoginViewModel.kt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@ import com.blockstream.common.data.ApplicationSettings
2222
import com.blockstream.common.data.CredentialType
2323
import com.blockstream.common.data.DataState
2424
import com.blockstream.common.data.GreenWallet
25-
import com.blockstream.common.data.HwWatchOnlyCredentials
2625
import com.blockstream.common.data.LogoutReason
26+
import com.blockstream.common.data.MultipleWatchOnlyCredentials
2727
import com.blockstream.common.data.Redact
2828
import com.blockstream.common.data.SetupArgs
2929
import com.blockstream.common.data.SupportData
@@ -743,7 +743,7 @@ class LoginViewModel constructor(
743743
val watchOnlyCredentials = (greenKeystore.decryptData(encryptedData).let {
744744
when (loginCredentials.credential_type) {
745745
CredentialType.KEYSTORE_PASSWORD -> {
746-
HwWatchOnlyCredentials.fromWatchOnlyCredentials(
746+
MultipleWatchOnlyCredentials.fromWatchOnlyCredentials(
747747
network = loginCredentials.network,
748748
watchOnlyCredentials = WatchOnlyCredentials(
749749
username = greenWallet.watchOnlyUsername ?: "",
@@ -753,11 +753,11 @@ class LoginViewModel constructor(
753753
}
754754

755755
CredentialType.KEYSTORE_HW_WATCHONLY_CREDENTIALS -> {
756-
HwWatchOnlyCredentials.fromByteArray(it)
756+
MultipleWatchOnlyCredentials.fromByteArray(it)
757757
}
758758

759759
else -> {
760-
HwWatchOnlyCredentials.fromWatchOnlyCredentials(
760+
MultipleWatchOnlyCredentials.fromWatchOnlyCredentials(
761761
network = loginCredentials.network,
762762
watchOnlyCredentials = WatchOnlyCredentials.fromByteArray(it)
763763
)
@@ -780,7 +780,7 @@ class LoginViewModel constructor(
780780
session.loginWatchOnly(
781781
wallet = greenWallet,
782782
loginCredentials = loginCredentials,
783-
watchOnlyCredentials = HwWatchOnlyCredentials.fromWatchOnlyCredentials(
783+
watchOnlyCredentials = MultipleWatchOnlyCredentials.fromWatchOnlyCredentials(
784784
network = loginCredentials.network,
785785
watchOnlyCredentials = watchOnlyCredentials.let {
786786
greenWallet.watchOnlyUsername?.takeIf { it.isNotBlank() }?.let { username ->
@@ -848,7 +848,7 @@ class LoginViewModel constructor(
848848
login(loginCredentials = null, isWatchOnly = true, updateWatchOnlyPassword = !greenWallet.isWatchOnlySingleSig) {
849849
session.loginWatchOnly(
850850
wallet = greenWallet,
851-
watchOnlyCredentials = HwWatchOnlyCredentials.fromWatchOnlyCredentials(
851+
watchOnlyCredentials = MultipleWatchOnlyCredentials.fromWatchOnlyCredentials(
852852
network = greenWallet.activeNetwork,
853853
watchOnlyCredentials = WatchOnlyCredentials(
854854
username = watchOnlyUsername.value,

common/src/commonMain/kotlin/com/blockstream/common/usecases/EnableHardwareWatchOnlyUseCase.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package com.blockstream.common.usecases
33
import com.blockstream.common.crypto.GreenKeystore
44
import com.blockstream.common.data.CredentialType
55
import com.blockstream.common.data.GreenWallet
6-
import com.blockstream.common.data.HwWatchOnlyCredentials
6+
import com.blockstream.common.data.MultipleWatchOnlyCredentials
77
import com.blockstream.common.data.WatchOnlyCredentials
88
import com.blockstream.common.database.Database
99
import com.blockstream.common.extensions.createLoginCredentials
@@ -34,24 +34,24 @@ class EnableHardwareWatchOnlyUseCase(
3434
// Wait for setup to gets completed so that the active account is set
3535
session.setupDefaultAccounts().join()
3636

37-
val hwWatchOnlyCredentials =
37+
val multipleWatchOnlyCredentials =
3838
session.accounts.value.filter { it.isSinglesig && !it.hidden }.groupBy { it.network }.mapValues {
3939
it.value.map {
4040
session.getAccount(it).coreDescriptors ?: emptyList()
4141
}.flatten()
4242
}.map {
4343
it.key.id to WatchOnlyCredentials(coreDescriptors = it.value)
4444
}.toMap().let {
45-
HwWatchOnlyCredentials(credentials = it)
45+
MultipleWatchOnlyCredentials(credentials = it)
4646
}
4747

48-
if (hwWatchOnlyCredentials.credentials.isEmpty()) {
48+
if (multipleWatchOnlyCredentials.credentials.isEmpty()) {
4949
logger.d { "Empty hwWatchOnlyCredentials" }
5050
return
5151
}
5252

5353
val encryptedData = greenKeystore.encryptData(
54-
hwWatchOnlyCredentials.toJson().encodeToByteArray()
54+
multipleWatchOnlyCredentials.toJson().encodeToByteArray()
5555
)
5656

5757
logger.d { "Creating HW Watch-only credentials" }

0 commit comments

Comments
 (0)