From e6570dd7ec5d7aea3c3d0c0235476a1227bbe71f Mon Sep 17 00:00:00 2001 From: MohamedBassem Date: Tue, 5 Mar 2024 18:27:38 +0000 Subject: extension: Instead of manually creating api keys, let users exchange their username passwords for one --- packages/browser-extension/src/SignInPage.tsx | 87 +++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 packages/browser-extension/src/SignInPage.tsx (limited to 'packages/browser-extension/src/SignInPage.tsx') diff --git a/packages/browser-extension/src/SignInPage.tsx b/packages/browser-extension/src/SignInPage.tsx new file mode 100644 index 00000000..203480f7 --- /dev/null +++ b/packages/browser-extension/src/SignInPage.tsx @@ -0,0 +1,87 @@ +import { useState } from "react"; +import { api } from "./utils/trpc"; +import usePluginSettings from "./utils/settings"; +import { useNavigate } from "react-router-dom"; + +export default function SignInPage() { + const navigate = useNavigate(); + const { setSettings } = usePluginSettings(); + + const { + mutate: login, + error, + isPending, + } = api.apiKeys.exchange.useMutation({ + onSuccess: (resp) => { + setSettings((s) => ({ ...s, apiKey: resp.key })); + navigate("/options"); + }, + onError: () => {}, + }); + + const [formData, setFormData] = useState<{ + email: string; + password: string; + }>({ + email: "", + password: "", + }); + + const onSubmit = (e: React.FormEvent) => { + e.preventDefault(); + const randStr = (Math.random() + 1).toString(36).substring(5); + login({ ...formData, keyName: `Browser extension: (${randStr})` }); + }; + + let errorMessage = ""; + if (error) { + if (error.data?.code == "UNAUTHORIZED") { + errorMessage = "Wrong username or password"; + } else { + errorMessage = error.message; + } + } + + return ( +
+

Login

+

{errorMessage}

+
+
+ + + setFormData((f) => ({ ...f, email: e.target.value })) + } + type="text" + name="email" + className="h-8 flex-1 rounded-lg border border-gray-300 p-2" + /> +
+
+ + + setFormData((f) => ({ + ...f, + password: e.target.value, + })) + } + type="password" + name="password" + className="h-8 flex-1 rounded-lg border border-gray-300 p-2" + /> +
+ +
+
+ ); +} -- cgit v1.2.3-70-g09d2