aboutsummaryrefslogtreecommitdiff
path: root/packages/anastasis-webui/src/pages/home/authMethodSetup/AuthMethodEmailSetup.tsx
diff options
context:
space:
mode:
authorSebastian <sebasjm@gmail.com>2021-11-01 16:10:49 -0300
committerSebastian <sebasjm@gmail.com>2021-11-01 16:10:55 -0300
commit88d142d2098ad87613222e9a0c6df478a78f6528 (patch)
treec5552e43a4641edb233fc858670d50c41d2c7c9b /packages/anastasis-webui/src/pages/home/authMethodSetup/AuthMethodEmailSetup.tsx
parentea2acd1d3caa21f23127687214045a49d8fea0ad (diff)
downloadwallet-core-88d142d2098ad87613222e9a0c6df478a78f6528.tar.xz
more styling
added placeholders for inputs import declaration for png next button now has tooltip providing info about whats missing a lot more of examples for UI testing added qr dependency for totp rendering added email and field input types added all auth method setup screens added modal when there is not auth provider merge continent and country into location section others improvements as well...
Diffstat (limited to 'packages/anastasis-webui/src/pages/home/authMethodSetup/AuthMethodEmailSetup.tsx')
-rw-r--r--packages/anastasis-webui/src/pages/home/authMethodSetup/AuthMethodEmailSetup.tsx62
1 files changed, 62 insertions, 0 deletions
diff --git a/packages/anastasis-webui/src/pages/home/authMethodSetup/AuthMethodEmailSetup.tsx b/packages/anastasis-webui/src/pages/home/authMethodSetup/AuthMethodEmailSetup.tsx
new file mode 100644
index 000000000..e8cee9cb4
--- /dev/null
+++ b/packages/anastasis-webui/src/pages/home/authMethodSetup/AuthMethodEmailSetup.tsx
@@ -0,0 +1,62 @@
+/* eslint-disable @typescript-eslint/camelcase */
+import {
+ encodeCrock,
+ stringToBytes
+} from "@gnu-taler/taler-util";
+import { Fragment, h, VNode } from "preact";
+import { useState } from "preact/hooks";
+import { AuthMethodSetupProps } from "../AuthenticationEditorScreen";
+import { AnastasisClientFrame } from "../index";
+import { TextInput } from "../../../components/fields/TextInput";
+import { EmailInput } from "../../../components/fields/EmailInput";
+
+const EMAIL_PATTERN = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
+
+export function AuthMethodEmailSetup({ cancel, addAuthMethod, configured }: AuthMethodSetupProps): VNode {
+ const [email, setEmail] = useState("");
+ const addEmailAuth = (): void => addAuthMethod({
+ authentication_method: {
+ type: "email",
+ instructions: `Email to ${email}`,
+ challenge: encodeCrock(stringToBytes(email)),
+ },
+ });
+ const emailError = !EMAIL_PATTERN.test(email) ? 'Email address is not valid' : undefined
+ const errors = !email ? 'Add your email' : emailError
+
+ return (
+ <AnastasisClientFrame hideNav title="Add email authentication">
+ <p>
+ For email authentication, you need to provide an email address. When
+ recovering your secret, you will need to enter the code you receive by
+ email.
+ </p>
+ <div>
+ <EmailInput
+ label="Email address"
+ error={emailError}
+ placeholder="email@domain.com"
+ bind={[email, setEmail]} />
+ </div>
+ {configured.length > 0 && <section class="section">
+ <div class="block">
+ Your emails:
+ </div><div class="block">
+ {configured.map((c, i) => {
+ return <div key={i} class="box" style={{ display: 'flex', justifyContent: 'space-between' }}>
+ <p style={{ marginBottom: 'auto', marginTop: 'auto' }}>{c.instructions}</p>
+ <div><button class="button is-danger" onClick={c.remove} >Delete</button></div>
+ </div>
+ })}
+ </div></section>}
+ <div>
+ <div style={{ marginTop: '2em', display: 'flex', justifyContent: 'space-between' }}>
+ <button class="button" onClick={cancel}>Canceul</button>
+ <span data-tooltip={errors}>
+ <button class="button is-info" disabled={errors !== undefined} onClick={addEmailAuth}>Add</button>
+ </span>
+ </div>
+ </div>
+ </AnastasisClientFrame>
+ );
+}