/* This file is part of GNU Anastasis (C) 2021-2022 Anastasis SARL GNU Anastasis is free software; you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GNU Anastasis is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with GNU Anastasis; see the file COPYING. If not, see */ import { encodeCrock, stringToBytes } from "@gnu-taler/taler-util"; import { h, VNode } from "preact"; import { useLayoutEffect, useRef, useState } from "preact/hooks"; import { PhoneNumberInput } from "../../../components/fields/NumberInput.js"; import { AnastasisClientFrame } from "../index.js"; import { AuthMethodSetupProps } from "./index.js"; 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}

); })}
)}
); }