diff --git a/app/assets/stylesheets/main.scss b/app/assets/stylesheets/main.scss index 062888810..4331c416f 100644 --- a/app/assets/stylesheets/main.scss +++ b/app/assets/stylesheets/main.scss @@ -83,6 +83,7 @@ $path: '/static/images/'; @import 'views/get_started'; @import 'views/history'; @import 'views/cookies'; +@import 'views/webauthn'; // TODO: break this up @import 'app'; diff --git a/app/assets/stylesheets/views/webauthn.scss b/app/assets/stylesheets/views/webauthn.scss new file mode 100644 index 000000000..3e0de527e --- /dev/null +++ b/app/assets/stylesheets/views/webauthn.scss @@ -0,0 +1,25 @@ +.webauthn__no-js { + .js-enabled & { + display: none; + } +} + +.webauthn__api-missing { + display: none; + + .js-enabled & { + display: block; + } + + .js-enabled.webauthn-api-enabled & { + display: none; + } +} + +.webauthn__api-required { + display: none; + + .webauthn-api-enabled & { + display: block; + } +} diff --git a/app/templates/admin_template.html b/app/templates/admin_template.html index f8de636a8..814ea7c54 100644 --- a/app/templates/admin_template.html +++ b/app/templates/admin_template.html @@ -1,6 +1,7 @@ {% extends "template.njk" %} {% from "components/banner.html" import banner %} {% from "components/cookie-banner.html" import cookie_banner %} +{% from "components/webauthn-api-check.html" import webauthn_api_check %} {% block headIcons %} @@ -38,6 +39,10 @@ {% endblock %} {% block bodyStart %} + {% block webauthn_api %} + {{ webauthn_api_check() }} + {% endblock %} + {% block cookie_message %} {{ cookie_banner() }} {% endblock %} diff --git a/app/templates/components/webauthn-api-check.html b/app/templates/components/webauthn-api-check.html new file mode 100644 index 000000000..19bc56bc5 --- /dev/null +++ b/app/templates/components/webauthn-api-check.html @@ -0,0 +1,7 @@ +{% macro webauthn_api_check() %} + +{% endmacro %} diff --git a/app/templates/views/user-profile/security-keys.html b/app/templates/views/user-profile/security-keys.html index 625b98ce1..b30e79d16 100644 --- a/app/templates/views/user-profile/security-keys.html +++ b/app/templates/views/user-profile/security-keys.html @@ -3,6 +3,7 @@ {% from "components/button/macro.njk" import govukButton %} {% from "components/back-link/macro.njk" import govukBackLink %} {% from "components/table.html" import mapping_table, row, field, row_heading %} +{% from "vendor/govuk-frontend/components/error-message/macro.njk" import govukErrorMessage %} {% set page_title = 'Security keys' %} {% set credentials = current_user.webauthn_credentials %} @@ -45,10 +46,20 @@ {% endif %} + {{ govukErrorMessage({ + "classes": "webauthn__api-missing", + "text": "Your browser does not support security keys. Try signing in to Notify using a different browser." + }) }} + + {{ govukErrorMessage({ + "classes": "webauthn__no-js", + "text": "JavaScript is not available for this page. Security keys need JavaScript to work." + }) }} + {{ govukButton({ "element": "button", "text": "Register a key", - "classes": "govuk-button--secondary", + "classes": "govuk-button--secondary webauthn__api-required", "attributes": { "data-module": "register-security-key", "data-csrf-token": csrf_token(),