// Copyright (c) 2016-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. import React from 'react'; import {Modal, Button} from 'react-bootstrap'; import {FormattedMessage, injectIntl, IntlShape} from 'react-intl'; import {PermissionType} from 'types/trustedOrigin'; import {ModalMessage} from 'types/modals'; import urlUtil from 'common/utils/url'; import {t} from 'common/utils/util'; import {MODAL_INFO} from 'common/communication'; import {PERMISSION_DESCRIPTION} from 'common/permissions'; import IntlProvider from 'renderer/intl_provider'; type Props = { handleDeny: React.MouseEventHandler; handleGrant: React.MouseEventHandler; getPermissionInfo: () => void; openExternalLink: (protocol: string, url: string) => void; intl: IntlShape; }; type State = { url?: string; permission?: PermissionType; } class PermissionModal extends React.PureComponent { constructor(props: Props) { super(props); this.state = {}; } componentDidMount() { window.addEventListener('message', this.handlePermissionInfoMessage); this.props.getPermissionInfo(); } componentWillUnmount() { window.removeEventListener('message', this.handlePermissionInfoMessage); } handlePermissionInfoMessage = (event: {data: ModalMessage<{url: string; permission: PermissionType}>}) => { switch (event.data.type) { case MODAL_INFO: { const {url, permission} = event.data.data; this.setState({url, permission}); break; } default: break; } } getModalTitle() { const permission = this.props.intl.formatMessage({id: `common.permissions.${PERMISSION_DESCRIPTION[this.state.permission!]}`}); return this.props.intl.formatMessage({id: 'renderer.modals.permission.permissionModal.title', defaultMessage: '{permission} Required'}, {permission}); } getModalBody() { const {url, permission} = this.state; const originDisplay = url ? urlUtil.getHost(url) : this.props.intl.formatMessage({id: 'renderer.modals.permission.permissionModal.unknownOrigin', defaultMessage: 'unknown origin'}); const originLink = url ? originDisplay : ''; const click = (e: React.MouseEvent) => { e.preventDefault(); let parseUrl; try { parseUrl = urlUtil.parseURL(originLink); this.props.openExternalLink(parseUrl!.protocol, originLink); } catch (err) { console.error(`invalid url ${originLink} supplied to externallink: ${err}`); } }; return (

{}

{originDisplay}

); } render() { return ( {}} > {this.getModalTitle()} {this.getModalBody()}
); } } t('common.permissions.canBasicAuth'); export default injectIntl(PermissionModal);