diff --git a/frontend/mocking/mocker.js b/frontend/mocking/mocker.js index 125e38e9d3..1a0d4f050b 100644 --- a/frontend/mocking/mocker.js +++ b/frontend/mocking/mocker.js @@ -648,9 +648,9 @@ const schemaWithMocks = addMocksToSchema({ const dkimScanData = store.get('DkimSub', scanUuid) setTimeout(() => { pubsub.publish( - `${NEW_DKIM_DATA_STREAM}/$.parameters.userKey{ + `${NEW_DKIM_DATA_STREAM}/${ jwt.decode(context.token, 'secret').parameters.userKey - }`.parameters.userKey, + }`, { dkimScanData: dkimScanData, }, @@ -661,9 +661,9 @@ const schemaWithMocks = addMocksToSchema({ const dmarcScanData = store.get('DmarcSub', scanUuid) setTimeout(() => { pubsub.publish( - `${NEW_DMARC_DATA_STREAM}/$.parameters.userKey{ + `${NEW_DMARC_DATA_STREAM}/${ jwt.decode(context.token, 'secret').parameters.userKey - }`.parameters.userKey, + }`, { dmarcScanData: dmarcScanData, }, @@ -674,9 +674,9 @@ const schemaWithMocks = addMocksToSchema({ const spfScanData = store.get('SpfSub', scanUuid) setTimeout(() => { pubsub.publish( - `${NEW_SPF_DATA_STREAM}/$.parameters.userKey{ + `${NEW_SPF_DATA_STREAM}/${ jwt.decode(context.token, 'secret').parameters.userKey - }`.parameters.userKey, + }`, { spfScanData: spfScanData, }, @@ -687,9 +687,9 @@ const schemaWithMocks = addMocksToSchema({ const httpsScanData = store.get('HttpsSub', scanUuid) setTimeout(() => { pubsub.publish( - `${NEW_HTTPS_DATA_STREAM}/$.parameters.userKey{ + `${NEW_HTTPS_DATA_STREAM}/${ jwt.decode(context.token, 'secret').parameters.userKey - }`.parameters.userKey, + }`, { httpsScanData: httpsScanData, }, @@ -809,31 +809,41 @@ const schemaWithMocks = addMocksToSchema({ dkimScanData: { subscribe: (_, _args, context) => pubsub.asyncIterator( - `${NEW_DKIM_DATA_STREAM}/${jwt.decode(context.token, 'secret')}`, + `${NEW_DKIM_DATA_STREAM}/${ + jwt.decode(context.token, 'secret').parameters.userKey + }`, ), }, dmarcScanData: { subscribe: (_, _args, context) => pubsub.asyncIterator( - `${NEW_DMARC_DATA_STREAM}/${jwt.decode(context.token, 'secret')}`, + `${NEW_DMARC_DATA_STREAM}/${ + jwt.decode(context.token, 'secret').parameters.userKey + }`, ), }, spfScanData: { subscribe: (_, _args, context) => pubsub.asyncIterator( - `${NEW_SPF_DATA_STREAM}/${jwt.decode(context.token, 'secret')}`, + `${NEW_SPF_DATA_STREAM}/${ + jwt.decode(context.token, 'secret').parameters.userKey + }`, ), }, httpsScanData: { subscribe: (_, _args, context) => pubsub.asyncIterator( - `${NEW_HTTPS_DATA_STREAM}/${jwt.decode(context.token, 'secret')}`, + `${NEW_HTTPS_DATA_STREAM}/${ + jwt.decode(context.token, 'secret').parameters.userKey + }`, ), }, sslScanData: { subscribe: (_, _args, context) => pubsub.asyncIterator( - `${NEW_SSL_DATA_STREAM}/${jwt.decode(context.token, 'secret')}`, + `${NEW_SSL_DATA_STREAM}/${ + jwt.decode(context.token, 'secret').parameters.userKey + }`, ), }, }, diff --git a/frontend/src/components/StatusIcon.js b/frontend/src/components/StatusIcon.js new file mode 100644 index 0000000000..3c169375d6 --- /dev/null +++ b/frontend/src/components/StatusIcon.js @@ -0,0 +1,28 @@ +import React from 'react' +import { string } from 'prop-types' +import { Spinner } from '@chakra-ui/react' +import { CheckCircleIcon, WarningIcon, InfoIcon } from '@chakra-ui/icons' + +export function StatusIcon({ status }) { + if (status === 'PASS') { + return ( + + ) + } else if (status === 'FAIL') { + return + } else if (status === 'LOADING') { + return + } else { + return ( + + ) + } +} + +StatusIcon.propTypes = { + status: string.isRequired, +} diff --git a/frontend/src/domains/ScanDomain.js b/frontend/src/domains/ScanDomain.js index 74dfd1be15..8482e7fe22 100644 --- a/frontend/src/domains/ScanDomain.js +++ b/frontend/src/domains/ScanDomain.js @@ -13,7 +13,6 @@ import { Divider, Flex, Heading, - Spinner, Stack, Tab, TabList, @@ -23,19 +22,16 @@ import { Text, useToast, } from '@chakra-ui/react' -import { - CheckCircleIcon, - WarningIcon, - WarningTwoIcon, - InfoIcon, -} from '@chakra-ui/icons' +import { WarningTwoIcon } from '@chakra-ui/icons' import { useMutation, useQuery } from '@apollo/client' import { object, string } from 'yup' import { DomainField } from './DomainField' +import { StatusBadge } from './StatusBadge' import { ScanCategoryDetails } from '../guidance/ScanCategoryDetails' import { LoadingMessage } from '../components/LoadingMessage' +import { StatusIcon } from '../components/StatusIcon' import { fieldRequirements } from '../utilities/fieldRequirements' import { GET_ONE_TIME_SCANS } from '../graphql/queries' import { REQUEST_SCAN } from '../graphql/mutations' @@ -120,8 +116,6 @@ export function ScanDomain() { }) } - // TODO: Create list of collapsable scan detail cards - const dmarcSteps = { assess: [ t`Identify all domains and subdomains used to send mail;`, @@ -147,16 +141,16 @@ export function ScanDomain() { ], } - const generateStatusIcon = (status) => { - let statusIcon - if (status === 'PASS') { - statusIcon = - } else if (status === 'FAIL') { - statusIcon = - } else { - statusIcon = - } - return statusIcon + const statusGroupingProps = { + flexDirection: { base: 'column', md: 'row' }, + border: '1px solid', + borderColor: 'gray.300', + borderRadius: 'md', + px: { base: 2, md: 0 }, + py: { base: 1, md: 2 }, + mx: { base: 0, md: 1 }, + my: { base: 2, md: 0 }, + bg: 'gray.100', } return ( @@ -237,116 +231,50 @@ export function ScanDomain() { flexDirection={{ base: 'column', md: 'row' }} flexGrow={{ base: 0, md: '1' }} > - - - - HTTPS: - - {mergedScan.scan.https ? ( - generateStatusIcon(mergedScan.scan.https.status) - ) : ( - - )} - - - - - - SSL: - - {mergedScan.scan.ssl ? ( - generateStatusIcon(mergedScan.scan.ssl.status) - ) : ( - - )} - - - - - - SPF: - - {mergedScan.scan.spf ? ( - generateStatusIcon(mergedScan.scan.spf.status) - ) : ( - - )} - - - - - - DKIM: - - {mergedScan.scan.dkim ? ( - generateStatusIcon(mergedScan.scan.dkim.status) - ) : ( - - )} - - - - - - DMARC: - - {mergedScan.scan.dmarc ? ( - generateStatusIcon(mergedScan.scan.dmarc.status) - ) : ( - - )} - - + + + + + + + + + - + ITPIN Compliant @@ -415,12 +340,7 @@ export function ScanDomain() { ) ) : ( - - - - Loading Compliance Status - - + One Time Scan )} @@ -493,12 +413,7 @@ export function ScanDomain() { )} ) : ( - - - - Loading DMARC Phase - - + One Time Scan )} diff --git a/frontend/src/domains/StatusBadge.js b/frontend/src/domains/StatusBadge.js index 4c94ee720e..bae5ad46b3 100644 --- a/frontend/src/domains/StatusBadge.js +++ b/frontend/src/domains/StatusBadge.js @@ -1,31 +1,10 @@ import React from 'react' import { Stack, Text } from '@chakra-ui/react' -import { CheckCircleIcon, InfoIcon, WarningIcon } from '@chakra-ui/icons' import { string } from 'prop-types' -export function StatusBadge({ text, status }) { - const generateStatusIcon = (status) => { - let statusIcon - if (status === 'PASS') { - statusIcon = ( - - ) - } else if (status === 'FAIL') { - statusIcon = ( - - ) - } else { - statusIcon = ( - - ) - } - return statusIcon - } +import { StatusIcon } from '../components/StatusIcon' +export function StatusBadge({ text, status }) { return ( {text} - {generateStatusIcon(status)} + ) }