import { encodeCrock, stringToBytes } from "@gnu-taler/taler-util"; import { Fragment, h, VNode } from "preact"; import { useLayoutEffect, useRef, useState } from "preact/hooks"; import { AuthMethodSetupProps } from "."; import { PhoneNumberInput } from "../../../components/fields/NumberInput"; import { AnastasisClientFrame } from "../index"; const REGEX_JUST_NUMBERS = /^\+[0-9 ]*$/; function isJustNumbers(str: string): boolean { return REGEX_JUST_NUMBERS.test(str); } export function AuthMethodSmsSetup({ addAuthMethod, cancel, configured, }: AuthMethodSetupProps): VNode { const [mobileNumber, setMobileNumber] = useState("+"); const addSmsAuth = (): void => { addAuthMethod({ authentication_method: { type: "sms", instructions: `SMS to ${mobileNumber}`, challenge: encodeCrock(stringToBytes(mobileNumber)), }, }); }; const inputRef = useRef(null); useLayoutEffect(() => { inputRef.current?.focus(); }, []); const errors = !mobileNumber ? "Add a mobile number" : !mobileNumber.startsWith("+") ? "Mobile number should start with '+'" : !isJustNumbers(mobileNumber) ? "Mobile number can't have other than numbers" : undefined; function goNextIfNoErrors(): void { if (!errors) addSmsAuth(); } return (

For SMS authentication, you need to provide a mobile number. When recovering your secret, you will be asked to enter the code you receive via SMS.

Enter mobile number including +CC international dialing prefix.
{configured.length > 0 && (
Your mobile numbers:
{configured.map((c, i) => { return (

{c.instructions}

); })}
)}
); }