Skip to content

Commit

Permalink
Add data-status-enum attribute as a needle for testing purposes
Browse files Browse the repository at this point in the history
  • Loading branch information
Stormheg committed Nov 29, 2024
1 parent 8dd9dd3 commit dd5a3aa
Show file tree
Hide file tree
Showing 3 changed files with 48 additions and 2 deletions.
18 changes: 17 additions & 1 deletion client/src/auth.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { State, Config } from "./types";
import { State, Config, StatusEnum } from "./types";
import { getConfig } from "./utils";
import {
browserSupportsWebAuthn,
Expand Down Expand Up @@ -220,6 +220,7 @@ import {
);
await setPasskeyVerifyState({
buttonDisabled: true,
statusEnum: StatusEnum.BUSY,
buttonLabel: gettext("Verifying..."),
});

Expand All @@ -238,6 +239,7 @@ import {
buttonDisabled: false,
buttonLabel,
requestFocus: true,
statusEnum: StatusEnum.GET_OPTIONS_FAILED,
status: gettext(
"Verification failed. Could not retrieve parameters from the server.",
),
Expand Down Expand Up @@ -271,6 +273,7 @@ import {
buttonDisabled: false,
buttonLabel,
requestFocus: true,
statusEnum: StatusEnum.ABORTED,
status: gettext("Verification aborted."),
});
break;
Expand All @@ -279,6 +282,7 @@ import {
buttonDisabled: false,
buttonLabel,
requestFocus: true,
statusEnum: StatusEnum.NOT_ALLOWED_OR_ABORTED,
status: gettext("Verification canceled or not allowed."),
});
break;
Expand All @@ -287,6 +291,7 @@ import {
buttonDisabled: false,
buttonLabel,
requestFocus: true,
statusEnum: StatusEnum.UNKNOWN_ERROR,
status: gettext(
"Verification failed. An unknown error occurred.",
),
Expand All @@ -308,6 +313,7 @@ import {

await setPasskeyVerifyState({
buttonDisabled: true,
statusEnum: StatusEnum.BUSY,
buttonLabel: gettext("Finishing verification..."),
});

Expand Down Expand Up @@ -340,6 +346,7 @@ import {
buttonDisabled: false,
buttonLabel,
requestFocus: true,
statusEnum: StatusEnum.SERVER_ERROR,
status: gettext(
"Verification failed. An unknown server error occurred.",
),
Expand All @@ -366,6 +373,7 @@ import {
await setPasskeyVerifyState({
buttonDisabled: false,
buttonLabel,
statusEnum: StatusEnum.SERVER_ERROR,
requestFocus: true,
status: msg,
});
Expand All @@ -386,6 +394,7 @@ import {
await setPasskeyVerifyState({
buttonDisabled: false,
buttonLabel,
statusEnum: StatusEnum.SUCCESS,
status: gettext("Verification successful!"),
});

Expand All @@ -411,6 +420,7 @@ import {
await setPasskeyVerifyState({
buttonDisabled: false,
buttonLabel,
statusEnum: StatusEnum.SERVER_ERROR,
requestFocus: true,
status: msg,
});
Expand All @@ -432,6 +442,12 @@ import {
passkeyAuthButton.disabled = state.buttonDisabled;
passkeyAuthButton.textContent = state.buttonLabel;

if (state.statusEnum) {
passkeyStatusText.setAttribute("data-status-enum", state.statusEnum);
} else {
passkeyStatusText.removeAttribute("data-status-enum");
}

if (passkeyStatusText) {
// If there is a status message, we want to make sure screen readers
// announce it to the user for clarity as to what is happening.
Expand Down
19 changes: 18 additions & 1 deletion client/src/register.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { State, Config } from "./types";
import { State, Config, StatusEnum } from "./types";
import { getConfig } from "./utils";
import {
browserSupportsWebAuthn,
Expand Down Expand Up @@ -60,6 +60,7 @@ import {
buttonDisabled: false,
buttonLabel,
requestFocus: true,
statusEnum: StatusEnum.GET_OPTIONS_FAILED,
status: gettext(
"Registration failed. Unable to fetch registration options from server.",
),
Expand Down Expand Up @@ -89,6 +90,7 @@ import {
setPasskeyRegisterState({
buttonDisabled: false,
buttonLabel,
statusEnum: StatusEnum.ABORTED,
status: gettext("Registration aborted."),
requestFocus: true,
});
Expand All @@ -97,6 +99,7 @@ import {
setPasskeyRegisterState({
buttonDisabled: false,
buttonLabel,
statusEnum: StatusEnum.STATE_ERROR,
status: gettext(
"Registration failed. You most likely already have a Passkey registered for this site.",
),
Expand All @@ -107,6 +110,7 @@ import {
setPasskeyRegisterState({
buttonDisabled: false,
buttonLabel,
statusEnum: StatusEnum.NOT_ALLOWED_OR_ABORTED,
status: gettext("Registration aborted or not allowed."),
requestFocus: true,
});
Expand All @@ -115,6 +119,7 @@ import {
setPasskeyRegisterState({
buttonDisabled: false,
buttonLabel,
statusEnum: StatusEnum.SECURITY_ERROR,
status: gettext(
"Registration failed. A technical problem occurred that prevents you from registering a Passkey for this site.",
),
Expand All @@ -125,6 +130,7 @@ import {
setPasskeyRegisterState({
buttonDisabled: false,
buttonLabel,
statusEnum: StatusEnum.UNKNOWN_ERROR,
status: gettext(
"Registration failed. An unknown error occurred.",
),
Expand All @@ -146,6 +152,7 @@ import {

setPasskeyRegisterState({
buttonDisabled: true,
statusEnum: StatusEnum.BUSY,
buttonLabel: gettext("Finishing registration..."),
});

Expand All @@ -164,6 +171,7 @@ import {
setPasskeyRegisterState({
buttonDisabled: false,
buttonLabel,
statusEnum: StatusEnum.SERVER_ERROR,
status: gettext(
"Registration failed. The server was unable to verify this passkey.",
),
Expand All @@ -189,6 +197,7 @@ import {
setPasskeyRegisterState({
buttonDisabled: false,
buttonLabel,
statusEnum: StatusEnum.SERVER_ERROR,
status: gettext("Registration failed. A server error occurred."),
requestFocus: true,
});
Expand All @@ -211,6 +220,7 @@ import {
setPasskeyRegisterState({
buttonDisabled: false,
buttonLabel,
statusEnum: StatusEnum.SUCCESS,
status: gettext("Registration successful!"),
requestFocus: true,
});
Expand All @@ -230,6 +240,7 @@ import {
setPasskeyRegisterState({
buttonDisabled: false,
buttonLabel,
statusEnum: StatusEnum.SERVER_ERROR,
status: msg,
requestFocus: true,
});
Expand Down Expand Up @@ -258,6 +269,12 @@ import {
passkeyRegisterButton.disabled = state.buttonDisabled;
passkeyRegisterButton.textContent = state.buttonLabel;

if (state.statusEnum) {
passkeyStatusText.setAttribute("data-status-enum", state.statusEnum);
} else {
passkeyStatusText.removeAttribute("data-status-enum");
}

if (passkeyStatusText) {
if (state.status) {
// If there is a status message, we want to make sure screen readers
Expand Down
13 changes: 13 additions & 0 deletions client/src/types.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,21 @@
export enum StatusEnum {
UNKNOWN_ERROR = "unknown-error",
STATE_ERROR = "state-error",
SECURITY_ERROR = "security-error",
GET_OPTIONS_FAILED = "get-options-failed",
ABORTED = "aborted",
NOT_ALLOWED_OR_ABORTED = "not-allowed-or-aborted",
SERVER_ERROR = "server-error",
SUCCESS = "success",
BUSY = "busy",
}

export type State = {
buttonDisabled: boolean;
buttonLabel: string;
/** Text to display in the status field. */
status?: string;
statusEnum?: StatusEnum;
/** Request the focus be returned to the button. */
requestFocus?: boolean;
};
Expand Down

0 comments on commit dd5a3aa

Please sign in to comment.