// Copyright (c) 2016-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. import React, {Fragment} from 'react'; import PropTypes from 'prop-types'; import {Modal, Button, Row, Col} from 'react-bootstrap'; export default class ShowCertificateModal extends React.PureComponent { static propTypes = { certificate: PropTypes.object, onOk: PropTypes.func.isRequired, }; constructor(props) { super(props); this.state = { certificate: props.certificate, }; } handleOk = () => { this.setState({certificate: null}); this.props.onOk(); } render() { const certificateSection = (descriptor) => { return (
{descriptor}
); }; const certificateItem = (descriptor, value) => { const val = value ? `${value}` : ; return (
{descriptor}
{val}
); }; if (this.state.certificate === null) { return ( {'No certificate Selected'} ); } const utcSeconds = (date) => { const d = new Date(0); d.setUTCSeconds(date); return d; }; const expiration = utcSeconds(this.state.certificate.validExpiry); const creation = utcSeconds(this.state.certificate.validStart); const dateDisplayOptions = {dateStyle: 'full', timeStyle: 'full'}; const dateLocale = 'en-US'; return ( {'Certificate information'}

{'Details'}

{certificateSection('Subject Name')} {certificateItem('Common Name', this.state.certificate.subject.commonName)}
{certificateSection('Issuer Name')} {certificateItem('Common Name', this.state.certificate.issuer.commonName)}
{certificateItem('Serial Number', this.state.certificate.serialNumber)} {certificateItem('Not Valid Before', creation.toLocaleString(dateLocale, dateDisplayOptions))} {certificateItem('Not Valid After', expiration.toLocaleString(dateLocale, dateDisplayOptions))}
{certificateSection('Public Key Info')} {certificateItem('Algorithm', this.state.certificate.fingerprint.split('/')[0])}
); } }