fix(campaigns): fix IP navigation URL encoding
fmtIP() returns an HTML <a> tag string. Using encodeURIComponent(fmtIP(ip)) was URL-encoding the entire HTML markup instead of the raw IP address, resulting in /ip/%3Ca%20href%3D... navigation. Fix: extract raw IP (stripping ::ffff: prefix) before building the URL. Applied to all 3 click handlers in campaigns.html: - members table row onclick - scatter chart point click - force graph node click Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
@ -362,7 +362,7 @@ function renderScatter() {
|
||||
onClick: (e, els) => {
|
||||
if (els.length) {
|
||||
const m = els[0].element.$context.raw._meta;
|
||||
window.location.href = `/ip/${encodeURIComponent(fmtIP(m.ip))}`;
|
||||
window.location.href = `/ip/${encodeURIComponent(String(m.ip||'').replace('::ffff:',''))}`;
|
||||
}
|
||||
},
|
||||
},
|
||||
@ -488,7 +488,7 @@ function renderGraph() {
|
||||
const rect = canvas.getBoundingClientRect();
|
||||
const mx = e.clientX - rect.left, my = e.clientY - rect.top;
|
||||
const hit = nodes.find(n => Math.hypot(n.x-mx, n.y-my) <= n.radius+2);
|
||||
if (hit) window.location.href = `/ip/${encodeURIComponent(fmtIP(hit.id))}`;
|
||||
if (hit) window.location.href = `/ip/${encodeURIComponent(String(hit.id||'').replace('::ffff:',''))}`;
|
||||
});
|
||||
canvas.style.cursor = 'default';
|
||||
canvas.addEventListener('mousemove', e => {
|
||||
@ -561,8 +561,10 @@ async function selectCampaign(cid) {
|
||||
document.getElementById('member-count').textContent = `(${members.length})`;
|
||||
|
||||
// Members table
|
||||
document.getElementById('members-body').innerHTML = members.map(m => `
|
||||
<tr class="hover:bg-gray-800/40 cursor-pointer" onclick="window.location='/ip/${encodeURIComponent(fmtIP(m.src_ip))}'">
|
||||
document.getElementById('members-body').innerHTML = members.map(m => {
|
||||
const rawIP = String(m.src_ip||'').replace('::ffff:','');
|
||||
return `
|
||||
<tr class="hover:bg-gray-800/40 cursor-pointer" onclick="window.location='/ip/${encodeURIComponent(rawIP)}'">
|
||||
<td class="px-3 py-2 font-mono text-purple-300">${fmtIP(m.src_ip)}</td>
|
||||
<td class="px-3 py-2 font-mono text-[10px] text-gray-400 max-w-[140px] truncate">${escapeHtml(m.ja4||'')}</td>
|
||||
<td class="px-3 py-2 text-gray-300">${escapeHtml(m.host||'')}</td>
|
||||
@ -574,7 +576,8 @@ async function selectCampaign(cid) {
|
||||
<td class="px-3 py-2">${fmtCountry(m.country_code)}</td>
|
||||
<td class="px-3 py-2 text-gray-500 text-[10px]">${m.detected_at||''}</td>
|
||||
</tr>
|
||||
`).join('') || '<tr><td colspan="10" class="text-center py-6 text-gray-500">Aucun membre</td></tr>';
|
||||
`;
|
||||
}).join('') || '<tr><td colspan="10" class="text-center py-6 text-gray-500">Aucun membre</td></tr>';
|
||||
|
||||
// Radar chart
|
||||
renderRadar(p);
|
||||
|
||||
Reference in New Issue
Block a user