290 lines
17 KiB
XML
290 lines
17 KiB
XML
|
|
<svg width="1400" height="900" xmlns="http://www.w3.org/2000/svg">
|
||
|
|
<style>
|
||
|
|
/* Light theme defaults */
|
||
|
|
.neon-blue { stroke: #4A90E2; stroke-width: 2.6; }
|
||
|
|
.neon-orange { stroke: #F5A623; stroke-width: 2.6; }
|
||
|
|
.neon-purple { stroke: #BD10E0; stroke-width: 2.6; }
|
||
|
|
.neon-green { stroke: #7ED321; stroke-width: 2.6; }
|
||
|
|
.neon-cyan { stroke: #50E3C2; stroke-width: 2.6; }
|
||
|
|
.neon-red { stroke: #E74C3C; stroke-width: 2.6; }
|
||
|
|
.main-text { fill: #1a1a1a; }
|
||
|
|
.secondary-text { fill: #666; }
|
||
|
|
.arrow-color { stroke: #666; fill: #666; }
|
||
|
|
|
||
|
|
@media (prefers-color-scheme: dark) {
|
||
|
|
.neon-blue {
|
||
|
|
stroke: #00D4FF;
|
||
|
|
stroke-width: 2.8;
|
||
|
|
filter: drop-shadow(0 0 4px #00D4FF) drop-shadow(0 0 8px #00A0FF);
|
||
|
|
}
|
||
|
|
.neon-orange {
|
||
|
|
stroke: #FF9500;
|
||
|
|
stroke-width: 2.8;
|
||
|
|
filter: drop-shadow(0 0 4px #FF9500) drop-shadow(0 0 8px #FF7700);
|
||
|
|
}
|
||
|
|
.neon-purple {
|
||
|
|
stroke: #E040FB;
|
||
|
|
stroke-width: 2.8;
|
||
|
|
filter: drop-shadow(0 0 4px #E040FB) drop-shadow(0 0 8px #D500F9);
|
||
|
|
}
|
||
|
|
.neon-green {
|
||
|
|
stroke: #00FF88;
|
||
|
|
stroke-width: 2.8;
|
||
|
|
filter: drop-shadow(0 0 4px #00FF88) drop-shadow(0 0 8px #00E676);
|
||
|
|
}
|
||
|
|
.neon-cyan {
|
||
|
|
stroke: #00E5EA;
|
||
|
|
stroke-width: 2.8;
|
||
|
|
filter: drop-shadow(0 0 4px #00E5EA) drop-shadow(0 0 8px #00BCD4);
|
||
|
|
}
|
||
|
|
.neon-red {
|
||
|
|
stroke: #FF4757;
|
||
|
|
stroke-width: 2.8;
|
||
|
|
filter: drop-shadow(0 0 4px #FF4757) drop-shadow(0 0 8px #FF6B81);
|
||
|
|
}
|
||
|
|
.main-text { fill: #FFFFFF; }
|
||
|
|
.secondary-text { fill: #B0B0B0; }
|
||
|
|
.arrow-color { stroke: #B0B0B0; fill: #B0B0B0; }
|
||
|
|
}
|
||
|
|
</style>
|
||
|
|
|
||
|
|
<defs>
|
||
|
|
<marker id="arrow" markerWidth="13" markerHeight="13" refX="11.7" refY="3.9" orient="auto" markerUnits="strokeWidth">
|
||
|
|
<path d="M0,0 L0,7.8 L11.7,3.9 z" class="arrow-color"/>
|
||
|
|
</marker>
|
||
|
|
<linearGradient id="flowGradient" x1="0%" y1="0%" x2="100%" y2="0%">
|
||
|
|
<stop offset="0%" style="stop-color:#4A90E2;stop-opacity:0.3" />
|
||
|
|
<stop offset="33%" style="stop-color:#BD10E0;stop-opacity:0.3" />
|
||
|
|
<stop offset="66%" style="stop-color:#E74C3C;stop-opacity:0.3" />
|
||
|
|
<stop offset="100%" style="stop-color:#7ED321;stop-opacity:0.3" />
|
||
|
|
</linearGradient>
|
||
|
|
</defs>
|
||
|
|
|
||
|
|
<!-- Title -->
|
||
|
|
<text x="700" y="45" text-anchor="middle" font-family="Arial, sans-serif" font-size="32" font-weight="600" class="main-text">Compliance - Security Scanner Flow</text>
|
||
|
|
<text x="700" y="80" text-anchor="middle" font-family="Arial, sans-serif" font-size="18" class="secondary-text">Automated security scanning for configurations, code, and credentials</text>
|
||
|
|
|
||
|
|
<!-- Phase Labels -->
|
||
|
|
<text x="180" y="130" text-anchor="middle" font-family="Arial, sans-serif" font-size="18" font-weight="500" class="secondary-text">Scan Targets</text>
|
||
|
|
<text x="480" y="130" text-anchor="middle" font-family="Arial, sans-serif" font-size="18" font-weight="500" class="secondary-text">Analysis</text>
|
||
|
|
<text x="780" y="130" text-anchor="middle" font-family="Arial, sans-serif" font-size="18" font-weight="500" class="secondary-text">Detection</text>
|
||
|
|
<text x="1100" y="130" text-anchor="middle" font-family="Arial, sans-serif" font-size="18" font-weight="500" class="secondary-text">Reporting</text>
|
||
|
|
|
||
|
|
<!-- MAIN FLOW DIAGRAM -->
|
||
|
|
<g id="main-flow">
|
||
|
|
|
||
|
|
<!-- Scan Request -->
|
||
|
|
<g transform="translate(80, 160)">
|
||
|
|
<rect x="0" y="0" width="200" height="70" rx="6.5" fill="none" class="neon-blue"/>
|
||
|
|
<text x="100" y="30" text-anchor="middle" font-family="Arial, sans-serif" font-size="20" font-weight="500" class="main-text">Scan Request</text>
|
||
|
|
<text x="100" y="52" text-anchor="middle" font-family="Arial, sans-serif" font-size="14" class="secondary-text">API or Scheduled</text>
|
||
|
|
</g>
|
||
|
|
|
||
|
|
<!-- Config Files -->
|
||
|
|
<g transform="translate(80, 260)">
|
||
|
|
<rect x="0" y="0" width="200" height="60" rx="6.5" fill="none" class="neon-blue"/>
|
||
|
|
<text x="100" y="25" text-anchor="middle" font-family="Arial, sans-serif" font-size="18" font-weight="500" class="main-text">Config Files</text>
|
||
|
|
<text x="100" y="45" text-anchor="middle" font-family="Arial, sans-serif" font-size="13" class="secondary-text">.env, config.csv</text>
|
||
|
|
</g>
|
||
|
|
|
||
|
|
<!-- BASIC Scripts -->
|
||
|
|
<g transform="translate(80, 350)">
|
||
|
|
<rect x="0" y="0" width="200" height="60" rx="6.5" fill="none" class="neon-blue"/>
|
||
|
|
<text x="100" y="25" text-anchor="middle" font-family="Arial, sans-serif" font-size="18" font-weight="500" class="main-text">BASIC Scripts</text>
|
||
|
|
<text x="100" y="45" text-anchor="middle" font-family="Arial, sans-serif" font-size="13" class="secondary-text">.bas dialog files</text>
|
||
|
|
</g>
|
||
|
|
|
||
|
|
<!-- Knowledge Base -->
|
||
|
|
<g transform="translate(80, 440)">
|
||
|
|
<rect x="0" y="0" width="200" height="60" rx="6.5" fill="none" class="neon-blue"/>
|
||
|
|
<text x="100" y="25" text-anchor="middle" font-family="Arial, sans-serif" font-size="18" font-weight="500" class="main-text">Knowledge Base</text>
|
||
|
|
<text x="100" y="45" text-anchor="middle" font-family="Arial, sans-serif" font-size="13" class="secondary-text">Prompts, templates</text>
|
||
|
|
</g>
|
||
|
|
|
||
|
|
<!-- Scanner Engine -->
|
||
|
|
<g transform="translate(380, 160)">
|
||
|
|
<rect x="0" y="0" width="200" height="70" rx="6.5" fill="none" class="neon-purple"/>
|
||
|
|
<text x="100" y="30" text-anchor="middle" font-family="Arial, sans-serif" font-size="20" font-weight="500" class="main-text">Scanner Engine</text>
|
||
|
|
<text x="100" y="52" text-anchor="middle" font-family="Arial, sans-serif" font-size="14" class="secondary-text">Pattern Matching</text>
|
||
|
|
</g>
|
||
|
|
|
||
|
|
<!-- Credential Check -->
|
||
|
|
<g transform="translate(380, 260)">
|
||
|
|
<rect x="0" y="0" width="200" height="60" rx="6.5" fill="none" class="neon-purple"/>
|
||
|
|
<text x="100" y="25" text-anchor="middle" font-family="Arial, sans-serif" font-size="18" font-weight="500" class="main-text">Credential Check</text>
|
||
|
|
<text x="100" y="45" text-anchor="middle" font-family="Arial, sans-serif" font-size="13" class="secondary-text">Passwords, API keys</text>
|
||
|
|
</g>
|
||
|
|
|
||
|
|
<!-- Code Analysis -->
|
||
|
|
<g transform="translate(380, 350)">
|
||
|
|
<rect x="0" y="0" width="200" height="60" rx="6.5" fill="none" class="neon-purple"/>
|
||
|
|
<text x="100" y="25" text-anchor="middle" font-family="Arial, sans-serif" font-size="18" font-weight="500" class="main-text">Code Analysis</text>
|
||
|
|
<text x="100" y="45" text-anchor="middle" font-family="Arial, sans-serif" font-size="13" class="secondary-text">Fragile code patterns</text>
|
||
|
|
</g>
|
||
|
|
|
||
|
|
<!-- Security Rules -->
|
||
|
|
<g transform="translate(380, 440)">
|
||
|
|
<rect x="0" y="0" width="200" height="60" rx="6.5" fill="none" class="neon-purple"/>
|
||
|
|
<text x="100" y="25" text-anchor="middle" font-family="Arial, sans-serif" font-size="18" font-weight="500" class="main-text">Security Rules</text>
|
||
|
|
<text x="100" y="45" text-anchor="middle" font-family="Arial, sans-serif" font-size="13" class="secondary-text">Best practices</text>
|
||
|
|
</g>
|
||
|
|
|
||
|
|
<!-- Issues Found -->
|
||
|
|
<g transform="translate(680, 160)">
|
||
|
|
<rect x="0" y="0" width="200" height="70" rx="6.5" fill="none" class="neon-red"/>
|
||
|
|
<text x="100" y="30" text-anchor="middle" font-family="Arial, sans-serif" font-size="20" font-weight="500" class="main-text">Issues Found</text>
|
||
|
|
<text x="100" y="52" text-anchor="middle" font-family="Arial, sans-serif" font-size="14" class="secondary-text">Categorized Results</text>
|
||
|
|
</g>
|
||
|
|
|
||
|
|
<!-- Critical -->
|
||
|
|
<g transform="translate(680, 260)">
|
||
|
|
<rect x="0" y="0" width="95" height="60" rx="6.5" fill="none" class="neon-red"/>
|
||
|
|
<text x="47" y="25" text-anchor="middle" font-family="Arial, sans-serif" font-size="15" font-weight="500" class="main-text">Critical</text>
|
||
|
|
<text x="47" y="45" text-anchor="middle" font-family="Arial, sans-serif" font-size="12" class="secondary-text">Secrets</text>
|
||
|
|
</g>
|
||
|
|
|
||
|
|
<!-- Warning -->
|
||
|
|
<g transform="translate(785, 260)">
|
||
|
|
<rect x="0" y="0" width="95" height="60" rx="6.5" fill="none" class="neon-orange"/>
|
||
|
|
<text x="47" y="25" text-anchor="middle" font-family="Arial, sans-serif" font-size="15" font-weight="500" class="main-text">Warning</text>
|
||
|
|
<text x="47" y="45" text-anchor="middle" font-family="Arial, sans-serif" font-size="12" class="secondary-text">Fragile</text>
|
||
|
|
</g>
|
||
|
|
|
||
|
|
<!-- Info -->
|
||
|
|
<g transform="translate(680, 350)">
|
||
|
|
<rect x="0" y="0" width="95" height="60" rx="6.5" fill="none" class="neon-cyan"/>
|
||
|
|
<text x="47" y="25" text-anchor="middle" font-family="Arial, sans-serif" font-size="15" font-weight="500" class="main-text">Info</text>
|
||
|
|
<text x="47" y="45" text-anchor="middle" font-family="Arial, sans-serif" font-size="12" class="secondary-text">Suggestions</text>
|
||
|
|
</g>
|
||
|
|
|
||
|
|
<!-- Pass -->
|
||
|
|
<g transform="translate(785, 350)">
|
||
|
|
<rect x="0" y="0" width="95" height="60" rx="6.5" fill="none" class="neon-green"/>
|
||
|
|
<text x="47" y="25" text-anchor="middle" font-family="Arial, sans-serif" font-size="15" font-weight="500" class="main-text">Pass</text>
|
||
|
|
<text x="47" y="45" text-anchor="middle" font-family="Arial, sans-serif" font-size="12" class="secondary-text">OK checks</text>
|
||
|
|
</g>
|
||
|
|
|
||
|
|
<!-- Report -->
|
||
|
|
<g transform="translate(980, 160)">
|
||
|
|
<rect x="0" y="0" width="200" height="70" rx="6.5" fill="none" class="neon-green"/>
|
||
|
|
<text x="100" y="30" text-anchor="middle" font-family="Arial, sans-serif" font-size="20" font-weight="500" class="main-text">Report</text>
|
||
|
|
<text x="100" y="52" text-anchor="middle" font-family="Arial, sans-serif" font-size="14" class="secondary-text">JSON + Dashboard</text>
|
||
|
|
</g>
|
||
|
|
|
||
|
|
<!-- Dashboard View -->
|
||
|
|
<g transform="translate(980, 260)">
|
||
|
|
<rect x="0" y="0" width="200" height="60" rx="6.5" fill="none" class="neon-cyan"/>
|
||
|
|
<text x="100" y="25" text-anchor="middle" font-family="Arial, sans-serif" font-size="18" font-weight="500" class="main-text">Dashboard View</text>
|
||
|
|
<text x="100" y="45" text-anchor="middle" font-family="Arial, sans-serif" font-size="13" class="secondary-text">Visual summary</text>
|
||
|
|
</g>
|
||
|
|
|
||
|
|
<!-- Remediation -->
|
||
|
|
<g transform="translate(980, 350)">
|
||
|
|
<rect x="0" y="0" width="200" height="60" rx="6.5" fill="none" class="neon-cyan"/>
|
||
|
|
<text x="100" y="25" text-anchor="middle" font-family="Arial, sans-serif" font-size="18" font-weight="500" class="main-text">Remediation</text>
|
||
|
|
<text x="100" y="45" text-anchor="middle" font-family="Arial, sans-serif" font-size="13" class="secondary-text">Fix suggestions</text>
|
||
|
|
</g>
|
||
|
|
|
||
|
|
<!-- Export -->
|
||
|
|
<g transform="translate(980, 440)">
|
||
|
|
<rect x="0" y="0" width="200" height="60" rx="6.5" fill="none" class="neon-cyan"/>
|
||
|
|
<text x="100" y="25" text-anchor="middle" font-family="Arial, sans-serif" font-size="18" font-weight="500" class="main-text">Export</text>
|
||
|
|
<text x="100" y="45" text-anchor="middle" font-family="Arial, sans-serif" font-size="13" class="secondary-text">CSV, PDF, JSON</text>
|
||
|
|
</g>
|
||
|
|
|
||
|
|
<!-- Arrows - Main Flow -->
|
||
|
|
<line x1="280" y1="195" x2="375" y2="195" class="arrow-color" stroke-width="2.6" marker-end="url(#arrow)" opacity="0.7"/>
|
||
|
|
<line x1="580" y1="195" x2="675" y2="195" class="arrow-color" stroke-width="2.6" marker-end="url(#arrow)" opacity="0.7"/>
|
||
|
|
<line x1="880" y1="195" x2="975" y2="195" class="arrow-color" stroke-width="2.6" marker-end="url(#arrow)" opacity="0.7"/>
|
||
|
|
|
||
|
|
<!-- Arrow from Config to Scanner -->
|
||
|
|
<path d="M280 290 Q320 290 320 210 L375 195" fill="none" class="arrow-color" stroke-width="2" stroke-dasharray="3.9,3.9" marker-end="url(#arrow)" opacity="0.5"/>
|
||
|
|
|
||
|
|
<!-- Arrow from BASIC to Scanner -->
|
||
|
|
<path d="M280 380 Q340 380 340 220 L375 195" fill="none" class="arrow-color" stroke-width="2" stroke-dasharray="3.9,3.9" marker-end="url(#arrow)" opacity="0.5"/>
|
||
|
|
|
||
|
|
<!-- Arrow from KB to Scanner -->
|
||
|
|
<path d="M280 470 Q360 470 360 230 L375 195" fill="none" class="arrow-color" stroke-width="2" stroke-dasharray="3.9,3.9" marker-end="url(#arrow)" opacity="0.5"/>
|
||
|
|
|
||
|
|
<!-- Arrow to Dashboard -->
|
||
|
|
<line x1="1080" y1="230" x2="1080" y2="255" class="arrow-color" stroke-width="2" marker-end="url(#arrow)" opacity="0.5"/>
|
||
|
|
|
||
|
|
<!-- Arrow to Remediation -->
|
||
|
|
<line x1="1080" y1="320" x2="1080" y2="345" class="arrow-color" stroke-width="2" marker-end="url(#arrow)" opacity="0.5"/>
|
||
|
|
|
||
|
|
<!-- Arrow to Export -->
|
||
|
|
<line x1="1080" y1="410" x2="1080" y2="435" class="arrow-color" stroke-width="2" marker-end="url(#arrow)" opacity="0.5"/>
|
||
|
|
|
||
|
|
<!-- Connections from analysis to issues -->
|
||
|
|
<line x1="580" y1="290" x2="675" y2="290" class="arrow-color" stroke-width="1.5" marker-end="url(#arrow)" opacity="0.4"/>
|
||
|
|
<line x1="580" y1="380" x2="675" y2="380" class="arrow-color" stroke-width="1.5" marker-end="url(#arrow)" opacity="0.4"/>
|
||
|
|
|
||
|
|
</g>
|
||
|
|
|
||
|
|
<!-- PROGRESS INDICATOR -->
|
||
|
|
<g id="progress-legend" transform="translate(0, 520)">
|
||
|
|
<rect x="100" y="30" width="1200" height="80" fill="url(#flowGradient)" rx="10" opacity="0.2"/>
|
||
|
|
|
||
|
|
<!-- Stage markers -->
|
||
|
|
<circle cx="200" cy="70" r="12" class="neon-blue" fill="none" stroke-width="3"/>
|
||
|
|
<text x="200" y="75" text-anchor="middle" font-family="Arial, sans-serif" font-size="14" font-weight="bold" class="main-text">1</text>
|
||
|
|
|
||
|
|
<circle cx="500" cy="70" r="12" class="neon-purple" fill="none" stroke-width="3"/>
|
||
|
|
<text x="500" y="75" text-anchor="middle" font-family="Arial, sans-serif" font-size="14" font-weight="bold" class="main-text">2</text>
|
||
|
|
|
||
|
|
<circle cx="800" cy="70" r="12" class="neon-red" fill="none" stroke-width="3"/>
|
||
|
|
<text x="800" y="75" text-anchor="middle" font-family="Arial, sans-serif" font-size="14" font-weight="bold" class="main-text">3</text>
|
||
|
|
|
||
|
|
<circle cx="1100" cy="70" r="12" class="neon-green" fill="none" stroke-width="3"/>
|
||
|
|
<text x="1100" y="75" text-anchor="middle" font-family="Arial, sans-serif" font-size="14" font-weight="bold" class="main-text">4</text>
|
||
|
|
|
||
|
|
<!-- Connecting lines -->
|
||
|
|
<line x1="212" y1="70" x2="488" y2="70" class="arrow-color" stroke-width="2" opacity="0.3"/>
|
||
|
|
<line x1="512" y1="70" x2="788" y2="70" class="arrow-color" stroke-width="2" opacity="0.3"/>
|
||
|
|
<line x1="812" y1="70" x2="1088" y2="70" class="arrow-color" stroke-width="2" opacity="0.3"/>
|
||
|
|
|
||
|
|
<!-- Stage labels -->
|
||
|
|
<text x="200" y="130" text-anchor="middle" font-family="Arial, sans-serif" font-size="16" font-weight="500" class="main-text">Target Selection</text>
|
||
|
|
<text x="200" y="150" text-anchor="middle" font-family="Arial, sans-serif" font-size="13" class="secondary-text">Choose what to scan</text>
|
||
|
|
|
||
|
|
<text x="500" y="130" text-anchor="middle" font-family="Arial, sans-serif" font-size="16" font-weight="500" class="main-text">Analyze</text>
|
||
|
|
<text x="500" y="150" text-anchor="middle" font-family="Arial, sans-serif" font-size="13" class="secondary-text">Run security checks</text>
|
||
|
|
|
||
|
|
<text x="800" y="130" text-anchor="middle" font-family="Arial, sans-serif" font-size="16" font-weight="500" class="main-text">Detect</text>
|
||
|
|
<text x="800" y="150" text-anchor="middle" font-family="Arial, sans-serif" font-size="13" class="secondary-text">Categorize findings</text>
|
||
|
|
|
||
|
|
<text x="1100" y="130" text-anchor="middle" font-family="Arial, sans-serif" font-size="16" font-weight="500" class="main-text">Report</text>
|
||
|
|
<text x="1100" y="150" text-anchor="middle" font-family="Arial, sans-serif" font-size="13" class="secondary-text">View and export</text>
|
||
|
|
</g>
|
||
|
|
|
||
|
|
<!-- Scan Categories Legend -->
|
||
|
|
<g transform="translate(100, 720)">
|
||
|
|
<text x="0" y="0" font-family="Arial, sans-serif" font-size="16" font-weight="600" class="main-text">Scan Categories:</text>
|
||
|
|
|
||
|
|
<rect x="0" y="20" width="16" height="16" rx="3" fill="none" class="neon-red" stroke-width="2"/>
|
||
|
|
<text x="25" y="33" font-family="Arial, sans-serif" font-size="14" class="secondary-text">Exposed credentials (passwords, API keys)</text>
|
||
|
|
|
||
|
|
<rect x="350" y="20" width="16" height="16" rx="3" fill="none" class="neon-orange" stroke-width="2"/>
|
||
|
|
<text x="375" y="33" font-family="Arial, sans-serif" font-size="14" class="secondary-text">Fragile code patterns in .bas files</text>
|
||
|
|
|
||
|
|
<rect x="650" y="20" width="16" height="16" rx="3" fill="none" class="neon-cyan" stroke-width="2"/>
|
||
|
|
<text x="675" y="33" font-family="Arial, sans-serif" font-size="14" class="secondary-text">Missing vault usage</text>
|
||
|
|
|
||
|
|
<rect x="900" y="20" width="16" height="16" rx="3" fill="none" class="neon-green" stroke-width="2"/>
|
||
|
|
<text x="925" y="33" font-family="Arial, sans-serif" font-size="14" class="secondary-text">Security best practices</text>
|
||
|
|
</g>
|
||
|
|
|
||
|
|
<!-- Severity Levels -->
|
||
|
|
<g transform="translate(100, 780)">
|
||
|
|
<text x="0" y="0" font-family="Arial, sans-serif" font-size="16" font-weight="600" class="main-text">Severity Levels:</text>
|
||
|
|
<text x="130" y="0" font-family="Arial, sans-serif" font-size="14" class="secondary-text">🔴 Critical (immediate action) | 🟠 Warning (should fix) | 🔵 Info (recommendations) | 🟢 Pass (compliant)</text>
|
||
|
|
</g>
|
||
|
|
|
||
|
|
<!-- API Endpoints -->
|
||
|
|
<g transform="translate(100, 820)">
|
||
|
|
<text x="0" y="0" font-family="Arial, sans-serif" font-size="16" font-weight="600" class="main-text">Endpoints:</text>
|
||
|
|
<text x="100" y="0" font-family="monospace, sans-serif" font-size="13" class="secondary-text">GET /api/compliance | POST /api/compliance/scan | GET /api/compliance/report/{id} | GET /api/compliance/export/{format}</text>
|
||
|
|
</g>
|
||
|
|
|
||
|
|
</svg>
|