it
This commit is contained in:
@@ -642,6 +642,20 @@ input[type="text"]:focus, select:focus {
|
||||
word-break: break-word;
|
||||
}
|
||||
|
||||
.detail-section-header {
|
||||
font-size: 1rem;
|
||||
color: #00ff41;
|
||||
font-weight: 500;
|
||||
margin-top: 1.5rem;
|
||||
margin-bottom: 0.75rem;
|
||||
padding-bottom: 0.5rem;
|
||||
border-bottom: 1px solid #444;
|
||||
}
|
||||
|
||||
.detail-section-header:first-of-type {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
.copy-btn {
|
||||
background: none;
|
||||
border: none;
|
||||
|
||||
@@ -359,10 +359,10 @@ class GraphManager {
|
||||
|
||||
// Style based on certificate validity
|
||||
if (node.type === 'domain') {
|
||||
if (node.metadata && node.metadata.has_valid_cert === true) {
|
||||
if (node.metadata && node.metadata.certificate_data && node.metadata.certificate_data.has_valid_cert === true) {
|
||||
processedNode.color = '#00ff41'; // Bright green for valid cert
|
||||
processedNode.borderColor = '#00aa2e';
|
||||
} else if (node.metadata && node.metadata.has_valid_cert === false) {
|
||||
} else if (node.metadata && node.metadata.certificate_data && node.metadata.certificate_data.has_valid_cert === false) {
|
||||
processedNode.color = '#888888'; // Muted grey color
|
||||
processedNode.borderColor = '#666666'; // Darker grey border
|
||||
}
|
||||
|
||||
@@ -742,8 +742,7 @@ class DNSReconApp {
|
||||
const createDetailRow = (label, value, statusIcon = '') => {
|
||||
const baseId = `detail-${label.replace(/[^a-zA-Z0-9]/g, '-')}`;
|
||||
|
||||
// Handle empty or undefined values
|
||||
if (value === null || value === undefined ||
|
||||
if (value === null || value === undefined ||
|
||||
(Array.isArray(value) && value.length === 0) ||
|
||||
(typeof value === 'object' && Object.keys(value).length === 0)) {
|
||||
return `
|
||||
@@ -754,7 +753,6 @@ class DNSReconApp {
|
||||
`;
|
||||
}
|
||||
|
||||
// Handle arrays
|
||||
if (Array.isArray(value)) {
|
||||
return value.map((item, index) => {
|
||||
const itemId = `${baseId}-${index}`;
|
||||
@@ -767,9 +765,7 @@ class DNSReconApp {
|
||||
</div>
|
||||
`;
|
||||
}).join('');
|
||||
}
|
||||
// Handle objects and primitives
|
||||
else {
|
||||
} else {
|
||||
const valueId = `${baseId}-0`;
|
||||
const icon = statusIcon || '<span class="status-icon text-success">✓</span>';
|
||||
return `
|
||||
@@ -783,44 +779,53 @@ class DNSReconApp {
|
||||
};
|
||||
|
||||
const metadata = node.metadata || {};
|
||||
|
||||
// General Node Info
|
||||
detailsHtml += createDetailRow('Node Type', node.type);
|
||||
|
||||
// Display data based on node type
|
||||
switch (node.type) {
|
||||
case 'domain':
|
||||
detailsHtml += createDetailRow('DNS Records', metadata.dns_records);
|
||||
detailsHtml += createDetailRow('Related Domains (SAN)', metadata.related_domains_san);
|
||||
detailsHtml += createDetailRow('Certificate Data', metadata.certificate_data);
|
||||
detailsHtml += createDetailRow('Passive DNS', metadata.passive_dns);
|
||||
detailsHtml += createDetailRow('Shodan Data', metadata.shodan);
|
||||
detailsHtml += createDetailRow('VirusTotal Data', metadata.virustotal);
|
||||
detailsHtml += createDetailRow('ASN Information', metadata.asn_data);
|
||||
break;
|
||||
case 'ip':
|
||||
detailsHtml += createDetailRow('DNS Records', metadata.dns_records);
|
||||
detailsHtml += createDetailRow('Hostnames', metadata.hostnames);
|
||||
detailsHtml += createDetailRow('Passive DNS', metadata.passive_dns);
|
||||
detailsHtml += createDetailRow('Shodan Data', metadata.shodan);
|
||||
detailsHtml += createDetailRow('VirusTotal Data', metadata.virustotal);
|
||||
detailsHtml += createDetailRow('ASN Information', metadata.asn_data);
|
||||
break;
|
||||
case 'asn':
|
||||
detailsHtml += createDetailRow('ASN Information', metadata.asn_data);
|
||||
detailsHtml += createDetailRow('Related IPs', metadata.passive_dns);
|
||||
break;
|
||||
case 'large_entity':
|
||||
detailsHtml += createDetailRow('Entity Type', metadata.entity_type || 'Large Collection');
|
||||
detailsHtml += createDetailRow('Item Count', metadata.count);
|
||||
detailsHtml += createDetailRow('Discovered Domains', metadata.domains);
|
||||
break;
|
||||
}
|
||||
|
||||
// Special handling for certificate data
|
||||
if (metadata.certificate_data && Object.keys(metadata.certificate_data).length > 0) {
|
||||
const cert = metadata.certificate_data;
|
||||
detailsHtml += `<div class="detail-section-header">Certificate Summary</div>`;
|
||||
detailsHtml += createDetailRow('Total Found', cert.total_certificates);
|
||||
detailsHtml += createDetailRow('Currently Valid', cert.valid_certificates);
|
||||
detailsHtml += createDetailRow('Expires Soon (<30d)', cert.expires_soon_count);
|
||||
detailsHtml += createDetailRow('Unique Issuers', cert.unique_issuers ? cert.unique_issuers.join(', ') : 'N/A');
|
||||
|
||||
// Add any additional metadata not covered above
|
||||
for (const [key, value] of Object.entries(metadata)) {
|
||||
if (!['dns_records', 'related_domains_san', 'certificate_data', 'passive_dns',
|
||||
'shodan', 'virustotal', 'asn_data', 'hash', 'sans', 'issuer',
|
||||
'not_before', 'not_after', 'entity_type', 'count', 'domains'].includes(key)) {
|
||||
detailsHtml += createDetailRow(this.formatLabel(key), value);
|
||||
if (cert.latest_certificate) {
|
||||
detailsHtml += `<div class="detail-section-header">Latest Certificate</div>`;
|
||||
detailsHtml += createDetailRow('Common Name', cert.latest_certificate.common_name);
|
||||
detailsHtml += createDetailRow('Issuer', cert.latest_certificate.issuer_name);
|
||||
detailsHtml += createDetailRow('Valid From', new Date(cert.latest_certificate.not_before).toLocaleString());
|
||||
detailsHtml += createDetailRow('Valid Until', new Date(cert.latest_certificate.not_after).toLocaleString());
|
||||
}
|
||||
}
|
||||
|
||||
// Special handling for ASN data
|
||||
if (metadata.asn_data && Object.keys(metadata.asn_data).length > 0) {
|
||||
detailsHtml += `<div class="detail-section-header">ASN Information</div>`;
|
||||
detailsHtml += createDetailRow('ASN', metadata.asn_data.asn);
|
||||
detailsHtml += createDetailRow('Organization', metadata.asn_data.description);
|
||||
detailsHtml += createDetailRow('ISP', metadata.asn_data.isp);
|
||||
detailsHtml += createDetailRow('Country', metadata.asn_data.country);
|
||||
}
|
||||
|
||||
if (this.elements.modalDetails) {
|
||||
this.elements.modalDetails.innerHTML = detailsHtml;
|
||||
|
||||
Reference in New Issue
Block a user