// Copyright (c) 2016-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. import type {Certificate} from 'electron/renderer'; import React, {Fragment} from 'react'; import {FormattedMessage} from 'react-intl'; import {Modal} from 'renderer/components/Modal'; import IntlProvider from 'renderer/intl_provider'; type Props = { certificate: Certificate; onOk: () => void; }; type State = { certificate?: Certificate; } export default class ShowCertificateModal extends React.PureComponent { constructor(props: Props) { super(props); this.state = { certificate: props.certificate, }; } handleOk = () => { this.setState({certificate: undefined}); this.props.onOk(); }; render() { const certificateSection = (descriptor: React.ReactNode) => { return (
{descriptor}
); }; const certificateItem = (descriptor: React.ReactNode, value: React.ReactNode) => { const val = value ? `${value}` : ; return (
{descriptor}
{val}
); }; const utcSeconds = (date: number) => { const d = new Date(0); d.setUTCSeconds(date); return d; }; const expiration = utcSeconds(this.state.certificate?.validExpiry || 0); const creation = utcSeconds(this.state.certificate?.validStart || 0); const dateDisplayOptions = {dateStyle: 'full' as const, timeStyle: 'full' as const}; const dateLocale = 'en-US'; // TODO: Translate? return ( } confirmButtonText={ } handleConfirm={this.handleOk} >
{certificateSection( , )} {certificateItem( , this.state.certificate?.subject.commonName, )}
{certificateSection( , )} {certificateItem( , this.state.certificate?.issuer.commonName, )}
{certificateItem( , this.state.certificate?.serialNumber, )} {certificateItem( , creation.toLocaleString(dateLocale, dateDisplayOptions), )} {certificateItem( , expiration.toLocaleString(dateLocale, dateDisplayOptions), )}
{certificateSection( , )} {certificateItem( , this.state.certificate?.fingerprint.split('/')[0], )}
); } }