2
0

webauthn-login.js 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. /*
  2. * Copyright 2002-2024 the original author or authors.
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * https://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. "use strict";
  17. import webauthn from "./webauthn-core.js";
  18. async function authenticateOrError(headers, contextPath, useConditionalMediation) {
  19. try {
  20. const redirectUrl = await webauthn.authenticate(headers, contextPath, useConditionalMediation);
  21. window.location.href = redirectUrl;
  22. } catch (err) {
  23. console.error(err);
  24. window.location.href = `${contextPath}/login?error`;
  25. }
  26. }
  27. async function conditionalMediation(headers, contextPath) {
  28. const available = await webauthn.isConditionalMediationAvailable();
  29. if (available) {
  30. await authenticateOrError(headers, contextPath, true);
  31. }
  32. return available;
  33. }
  34. export async function setupLogin(headers, contextPath, signinButton) {
  35. signinButton.addEventListener("click", async () => {
  36. await authenticateOrError(headers, contextPath, false);
  37. });
  38. // FIXME: conditional mediation triggers browser crashes
  39. // See: https://github.com/rwinch/spring-security-webauthn/issues/73
  40. // await conditionalMediation(headers, contextPath);
  41. }