Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(e2ei): error handling (WPB-6271) #2721

Merged
merged 8 commits into from
Feb 23, 2024
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,13 @@ package com.wire.android.feature.e2ei
import android.content.Context
import com.wire.android.util.dispatchers.DispatcherProvider
import com.wire.android.util.extension.getActivity
import com.wire.kalium.logic.CoreFailure
import com.wire.kalium.logic.E2EIFailure
import com.wire.kalium.logic.feature.e2ei.usecase.E2EIEnrollmentResult
import com.wire.kalium.logic.feature.e2ei.usecase.EnrollE2EIUseCase
import com.wire.kalium.logic.functional.Either
import com.wire.kalium.logic.functional.fold
import dagger.hilt.android.qualifiers.ApplicationContext
import com.wire.kalium.logic.functional.left
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.SupervisorJob
import kotlinx.coroutines.launch
Expand All @@ -44,20 +44,18 @@ class GetE2EICertificateUseCase @Inject constructor(

operator fun invoke(
isNewClient: Boolean,
enrollmentResultHandler: (Either<CoreFailure, E2EIEnrollmentResult>) -> Unit
enrollmentResultHandler: (Either<E2EIFailure, E2EIEnrollmentResult>) -> Unit
) {
this.enrollmentResultHandler = enrollmentResultHandler
scope.launch {
enrollE2EI.initialEnrollment(isNewClientRegistration = isNewClient).fold({
enrollmentResultHandler(Either.Left(it))
}, {
if (it is E2EIEnrollmentResult.Initialized) {
initialEnrollmentResult = it
OAuthUseCase(applicationContext, it.target, it.oAuthClaims, it.oAuthState).launch(
applicationContext.getActivity()!!.activityResultRegistry,
::oAuthResultHandler
)
} else enrollmentResultHandler(Either.Right(it))
initialEnrollmentResult = it
OAuthUseCase(applicationContext, it.target, it.oAuthClaims, it.oAuthState).launch(
applicationContext.getActivity()!!.activityResultRegistry,
Garzas marked this conversation as resolved.
Show resolved Hide resolved
::oAuthResultHandler
)
})
}
}
Expand All @@ -76,7 +74,7 @@ class GetE2EICertificateUseCase @Inject constructor(
}

is OAuthUseCase.OAuthResult.Failed -> {
enrollmentResultHandler(Either.Left(E2EIFailure.FailedOAuth(oAuthResult.reason)))
enrollmentResultHandler(E2EIFailure.OAuth(oAuthResult.reason).left())
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,6 @@ import com.wire.android.ui.theme.wireTypography
import com.wire.android.util.getDeviceIdString
import com.wire.android.util.getGitBuildId
import com.wire.android.util.ui.PreviewMultipleThemes
import com.wire.kalium.logic.E2EIFailure
import com.wire.kalium.logic.data.user.UserId
import com.wire.kalium.logic.feature.debug.DisableEventProcessingUseCase
import com.wire.kalium.logic.feature.e2ei.usecase.E2EIEnrollmentResult
Expand Down Expand Up @@ -130,13 +129,17 @@ class DebugDataOptionsViewModel
e2eiCertificateUseCase(false) { result ->
result.fold({
state = state.copy(
certificate = (it as E2EIFailure.FailedOAuth).reason, showCertificate = true
certificate = it.toString(), showCertificate = true
)
}, {
if (it is E2EIEnrollmentResult.Finalized) {
state = state.copy(
state = if (it is E2EIEnrollmentResult.Finalized) {
state.copy(
certificate = it.certificate, showCertificate = true
)
} else {
state.copy(
certificate = it.toString(), showCertificate = true
)
}
})
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,11 @@ class E2EIEnrollmentViewModel @Inject constructor(
isCertificateEnrollError = false,
isLoading = false
)
} else {
state = state.copy(
isLoading = false,
isCertificateEnrollError = true
)
}
})
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -306,21 +306,21 @@ class FeatureFlagNotificationViewModel @Inject constructor(
e2EIResult = FeatureFlagState.E2EIResult.Failure(e2eiRequired)
)
}, {
if (it is E2EIEnrollmentResult.Finalized) {
featureFlagState = featureFlagState.copy(
isE2EILoading = false,
e2EIRequired = null,
e2EIResult = FeatureFlagState.E2EIResult.Success(it.certificate)
)
} else if (it is E2EIEnrollmentResult.Failed) {
featureFlagState = featureFlagState.copy(
isE2EILoading = false,
e2EIRequired = null,
e2EIResult = FeatureFlagState.E2EIResult.Failure(e2eiRequired)
)
}
})
}
featureFlagState = if (it is E2EIEnrollmentResult.Finalized) {
featureFlagState.copy(
isE2EILoading = false,
e2EIRequired = null,
e2EIResult = FeatureFlagState.E2EIResult.Success(it.certificate)
)
} else {
featureFlagState.copy(
isE2EILoading = false,
e2EIRequired = null,
e2EIResult = FeatureFlagState.E2EIResult.Failure(e2eiRequired)
)
}
})
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ class DeviceDetailsViewModel @Inject constructor(
if (it is E2EIEnrollmentResult.Finalized) {
getE2eiCertificate()
state = state.copy(isE2EICertificateEnrollSuccess = true)
} else if (it is E2EIEnrollmentResult.Failed) {
} else {
state = state.copy(
isLoadingCertificate = false,
isE2EICertificateEnrollError = true
Expand Down