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
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ package com.infomaniak.auth.di
import android.content.Context
import com.infomaniak.auth.BuildConfig
import com.infomaniak.auth.lib.AuthenticatorFacade
import com.infomaniak.auth.lib.models.migration.user.UserProfile
import com.infomaniak.auth.lib.models.migration.user.SharedUserProfile
import com.infomaniak.auth.lib.network.interfaces.AuthenticatorBridge
import com.infomaniak.auth.lib.network.interfaces.BreadcrumbType
import com.infomaniak.auth.lib.network.interfaces.CrashReportInterface
Expand Down Expand Up @@ -52,7 +52,7 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.flow.transform
import javax.inject.Singleton
import com.infomaniak.auth.lib.models.migration.ApiToken as MigrationApiToken
import com.infomaniak.auth.lib.models.migration.SharedApiToken as MigrationApiToken
import com.infomaniak.lib.login.ApiToken as LoginApiToken

@Module
Expand Down Expand Up @@ -205,7 +205,7 @@ object ApplicationModule {
)
}

override suspend fun persistUserProfile(userProfile: UserProfile) {
override suspend fun persistUserProfile(userProfile: SharedUserProfile) {
accountUtils.addUser(userProfile.toUser())
}
}
Expand Down
30 changes: 15 additions & 15 deletions app/src/main/kotlin/com/infomaniak/auth/utils/MigrationUtils.kt
Original file line number Diff line number Diff line change
Expand Up @@ -17,16 +17,16 @@
*/
package com.infomaniak.auth.utils

import com.infomaniak.auth.lib.models.migration.user.UserProfile
import com.infomaniak.auth.lib.models.migration.user.preferences.Country
import com.infomaniak.auth.lib.models.migration.user.preferences.Language
import com.infomaniak.auth.lib.models.migration.user.preferences.OrganizationPreference
import com.infomaniak.auth.lib.models.migration.user.SharedUserProfile
import com.infomaniak.auth.lib.models.migration.user.preferences.SharedCountry
import com.infomaniak.auth.lib.models.migration.user.preferences.SharedLanguage
import com.infomaniak.auth.lib.models.migration.user.preferences.SharedOrganizationPreference
import com.infomaniak.auth.lib.models.migration.user.preferences.Preferences
import com.infomaniak.auth.lib.models.migration.user.preferences.TimeZone
import com.infomaniak.auth.lib.models.migration.user.preferences.security.AuthDevices
import com.infomaniak.auth.lib.models.migration.user.preferences.security.Security
import com.infomaniak.auth.lib.models.migration.user.preferences.SharedTimeZone
import com.infomaniak.auth.lib.models.migration.user.preferences.security.SharedAuthDevices
import com.infomaniak.auth.lib.models.migration.user.preferences.security.SharedSecurity
import com.infomaniak.core.auth.models.user.User
import com.infomaniak.auth.lib.models.migration.ApiToken as MigrationApiToken
import com.infomaniak.auth.lib.models.migration.SharedApiToken as MigrationApiToken
import com.infomaniak.core.auth.models.user.preferences.Country as CoreCountry
import com.infomaniak.core.auth.models.user.preferences.Language as CoreLanguage
import com.infomaniak.core.auth.models.user.preferences.OrganizationPreference as CoreOrganizationPreference
Expand All @@ -44,7 +44,7 @@ fun LoginApiToken.toMigrationApiToken(): MigrationApiToken {
)
}

