Skip to content

Commit b9dc442

Browse files
authored
Merge pull request #393 from code-payments/fix/add-title-back-to-balance
chore: create "generators" for GiftCard, Mnemonic, and Organizer
2 parents af830af + e01ca6c commit b9dc442

File tree

10 files changed

+93
-33
lines changed

10 files changed

+93
-33
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package com.getcode.generator
2+
3+
interface Generator<D,R> {
4+
fun generate(predicate: D): R
5+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package com.getcode.generator
2+
3+
import android.content.Context
4+
import com.getcode.crypt.MnemonicPhrase
5+
import com.getcode.solana.organizer.GiftCardAccount
6+
import dagger.hilt.android.qualifiers.ApplicationContext
7+
import javax.inject.Inject
8+
9+
class GiftCardGenerator @Inject constructor(
10+
@ApplicationContext private val context: Context
11+
): Generator<MnemonicPhrase?, GiftCardAccount> {
12+
override fun generate(predicate: MnemonicPhrase?): GiftCardAccount {
13+
return GiftCardAccount.newInstance(context, predicate)
14+
}
15+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.getcode.generator
2+
3+
import android.content.Context
4+
import com.getcode.crypt.MnemonicPhrase
5+
import com.getcode.utils.Base58String
6+
import com.getcode.utils.Base64String
7+
import dagger.hilt.android.qualifiers.ApplicationContext
8+
import javax.inject.Inject
9+
10+
class MnemonicGenerator @Inject constructor(
11+
@ApplicationContext private val context: Context
12+
): Generator<Base64String, MnemonicPhrase> {
13+
14+
override fun generate(predicate: Base64String): MnemonicPhrase {
15+
return MnemonicPhrase.fromEntropyB64(context, predicate)
16+
}
17+
18+
fun generateFromBase58(predicate: Base58String): MnemonicPhrase {
19+
return MnemonicPhrase.fromEntropyB58(context, predicate)
20+
}
21+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.getcode.generator
2+
3+
import android.content.Context
4+
import com.getcode.crypt.MnemonicPhrase
5+
import com.getcode.solana.organizer.Organizer
6+
import dagger.hilt.android.qualifiers.ApplicationContext
7+
import javax.inject.Inject
8+
9+
class OrganizerGenerator @Inject constructor(
10+
@ApplicationContext private val context: Context
11+
): Generator<MnemonicPhrase, Organizer> {
12+
13+
override fun generate(predicate: MnemonicPhrase): Organizer {
14+
return Organizer.newInstance(context, predicate)
15+
}
16+
}

api/src/main/java/com/getcode/manager/GiftCardManager.kt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,18 @@ package com.getcode.manager
22

33
import android.content.Context
44
import com.getcode.crypt.MnemonicPhrase
5+
import com.getcode.generator.Generator
6+
import com.getcode.generator.GiftCardGenerator
57
import com.getcode.solana.organizer.GiftCardAccount
68
import dagger.hilt.android.qualifiers.ApplicationContext
79
import javax.inject.Inject
810

911
class GiftCardManager @Inject constructor(
10-
@ApplicationContext private val context: Context
12+
@ApplicationContext private val context: Context,
13+
private val generator: GiftCardGenerator
1114
) {
1215
fun createGiftCard(mnemonic: MnemonicPhrase? = null): GiftCardAccount {
13-
return GiftCardAccount.newInstance(context, mnemonic)
16+
return generator.generate(mnemonic)
1417
}
1518

1619
fun getEntropy(giftCard: GiftCardAccount): String {

api/src/main/java/com/getcode/manager/MnemonicManager.kt

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,22 @@ import android.content.Context
44
import com.getcode.crypt.MnemonicCode
55
import com.getcode.crypt.MnemonicPhrase
66
import com.getcode.ed25519.Ed25519.KeyPair
7+
import com.getcode.generator.MnemonicGenerator
8+
import com.getcode.utils.Base58String
9+
import com.getcode.utils.Base64String
710
import dagger.hilt.android.qualifiers.ApplicationContext
811
import javax.inject.Inject
912

1013
class MnemonicManager @Inject constructor(
11-
@ApplicationContext private val context: Context
14+
@ApplicationContext private val context: Context,
15+
private val generator: MnemonicGenerator,
1216
) {
13-
fun fromCashLink(cashLink: String): MnemonicPhrase {
14-
return MnemonicPhrase.fromEntropyB58(context, cashLink)
17+
fun fromEntropyBase58(cashLink: Base58String): MnemonicPhrase {
18+
return generator.generateFromBase58(cashLink)
1519
}
1620

17-
fun fromEntropyBase64(entropy: String): MnemonicPhrase {
18-
return MnemonicPhrase.fromEntropyB64(context, entropy)
21+
fun fromEntropyBase64(entropy: Base64String): MnemonicPhrase {
22+
return generator.generate(entropy)
1923
}
2024

2125
fun getKeyPair(entropy: String): KeyPair {

api/src/main/java/com/getcode/manager/SessionManager.kt

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,14 @@
11
package com.getcode.manager
22

3-
import android.content.Context
4-
import com.getcode.crypt.MnemonicPhrase
53
import com.getcode.ed25519.Ed25519
6-
import com.getcode.model.Domain
7-
import com.getcode.network.TipController
4+
import com.getcode.generator.OrganizerGenerator
85
import com.getcode.network.client.Client
9-
import com.getcode.network.client.awaitEstablishRelationship
10-
import com.getcode.network.client.establishRelationshipSingle
116
import com.getcode.network.client.registerInstallation
127
import com.getcode.network.client.updatePreferences
138
import com.getcode.solana.organizer.Organizer
149
import com.getcode.utils.installationId
1510
import com.google.firebase.Firebase
1611
import com.google.firebase.installations.installations
17-
import com.ionspin.kotlin.crypto.LibsodiumInitializer
1812
import kotlinx.coroutines.flow.MutableStateFlow
1913
import kotlinx.coroutines.flow.StateFlow
2014
import kotlinx.coroutines.flow.asStateFlow
@@ -27,6 +21,8 @@ import javax.inject.Singleton
2721
@Singleton
2822
class SessionManager @Inject constructor(
2923
private val client: Client,
24+
private val mnemonicManager: MnemonicManager,
25+
private val organizerGenerator: OrganizerGenerator,
3026
) {
3127
data class SessionState(
3228
val entropyB64: String? = null,
@@ -37,15 +33,13 @@ class SessionManager @Inject constructor(
3733
val userPrefsUpdated: Boolean = false,
3834
)
3935

40-
fun set(context: Context, entropyB64: String) {
41-
val mnemonic = MnemonicPhrase.fromEntropyB64(context, entropyB64)
36+
fun set(entropyB64: String) {
37+
val mnemonic = mnemonicManager.fromEntropyBase64(entropyB64)
4238
if (getOrganizer()?.mnemonic?.words == mnemonic.words
4339
&& getOrganizer()?.ownerKeyPair == authState.value.keyPair
4440
) return
45-
val organizer = Organizer.newInstance(
46-
context = context,
47-
mnemonic = mnemonic
48-
)
41+
42+
val organizer = organizerGenerator.generate(mnemonic)
4943

5044
update {
5145
SessionState(

api/src/main/java/com/getcode/utils/String.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,4 +28,7 @@ fun String.base64EncodedData(): ByteArray {
2828
return data + padding.toByteArray()
2929
}
3030
return data
31-
}
31+
}
32+
33+
typealias Base64String = String
34+
typealias Base58String = String

app/src/main/java/com/getcode/manager/AuthManager.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ class AuthManager @Inject constructor(
9898
}
9999

100100
val originalSessionState = SessionManager.authState.value
101-
sessionManager.set(context, entropyB64)
101+
sessionManager.set(entropyB64)
102102

103103
if (!isSoftLogin) {
104104
loginAnalytics(entropyB64)
@@ -220,7 +220,7 @@ class AuthManager @Inject constructor(
220220
.flatMap {
221221
user = it
222222
if (SessionManager.authState.value.entropyB64 != entropyB64) {
223-
sessionManager.set(context, entropyB64)
223+
sessionManager.set(entropyB64)
224224
}
225225
balanceController.fetchBalance()
226226
.toSingleDefault(Pair(phone!!, user!!))

app/src/main/java/com/getcode/view/main/home/HomeViewModel.kt

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,6 @@ class HomeViewModel @Inject constructor(
276276
}
277277
.map { it }
278278
.distinctUntilChanged()
279-
.onEach { Timber.d("airdrop eligible=$it") }
280279
.filter { it }
281280
.mapNotNull { SessionManager.getKeyPair() }
282281
.catchSafely(
@@ -1489,24 +1488,24 @@ class HomeViewModel @Inject constructor(
14891488
}
14901489
}
14911490

1492-
fun openCashLink(deepLink: String?) {
1493-
Timber.d("openCashLink: deep link=$deepLink")
1494-
val cashLink = deepLink?.trim()?.replace("\n", "") ?: return
1495-
if (cashLink.isEmpty()) {
1491+
fun openCashLink(cashLink: String?) {
1492+
Timber.d("openCashLink:$cashLink")
1493+
val base58Entropy = cashLink?.trim()?.replace("\n", "") ?: return
1494+
if (base58Entropy.isEmpty()) {
14961495
Timber.d("cash link empty")
14971496
return
14981497
}
1499-
if (openedLinks.contains(cashLink)) {
1498+
if (openedLinks.contains(base58Entropy)) {
15001499
Timber.d("cash link already opened in session")
15011500
return
15021501
}
15031502

15041503
analytics.cashLinkGrabStart()
15051504

1506-
openedLinks.add(cashLink)
1505+
openedLinks.add(base58Entropy)
15071506

15081507
try {
1509-
val mnemonic = mnemonicManager.fromCashLink(cashLink)
1508+
val mnemonic = mnemonicManager.fromEntropyBase58(base58Entropy)
15101509
val giftCardAccount = giftCardManager.createGiftCard(mnemonic)
15111510

15121511
viewModelScope.launch {
@@ -1536,15 +1535,15 @@ class HomeViewModel @Inject constructor(
15361535
),
15371536
vibrate = true
15381537
)
1539-
removeLinkWithDelay(cashLink)
1538+
removeLinkWithDelay(base58Entropy)
15401539
}
15411540
} catch (ex: Exception) {
15421541
ex.printStackTrace()
15431542
Timber.e(ex)
15441543
when (ex) {
15451544
is RemoteSendException -> {
15461545
onRemoteSendError(ex)
1547-
removeLinkWithDelay(cashLink)
1546+
removeLinkWithDelay(base58Entropy)
15481547
}
15491548

15501549
else -> {

0 commit comments

Comments
 (0)