mirror of
https://github.com/oxen-io/session-android.git
synced 2025-04-02 11:52:18 +00:00
Fix version check
This commit is contained in:
parent
fc4bf6ff27
commit
7fa3d9f3ff
@ -86,7 +86,7 @@ import org.thoughtcrime.securesms.sskenvironment.ProfileManager;
|
|||||||
import org.thoughtcrime.securesms.sskenvironment.ReadReceiptManager;
|
import org.thoughtcrime.securesms.sskenvironment.ReadReceiptManager;
|
||||||
import org.thoughtcrime.securesms.sskenvironment.TypingStatusRepository;
|
import org.thoughtcrime.securesms.sskenvironment.TypingStatusRepository;
|
||||||
import org.thoughtcrime.securesms.util.Broadcaster;
|
import org.thoughtcrime.securesms.util.Broadcaster;
|
||||||
import org.thoughtcrime.securesms.util.VersionUtil;
|
import org.thoughtcrime.securesms.util.VersionDataFetcher;
|
||||||
import org.thoughtcrime.securesms.util.dynamiclanguage.LocaleParseHelper;
|
import org.thoughtcrime.securesms.util.dynamiclanguage.LocaleParseHelper;
|
||||||
import org.thoughtcrime.securesms.webrtc.CallMessageProcessor;
|
import org.thoughtcrime.securesms.webrtc.CallMessageProcessor;
|
||||||
import org.webrtc.PeerConnectionFactory;
|
import org.webrtc.PeerConnectionFactory;
|
||||||
@ -111,7 +111,6 @@ import javax.inject.Inject;
|
|||||||
import dagger.hilt.EntryPoints;
|
import dagger.hilt.EntryPoints;
|
||||||
import dagger.hilt.android.HiltAndroidApp;
|
import dagger.hilt.android.HiltAndroidApp;
|
||||||
import kotlin.Unit;
|
import kotlin.Unit;
|
||||||
import kotlinx.coroutines.Job;
|
|
||||||
import network.loki.messenger.BuildConfig;
|
import network.loki.messenger.BuildConfig;
|
||||||
import network.loki.messenger.libsession_util.ConfigBase;
|
import network.loki.messenger.libsession_util.ConfigBase;
|
||||||
import network.loki.messenger.libsession_util.UserProfile;
|
import network.loki.messenger.libsession_util.UserProfile;
|
||||||
@ -143,7 +142,6 @@ public class ApplicationContext extends Application implements DefaultLifecycleO
|
|||||||
private HandlerThread conversationListHandlerThread;
|
private HandlerThread conversationListHandlerThread;
|
||||||
private Handler conversationListHandler;
|
private Handler conversationListHandler;
|
||||||
private PersistentLogger persistentLogger;
|
private PersistentLogger persistentLogger;
|
||||||
private VersionUtil versionUtil;
|
|
||||||
|
|
||||||
@Inject LokiAPIDatabase lokiAPIDatabase;
|
@Inject LokiAPIDatabase lokiAPIDatabase;
|
||||||
@Inject public Storage storage;
|
@Inject public Storage storage;
|
||||||
@ -153,6 +151,7 @@ public class ApplicationContext extends Application implements DefaultLifecycleO
|
|||||||
@Inject PushRegistry pushRegistry;
|
@Inject PushRegistry pushRegistry;
|
||||||
@Inject ConfigFactory configFactory;
|
@Inject ConfigFactory configFactory;
|
||||||
@Inject LastSentTimestampCache lastSentTimestampCache;
|
@Inject LastSentTimestampCache lastSentTimestampCache;
|
||||||
|
@Inject VersionDataFetcher versionDataFetcher;
|
||||||
CallMessageProcessor callMessageProcessor;
|
CallMessageProcessor callMessageProcessor;
|
||||||
MessagingModuleConfiguration messagingModuleConfiguration;
|
MessagingModuleConfiguration messagingModuleConfiguration;
|
||||||
|
|
||||||
@ -250,7 +249,6 @@ public class ApplicationContext extends Application implements DefaultLifecycleO
|
|||||||
resubmitProfilePictureIfNeeded();
|
resubmitProfilePictureIfNeeded();
|
||||||
loadEmojiSearchIndexIfNeeded();
|
loadEmojiSearchIndexIfNeeded();
|
||||||
EmojiSource.refresh();
|
EmojiSource.refresh();
|
||||||
versionUtil = new VersionUtil(textSecurePreferences);
|
|
||||||
|
|
||||||
NetworkConstraint networkConstraint = new NetworkConstraint.Factory(this).create();
|
NetworkConstraint networkConstraint = new NetworkConstraint.Factory(this).create();
|
||||||
HTTP.INSTANCE.setConnectedToNetwork(networkConstraint::isMet);
|
HTTP.INSTANCE.setConnectedToNetwork(networkConstraint::isMet);
|
||||||
@ -279,7 +277,7 @@ public class ApplicationContext extends Application implements DefaultLifecycleO
|
|||||||
});
|
});
|
||||||
|
|
||||||
// fetch last version data
|
// fetch last version data
|
||||||
versionUtil.startTimedVersionCheck();
|
versionDataFetcher.startTimedVersionCheck();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -292,14 +290,14 @@ public class ApplicationContext extends Application implements DefaultLifecycleO
|
|||||||
poller.stopIfNeeded();
|
poller.stopIfNeeded();
|
||||||
}
|
}
|
||||||
ClosedGroupPollerV2.getShared().stopAll();
|
ClosedGroupPollerV2.getShared().stopAll();
|
||||||
versionUtil.stopTimedVersionCheck();
|
versionDataFetcher.stopTimedVersionCheck();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onTerminate() {
|
public void onTerminate() {
|
||||||
stopKovenant(); // Loki
|
stopKovenant(); // Loki
|
||||||
OpenGroupManager.INSTANCE.stopPolling();
|
OpenGroupManager.INSTANCE.stopPolling();
|
||||||
versionUtil.clear();
|
versionDataFetcher.clear();
|
||||||
super.onTerminate();
|
super.onTerminate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8,6 +8,7 @@ import org.session.libsignal.utilities.KeyHelper
|
|||||||
import org.session.libsignal.utilities.hexEncodedPublicKey
|
import org.session.libsignal.utilities.hexEncodedPublicKey
|
||||||
import org.thoughtcrime.securesms.crypto.KeyPairUtilities
|
import org.thoughtcrime.securesms.crypto.KeyPairUtilities
|
||||||
import org.thoughtcrime.securesms.dependencies.ConfigFactory
|
import org.thoughtcrime.securesms.dependencies.ConfigFactory
|
||||||
|
import org.thoughtcrime.securesms.util.VersionDataFetcher
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
import javax.inject.Singleton
|
import javax.inject.Singleton
|
||||||
|
|
||||||
@ -16,6 +17,7 @@ class CreateAccountManager @Inject constructor(
|
|||||||
private val application: Application,
|
private val application: Application,
|
||||||
private val prefs: TextSecurePreferences,
|
private val prefs: TextSecurePreferences,
|
||||||
private val configFactory: ConfigFactory,
|
private val configFactory: ConfigFactory,
|
||||||
|
private val versionDataFetcher: VersionDataFetcher
|
||||||
) {
|
) {
|
||||||
private val database: LokiAPIDatabaseProtocol
|
private val database: LokiAPIDatabaseProtocol
|
||||||
get() = SnodeModule.shared.storage
|
get() = SnodeModule.shared.storage
|
||||||
@ -41,5 +43,7 @@ class CreateAccountManager @Inject constructor(
|
|||||||
prefs.setLocalRegistrationId(registrationID)
|
prefs.setLocalRegistrationId(registrationID)
|
||||||
prefs.setLocalNumber(userHexEncodedPublicKey)
|
prefs.setLocalNumber(userHexEncodedPublicKey)
|
||||||
prefs.setRestorationTime(0)
|
prefs.setRestorationTime(0)
|
||||||
|
|
||||||
|
versionDataFetcher.startTimedVersionCheck()
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -12,6 +12,7 @@ import org.session.libsignal.utilities.hexEncodedPublicKey
|
|||||||
import org.thoughtcrime.securesms.ApplicationContext
|
import org.thoughtcrime.securesms.ApplicationContext
|
||||||
import org.thoughtcrime.securesms.crypto.KeyPairUtilities
|
import org.thoughtcrime.securesms.crypto.KeyPairUtilities
|
||||||
import org.thoughtcrime.securesms.dependencies.ConfigFactory
|
import org.thoughtcrime.securesms.dependencies.ConfigFactory
|
||||||
|
import org.thoughtcrime.securesms.util.VersionDataFetcher
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
import javax.inject.Singleton
|
import javax.inject.Singleton
|
||||||
|
|
||||||
@ -19,7 +20,8 @@ import javax.inject.Singleton
|
|||||||
class LoadAccountManager @Inject constructor(
|
class LoadAccountManager @Inject constructor(
|
||||||
@dagger.hilt.android.qualifiers.ApplicationContext private val context: Context,
|
@dagger.hilt.android.qualifiers.ApplicationContext private val context: Context,
|
||||||
private val configFactory: ConfigFactory,
|
private val configFactory: ConfigFactory,
|
||||||
private val prefs: TextSecurePreferences
|
private val prefs: TextSecurePreferences,
|
||||||
|
private val versionDataFetcher: VersionDataFetcher
|
||||||
) {
|
) {
|
||||||
private val database: LokiAPIDatabaseProtocol
|
private val database: LokiAPIDatabaseProtocol
|
||||||
get() = SnodeModule.shared.storage
|
get() = SnodeModule.shared.storage
|
||||||
@ -52,6 +54,8 @@ class LoadAccountManager @Inject constructor(
|
|||||||
setHasViewedSeed(true)
|
setHasViewedSeed(true)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
versionDataFetcher.startTimedVersionCheck()
|
||||||
|
|
||||||
ApplicationContext.getInstance(context).retrieveUserProfile()
|
ApplicationContext.getInstance(context).retrieveUserProfile()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,33 +4,36 @@ import android.os.Handler
|
|||||||
import android.os.Looper
|
import android.os.Looper
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.Job
|
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import org.session.libsession.messaging.file_server.FileServerApi
|
import org.session.libsession.messaging.file_server.FileServerApi
|
||||||
import org.session.libsession.utilities.TextSecurePreferences
|
import org.session.libsession.utilities.TextSecurePreferences
|
||||||
import org.session.libsignal.utilities.Log
|
import org.session.libsignal.utilities.Log
|
||||||
import java.util.concurrent.TimeUnit
|
import javax.inject.Inject
|
||||||
|
import javax.inject.Singleton
|
||||||
|
import kotlin.time.Duration.Companion.hours
|
||||||
|
|
||||||
class VersionUtil(
|
private val TAG: String = VersionDataFetcher::class.java.simpleName
|
||||||
|
private val REFRESH_TIME_MS = 4.hours.inWholeMilliseconds
|
||||||
|
|
||||||
|
@Singleton
|
||||||
|
class VersionDataFetcher @Inject constructor(
|
||||||
private val prefs: TextSecurePreferences
|
private val prefs: TextSecurePreferences
|
||||||
) {
|
) {
|
||||||
private val TAG: String = VersionUtil::class.java.simpleName
|
|
||||||
private val FOUR_HOURS: Long = TimeUnit.HOURS.toMillis(4)
|
|
||||||
|
|
||||||
private val handler = Handler(Looper.getMainLooper())
|
private val handler = Handler(Looper.getMainLooper())
|
||||||
private val runnable: Runnable
|
private val runnable = Runnable {
|
||||||
|
fetchVersionData()
|
||||||
|
}
|
||||||
|
|
||||||
private val scope = CoroutineScope(Dispatchers.Default)
|
private val scope = CoroutineScope(Dispatchers.Default)
|
||||||
private var job: Job? = null
|
|
||||||
|
|
||||||
init {
|
|
||||||
runnable = Runnable {
|
|
||||||
fetchAndScheduleNextVersionCheck()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun startTimedVersionCheck() {
|
fun startTimedVersionCheck() {
|
||||||
handler.post(runnable)
|
stopTimedVersionCheck()
|
||||||
|
|
||||||
|
// Call immediately if 4h or more has elapsed since the last successful check else schedule.
|
||||||
|
handler.postDelayed(
|
||||||
|
runnable,
|
||||||
|
REFRESH_TIME_MS + prefs.getLastVersionCheck() - System.currentTimeMillis()
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun stopTimedVersionCheck() {
|
fun stopTimedVersionCheck() {
|
||||||
@ -38,31 +41,22 @@ class VersionUtil(
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun clear() {
|
fun clear() {
|
||||||
job?.cancel()
|
|
||||||
stopTimedVersionCheck()
|
stopTimedVersionCheck()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun fetchAndScheduleNextVersionCheck() {
|
|
||||||
fetchVersionData()
|
|
||||||
handler.postDelayed(runnable, FOUR_HOURS)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun fetchVersionData() {
|
private fun fetchVersionData() {
|
||||||
// only perform this if at least 4h has elapsed since th last successful check
|
scope.launch {
|
||||||
val lastCheck = System.currentTimeMillis() - prefs.getLastVersionCheck()
|
|
||||||
if (lastCheck < FOUR_HOURS) return
|
|
||||||
|
|
||||||
job?.cancel()
|
|
||||||
job = scope.launch {
|
|
||||||
try {
|
try {
|
||||||
// perform the version check
|
// Perform the version check
|
||||||
val clientVersion = FileServerApi.getClientVersion()
|
val clientVersion = FileServerApi.getClientVersion()
|
||||||
Log.i(TAG, "Fetched version data: $clientVersion")
|
Log.i(TAG, "Fetched version data: $clientVersion")
|
||||||
prefs.setLastVersionCheck()
|
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
// we can silently ignore the error
|
// We can silently ignore the error
|
||||||
Log.e(TAG, "Error fetching version data: $e")
|
Log.e(TAG, "Error fetching version data", e)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
prefs.setLastVersionCheck()
|
||||||
|
startTimedVersionCheck()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -16,7 +16,7 @@ import org.session.libsignal.utilities.HTTP
|
|||||||
import org.session.libsignal.utilities.JsonUtil
|
import org.session.libsignal.utilities.JsonUtil
|
||||||
import org.session.libsignal.utilities.Log
|
import org.session.libsignal.utilities.Log
|
||||||
import org.session.libsignal.utilities.toHexString
|
import org.session.libsignal.utilities.toHexString
|
||||||
import java.util.concurrent.TimeUnit
|
import kotlin.time.Duration.Companion.milliseconds
|
||||||
|
|
||||||
object FileServerApi {
|
object FileServerApi {
|
||||||
|
|
||||||
@ -127,7 +127,7 @@ object FileServerApi {
|
|||||||
?: throw (Error.NoEd25519KeyPair)
|
?: throw (Error.NoEd25519KeyPair)
|
||||||
|
|
||||||
val blindedKeys = BlindKeyAPI.blindVersionKeyPair(secretKey)
|
val blindedKeys = BlindKeyAPI.blindVersionKeyPair(secretKey)
|
||||||
val timestamp = TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis()) // The current timestamp in seconds
|
val timestamp = System.currentTimeMillis().milliseconds.inWholeSeconds // The current timestamp in seconds
|
||||||
val signature = BlindKeyAPI.blindVersionSign(secretKey, timestamp)
|
val signature = BlindKeyAPI.blindVersionSign(secretKey, timestamp)
|
||||||
|
|
||||||
// The hex encoded version-blinded public key with a 07 prefix
|
// The hex encoded version-blinded public key with a 07 prefix
|
||||||
|
Loading…
x
Reference in New Issue
Block a user