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 @@ -41,28 +41,25 @@ import kotlinx.coroutines.launch
* State that requires the user to correct previously rejected account attributes.
*/
class AttributesInvalidStateV2 internal constructor(
continuationToken: String?,
correlationId: String,
scenario: NativeAuthFlowScenarioV2,
config: NativeAuthPublicClientApplicationConfiguration,
continuationState: NativeAuthV2ContinuationState? = null
) : NativeAuthBaseStateV2(continuationToken, correlationId, scenario, config, continuationState) {
) : NativeAuthBaseStateV2(correlationId, scenario, config, continuationState) {
private val TAG: String = AttributesInvalidStateV2::class.java.simpleName

internal constructor(
continuationState: NativeAuthV2ContinuationState,
scenario: NativeAuthFlowScenarioV2,
config: NativeAuthPublicClientApplicationConfiguration
) : this(
continuationToken = null,
correlationId = continuationState.correlationId,
scenario = scenario,
config = config,
continuationState = continuationState
)

private constructor(parcel: Parcel) : this(
continuationToken = parcel.readString(),
correlationId = parcel.readString() ?: "UNSET",
scenario = NativeAuthFlowScenarioV2.valueOf(parcel.readString() ?: NativeAuthFlowScenarioV2.UNKNOWN.name),
config = parcel.serializable<NativeAuthPublicClientApplicationConfiguration>() as NativeAuthPublicClientApplicationConfiguration,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,28 +63,25 @@ import kotlinx.coroutines.withContext
* State that requires the user to submit account attributes.
*/
class AttributesRequiredStateV2 internal constructor(
continuationToken: String?,
correlationId: String,
scenario: NativeAuthFlowScenarioV2,
config: NativeAuthPublicClientApplicationConfiguration,
continuationState: NativeAuthV2ContinuationState? = null
) : NativeAuthBaseStateV2(continuationToken, correlationId, scenario, config, continuationState) {
) : NativeAuthBaseStateV2(correlationId, scenario, config, continuationState) {
private val TAG: String = AttributesRequiredStateV2::class.java.simpleName

internal constructor(
continuationState: NativeAuthV2ContinuationState,
scenario: NativeAuthFlowScenarioV2,
config: NativeAuthPublicClientApplicationConfiguration
) : this(
continuationToken = null,
correlationId = continuationState.correlationId,
scenario = scenario,
config = config,
continuationState = continuationState
)

private constructor(parcel: Parcel) : this(
continuationToken = parcel.readString(),
correlationId = parcel.readString() ?: "UNSET",
scenario = NativeAuthFlowScenarioV2.valueOf(parcel.readString() ?: NativeAuthFlowScenarioV2.UNKNOWN.name),
config = parcel.serializable<NativeAuthPublicClientApplicationConfiguration>() as NativeAuthPublicClientApplicationConfiguration,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,28 +67,25 @@ import kotlin.coroutines.coroutineContext
* State that requires the user to submit a verification code.
*/
class CodeRequiredStateV2 internal constructor(
continuationToken: String?,
correlationId: String,
scenario: NativeAuthFlowScenarioV2,
config: NativeAuthPublicClientApplicationConfiguration,
continuationState: NativeAuthV2ContinuationState? = null
) : NativeAuthBaseStateV2(continuationToken, correlationId, scenario, config, continuationState) {
) : NativeAuthBaseStateV2(correlationId, scenario, config, continuationState) {
private val TAG: String = CodeRequiredStateV2::class.java.simpleName

internal constructor(
continuationState: NativeAuthV2ContinuationState,
scenario: NativeAuthFlowScenarioV2,
config: NativeAuthPublicClientApplicationConfiguration
) : this(
continuationToken = null,
correlationId = continuationState.correlationId,
scenario = scenario,
config = config,
continuationState = continuationState
)

private constructor(parcel: Parcel) : this(
continuationToken = parcel.readString(),
correlationId = parcel.readString() ?: "UNSET",
scenario = NativeAuthFlowScenarioV2.valueOf(parcel.readString() ?: NativeAuthFlowScenarioV2.UNKNOWN.name),
config = parcel.serializable<NativeAuthPublicClientApplicationConfiguration>() as NativeAuthPublicClientApplicationConfiguration,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,6 @@ import java.util.Collections
* rather than following an unsupported method.
*/
class MFARequiredStateV2 internal constructor(
continuationToken: String?,
correlationId: String,
scenario: NativeAuthFlowScenarioV2,
config: NativeAuthPublicClientApplicationConfiguration,
Expand All @@ -76,7 +75,7 @@ class MFARequiredStateV2 internal constructor(
* The authentication methods the server offered for this multi-factor step.
*/
authMethods: List<AuthMethod> = emptyList()
) : NativeAuthBaseStateV2(continuationToken, correlationId, scenario, config, continuationState) {
) : NativeAuthBaseStateV2(correlationId, scenario, config, continuationState) {
private val TAG: String = MFARequiredStateV2::class.java.simpleName
val authMethods: List<AuthMethod> = Collections.unmodifiableList(ArrayList(authMethods))

Expand All @@ -86,7 +85,6 @@ class MFARequiredStateV2 internal constructor(
scenario: NativeAuthFlowScenarioV2,
config: NativeAuthPublicClientApplicationConfiguration
) : this(
continuationToken = null,
correlationId = continuationState.correlationId,
scenario = scenario,
config = config,
Expand All @@ -95,7 +93,6 @@ class MFARequiredStateV2 internal constructor(
)

private constructor(parcel: Parcel) : this(
continuationToken = parcel.readString(),
correlationId = parcel.readString() ?: "UNSET",
scenario = NativeAuthFlowScenarioV2.valueOf(parcel.readString() ?: NativeAuthFlowScenarioV2.UNKNOWN.name),
config = parcel.serializable<NativeAuthPublicClientApplicationConfiguration>() as NativeAuthPublicClientApplicationConfiguration,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,28 +65,25 @@ import kotlinx.coroutines.withContext
* required for subsequent submit/resend calls. No error result carries a next state.
*/
class MFAVerificationRequiredStateV2 internal constructor(
continuationToken: String?,
correlationId: String,
scenario: NativeAuthFlowScenarioV2,
config: NativeAuthPublicClientApplicationConfiguration,
continuationState: NativeAuthV2ContinuationState? = null
) : NativeAuthBaseStateV2(continuationToken, correlationId, scenario, config, continuationState) {
) : NativeAuthBaseStateV2(correlationId, scenario, config, continuationState) {
private val TAG: String = MFAVerificationRequiredStateV2::class.java.simpleName

internal constructor(
continuationState: NativeAuthV2ContinuationState,
scenario: NativeAuthFlowScenarioV2,
config: NativeAuthPublicClientApplicationConfiguration
) : this(
continuationToken = null,
correlationId = continuationState.correlationId,
scenario = scenario,
config = config,
continuationState = continuationState
)

private constructor(parcel: Parcel) : this(
continuationToken = parcel.readString(),
correlationId = parcel.readString() ?: "UNSET",
scenario = NativeAuthFlowScenarioV2.valueOf(parcel.readString() ?: NativeAuthFlowScenarioV2.UNKNOWN.name),
config = parcel.serializable<NativeAuthPublicClientApplicationConfiguration>() as NativeAuthPublicClientApplicationConfiguration,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,20 +40,17 @@ import com.microsoft.identity.nativeauth.utils.serializable
* Base class for the Native Auth V2 states. Each concrete state exposes only the methods that are
* valid at that point in the flow.
*
* @property continuationToken Legacy placeholder used only by states that do not yet carry the
* opaque V2 continuation state. Implemented V2 states keep this null.
* @property correlationId Correlation ID taken from the previous API response and passed to the next request.
* @property scenario Identifies which part of the Native Auth V2 surface this state belongs to.
* @property config Configuration used by Native Auth.
* @property continuationState Opaque DTO carrying mid-flow state; null in legacy/test paths and for states that don't drive a server call.
*/
abstract class NativeAuthBaseStateV2 internal constructor(
override val continuationToken: String?,
override val correlationId: String,
internal val correlationId: String,
internal val scenario: NativeAuthFlowScenarioV2,
internal val config: NativeAuthPublicClientApplicationConfiguration,
internal val continuationState: NativeAuthV2ContinuationState? = null
) : BaseState(continuationToken = continuationToken, correlationId = correlationId), State, Parcelable {
) : State, Parcelable {

private val TAG: String = NativeAuthBaseStateV2::class.java.simpleName

Expand Down Expand Up @@ -97,14 +94,12 @@ abstract class NativeAuthBaseStateV2 internal constructor(
}

/**
* Subclasses must not override this method to append base fields; each subclass's `Parcel`
* constructor is required
* to read the fields in exactly this order - continuationToken, correlationId, scenario, config,
* continuationState - otherwise the reads desynchronise from the writes. Subclasses that never
* carry a continuation state should read config via [readConfigAndSkipContinuationState].
* Writes correlationId, scenario, config, then continuationState. Each subclass's `Parcel`
* constructor must read the same order. Subclasses with additional fields must call this
* implementation before writing them. Subclasses that never carry a continuation state
* should read config via [readConfigAndSkipContinuationState].
*/
override fun writeToParcel(parcel: Parcel, flags: Int) {
parcel.writeString(continuationToken)
parcel.writeString(correlationId)
parcel.writeString(scenario.name)
parcel.writeSerializable(config)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,28 +59,25 @@ import kotlinx.coroutines.withContext
* State that requires the user to submit a new password.
*/
class NewPasswordRequiredStateV2 internal constructor(
continuationToken: String?,
correlationId: String,
scenario: NativeAuthFlowScenarioV2,
config: NativeAuthPublicClientApplicationConfiguration,
continuationState: NativeAuthV2ContinuationState? = null
) : NativeAuthBaseStateV2(continuationToken, correlationId, scenario, config, continuationState) {
) : NativeAuthBaseStateV2(correlationId, scenario, config, continuationState) {
private val TAG: String = NewPasswordRequiredStateV2::class.java.simpleName

internal constructor(
continuationState: NativeAuthV2ContinuationState,
scenario: NativeAuthFlowScenarioV2,
config: NativeAuthPublicClientApplicationConfiguration
) : this(
continuationToken = null,
correlationId = continuationState.correlationId,
scenario = scenario,
config = config,
continuationState = continuationState
)

private constructor(parcel: Parcel) : this(
continuationToken = parcel.readString(),
correlationId = parcel.readString() ?: "UNSET",
scenario = NativeAuthFlowScenarioV2.valueOf(parcel.readString() ?: NativeAuthFlowScenarioV2.UNKNOWN.name),
config = parcel.serializable<NativeAuthPublicClientApplicationConfiguration>() as NativeAuthPublicClientApplicationConfiguration,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,28 +71,25 @@ import kotlinx.coroutines.withContext
* caller retries on this same state instance; no error result carries a next state.
*/
class PasswordRequiredStateV2 internal constructor(
continuationToken: String?,
correlationId: String,
scenario: NativeAuthFlowScenarioV2,
config: NativeAuthPublicClientApplicationConfiguration,
continuationState: NativeAuthV2ContinuationState? = null
) : NativeAuthBaseStateV2(continuationToken, correlationId, scenario, config, continuationState) {
) : NativeAuthBaseStateV2(correlationId, scenario, config, continuationState) {
private val TAG: String = PasswordRequiredStateV2::class.java.simpleName

internal constructor(
continuationState: NativeAuthV2ContinuationState,
scenario: NativeAuthFlowScenarioV2,
config: NativeAuthPublicClientApplicationConfiguration
) : this(
continuationToken = null,
correlationId = continuationState.correlationId,
scenario = scenario,
config = config,
continuationState = continuationState
)

private constructor(parcel: Parcel) : this(
continuationToken = parcel.readString(),
correlationId = parcel.readString() ?: "UNSET",
scenario = NativeAuthFlowScenarioV2.valueOf(parcel.readString() ?: NativeAuthFlowScenarioV2.UNKNOWN.name),
config = parcel.serializable<NativeAuthPublicClientApplicationConfiguration>() as NativeAuthPublicClientApplicationConfiguration,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,13 +61,12 @@ import java.util.Collections
* No challenge is sent until the app explicitly selects one of [authMethods].
*/
class ResetPasswordMethodRequiredStateV2 internal constructor(
continuationToken: String?,
correlationId: String,
scenario: NativeAuthFlowScenarioV2,
config: NativeAuthPublicClientApplicationConfiguration,
continuationState: NativeAuthV2ContinuationState? = null,
authMethods: List<AuthMethod> = emptyList()
) : NativeAuthBaseStateV2(continuationToken, correlationId, scenario, config, continuationState) {
) : NativeAuthBaseStateV2(correlationId, scenario, config, continuationState) {
private val TAG: String = ResetPasswordMethodRequiredStateV2::class.java.simpleName
val authMethods: List<AuthMethod> = Collections.unmodifiableList(ArrayList(authMethods))

Expand All @@ -76,7 +75,6 @@ class ResetPasswordMethodRequiredStateV2 internal constructor(
authMethods: List<AuthMethod>,
config: NativeAuthPublicClientApplicationConfiguration
) : this(
continuationToken = null,
correlationId = continuationState.correlationId,
scenario = NativeAuthFlowScenarioV2.RESET_PASSWORD,
config = config,
Expand All @@ -85,7 +83,6 @@ class ResetPasswordMethodRequiredStateV2 internal constructor(
)

private constructor(parcel: Parcel) : this(
continuationToken = parcel.readString(),
correlationId = parcel.readString() ?: "UNSET",
scenario = NativeAuthFlowScenarioV2.valueOf(
parcel.readString() ?: NativeAuthFlowScenarioV2.UNKNOWN.name
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,28 +57,25 @@ import kotlinx.coroutines.withContext
* State reached once a password reset has completed server-side.
*/
class SignInAfterResetPasswordStateV2 internal constructor(
continuationToken: String?,
correlationId: String,
scenario: NativeAuthFlowScenarioV2,
config: NativeAuthPublicClientApplicationConfiguration,
continuationState: NativeAuthV2ContinuationState? = null
) : NativeAuthBaseStateV2(continuationToken, correlationId, scenario, config, continuationState) {
) : NativeAuthBaseStateV2(correlationId, scenario, config, continuationState) {
private val TAG: String = SignInAfterResetPasswordStateV2::class.java.simpleName

internal constructor(
continuationState: NativeAuthV2ContinuationState,
scenario: NativeAuthFlowScenarioV2,
config: NativeAuthPublicClientApplicationConfiguration
) : this(
continuationToken = null,
correlationId = continuationState.correlationId,
scenario = scenario,
config = config,
continuationState = continuationState
)

private constructor(parcel: Parcel) : this(
continuationToken = parcel.readString(),
correlationId = parcel.readString() ?: "UNSET",
scenario = NativeAuthFlowScenarioV2.valueOf(parcel.readString() ?: NativeAuthFlowScenarioV2.UNKNOWN.name),
config = parcel.serializable<NativeAuthPublicClientApplicationConfiguration>() as NativeAuthPublicClientApplicationConfiguration,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,28 +57,25 @@ import kotlinx.coroutines.withContext
* State reached once a sign-up has completed server-side.
*/
class SignInAfterSignUpStateV2 internal constructor(
continuationToken: String?,
correlationId: String,
scenario: NativeAuthFlowScenarioV2,
config: NativeAuthPublicClientApplicationConfiguration,
continuationState: NativeAuthV2ContinuationState? = null
) : NativeAuthBaseStateV2(continuationToken, correlationId, scenario, config, continuationState) {
) : NativeAuthBaseStateV2(correlationId, scenario, config, continuationState) {
private val TAG: String = SignInAfterSignUpStateV2::class.java.simpleName

internal constructor(
continuationState: NativeAuthV2ContinuationState,
scenario: NativeAuthFlowScenarioV2,
config: NativeAuthPublicClientApplicationConfiguration
) : this(
continuationToken = null,
correlationId = continuationState.correlationId,
scenario = scenario,
config = config,
continuationState = continuationState
)

private constructor(parcel: Parcel) : this(
continuationToken = parcel.readString(),
correlationId = parcel.readString() ?: "UNSET",
scenario = NativeAuthFlowScenarioV2.valueOf(parcel.readString() ?: NativeAuthFlowScenarioV2.UNKNOWN.name),
config = parcel.serializable<NativeAuthPublicClientApplicationConfiguration>() as NativeAuthPublicClientApplicationConfiguration,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,15 +39,13 @@ import kotlinx.coroutines.launch
* State that requires the user to select a strong authentication method to register.
*/
class StrongAuthRegistrationRequiredStateV2 internal constructor(
continuationToken: String,
correlationId: String,
scenario: NativeAuthFlowScenarioV2,
config: NativeAuthPublicClientApplicationConfiguration
) : NativeAuthBaseStateV2(continuationToken, correlationId, scenario, config) {
) : NativeAuthBaseStateV2(correlationId, scenario, config) {
private val TAG: String = StrongAuthRegistrationRequiredStateV2::class.java.simpleName

private constructor(parcel: Parcel) : this(
continuationToken = parcel.readString() ?: "",
correlationId = parcel.readString() ?: "UNSET",
scenario = NativeAuthFlowScenarioV2.valueOf(parcel.readString() ?: NativeAuthFlowScenarioV2.UNKNOWN.name),
// Also drains the continuationState field written by the base class, so the read order
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,15 +38,13 @@ import kotlinx.coroutines.launch
* State that requires the user to submit a strong authentication challenge.
*/
class StrongAuthVerificationRequiredStateV2 internal constructor(
continuationToken: String,
correlationId: String,
scenario: NativeAuthFlowScenarioV2,
config: NativeAuthPublicClientApplicationConfiguration
) : NativeAuthBaseStateV2(continuationToken, correlationId, scenario, config) {
) : NativeAuthBaseStateV2(correlationId, scenario, config) {
private val TAG: String = StrongAuthVerificationRequiredStateV2::class.java.simpleName

private constructor(parcel: Parcel) : this(
continuationToken = parcel.readString() ?: "",
correlationId = parcel.readString() ?: "UNSET",
scenario = NativeAuthFlowScenarioV2.valueOf(parcel.readString() ?: NativeAuthFlowScenarioV2.UNKNOWN.name),
// Also drains the continuationState field written by the base class, so the read order
Expand Down
Loading
Loading