Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Core
Submodule Core updated 52 files
+1 −0 AGENTS.md
+3 −0 Auth/build.gradle.kts
+24 −0 Auth/src/fdroid/kotlin/com/infomaniak/core/auth/backup/BlockStoreBackup.kt
+0 −4 Auth/src/main/kotlin/com/infomaniak/core/auth/BaseCredentialManager.kt
+82 −0 Auth/src/main/kotlin/com/infomaniak/core/auth/backup/BlockStoreCredentialsBackup.kt
+38 −4 Auth/src/main/kotlin/com/infomaniak/core/auth/backup/RestoreFromBackupManagerImpl.kt
+4 −1 Auth/src/main/kotlin/com/infomaniak/core/auth/room/UserDao.kt
+120 −0 Auth/src/standard/kotlin/com/infomaniak/core/auth/backup/BlockStoreBackup.kt
+8 −1 Auth/src/test/java/com/infomaniak/core/auth/BaseAccountUtilsTest.kt
+3 −0 Common/src/main/res/values-da/strings.xml
+3 −0 Common/src/main/res/values-de/strings.xml
+3 −0 Common/src/main/res/values-el/strings.xml
+3 −0 Common/src/main/res/values-es/strings.xml
+3 −0 Common/src/main/res/values-fi/strings.xml
+3 −0 Common/src/main/res/values-fr/strings.xml
+3 −0 Common/src/main/res/values-it/strings.xml
+3 −0 Common/src/main/res/values-nb/strings.xml
+3 −0 Common/src/main/res/values-nl/strings.xml
+3 −0 Common/src/main/res/values-pl/strings.xml
+3 −0 Common/src/main/res/values-pt/strings.xml
+3 −0 Common/src/main/res/values-sv/strings.xml
+3 −0 Common/src/main/res/values/strings.xml
+3 −25 CrossAppLogin/Front/lint-baseline.xml
+3 −3 InAppUpdate/lint-baseline.xml
+2 −2 KSuite/KSuitePro/lint-baseline.xml
+61 −61 KSuite/MyKSuite/lint-baseline.xml
+1 −0 LICENSES.md
+3 −3 Onboarding/lint-baseline.xml
+6 −3 Sentry/src/main/kotlin/com/infomaniak/core/sentry/SentryConfig.kt
+4 −4 TwoFactorAuth/Front/lint-baseline.xml
+62 −0 Ui/Compose/Basics/src/main/kotlin/com/infomaniak/core/ui/compose/basics/ClipboardCopyManager.kt
+2 −2 Ui/Compose/BottomStickyButtonScaffolds/lint-baseline.xml
+2 −0 Ui/Compose/ContactCard/build.gradle.kts
+5 −4 Ui/Compose/ContactCard/src/main/kotlin/com/infomaniak/core/ui/compose/contactcard/ContactCardShareExt.kt
+5 −5 Ui/Compose/ContactCard/src/main/kotlin/com/infomaniak/core/ui/compose/contactcard/ContactCardViewModel.kt
+2 −1 ...ntactCard/src/main/kotlin/com/infomaniak/core/ui/compose/contactcard/component/PreviewActionsBottomSheet.kt
+0 −1 Ui/Compose/ContactCard/src/main/res/values-da/strings.xml
+0 −1 Ui/Compose/ContactCard/src/main/res/values-de/strings.xml
+0 −1 Ui/Compose/ContactCard/src/main/res/values-el/strings.xml
+0 −1 Ui/Compose/ContactCard/src/main/res/values-es/strings.xml
+0 −1 Ui/Compose/ContactCard/src/main/res/values-fi/strings.xml
+0 −1 Ui/Compose/ContactCard/src/main/res/values-fr/strings.xml
+0 −1 Ui/Compose/ContactCard/src/main/res/values-it/strings.xml
+0 −1 Ui/Compose/ContactCard/src/main/res/values-nb/strings.xml
+0 −1 Ui/Compose/ContactCard/src/main/res/values-nl/strings.xml
+0 −1 Ui/Compose/ContactCard/src/main/res/values-pl/strings.xml
+0 −1 Ui/Compose/ContactCard/src/main/res/values-pt/strings.xml
+0 −1 Ui/Compose/ContactCard/src/main/res/values-sv/strings.xml
+0 −1 Ui/Compose/ContactCard/src/main/res/values/strings.xml
+34 −0 Ui/Compose/ContactCard/src/test/kotlin/com/infomaniak/core/ui/compose/contactcard/ContactCardShareExtTest.kt
+37 −0 Ui/Compose/Theme/src/main/kotlin/com/infomaniak/core/ui/compose/theme/MaterialPreviewTheme.kt
+3 −1 gradle/core.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -18,50 +18,24 @@
package com.infomaniak.auth.backup

import android.app.backup.FullBackupDataOutput
import androidx.room.immediateTransaction
import androidx.room.useWriterConnection
import com.infomaniak.core.auth.models.user.User
import com.infomaniak.core.auth.room.UserDatabase
import com.infomaniak.auth.BuildConfig
import com.infomaniak.auth.data.preferences.SentryPreferences
import com.infomaniak.core.auth.backup.withBlockStoreCredentialsBackup
import com.infomaniak.core.common.backup.FullBackupAgent
import com.infomaniak.core.sentry.SentryConfig.configureSentry
Comment thread
LouisCAD marked this conversation as resolved.
import kotlinx.coroutines.runBlocking

class AuthenticatorFullBackupAgent : FullBackupAgent(RestorationPolicy.AllBackedUpFiles) {

override fun onFullBackup(data: FullBackupDataOutput) {
val blockStoreBackupSucceeded = runBlocking { BlockStoreBackup.backupPasskeys() }
if (!blockStoreBackupSucceeded) return // Don't backup anything if we can't save the passkeys.

val db = UserDatabase()
// We don't want to keep tokens in the db for backup, so we remove them temporarily.
// Note that the app can perfectly recover from this state if the backup process is aborted, here's why:
// Authenticated API calls with an empty token will result in a 401 http status code,
// which will lead to the token being refreshed using the passkey.
val usersWithTokens = runBlocking { db.getUsersAndRemoveTokens() }
try {
super.onFullBackup(data)
} finally {
runBlocking { db.putTokensBack(usersWithTokens) }
}
}

private suspend fun UserDatabase.getUsersAndRemoveTokens(): List<User> = useWriterConnection { transactor ->
transactor.immediateTransaction {
userDao().allUsers().also { users ->
users.forEach { user ->
userDao().update(user = user.copy(apiToken = user.apiToken.copy(accessToken = "", refreshToken = null)))
}
}
}
override fun onCreate() {
super.onCreate()
val sentryPreferences = runBlocking { SentryPreferences() } // Non-user-facing process, runBlocking is fine.
configureSentry(isDebug = BuildConfig.DEBUG, isSentryTrackingEnabled = { sentryPreferences.isSentryAuthorized })
}

private suspend fun UserDatabase.putTokensBack(usersWithTokens: List<User>) {
useWriterConnection { transactor ->
transactor.immediateTransaction {
usersWithTokens.forEach { user ->
// We don't need the refreshToken even if it's there because we're using passkeys instead.
userDao().updateUserToken(user.id, user.apiToken.accessToken)
}
}
}
override fun onFullBackup(data: FullBackupDataOutput) = withBlockStoreCredentialsBackup(
backupCredentials = { BlockStoreBackup.backupPasskeys() }
) {
super.onFullBackup(data)
}
}
Loading