mirror of
https://github.com/bitwarden/android.git
synced 2026-05-11 02:15:43 -05:00
[PM-6702] Add fromEmail parameter from email URL AppLink
This commit is contained in:
@@ -11,14 +11,16 @@ import com.x8bit.bitwarden.data.platform.repository.model.Environment
|
||||
fun Intent.getCompleteRegistrationDataIntentOrNull(): CompleteRegistrationData? {
|
||||
val uri = data ?: return null
|
||||
val host = uri.host ?: return null
|
||||
val email = uri?.getQueryParameter("email") ?: return null
|
||||
val verificationToken = uri.getQueryParameter("verificationtoken") ?: return null
|
||||
if (!host.contains("bitwarden.eu") && !host.contains("bitwarden.com")) return null
|
||||
|
||||
if (uri.path != "finish-signup") return null
|
||||
val email = uri?.getQueryParameter("email") ?: return null
|
||||
val verificationToken = uri.getQueryParameter("token") ?: return null
|
||||
val fromEmail = uri.getBooleanQueryParameter("fromEmail", true)
|
||||
val region = if (host.contains("bitwarden.eu")) Environment.Type.EU else Environment.Type.US
|
||||
return CompleteRegistrationData(
|
||||
email = email,
|
||||
verificationToken = verificationToken,
|
||||
fromEmail = fromEmail,
|
||||
region = region
|
||||
)
|
||||
}
|
||||
|
||||
@@ -14,5 +14,6 @@ import kotlinx.parcelize.Parcelize
|
||||
data class CompleteRegistrationData(
|
||||
val email: String,
|
||||
val verificationToken: String,
|
||||
val fromEmail: Boolean,
|
||||
val region: Environment.Type
|
||||
) : Parcelable
|
||||
|
||||
@@ -57,10 +57,12 @@ fun NavGraphBuilder.authGraph(navController: NavHostController) {
|
||||
)
|
||||
startRegistrationDestination(
|
||||
onNavigateBack = { navController.popBackStack() },
|
||||
// TODO check necessary parameters
|
||||
onNavigateToCompleteRegistration = { emailAddress, verificationToken ->
|
||||
navController.navigateToCompleteRegistration(emailAddress= emailAddress,
|
||||
verificationToken = verificationToken )
|
||||
navController.navigateToCompleteRegistration(
|
||||
emailAddress= emailAddress,
|
||||
verificationToken = verificationToken,
|
||||
fromEmail = false
|
||||
)
|
||||
},
|
||||
onNavigateToCheckEmail = {emailAddress ->
|
||||
navController.navigateToCheckEmail(emailAddress)
|
||||
|
||||
@@ -13,8 +13,9 @@ import com.x8bit.bitwarden.ui.platform.base.util.composableWithSlideTransitions
|
||||
private const val EMAIL_ADDRESS: String = "email_address"
|
||||
private const val VERIFICATION_TOKEN: String = "verification_token"
|
||||
private const val REGION: String = "region"
|
||||
private const val FROM_EMAIL: String = "from_email"
|
||||
private const val COMPLETE_REGISTRATION_PREFIX = "complete_registration"
|
||||
private const val COMPLETE_REGISTRATION_ROUTE = "$COMPLETE_REGISTRATION_PREFIX/{$EMAIL_ADDRESS}/{$VERIFICATION_TOKEN}/{$REGION}"
|
||||
private const val COMPLETE_REGISTRATION_ROUTE = "$COMPLETE_REGISTRATION_PREFIX/{$EMAIL_ADDRESS}/{$VERIFICATION_TOKEN}/{$FROM_EMAIL}/{$REGION}"
|
||||
|
||||
/**
|
||||
* Class to retrieve login with device arguments from the [SavedStateHandle].
|
||||
@@ -23,12 +24,14 @@ private const val COMPLETE_REGISTRATION_ROUTE = "$COMPLETE_REGISTRATION_PREFIX/{
|
||||
data class CompleteRegistrationArgs(
|
||||
val emailAddress: String,
|
||||
val verificationToken: String,
|
||||
val region: Environment.Type
|
||||
val fromEmail: Boolean,
|
||||
val region: Environment.Type?
|
||||
) {
|
||||
constructor(savedStateHandle: SavedStateHandle) : this(
|
||||
emailAddress = checkNotNull(savedStateHandle.get<String>(EMAIL_ADDRESS)),
|
||||
verificationToken = checkNotNull(savedStateHandle.get<String>(VERIFICATION_TOKEN)),
|
||||
region = checkNotNull(savedStateHandle.get<Environment.Type>(REGION))
|
||||
fromEmail = checkNotNull(savedStateHandle.get<Boolean>(FROM_EMAIL)),
|
||||
region = savedStateHandle.get<Environment.Type>(REGION)
|
||||
)
|
||||
}
|
||||
|
||||
@@ -38,9 +41,10 @@ data class CompleteRegistrationArgs(
|
||||
fun NavController.navigateToCompleteRegistration(
|
||||
emailAddress: String,
|
||||
verificationToken: String,
|
||||
fromEmail: Boolean,
|
||||
region: Environment.Type? = null,
|
||||
navOptions: NavOptions? = null) {
|
||||
this.navigate("$COMPLETE_REGISTRATION_PREFIX/$emailAddress/$verificationToken/$region", navOptions)
|
||||
this.navigate("$COMPLETE_REGISTRATION_PREFIX/$emailAddress/$verificationToken/$fromEmail/$region", navOptions)
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -55,6 +59,7 @@ fun NavGraphBuilder.completeRegistrationDestination(
|
||||
arguments = listOf(
|
||||
navArgument(EMAIL_ADDRESS) { type = NavType.StringType },
|
||||
navArgument(VERIFICATION_TOKEN) { type = NavType.StringType },
|
||||
navArgument(FROM_EMAIL) { type = NavType.BoolType },
|
||||
navArgument(REGION) { type = NavType.EnumType(Environment.Type::class.java) },
|
||||
),
|
||||
) {
|
||||
|
||||
@@ -60,6 +60,7 @@ class CompleteRegistrationViewModel @Inject constructor(
|
||||
CompleteRegistrationState(
|
||||
userEmail = args.emailAddress,
|
||||
emailVerificationToken = args.verificationToken,
|
||||
fromEmail = args.fromEmail,
|
||||
region = args.region,
|
||||
passwordInput = "",
|
||||
confirmPasswordInput = "",
|
||||
@@ -408,7 +409,8 @@ class CompleteRegistrationViewModel @Inject constructor(
|
||||
data class CompleteRegistrationState(
|
||||
val userEmail: String,
|
||||
val emailVerificationToken: String,
|
||||
val region: Environment.Type,
|
||||
val fromEmail: Boolean,
|
||||
val region: Environment.Type?,
|
||||
val passwordInput: String,
|
||||
val confirmPasswordInput: String,
|
||||
val passwordHintInput: String,
|
||||
|
||||
@@ -200,6 +200,7 @@ fun RootNavScreen(
|
||||
navController.navigateToCompleteRegistration(
|
||||
emailAddress = currentState.email,
|
||||
verificationToken = currentState.verificationToken,
|
||||
fromEmail = currentState.fromEmail,
|
||||
region = currentState.region
|
||||
)
|
||||
}
|
||||
|
||||
@@ -82,6 +82,7 @@ class RootNavViewModel @Inject constructor(
|
||||
email = specialCircumstance.completeRegistrationData.email,
|
||||
verificationToken = specialCircumstance.completeRegistrationData.verificationToken,
|
||||
region = specialCircumstance.completeRegistrationData.region,
|
||||
fromEmail = specialCircumstance.completeRegistrationData.fromEmail,
|
||||
timestamp = specialCircumstance.timestamp
|
||||
)
|
||||
}
|
||||
@@ -128,6 +129,7 @@ class RootNavViewModel @Inject constructor(
|
||||
email = specialCircumstance.completeRegistrationData.email,
|
||||
verificationToken = specialCircumstance.completeRegistrationData.verificationToken,
|
||||
region = specialCircumstance.completeRegistrationData.region,
|
||||
fromEmail = specialCircumstance.completeRegistrationData.fromEmail,
|
||||
timestamp = specialCircumstance.timestamp
|
||||
)
|
||||
}
|
||||
@@ -232,6 +234,7 @@ sealed class RootNavState : Parcelable {
|
||||
data class CompleteOngoingRegistration (
|
||||
val email: String,
|
||||
val verificationToken: String,
|
||||
val fromEmail: Boolean,
|
||||
val region: Environment.Type,
|
||||
val timestamp: Timestamp
|
||||
) : RootNavState()
|
||||
|
||||
Reference in New Issue
Block a user