yandex user info repository
This commit is contained in:
@@ -0,0 +1,31 @@
|
||||
package com.github.nullptroma.wallenc.data.db.app.repository
|
||||
|
||||
import com.github.nullptroma.wallenc.data.db.app.dao.YandexAccountDao
|
||||
import com.github.nullptroma.wallenc.data.db.app.model.DbYandexAccount
|
||||
import kotlinx.coroutines.CoroutineDispatcher
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.coroutines.withContext
|
||||
|
||||
class YandexAccountRepository(
|
||||
private val dao: YandexAccountDao,
|
||||
private val ioDispatcher: CoroutineDispatcher
|
||||
) {
|
||||
fun observeAll(): Flow<List<DbYandexAccount>> = dao.observeAll()
|
||||
|
||||
suspend fun getByYandexUserId(id: String): DbYandexAccount? = withContext(ioDispatcher) {
|
||||
dao.getByYandexUserId(id)
|
||||
}
|
||||
|
||||
suspend fun insert(account: DbYandexAccount) = withContext(ioDispatcher) {
|
||||
dao.insert(account)
|
||||
}
|
||||
|
||||
suspend fun updateCredentials(vaultUuid: String, email: String, token: String) =
|
||||
withContext(ioDispatcher) {
|
||||
dao.updateCredentials(vaultUuid, email, token)
|
||||
}
|
||||
|
||||
suspend fun deleteByVaultUuid(vaultUuid: String) = withContext(ioDispatcher) {
|
||||
dao.deleteByVaultUuid(vaultUuid)
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.github.nullptroma.wallenc.data.network
|
||||
package com.github.nullptroma.wallenc.data.network.yandexuserinfo
|
||||
|
||||
import retrofit2.http.GET
|
||||
import retrofit2.http.Header
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.github.nullptroma.wallenc.data.network
|
||||
package com.github.nullptroma.wallenc.data.network.yandexuserinfo
|
||||
|
||||
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
|
||||
import retrofit2.Retrofit
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.github.nullptroma.wallenc.data.network
|
||||
package com.github.nullptroma.wallenc.data.network.yandexuserinfo
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonIgnoreProperties
|
||||
import com.fasterxml.jackson.annotation.JsonProperty
|
||||
@@ -7,5 +7,5 @@ import com.fasterxml.jackson.annotation.JsonProperty
|
||||
data class YandexUserInfoDto(
|
||||
val id: String,
|
||||
val login: String,
|
||||
@JsonProperty("default_email") val defaultEmail: String? = null,
|
||||
@param:JsonProperty("default_email") val defaultEmail: String? = null,
|
||||
)
|
||||
@@ -0,0 +1,15 @@
|
||||
package com.github.nullptroma.wallenc.data.network.yandexuserinfo.repository
|
||||
|
||||
import com.github.nullptroma.wallenc.data.network.yandexuserinfo.YandexUserInfoApi
|
||||
import com.github.nullptroma.wallenc.data.network.yandexuserinfo.YandexUserInfoDto
|
||||
import kotlinx.coroutines.CoroutineDispatcher
|
||||
import kotlinx.coroutines.withContext
|
||||
|
||||
class YandexUserInfoRepository(
|
||||
private val api: YandexUserInfoApi,
|
||||
private val ioDispatcher: CoroutineDispatcher
|
||||
) {
|
||||
suspend fun userInfo(accessToken: String): YandexUserInfoDto = withContext(ioDispatcher) {
|
||||
api.userInfo(format = "json", authorization = "OAuth $accessToken")
|
||||
}
|
||||
}
|
||||
@@ -1,10 +1,10 @@
|
||||
package com.github.nullptroma.wallenc.data.vaults
|
||||
|
||||
import android.content.Context
|
||||
import com.github.nullptroma.wallenc.data.db.app.dao.YandexAccountDao
|
||||
import com.github.nullptroma.wallenc.data.db.app.model.DbYandexAccount
|
||||
import com.github.nullptroma.wallenc.data.db.app.repository.StorageKeyMapRepository
|
||||
import com.github.nullptroma.wallenc.data.network.YandexUserInfoApi
|
||||
import com.github.nullptroma.wallenc.data.db.app.repository.YandexAccountRepository
|
||||
import com.github.nullptroma.wallenc.data.network.yandexuserinfo.repository.YandexUserInfoRepository
|
||||
import com.github.nullptroma.wallenc.data.storages.UnlockManager
|
||||
import com.github.nullptroma.wallenc.domain.interfaces.IStorage
|
||||
import com.github.nullptroma.wallenc.domain.interfaces.IUnlockManager
|
||||
@@ -24,8 +24,8 @@ class VaultsManager(
|
||||
private val ioDispatcher: CoroutineDispatcher,
|
||||
context: Context,
|
||||
keyRepo: StorageKeyMapRepository,
|
||||
private val yandexAccountDao: YandexAccountDao,
|
||||
private val yandexUserInfoApi: YandexUserInfoApi,
|
||||
private val yandexAccountRepository: YandexAccountRepository,
|
||||
private val yandexUserInfoRepository: YandexUserInfoRepository,
|
||||
) : IVaultsManager {
|
||||
private val scope = CoroutineScope(SupervisorJob() + ioDispatcher)
|
||||
|
||||
@@ -40,7 +40,7 @@ class VaultsManager(
|
||||
vaultsManager = this
|
||||
)
|
||||
|
||||
private val _remoteVaults = yandexAccountDao.observeAll()
|
||||
private val _remoteVaults = yandexAccountRepository.observeAll()
|
||||
.map { rows ->
|
||||
rows.map { row ->
|
||||
YandexVault(
|
||||
@@ -59,15 +59,15 @@ class VaultsManager(
|
||||
.stateIn(scope, SharingStarted.Eagerly, listOf(localVault))
|
||||
|
||||
override suspend fun addYandexVault(accessToken: String) = withContext(ioDispatcher) {
|
||||
val info = yandexUserInfoApi.userInfo("json", "OAuth $accessToken")
|
||||
val info = yandexUserInfoRepository.userInfo(accessToken)
|
||||
val email = info.defaultEmail?.takeIf { it.isNotBlank() }
|
||||
?: "${info.login}@yandex.ru"
|
||||
val existing = yandexAccountDao.getByYandexUserId(info.id)
|
||||
val existing = yandexAccountRepository.getByYandexUserId(info.id)
|
||||
val vaultUuid = existing?.vaultUuid ?: UUID.randomUUID().toString()
|
||||
if (existing != null) {
|
||||
yandexAccountDao.updateCredentials(vaultUuid, email, accessToken)
|
||||
yandexAccountRepository.updateCredentials(vaultUuid, email, accessToken)
|
||||
} else {
|
||||
yandexAccountDao.insert(
|
||||
yandexAccountRepository.insert(
|
||||
DbYandexAccount(
|
||||
vaultUuid = vaultUuid,
|
||||
yandexUserId = info.id,
|
||||
@@ -79,6 +79,6 @@ class VaultsManager(
|
||||
}
|
||||
|
||||
override suspend fun removeRemoteVault(vaultUuid: UUID) = withContext(ioDispatcher) {
|
||||
yandexAccountDao.deleteByVaultUuid(vaultUuid.toString())
|
||||
yandexAccountRepository.deleteByVaultUuid(vaultUuid.toString())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,7 +14,7 @@ import java.util.UUID
|
||||
class YandexVault(
|
||||
override val uuid: UUID,
|
||||
override val accountEmail: String,
|
||||
@Suppress("unused") val oauthToken: String,
|
||||
val oauthToken: String,
|
||||
) : IYandexVault {
|
||||
override val type: VaultType = VaultType.YANDEX
|
||||
|
||||
|
||||
Reference in New Issue
Block a user