diff --git a/source/app/static/assets/css/atlantis.css b/source/app/static/assets/css/atlantis.css index 64641760c..e93b39c8b 100644 --- a/source/app/static/assets/css/atlantis.css +++ b/source/app/static/assets/css/atlantis.css @@ -16027,4 +16027,24 @@ td.dt-nowrap { white-space: nowrap } padding: 2px 5px 2px 5px; border-radius: 50% 50%; margin-bottom: 3px; -} \ No newline at end of file +} + + .copy-value { + position: relative; + } + + .copy-btn { + display: none; + position: absolute; + top: 50%; + transform: translateY(-50%); + border: none; + background: transparent; + font-size: 1rem; + color: #007bff; + cursor: pointer; + } + + .copy-value:hover .copy-btn { + display: inline; + } \ No newline at end of file diff --git a/source/app/static/assets/js/iris/alerts.js b/source/app/static/assets/js/iris/alerts.js index 1faf644f5..02c2db2de 100644 --- a/source/app/static/assets/js/iris/alerts.js +++ b/source/app/static/assets/js/iris/alerts.js @@ -988,23 +988,41 @@ function renderAlert(alert, expanded=false, modulesOptionsAlertReq, ` : ''} ${alert.alert_source_link ? `
Source Link:
-
${ +
${ alert.alert_source_link && alert.alert_source_link.startsWith('http') - ? `${alert.alert_source_link}` + ? `${alert.alert_source_link} + ` : 'No valid link provided' }
` : ''} ${alert.alert_source_ref ? `
Source Reference:
-
${alert.alert_source_ref}
+
+ ${alert.alert_source_ref} + +
` : ''} ${alert.alert_source_event_time ? `
Source Event Time:
-
${formatTime(alert.alert_source_event_time)} UTC
+
+ ${formatTime(alert.alert_source_event_time)} UTC + +
` : ''} ${alert.alert_creation_time ? `
IRIS Creation Time:
-
${formatTime(alert.alert_creation_time)} UTC
+
+ ${formatTime(alert.alert_creation_time)} UTC + +
` : ''}
@@ -1094,7 +1112,12 @@ function renderAlert(alert, expanded=false, modulesOptionsAlertReq, .map( (ioc) => ` - ${filterXSS(ioc.ioc_value)} + + ${filterXSS(ioc.ioc_value)} + + ${filterXSS(ioc.ioc_description)} ${ioc.ioc_type ? filterXSS(ioc.ioc_type.type_name) : '-'} ${filterXSS(ioc.ioc_tlp) ? ioc.ioc_tlp : '-'} @@ -1146,6 +1169,12 @@ function renderAlert(alert, expanded=false, modulesOptionsAlertReq, .map( (asset) => ` + + ${asset.asset_name ? filterXSS(asset.asset_name) : '-'} + + ${asset.asset_name ? filterXSS(asset.asset_name) : '-'} ${asset.asset_description ? filterXSS(asset.asset_description) : '-'} ${asset.asset_type ? filterXSS(asset.asset_type.asset_name) : '-'} @@ -1417,6 +1446,11 @@ async function updateAlerts(page, per_page, filters = {}, paging=false){ filterString || queryParams.get('filter_id') ? $('#resetFilters').show() : $('#resetFilters').hide(); alertsContainer.show(); + + $('.copy-btn').off().on('click', function() { + let value = $(this).data('value'); + copy_text_clipboard(value); + }); } $('#alertsPerPage').on('change', (e) => { diff --git a/source/app/static/assets/js/iris/common.js b/source/app/static/assets/js/iris/common.js index 4501ef601..befd2ec56 100644 --- a/source/app/static/assets/js/iris/common.js +++ b/source/app/static/assets/js/iris/common.js @@ -626,7 +626,7 @@ function copy_object_link_md(data_type, node_id){ function copy_text_clipboardb(data){ navigator.clipboard.writeText(fromBinary64(data)).then(function() { - notify_success('Copied!'); + notify_success('Copied'); }, function(err) { notify_error('Can\'t copy link. I printed it in console.'); console.error(err); @@ -635,7 +635,7 @@ function copy_text_clipboardb(data){ function copy_text_clipboard(data){ navigator.clipboard.writeText(data).then(function() { - notify_success('Copied!'); + notify_success('Copied'); }, function(err) { notify_error('Can\'t copy link. I printed it in console.'); console.error(err);