finish.tsx 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import { PAGES } from "@ente/accounts/constants/pages";
  2. import { VerticallyCentered } from "@ente/shared/components/Container";
  3. import EnteSpinner from "@ente/shared/components/EnteSpinner";
  4. import InMemoryStore, { MS_KEYS } from "@ente/shared/storage/InMemoryStore";
  5. import { LS_KEYS, getData, setData } from "@ente/shared/storage/localStorage";
  6. import { useRouter } from "next/router";
  7. import { useEffect } from "react";
  8. const PasskeysFinishPage = () => {
  9. const router = useRouter();
  10. const init = async () => {
  11. // get response from query params
  12. const searchParams = new URLSearchParams(window.location.search);
  13. const response = searchParams.get("response");
  14. if (!response) return;
  15. // decode response
  16. const decodedResponse = JSON.parse(atob(response));
  17. const { keyAttributes, encryptedToken, token, id } = decodedResponse;
  18. setData(LS_KEYS.USER, {
  19. ...getData(LS_KEYS.USER),
  20. token,
  21. encryptedToken,
  22. id,
  23. });
  24. setData(LS_KEYS.KEY_ATTRIBUTES, keyAttributes);
  25. const redirectURL = InMemoryStore.get(MS_KEYS.REDIRECT_URL);
  26. InMemoryStore.delete(MS_KEYS.REDIRECT_URL);
  27. router.push(redirectURL ?? PAGES.ROOT);
  28. };
  29. useEffect(() => {
  30. init();
  31. }, []);
  32. return (
  33. <VerticallyCentered>
  34. <EnteSpinner />
  35. </VerticallyCentered>
  36. );
  37. };
  38. export default PasskeysFinishPage;