Skip to content

Commit

Permalink
Introduce PasskeyRequestData model
Browse files Browse the repository at this point in the history
  • Loading branch information
ThomazFB committed Jan 30, 2024
1 parent dfea9d0 commit eb7e240
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@
import org.wordpress.android.login.util.SiteUtils;
import org.wordpress.android.login.webauthn.PasskeyRequest;
import org.wordpress.android.login.webauthn.Fido2ClientHandler;
import org.wordpress.android.login.webauthn.PasskeyRequest.PasskeyRequestData;
import org.wordpress.android.login.widgets.WPLoginInputRow;
import org.wordpress.android.login.widgets.WPLoginInputRow.OnEditorCommitListener;
import org.wordpress.android.util.AppLog;
Expand Down Expand Up @@ -629,9 +630,15 @@ public void onWebauthnChallengeReceived(WebauthnChallengeReceived event) {
return;
}

PasskeyRequestData passkeyRequestData = new PasskeyRequestData(
event.mUserId,
event.mChallengeInfo.getTwoStepNonce(),
event.mRawChallengeInfoJson
);

new PasskeyRequest(
requireContext(),
event,
passkeyRequestData,
result -> {
mDispatcher.dispatch(
AuthenticationActionBuilder.newFinishSecurityKeyChallengeAction(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,20 +12,19 @@ import androidx.credentials.GetPublicKeyCredentialOption
import androidx.credentials.PublicKeyCredential
import androidx.credentials.exceptions.GetCredentialException
import org.wordpress.android.fluxc.store.AccountStore.FinishWebauthnChallengePayload
import org.wordpress.android.fluxc.store.AccountStore.WebauthnChallengeReceived
import java.util.concurrent.Executors

class PasskeyRequest(
context: Context,
challengeEvent: WebauthnChallengeReceived,
requestData: PasskeyRequestData,
onSuccess: (FinishWebauthnChallengePayload) -> Unit,
onFailure: (Throwable) -> Unit
) {
init {
val executor = Executors.newSingleThreadExecutor()
val signal = CancellationSignal()
val getCredRequest = GetCredentialRequest(
listOf(GetPasswordOption(), GetPublicKeyCredentialOption(challengeEvent.mRawChallengeInfoJson))
listOf(GetPasswordOption(), GetPublicKeyCredentialOption(requestData.requestJson))
)

val passkeyRequestCallback = object : CredentialManagerCallback<GetCredentialResponse, GetCredentialException> {
Expand All @@ -36,8 +35,8 @@ class PasskeyRequest(

override fun onResult(result: GetCredentialResponse) {
FinishWebauthnChallengePayload().apply {
mUserId = challengeEvent.mUserId
mTwoStepNonce = challengeEvent.mChallengeInfo.twoStepNonce
mUserId = requestData.userId
mTwoStepNonce = requestData.twoStepNonce
mClientData = result.toJson().orEmpty()
}.let { onSuccess(it) }
}
Expand Down Expand Up @@ -67,6 +66,12 @@ class PasskeyRequest(
}
}

data class PasskeyRequestData(
val userId: String,
val twoStepNonce: String,
val requestJson: String
)

companion object {
const val TAG = "PasskeyRequest"
}
Expand Down

0 comments on commit eb7e240

Please sign in to comment.