68 lines
2.0 KiB
TypeScript
68 lines
2.0 KiB
TypeScript
|
|
import { Card } from 'v1-check/components/Form/Card';
|
|
import Row, { Details } from 'v1-check/components/Form/Row';
|
|
import colors from 'v1-check/styles/colors';
|
|
|
|
const cardStyles = `
|
|
small {
|
|
margin-top: 1rem;
|
|
opacity: 0.5;
|
|
display: block;
|
|
a { color: ${colors.primary}; }
|
|
}
|
|
summary {
|
|
padding: 0.5rem 0 0 0.5rem !important;
|
|
cursor: pointer;
|
|
font-weight: bold;
|
|
}
|
|
pre {
|
|
background: ${colors.background};
|
|
padding: 0.5rem 0.25rem;
|
|
border-radius: 4px;
|
|
overflow: auto;
|
|
}
|
|
`;
|
|
|
|
const getPagePath = (url: string): string => {
|
|
try {
|
|
return new URL(url).pathname;
|
|
} catch (error) {
|
|
return url;
|
|
}
|
|
}
|
|
|
|
const SecurityTxtCard = (props: {data: any, title: string, actionButtons: any }): JSX.Element => {
|
|
const securityTxt = props.data;
|
|
return (
|
|
<Card heading={props.title} actionButtons={props.actionButtons} styles={cardStyles}>
|
|
<Row lbl="Present" val={securityTxt.isPresent ? '✅ Yes' : '❌ No'} />
|
|
{ securityTxt.isPresent && (
|
|
<>
|
|
<Row lbl="File Location" val={securityTxt.foundIn} />
|
|
<Row lbl="PGP Signed" val={securityTxt.isPgpSigned ? '✅ Yes' : '❌ No'} />
|
|
{securityTxt.fields && Object.keys(securityTxt.fields).map((field: string, index: number) => {
|
|
if (securityTxt.fields[field].includes('http')) return (
|
|
<Row lbl="" val="" key={`policy-url-row-${index}`}>
|
|
<span className="lbl">{field}</span>
|
|
<span className="val"><a href={securityTxt.fields[field]}>{getPagePath(securityTxt.fields[field])}</a></span>
|
|
</Row>
|
|
);
|
|
return (
|
|
<Row lbl={field} val={securityTxt.fields[field]} key={`policy-row-${index}`} />
|
|
);
|
|
})}
|
|
<Details>
|
|
<summary>View Full Policy</summary>
|
|
<pre>{securityTxt.content}</pre>
|
|
</Details>
|
|
</>
|
|
)}
|
|
{!securityTxt.isPresent && (<small>
|
|
Having a security.txt ensures security researchers know how and where to safely report vulnerabilities.
|
|
</small>)}
|
|
</Card>
|
|
);
|
|
}
|
|
|
|
export default SecurityTxtCard;
|