mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-11-26 12:29:06 +01:00
91 lines
2.8 KiB
JavaScript
91 lines
2.8 KiB
JavaScript
import React, { useContext } from 'react';
|
|
import PropTypes from 'prop-types';
|
|
import { captureException } from '@sentry/browser';
|
|
|
|
import { Text } from '../../../component-library';
|
|
import { Severity } from '../../../../helpers/constants/design-system';
|
|
import { I18nContext } from '../../../../contexts/i18n';
|
|
|
|
import {
|
|
BlockaidReason,
|
|
BlockaidResultType,
|
|
SecurityProvider,
|
|
} from '../../../../../shared/constants/security-provider';
|
|
import SecurityProviderBannerAlert from '../security-provider-banner-alert';
|
|
|
|
/** Reason to description translation key mapping. Grouped by translations. */
|
|
const REASON_TO_DESCRIPTION_TKEY = Object.freeze({
|
|
[BlockaidReason.approvalFarming]: 'blockaidDescriptionApproveFarming',
|
|
[BlockaidReason.permitFarming]: 'blockaidDescriptionApproveFarming',
|
|
[BlockaidReason.setApprovalForAll]: 'blockaidDescriptionApproveFarming',
|
|
|
|
[BlockaidReason.blurFarming]: 'blockaidDescriptionBlurFarming',
|
|
|
|
[BlockaidReason.seaportFarming]: 'blockaidDescriptionSeaportFarming',
|
|
|
|
[BlockaidReason.maliciousDomain]: 'blockaidDescriptionMaliciousDomain',
|
|
|
|
[BlockaidReason.rawSignatureFarming]: 'blockaidDescriptionMightLoseAssets',
|
|
[BlockaidReason.tradeOrderFarming]: 'blockaidDescriptionMightLoseAssets',
|
|
[BlockaidReason.unfairTrade]: 'blockaidDescriptionMightLoseAssets',
|
|
|
|
[BlockaidReason.rawNativeTokenTransfer]: 'blockaidDescriptionTransferFarming',
|
|
[BlockaidReason.transferFarming]: 'blockaidDescriptionTransferFarming',
|
|
[BlockaidReason.transferFromFarming]: 'blockaidDescriptionTransferFarming',
|
|
|
|
[BlockaidReason.other]: 'blockaidDescriptionMightLoseAssets',
|
|
});
|
|
|
|
/** List of suspicious reason(s). Other reasons will be deemed as deceptive. */
|
|
const SUSPCIOUS_REASON = [BlockaidReason.rawSignatureFarming];
|
|
|
|
function BlockaidBannerAlert({
|
|
ppomResponse: { reason, resultType, features },
|
|
}) {
|
|
const t = useContext(I18nContext);
|
|
|
|
if (resultType === BlockaidResultType.Benign) {
|
|
return null;
|
|
}
|
|
|
|
if (!REASON_TO_DESCRIPTION_TKEY[reason]) {
|
|
captureException(`BlockaidBannerAlert: Unidentified reason '${reason}'`);
|
|
}
|
|
|
|
const description = t(REASON_TO_DESCRIPTION_TKEY[reason] || 'other');
|
|
|
|
const details = Boolean(features?.length) && (
|
|
<Text as="ul">
|
|
{features.map((feature, i) => (
|
|
<li key={`blockaid-detail-${i}`}>• {feature}</li>
|
|
))}
|
|
</Text>
|
|
);
|
|
|
|
const severity =
|
|
resultType === BlockaidResultType.Malicious
|
|
? Severity.Danger
|
|
: Severity.Warning;
|
|
|
|
const title =
|
|
SUSPCIOUS_REASON.indexOf(reason) > -1
|
|
? t('blockaidTitleSuspicious')
|
|
: t('blockaidTitleDeceptive');
|
|
|
|
return (
|
|
<SecurityProviderBannerAlert
|
|
description={description}
|
|
details={details}
|
|
provider={SecurityProvider.Blockaid}
|
|
severity={severity}
|
|
title={title}
|
|
/>
|
|
);
|
|
}
|
|
|
|
BlockaidBannerAlert.propTypes = {
|
|
ppomResponse: PropTypes.object,
|
|
};
|
|
|
|
export default BlockaidBannerAlert;
|