From 52ce12656e535ddc0242977920c2b6fd04f97a33 Mon Sep 17 00:00:00 2001 From: Zoey Date: Wed, 14 Jan 2026 17:53:25 +0100 Subject: [PATCH] render totp qrcode locally (do not expose the totp secret to a third party api) Signed-off-by: Zoey --- frontend/package.json | 1 + frontend/src/modals/TwoFactorModal.tsx | 8 ++------ frontend/yarn.lock | 5 +++++ 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/frontend/package.json b/frontend/package.json index e0a36a17e5..dcd664c86e 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -28,6 +28,7 @@ "formik": "^2.4.6", "generate-password-browser": "^1.1.0", "humps": "^2.0.1", + "qrcode.react": "^4.2.0", "query-string": "^9.3.1", "react": "^19.2.3", "react-bootstrap": "^2.10.10", diff --git a/frontend/src/modals/TwoFactorModal.tsx b/frontend/src/modals/TwoFactorModal.tsx index b5dd480c30..e2cbe9d2d0 100644 --- a/frontend/src/modals/TwoFactorModal.tsx +++ b/frontend/src/modals/TwoFactorModal.tsx @@ -1,5 +1,6 @@ import EasyModal, { type InnerModalProps } from "ez-modal-react"; import { Field, Form, Formik } from "formik"; +import { QRCodeSVG } from "qrcode.react"; import { type ReactNode, useCallback, useEffect, useState } from "react"; import { Alert } from "react-bootstrap"; import Modal from "react-bootstrap/Modal"; @@ -166,12 +167,7 @@ const TwoFactorModal = EasyModal.create(({ id, visible, remove }: Props) => {

- QR Code +