Altered SS rule dropdowns to display resource name whenever possible, and to display more proper value

This commit is contained in:
VakarisZ 2020-10-02 12:21:24 +03:00
parent 672c19ef0d
commit 22a97096ca
3 changed files with 25 additions and 5 deletions

View File

@ -12,6 +12,8 @@ import {faArrowRight} from '@fortawesome/free-solid-svg-icons';
export default function ResourceDropdown(props) { export default function ResourceDropdown(props) {
const [isCollapseOpen, setIsCollapseOpen] = useState(false); const [isCollapseOpen, setIsCollapseOpen] = useState(false);
let parser = new ScoutSuiteDataParser(props.scoutsuite_data.data.services);
let resource_value = parser.getResourceValue(props.resource_path, props.template_path);
function getResourceDropdown() { function getResourceDropdown() {
return ( return (
@ -20,7 +22,7 @@ export default function ResourceDropdown(props) {
<button className={'btn-collapse'} <button className={'btn-collapse'}
onClick={() => setIsCollapseOpen(!isCollapseOpen)}> onClick={() => setIsCollapseOpen(!isCollapseOpen)}>
<span> <span>
{props.resource_path} {resource_value.hasOwnProperty('name') ? resource_value.name : props.resource_path}
</span> </span>
<span> <span>
<FontAwesomeIcon icon={isCollapseOpen ? faChevronDown : faChevronUp}/> <FontAwesomeIcon icon={isCollapseOpen ? faChevronDown : faChevronUp}/>
@ -51,8 +53,6 @@ export default function ResourceDropdown(props) {
} }
function getResourceValueDisplay() { function getResourceValueDisplay() {
let parser = new ScoutSuiteDataParser(props.scoutsuite_data.data.services);
let resource_value = parser.getValueAt(props.resource_path);
if (resource_value) { if (resource_value) {
return( return(
<div> <div>
@ -81,6 +81,7 @@ export default function ResourceDropdown(props) {
} }
ResourceDropdown.propTypes = { ResourceDropdown.propTypes = {
resource_path: PropTypes.object, template_path: PropTypes.string,
resource_path: PropTypes.string,
scoutsuite_data: PropTypes.object scoutsuite_data: PropTypes.object
}; };

View File

@ -40,7 +40,10 @@ export default function RuleDisplay(props) {
function getResources() { function getResources() {
let resources = [] let resources = []
props.rule.items.forEach(item => { props.rule.items.forEach(item => {
resources.push(<ResourceDropdown resource_path={item} scoutsuite_data={props.scoutsuite_data}/>) let template_path = props.rule.hasOwnProperty('display_path') ? props.rule.display_path : props.rule.path;
resources.push(<ResourceDropdown resource_path={item}
template_path={template_path}
scoutsuite_data={props.scoutsuite_data}/>)
}) })
return ( return (
<div className={'reference-list'}> <div className={'reference-list'}>

View File

@ -3,6 +3,22 @@ export default class ScoutSuiteDataParser {
this.runResults = runResults this.runResults = runResults
} }
/*
itemPath contains path to a specific value e.g. s3.buckets.da1e7081077ce92.secure_transport_enabled"
templatePath contains a template path for resource we would want to display e.g. s3.buckets.id
*/
getResourceValue(itemPath, templatePath) {
let resourcePath = this.fillTemplatePath(itemPath, templatePath);
return this.getValueAt(resourcePath);
}
fillTemplatePath(itemPath, templatePath) {
let itemPathArray = itemPath.split('.');
let templatePathArray = templatePath.split('.');
let resourcePathArray = templatePathArray.map((val, i) => {return val === 'id' ? itemPathArray[i] : val})
return resourcePathArray.join('.');
}
getValueAt(path) { getValueAt(path) {
return this.getValueAtRecursive(path, this.runResults) return this.getValueAtRecursive(path, this.runResults)
} }