in app/controllers/PasskeyAuthFilter.scala [33:62]
def filter[A](request: UserIdentityRequest[A]): Future[Option[Result]] =
Future(
apiResponse(
for {
challengeResponse <- PasskeyChallengeDB.loadChallenge(request.user)
challenge <- PasskeyChallengeDB.extractChallenge(
challengeResponse,
request.user
)
authData <- extractAuthenticationData(request)
credentialResponse <- PasskeyDB.loadCredential(
request.user,
authData.getCredentialId
)
credential <- PasskeyDB.extractCredential(
credentialResponse,
request.user
)
verifiedAuthData <- Passkey.verifiedAuthentication(
host,
challenge,
authData,
credential
)
_ <- PasskeyChallengeDB.delete(request.user)
_ <- PasskeyDB.updateCounter(request.user, verifiedAuthData)
_ = logger.info(
s"Authenticated passkey for user ${request.user.username}"
)
} yield ()