// Copyright (c) 2016-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. import React from 'react'; import {FormattedMessage, injectIntl} from 'react-intl'; import type {IntlShape} from 'react-intl'; import {PERMISSION_DESCRIPTION} from 'common/permissions'; import {parseURL} from 'common/utils/url'; import {t} from 'common/utils/util'; import {Modal} from 'renderer/components/Modal'; import type {PermissionModalInfo} from 'types/modals'; type Props = { handleDeny: () => void; handleGrant: () => void; getPermissionInfo: () => Promise; openExternalLink: (protocol: string, url: string) => void; intl: IntlShape; }; type State = Partial; class PermissionModal extends React.PureComponent { constructor(props: Props) { super(props); this.state = {}; } getPermissionInfo = async () => { const {url, permission} = await this.props.getPermissionInfo(); this.setState({url, permission}); }; async componentDidMount() { await this.getPermissionInfo(); } getModalTitle() { if (!this.state.permission) { return null; } const permission = this.props.intl.formatMessage({id: PERMISSION_DESCRIPTION[this.state.permission!]}); return this.props.intl.formatMessage({id: 'renderer.modals.permission.permissionModal.title', defaultMessage: '{permission} Required'}, {permission}); } getModalBody() { if (!this.state.permission) { return null; } const {url, permission} = this.state; const originDisplay = url ? parseURL(url)?.origin : this.props.intl.formatMessage({id: 'renderer.modals.permission.permissionModal.unknownOrigin', defaultMessage: 'unknown origin'}); const originLink = originDisplay ?? ''; const click = (e: React.MouseEvent) => { e.preventDefault(); let parseUrl; try { parseUrl = parseURL(originLink); this.props.openExternalLink(parseUrl!.protocol, originLink); } catch (err) { console.error(`invalid url ${originLink} supplied to externallink: ${err}`); } }; return ( <>

( {msg} ), }} /> ); } render() { return ( {}} modalHeaderText={this.getModalTitle()} handleConfirm={this.props.handleGrant} handleEnterKeyPress={this.props.handleGrant} confirmButtonText={ } handleCancel={this.props.handleDeny} > {this.getModalBody()} ); } } t('common.permissions.canBasicAuth'); export default injectIntl(PermissionModal);