From 58382b7965c0b7be4a3cfa5a2fd0d94936a5c4b0 Mon Sep 17 00:00:00 2001 From: Kristóf Marussy Date: Tue, 19 Apr 2022 02:42:54 +0200 Subject: feat(renderer): Error pages MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Display an error page when page loading fails. Error messages should be tweaked for messaging applications (not browsers), because people won't neccessarily expect browser errors in a messenger. We still need a component to property show a certificate that failed validation so people can decide whether to trust it temporarily. Signed-off-by: Kristóf Marussy --- .../components/errorPage/CertificateDetails.tsx | 92 ++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 packages/renderer/src/components/errorPage/CertificateDetails.tsx (limited to 'packages/renderer/src/components/errorPage/CertificateDetails.tsx') diff --git a/packages/renderer/src/components/errorPage/CertificateDetails.tsx b/packages/renderer/src/components/errorPage/CertificateDetails.tsx new file mode 100644 index 0000000..044cb5c --- /dev/null +++ b/packages/renderer/src/components/errorPage/CertificateDetails.tsx @@ -0,0 +1,92 @@ +/* + * Copyright (C) 2022 Kristóf Marussy + * + * This file is part of Sophie. + * + * Sophie 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, version 3. + * + * This program 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 this program. If not, see . + * + * SPDX-License-Identifier: AGPL-3.0-only + */ + +import ExpandMoreIcon from '@mui/icons-material/ExpandMore'; +import WarningAmberIcon from '@mui/icons-material/WarningAmber'; +import Accordion from '@mui/material/Accordion'; +import AccordionDetails from '@mui/material/AccordionDetails'; +import AccordionSummary from '@mui/material/AccordionSummary'; +import Box from '@mui/material/Box'; +import Button from '@mui/material/Button'; +import Typography from '@mui/material/Typography'; +import { observer } from 'mobx-react-lite'; +import React from 'react'; +import { useTranslation } from 'react-i18next'; + +import type Service from '../../stores/Service'; + +const SUMMARY_ID = 'Sophie-CertificateDetails-header'; +const DETAILS_ID = 'Sophie-CertificateDetails-content'; + +function CertificateDetails({ + service, +}: { + service: Service; +}): JSX.Element | null { + const { t } = useTranslation(undefined, { + keyPrefix: 'error.certificateError.details', + }); + + const { state } = service; + const { type: errorType } = state; + + if (errorType !== 'certificateError') { + // eslint-disable-next-line unicorn/no-null -- React requires `null` to skip rendering. + return null; + } + + const { certificate, trust } = state; + + return ( + + } + > + {t('title')} + + + + {JSON.stringify(certificate)} + + + {t('warning')} + + + + + + + ); +} + +export default observer(CertificateDetails); -- cgit v1.2.3-54-g00ecf