Skip to content
Open
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
Original file line number Diff line number Diff line change
Expand Up @@ -57,10 +57,10 @@ internal class AndroidAccountCredentialController(
},
)

fun accountRetentionSnapshot(): AndroidAccountRetentionSnapshot = readRegistryForCredentialLoad()
?.let { registry -> AndroidAccountRetentionSnapshot.Available(registry.accounts) }
?: AndroidAccountRetentionSnapshot.Unavailable
fun accountRetentionSnapshot(): AndroidAccountRetentionSnapshot =
readRegistryForCredentialLoad().asAccountRetentionSnapshot()

fun durableUploadAccountRegistry(): DurableUploadAccountRegistry = readCredentialFreeRegistry().asDurableRegistry()
fun activeAccountId(): NextcloudAccountId? = readCredentialFreeRegistry()?.activeAccountId

fun loadSession(accountId: NextcloudAccountId): NextcloudSession? =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -290,6 +290,7 @@ internal fun resolveStoredAndroidAccountSession(

internal const val ANDROID_ACCOUNT_SESSION_KEY = "encrypted_session"
internal const val ANDROID_ACCOUNT_REGISTRY_KEY = "account_registry_v1"
internal const val ANDROID_ACCOUNT_PREFERENCES_NAME = "nextcloud_native"
internal const val ANDROID_ACCOUNT_CREDENTIAL_SLOT_KEY_PREFIX = "account_credential_v1:"
internal const val ANDROID_QUARANTINED_SESSION_KEY = "encrypted_session_quarantine"
internal const val ANDROID_PENDING_ACCOUNT_REMOVAL_CLEANUP_KEY = "pending_account_removal_cleanup_v2"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package dev.obiente.nextcloudnative

import android.content.SharedPreferences
import dev.obiente.nextcloudnative.app.NextcloudAccountRegistry
import dev.obiente.nextcloudnative.app.NextcloudSession
import kotlinx.coroutines.CancellationException
import kotlinx.coroutines.NonCancellable
Expand All @@ -9,6 +11,27 @@ internal fun removeActiveAndroidAccountCredentialState(
state: AndroidAccountCredentialState,
): AndroidAccountCredentialState = state.registry.activeAccountId?.let(state::remove) ?: state

internal fun NextcloudAccountRegistry?.asDurableRegistry(): DurableUploadAccountRegistry =
this?.let { registry -> DurableUploadAccountRegistry.Available(registry.accounts) }
?: DurableUploadAccountRegistry.Unavailable

internal fun NextcloudAccountRegistry?.asAccountRetentionSnapshot(): AndroidAccountRetentionSnapshot =
this?.let { registry -> AndroidAccountRetentionSnapshot.Available(registry.accounts) }
?: AndroidAccountRetentionSnapshot.Unavailable

internal fun SharedPreferences.durableUploadAccountResolutionAvailable(): Boolean =
durableUploadAccountResolutionAvailable {
getString(ANDROID_ACCOUNT_REGISTRY_KEY, null)
}

internal fun durableUploadAccountResolutionAvailable(
readRegistry: () -> String?,
): Boolean = try {
androidCredentialFreeRegistryAllowsAccountResolution(readRegistry())
} catch (_: ClassCastException) {
false
}

internal suspend fun rollbackUnavailableAndroidAccountRemoval(
active: Boolean = false,
recovered: AndroidAccountCredentialState,
Expand Down
Loading
Loading