fun UserProfile.toUser(): User {
fun SharedUserProfile.toUser(): User {
return User(
id = id,
displayName = displayName,
Expand All @@ -67,27 +67,27 @@ private fun Preferences.toCorePreferences() = CorePreferences(
timezone = timezone?.toCoreTimeZone(),
)

private fun Language.toCoreLanguage() = CoreLanguage(
private fun SharedLanguage.toCoreLanguage() = CoreLanguage(
shortName = shortName,
locale = locale,
shortLocale = shortLocale,
)

private fun Country.toCoreCountry() = CoreCountry(
private fun SharedCountry.toCoreCountry() = CoreCountry(
shortName = shortName,
isEnabled = isEnabled,
)

private fun TimeZone.toCoreTimeZone() = CoreTimeZone(
private fun SharedTimeZone.toCoreTimeZone() = CoreTimeZone(
gmt = gmt,
)

private fun OrganizationPreference.toCoreOrganizationPreference() = CoreOrganizationPreference(
private fun SharedOrganizationPreference.toCoreOrganizationPreference() = CoreOrganizationPreference(
currentOrganizationId = currentOrganizationId,
lastLoginAt = lastLoginAt,
)

private fun Security.toCoreSecurity() = CoreSecurity(
private fun SharedSecurity.toCoreSecurity() = CoreSecurity(
score = score,
hasRecoveryEmail = hasRecoveryEmail,
hasValidPhone = hasValidPhone,
Expand All @@ -105,7 +105,7 @@ private fun Security.toCoreSecurity() = CoreSecurity(
authDevices = authDevices?.mapTo(ArrayList()) { it.toCoreAuthDevices() },
)

private fun AuthDevices.toCoreAuthDevices() = CoreAuthDevices(
private fun SharedAuthDevices.toCoreAuthDevices() = CoreAuthDevices(
id = id,
name = name,
lastConnexion = lastConnexion ?: 0L,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,10 @@
*/
package com.infomaniak.auth.lib.internal

import com.infomaniak.auth.lib.models.migration.ApiToken
import com.infomaniak.auth.lib.models.migration.SharedApiToken

internal sealed interface MigrationAuthentication {
data class CrossAppLogin(val derivedToken: ApiToken) : MigrationAuthentication
data class CrossAppLogin(val derivedToken: SharedApiToken) : MigrationAuthentication
data class NoOngoingLogin(val password: String) : MigrationAuthentication
data object OngoingLogin : MigrationAuthentication
}
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ import com.infomaniak.auth.lib.internal.repositories.AccountsRepository
import com.infomaniak.auth.lib.internal.repositories.WebAuthnRepository
import com.infomaniak.auth.lib.internal.utils.SignUtils
import com.infomaniak.auth.lib.internal.utils.Xor
import com.infomaniak.auth.lib.models.migration.ApiToken
import com.infomaniak.auth.lib.models.migration.SharedApiToken
import io.ktor.utils.io.core.toByteArray
import kotlinx.serialization.json.Json
import okio.ByteString.Companion.toByteString
Expand Down Expand Up @@ -74,7 +74,7 @@ internal class AuthenticatorManager(
clientId: String,
userId: Long,
keyIdOrDefault: String? = null,
): Xor<ApiToken, Failure.KeyManagement.KeyNotFound> {
): Xor<SharedApiToken, Failure.KeyManagement.KeyNotFound> {
val keyId = keyIdOrDefault ?: keyPairManager.findKeyIdFor(MatchOn.UserId(userId))
?: return Xor.Second(Failure.KeyManagement.KeyNotFound("No key found for user $userId"))

Expand Down Expand Up @@ -115,7 +115,7 @@ internal class AuthenticatorManager(
authenticatorAttachment = "platform",
)
val verifyAuthData = webAuthnRepository.verify(verifyAuthenticationData)
val apiToken = ApiToken(
val apiToken = SharedApiToken(
accessToken = verifyAuthData.accessToken,
tokenType = verifyAuthData.tokenType,
userId = userId.toInt(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ import com.infomaniak.auth.lib.internal.otp.getLegacyAccounts
import com.infomaniak.auth.lib.internal.otp.getSecretFor
import com.infomaniak.auth.lib.internal.otp.needMigration
import com.infomaniak.auth.lib.internal.repositories.WebAuthnRepository
import com.infomaniak.auth.lib.models.migration.ApiToken
import com.infomaniak.auth.lib.models.migration.SharedApiToken
import com.infomaniak.auth.lib.network.exceptions.ApiException
import com.osmerion.kotlin.io.encoding.Base32
import io.ktor.utils.io.core.toByteArray
Expand Down Expand Up @@ -86,7 +86,7 @@ internal class MigrationManager(
*/
suspend fun tryMigrating(
userId: Long,
persistUser: suspend (apiToken: ApiToken) -> Unit,
persistUser: suspend (apiToken: SharedApiToken) -> Unit,
authentication: MigrationAuthentication,
): Boolean {
@OptIn(ExperimentalUuidApi::class)
Expand Down Expand Up @@ -160,8 +160,8 @@ internal class MigrationManager(
return generator.generate(timestampSeconds)
}

private fun AuthResult.toApiToken(): ApiToken {
return ApiToken(
private fun AuthResult.toApiToken(): SharedApiToken {
return SharedApiToken(
accessToken = this.accessToken,
tokenType = this.tokenType,
userId = this.userId.toInt(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ import com.infomaniak.auth.lib.internal.models.SuccessfulApiResponse
import com.infomaniak.auth.lib.internal.models.VerifyAuthenticationData
import com.infomaniak.auth.lib.internal.network.ApiRoutes
import com.infomaniak.auth.lib.internal.network.utils.decode
import com.infomaniak.auth.lib.models.migration.user.UserProfile
import com.infomaniak.auth.lib.models.migration.user.SharedUserProfile
import io.ktor.client.HttpClient
import io.ktor.client.request.HttpRequestBuilder
import io.ktor.client.request.delete
Expand Down Expand Up @@ -142,7 +142,7 @@ internal class AuthenticatorRequest(

suspend fun getUserProfile(
token: String,
): SuccessfulApiResponse<UserProfile> {
): SuccessfulApiResponse<SharedUserProfile> {
val url = "${routes.userProfile()}&with=security"

return httpClient.get(url) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient

@Serializable
data class ApiToken(
data class SharedApiToken(
@SerialName("access_token") val accessToken: String,
@SerialName("refresh_token") val refreshToken: String? = null,
@SerialName("token_type") val tokenType: String,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,14 @@
*/
package com.infomaniak.auth.lib.models.migration.user

import com.infomaniak.auth.lib.models.migration.ApiToken
import com.infomaniak.auth.lib.models.migration.SharedApiToken
import com.infomaniak.auth.lib.models.migration.user.preferences.Preferences
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient

@Serializable
data class UserProfile(
data class SharedUserProfile(
val id: Int,
@SerialName("display_name")
val displayName: String?,
Expand All @@ -43,5 +43,5 @@ data class UserProfile(
* Local
*/
@Transient
var apiToken: ApiToken = ApiToken(accessToken = "", tokenType = "", userId = 0),
var apiToken: SharedApiToken = SharedApiToken(accessToken = "", tokenType = "", userId = 0),
)
Original file line number Diff line number Diff line change
Expand Up @@ -17,16 +17,16 @@
*/
package com.infomaniak.auth.lib.models.migration.user.preferences

import com.infomaniak.auth.lib.models.migration.user.preferences.security.Security
import com.infomaniak.auth.lib.models.migration.user.preferences.security.SharedSecurity
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

@Serializable
data class Preferences(
var security: Security? = null,
var security: SharedSecurity? = null,
@SerialName("account")
var organizationPreference: OrganizationPreference,
var language: Language,
var country: Country,
var timezone: TimeZone? = null,
var organizationPreference: SharedOrganizationPreference,
var language: SharedLanguage,
var country: SharedCountry,
var timezone: SharedTimeZone? = null,
)
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,9 @@ import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

@Serializable
data class Country(
data class SharedCountry(
@SerialName("short_name")
var shortName: String,
@SerialName("is_enabled")
var isEnabled: Boolean,
) : PreferenceTemplate()
) : SharedPreferenceTemplate()
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,11 @@ import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

@Serializable
data class Language(
data class SharedLanguage(
@SerialName("short_name")
var shortName: String,
@ColumnInfo(defaultValue = "")
var locale: String,
@SerialName("short_locale")
var shortLocale: String,
) : PreferenceTemplate()
) : SharedPreferenceTemplate()
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

@Serializable
data class OrganizationPreference(
data class SharedOrganizationPreference(
@SerialName("current_account_id")
var currentOrganizationId: Int,
@SerialName("last_login_at")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ package com.infomaniak.auth.lib.models.migration.user.preferences
import kotlinx.serialization.Serializable

@Serializable
abstract class PreferenceTemplate(
abstract class SharedPreferenceTemplate(
var id: Int = 0,
var name: String = "",
)
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,6 @@ package com.infomaniak.auth.lib.models.migration.user.preferences
import kotlinx.serialization.Serializable

@Serializable
data class TimeZone(
data class SharedTimeZone(
var gmt: String,
) : PreferenceTemplate()
) : SharedPreferenceTemplate()
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

@Serializable
data class AuthDevices(
data class SharedAuthDevices(
var id: Int,
var name: String,
@SerialName("last_connexion")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

@Serializable
data class Security(
data class SharedSecurity(
var score: Int,
@SerialName("has_recovery_email")
var hasRecoveryEmail: Boolean,
Expand All @@ -47,5 +47,5 @@ data class Security(
@SerialName("double_auth_method")
var doubleAuthMethod: String,
@SerialName("auth_devices")
var authDevices: ArrayList<AuthDevices>?,
var authDevices: ArrayList<SharedAuthDevices>?,
)
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,12 @@
*/
package com.infomaniak.auth.lib.network.interfaces

import com.infomaniak.auth.lib.models.migration.ApiToken
import com.infomaniak.auth.lib.models.migration.user.UserProfile
import com.infomaniak.auth.lib.models.migration.SharedApiToken
import com.infomaniak.auth.lib.models.migration.user.SharedUserProfile

interface AuthenticatorBridge {
suspend fun getTokenFromCrossAppLogin(userId: Long): ApiToken?
suspend fun getTokenFromCrossAppLogin(userId: Long): SharedApiToken?
suspend fun getTokenFromDatabase(userId: Long): String?
suspend fun persistTokenForAccount(userId: Long, token: String)
suspend fun persistUserProfile(userProfile: UserProfile)
suspend fun persistUserProfile(userProfile: SharedUserProfile)
}
Loading