diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 85cf7bd4c9..1cd78a4f56 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -26,8 +26,8 @@ configurations.configureEach { exclude(module = "commons-logging") } -val canonicalVersionCode = 434 -val canonicalVersionName = "1.30.1" +val canonicalVersionCode = 435 +val canonicalVersionName = "1.30.2" val postFixSize = 10 val abiPostFix = mapOf( diff --git a/app/src/main/java/org/session/libsession/messaging/sending_receiving/MessageParser.kt b/app/src/main/java/org/session/libsession/messaging/sending_receiving/MessageParser.kt index 9caf81ae8b..73eed4bb7b 100644 --- a/app/src/main/java/org/session/libsession/messaging/sending_receiving/MessageParser.kt +++ b/app/src/main/java/org/session/libsession/messaging/sending_receiving/MessageParser.kt @@ -177,7 +177,6 @@ class MessageParser @Inject constructor( val envelop = SessionProtocol.decodeFor1o1( myEd25519PrivKey = currentUserEd25519PrivKey, payload = data, - nowEpochMs = snodeClock.currentTimeMills(), proBackendPubKey = proBackendKey, ) @@ -208,7 +207,6 @@ class MessageParser @Inject constructor( val decoded = SessionProtocol.decodeForGroup( payload = data, myEd25519PrivKey = currentUserEd25519PrivKey, - nowEpochMs = snodeClock.currentTimeMills(), groupEd25519PublicKey = groupId.pubKeyBytes, groupEd25519PrivateKeys = keys.toTypedArray(), proBackendPubKey = proBackendKey @@ -238,7 +236,7 @@ class MessageParser @Inject constructor( val decoded = SessionProtocol.decodeForCommunity( payload = Base64.decode(msg.data), - nowEpochMs = snodeClock.currentTimeMills(), + timestampMs = snodeClock.currentTimeMills(), proBackendPubKey = proBackendKey, ) @@ -276,7 +274,7 @@ class MessageParser @Inject constructor( val decoded = SessionProtocol.decodeForCommunity( payload = plaintext.data, - nowEpochMs = snodeClock.currentTimeMills(), + timestampMs = snodeClock.currentTimeMills(), proBackendPubKey = proBackendKey, ) diff --git a/app/src/main/java/org/session/libsession/messaging/sending_receiving/ReceivedMessageProcessor.kt b/app/src/main/java/org/session/libsession/messaging/sending_receiving/ReceivedMessageProcessor.kt index c4137655d1..cdb269e165 100644 --- a/app/src/main/java/org/session/libsession/messaging/sending_receiving/ReceivedMessageProcessor.kt +++ b/app/src/main/java/org/session/libsession/messaging/sending_receiving/ReceivedMessageProcessor.kt @@ -515,7 +515,7 @@ class ReceivedMessageProcessor @Inject constructor( var maxOutgoingMessageTimestamp: Long = 0L - val currentUserEd25519KeyPair: KeyPair by lazy(LazyThreadSafetyMode.NONE) { + val currentUserEd25519KeyPair: KeyPair by lazy { requireNotNull(storage.getUserED25519KeyPair()) { "No current user ED25519 key pair available" } @@ -524,7 +524,7 @@ class ReceivedMessageProcessor @Inject constructor( val currentUserPublicKey: String get() = currentUserId.hexString - val contactConfigTimestamp: Long by lazy(LazyThreadSafetyMode.NONE) { + val contactConfigTimestamp: Long by lazy { configFactory.getConfigTimestamp(UserConfigType.CONTACTS, currentUserPublicKey) } diff --git a/app/src/main/java/org/session/libsession/snode/model/MessageResponses.kt b/app/src/main/java/org/session/libsession/snode/model/MessageResponses.kt index 2c7b6f6d7e..35ec0f25cf 100644 --- a/app/src/main/java/org/session/libsession/snode/model/MessageResponses.kt +++ b/app/src/main/java/org/session/libsession/snode/model/MessageResponses.kt @@ -34,7 +34,7 @@ data class RetrieveMessageResponse( @SerialName("data") val dataB64: String? = null, ) { - val data: ByteArray by lazy(LazyThreadSafetyMode.NONE) { + val data: ByteArray by lazy { Base64.decode(dataB64, Base64.DEFAULT) } diff --git a/app/src/main/java/org/session/libsession/utilities/Address.kt b/app/src/main/java/org/session/libsession/utilities/Address.kt index f94c823de4..0b72327c7d 100644 --- a/app/src/main/java/org/session/libsession/utilities/Address.kt +++ b/app/src/main/java/org/session/libsession/utilities/Address.kt @@ -8,10 +8,9 @@ import kotlinx.serialization.Serializable import org.session.libsession.messaging.open_groups.OpenGroup import org.session.libsignal.utilities.AccountId import org.session.libsignal.utilities.IdPrefix +import org.session.libsignal.utilities.Log import org.session.libsignal.utilities.Util import java.util.LinkedList -import org.session.libsignal.utilities.Log -import kotlin.text.startsWith @Serializable(with = AddressSerializer::class) sealed interface Address : Parcelable, Comparable
{ @@ -81,7 +80,7 @@ sealed interface Address : Parcelable, Comparable { } data class LegacyGroup(val groupPublicKeyHex: String) : Conversable, GroupLike { - override val address: String by lazy(LazyThreadSafetyMode.NONE) { + override val address: String by lazy { GroupUtil.doubleEncodeGroupID(groupPublicKeyHex) } @@ -101,7 +100,7 @@ sealed interface Address : Parcelable, Comparable { override val accountId: AccountId get() = blindedId.blindedId - override val address: String by lazy(LazyThreadSafetyMode.NONE) { + override val address: String by lazy { "${URI_PREFIX}${blindedId.blindedId.hexString}" .toUri() .buildUpon() @@ -136,7 +135,7 @@ sealed interface Address : Parcelable, Comparable { } } - override val address: String by lazy(LazyThreadSafetyMode.NONE) { + override val address: String by lazy { "${URI_PREFIX}${Uri.encode(serverUrl)}" .toUri() .buildUpon() diff --git a/app/src/main/java/org/thoughtcrime/securesms/auth/LoggedInState.kt b/app/src/main/java/org/thoughtcrime/securesms/auth/LoggedInState.kt index 539ac1113b..79c332d4cb 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/auth/LoggedInState.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/auth/LoggedInState.kt @@ -42,23 +42,23 @@ data class LoggedInState( } } - private val paddedSeed: ByteArray by lazy(LazyThreadSafetyMode.NONE) { + private val paddedSeed: ByteArray by lazy { seed.data + ByteArray(16) } - val accountEd25519KeyPair: KeyPair by lazy(LazyThreadSafetyMode.NONE) { + val accountEd25519KeyPair: KeyPair by lazy { ED25519.generate(paddedSeed) } - val accountX25519KeyPair: KeyPair by lazy(LazyThreadSafetyMode.NONE) { + val accountX25519KeyPair: KeyPair by lazy { Curve25519.fromED25519(accountEd25519KeyPair) } - val accountId: AccountId by lazy(LazyThreadSafetyMode.NONE) { + val accountId: AccountId by lazy { AccountId(IdPrefix.STANDARD, accountX25519KeyPair.pubKey.data) } - val proMasterPrivateKey: ByteArray by lazy(LazyThreadSafetyMode.NONE) { + val proMasterPrivateKey: ByteArray by lazy { ED25519.generateProMasterKey(paddedSeed) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/pro/FetchProDetailsWorker.kt b/app/src/main/java/org/thoughtcrime/securesms/pro/FetchProDetailsWorker.kt index 3df0e146d3..2140886556 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/pro/FetchProDetailsWorker.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/pro/FetchProDetailsWorker.kt @@ -20,6 +20,7 @@ import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.mapNotNull import org.session.libsession.snode.SnodeClock import org.session.libsession.utilities.ConfigFactoryProtocol +import org.session.libsession.utilities.TextSecurePreferences import org.session.libsignal.exceptions.NonRetryableException import org.session.libsignal.utilities.Log import org.thoughtcrime.securesms.auth.LoginStateRepository @@ -48,8 +49,14 @@ class FetchProDetailsWorker @AssistedInject constructor( private val loginStateRepository: LoginStateRepository, private val snodeClock: SnodeClock, private val configFactory: ConfigFactoryProtocol, + private val prefs: TextSecurePreferences, ) : CoroutineWorker(context, params) { override suspend fun doWork(): Result { + if (!prefs.forcePostPro()) { + Log.d(TAG, "Pro details fetch skipped because pro is not enabled") + return Result.success() + } + val proMasterKey = requireNotNull(loginStateRepository.peekLoginState()?.seeded?.proMasterPrivateKey) { "User must be logged in to fetch pro details" diff --git a/app/src/main/java/org/thoughtcrime/securesms/pro/ProDetailsRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/pro/ProDetailsRepository.kt index c674d04cbc..97a52d7844 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/pro/ProDetailsRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/pro/ProDetailsRepository.kt @@ -12,6 +12,7 @@ import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.onStart import kotlinx.coroutines.flow.stateIn import org.session.libsession.snode.SnodeClock +import org.session.libsession.utilities.TextSecurePreferences import org.session.libsignal.utilities.Log import org.thoughtcrime.securesms.auth.LoginStateRepository import org.thoughtcrime.securesms.debugmenu.DebugLogGroup @@ -29,6 +30,7 @@ class ProDetailsRepository @Inject constructor( private val snodeClock: SnodeClock, @ManagerScope scope: CoroutineScope, loginStateRepository: LoginStateRepository, + private val prefs: TextSecurePreferences, ) { sealed interface LoadState { val lastUpdated: Pair