in app/aws/PasskeyDB.scala [120:175]
def extractCredential(
response: GetItemResponse,
user: UserIdentity
): Try[CredentialRecord] = {
if (response.hasItem) {
Try {
val item = response.item()
val attestationStmt = objConverter.getCborConverter.readValue(
Base64UrlUtil.decode(item.get("attestationStatement").s()),
classOf[NoneAttestationStatement]
)
val counter = item.get("authCounter").n().toLong
val credentialData = credentialDataConverter.convert(
Base64UrlUtil.decode(item.get("credential").s())
)
val authExts = objConverter.getCborConverter.readValue(
Base64UrlUtil.decode(item.get("authenticatorExtensions").s()),
classOf[AuthenticationExtensionsAuthenticatorOutputs[
RegistrationExtensionAuthenticatorOutput
]]
)
new CredentialRecordImpl(
attestationStmt,
null,
null,
null,
counter,
credentialData,
authExts,
null,
null,
null
)
}.recoverWith(err =>
Failure(
JanusException(
userMessage = "Invalid registered passkey",
engineerMessage =
s"Failed to extract credential data for user ${user.username}: ${err.getMessage}",
httpCode = INTERNAL_SERVER_ERROR,
causedBy = Some(err)
)
)
)
} else {
Failure(
JanusException(
userMessage = "Failed to find registered passkey",
engineerMessage =
s"Credential data not found for user ${user.username}: GetItem response: $response",
httpCode = INTERNAL_SERVER_ERROR,
causedBy = None
)
)
}
}