diff --git a/README.md b/README.md index 5efcd9e..8567731 100644 --- a/README.md +++ b/README.md @@ -9,35 +9,7 @@ @@ -50,6 +22,6 @@ -``` \ No newline at end of file +``` diff --git a/src/public/js/passkey.js b/src/public/js/passkey.js index 8cc55c2..7c2b611 100644 --- a/src/public/js/passkey.js +++ b/src/public/js/passkey.js @@ -82,7 +82,7 @@ function passkey_check_browser() /** * Register/Create a passkey for a user */ -async function passkey_register(csrf_token,icon_dom,icon,icon_shell_success,icon_shell_fail) +async function passkey_register(csrf_token,icon_dom,icon,icon_shell_current,icon_shell_success,icon_shell_fail) { try { if (! passkey_check_browser()) @@ -135,7 +135,7 @@ async function passkey_register(csrf_token,icon_dom,icon,icon_shell_success,icon console.log('Passkey: Registration Success'); icon_dom.find('i').addClass(icon).removeClass('spinner-grow spinner-grow-sm'); - icon_dom.removeClass('btn-outline-primary').addClass('btn-primary'); + icon_dom.removeClass(icon_shell_current).addClass(icon_shell_success); }, error: function(e,status,error) { throw new Error(status || 'Unknown error occurred'); @@ -147,7 +147,7 @@ async function passkey_register(csrf_token,icon_dom,icon,icon_shell_success,icon console.log(status || 'Passkey: User Aborted Register'); // Restore the icon - icon_dom.find('i').addClass(icon).removeClass('spinner-grow spinner-grow-sm'); + icon_dom.removeClass(icon_shell_current).addClass(icon_shell_fail).find('i').addClass(icon).removeClass('spinner-grow spinner-grow-sm'); return; } @@ -222,4 +222,37 @@ async function passkey_check(csrf_token,redirect) } catch (err) { window.alert(err || 'An UNKNOWN error occurred?'); } +} + +function passkey_create(object,csrf,icon,icon_class_current,icon_class_success,icon_class_nop) +{ + if (passkey_debug) + console.log('Passkey: Create Click'); + + // Availability of `window.PublicKeyCredential` means WebAuthn is usable. + // `isUserVerifyingPlatformAuthenticatorAvailable` means the feature detection is usable. + // `sConditionalMediationAvailable` means the feature detection is usable. + if (window.PublicKeyCredential && + PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable && + PublicKeyCredential.isConditionalMediationAvailable) { + // Check if user verifying platform authenticator is available. + Promise.all([ + PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable(), + PublicKeyCredential.isConditionalMediationAvailable(), + ]).then(results => { + if (passkey_debug) + console.log('Passkey: Browser Supported'); + + if (results.every(r => r === true)) { + passkey_register(csrf,object,icon,icon_class_current,icon_class_success,icon_class_nop); + } else { + alert('It seems that passkey is NOT supported by your browse (B)'); + } + }); + + } else { + alert('It seems that passkey is NOT supported by your browser (A)'); + } + + return false; } \ No newline at end of file