Skip to content

Commit be13c5f

Browse files
authored
fake app changes
1 parent 2fbc21f commit be13c5f

File tree

3 files changed

+19
-6
lines changed

3 files changed

+19
-6
lines changed

android/fakedapp/src/main/java/com/solana/mobilewalletadapter/fakedapp/MainViewModel.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -462,7 +462,9 @@ class MainViewModel(application: Application) : AndroidViewModel(application) {
462462
signInPayload: SignInWithSolana.Payload? = null
463463
): MobileWalletAdapterClient.AuthorizationResult {
464464
val result = try {
465-
client.authorize(identity, chain, signInPayload, uiState.value.sessionProtocolVersion!!)
465+
client.authorize(identity, chain, signInPayload,
466+
uiState.value.accounts?.map { it.publicKey },
467+
uiState.value.sessionProtocolVersion!!)
466468
} catch (e: MobileWalletAdapterUseCase.MobileWalletAdapterOperationFailedException) {
467469
_uiState.update {
468470
it.copy(

android/fakedapp/src/main/java/com/solana/mobilewalletadapter/fakedapp/usecase/MobileWalletAdapterUseCase.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,14 +53,15 @@ object MobileWalletAdapterUseCase {
5353
identity: DappIdentity,
5454
chain: String?,
5555
signInPayload: SignInWithSolana.Payload?,
56+
publicKeys: List<ByteArray>?,
5657
protocolVersion: ProtocolVersion = ProtocolVersion.V1
5758
): MobileWalletAdapterClient.AuthorizationResult = coroutineScope {
5859
try {
5960
runInterruptible(Dispatchers.IO) {
6061
if (protocolVersion == ProtocolVersion.V1) {
6162
client.authorize(
6263
identity.uri, identity.iconRelativeUri, identity.name, chain,
63-
null, null, null, signInPayload
64+
null, null, publicKeys?.toTypedArray(), signInPayload
6465
).get()!!
6566
} else {
6667
val cluster = when (chain) {

android/fakewallet/src/main/java/com/solana/mobilewalletadapter/fakewallet/MobileWalletAdapterViewModel.kt

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import android.util.Log
1111
import androidx.lifecycle.AndroidViewModel
1212
import androidx.lifecycle.viewModelScope
1313
import com.funkatronics.encoders.Base58
14+
import com.funkatronics.encoders.Base64
1415
import com.solana.mobilewalletadapter.common.ProtocolContract
1516
import com.solana.mobilewalletadapter.common.protocol.SessionProperties
1617
import com.solana.mobilewalletadapter.common.signin.SignInWithSolana
@@ -118,10 +119,19 @@ class MobileWalletAdapterViewModel(application: Application) : AndroidViewModel(
118119
viewModelScope.launch {
119120
if (authorized) {
120121
val accounts = (0 until numAccounts).map {
121-
val keypair = getApplication<FakeWalletApplication>().keyRepository.generateKeypair()
122-
val publicKey = keypair.public as Ed25519PublicKeyParameters
123-
Log.d(TAG, "Generated a new keypair (pub=${publicKey.encoded.contentToString()}) for authorize request")
124-
buildAccount(publicKey.encoded, "fakewallet account $it")
122+
val publicKeyBytes = request.request.addresses?.get(it)?.let { address ->
123+
val keypair = getApplication<FakeWalletApplication>().keyRepository
124+
.getKeypair(Base64.decode(address)) ?: return@let null
125+
val publicKey = keypair.public as Ed25519PublicKeyParameters
126+
Log.d(TAG, "Reusing known keypair (pub=${publicKey.encoded.contentToString()}) for authorize request")
127+
publicKey.encoded
128+
} ?: run {
129+
val keypair = getApplication<FakeWalletApplication>().keyRepository.generateKeypair()
130+
val publicKey = keypair.public as Ed25519PublicKeyParameters
131+
Log.d(TAG, "Generated a new keypair (pub=${publicKey.encoded.contentToString()}) for authorize request")
132+
publicKey.encoded
133+
}
134+
buildAccount(publicKeyBytes, "fakewallet account $it")
125135
}
126136
request.request.completeWithAuthorize(accounts.toTypedArray(), null,
127137
request.sourceVerificationState.authorizationScope.encodeToByteArray(), null)

0 commit comments

Comments
 (0)