Skip to content

Commit 2adce8d

Browse files
committed
[SECURITY] Rearrange rule name's column in Alert Table (#71020)
* Fix bug when you move columns rule name * reference.url and event.url will be render as an anchor * no need to fake index just return null
1 parent cdf6289 commit 2adce8d

5 files changed

Lines changed: 32 additions & 11 deletions

File tree

x-pack/plugins/security_solution/public/app/home/index.tsx

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import { UseUrlState } from '../../common/components/url_state';
1717
import { useWithSource } from '../../common/containers/source';
1818
import { useShowTimeline } from '../../common/utils/timeline/use_show_timeline';
1919
import { navTabs } from './home_navigations';
20+
import { useSignalIndex } from '../../alerts/containers/detection_engine/alerts/use_signal_index';
2021

2122
const WrappedByAutoSizer = styled.div`
2223
height: 100%;
@@ -55,9 +56,17 @@ export const HomePage: React.FC<HomePageProps> = ({ children }) => {
5556
}),
5657
[windowHeight]
5758
);
59+
const { signalIndexExists, signalIndexName } = useSignalIndex();
60+
61+
const indexToAdd = useMemo<string[] | null>(() => {
62+
if (signalIndexExists && signalIndexName != null) {
63+
return [signalIndexName];
64+
}
65+
return null;
66+
}, [signalIndexExists, signalIndexName]);
5867

5968
const [showTimeline] = useShowTimeline();
60-
const { browserFields, indexPattern, indicesExist } = useWithSource();
69+
const { browserFields, indexPattern, indicesExist } = useWithSource('default', indexToAdd);
6170

6271
return (
6372
<WrappedByAutoSizer data-test-subj="wrapped-by-auto-sizer" ref={measureRef}>

x-pack/plugins/security_solution/public/common/components/drag_and_drop/helpers.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,11 @@ export const addProviderToTimeline = ({
182182
}
183183
};
184184

185+
const linkFields: Record<string, string> = {
186+
'signal.rule.name': 'signal.rule.id',
187+
'event.module': 'rule.reference',
188+
};
189+
185190
export const addFieldToTimelineColumns = ({
186191
upsertColumn = timelineActions.upsertColumn,
187192
browserFields,
@@ -202,6 +207,7 @@ export const addFieldToTimelineColumns = ({
202207
description: isString(column.description) ? column.description : undefined,
203208
example: isString(column.example) ? column.example : undefined,
204209
id: fieldId,
210+
linkField: linkFields[fieldId] ?? undefined,
205211
type: column.type,
206212
aggregatable: column.aggregatable,
207213
width: DEFAULT_COLUMN_MIN_WIDTH,

x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/constants.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,6 @@ export const IP_FIELD_TYPE = 'ip';
1010
export const MESSAGE_FIELD_NAME = 'message';
1111
export const EVENT_MODULE_FIELD_NAME = 'event.module';
1212
export const RULE_REFERENCE_FIELD_NAME = 'rule.reference';
13+
export const REFERENCE_URL_FIELD_NAME = 'reference.url';
14+
export const EVENT_URL_FIELD_NAME = 'event.url';
1315
export const SIGNAL_RULE_NAME_FIELD_NAME = 'signal.rule.name';

x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/formatted_field.tsx

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,10 @@ import {
2929
EVENT_MODULE_FIELD_NAME,
3030
RULE_REFERENCE_FIELD_NAME,
3131
SIGNAL_RULE_NAME_FIELD_NAME,
32+
REFERENCE_URL_FIELD_NAME,
33+
EVENT_URL_FIELD_NAME,
3234
} from './constants';
33-
import { RenderRuleName, renderEventModule, renderRulReference } from './formatted_field_helpers';
35+
import { RenderRuleName, renderEventModule, renderUrl } from './formatted_field_helpers';
3436

3537
// simple black-list to prevent dragging and dropping fields such as message name
3638
const columnNamesNotDraggable = [MESSAGE_FIELD_NAME];
@@ -107,8 +109,10 @@ const FormattedFieldValueComponent: React.FC<{
107109
);
108110
} else if (fieldName === EVENT_MODULE_FIELD_NAME) {
109111
return renderEventModule({ contextId, eventId, fieldName, linkValue, truncate, value });
110-
} else if (fieldName === RULE_REFERENCE_FIELD_NAME) {
111-
return renderRulReference({ contextId, eventId, fieldName, linkValue, truncate, value });
112+
} else if (
113+
[RULE_REFERENCE_FIELD_NAME, REFERENCE_URL_FIELD_NAME, EVENT_URL_FIELD_NAME].includes(fieldName)
114+
) {
115+
return renderUrl({ contextId, eventId, fieldName, linkValue, truncate, value });
112116
} else if (columnNamesNotDraggable.includes(fieldName)) {
113117
return truncate && !isEmpty(value) ? (
114118
<TruncatableText data-test-subj="truncatable-message">

x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/formatted_field_helpers.tsx

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ export const renderEventModule = ({
150150
);
151151
};
152152

153-
export const renderRulReference = ({
153+
export const renderUrl = ({
154154
contextId,
155155
eventId,
156156
fieldName,
@@ -165,23 +165,23 @@ export const renderRulReference = ({
165165
truncate?: boolean;
166166
value: string | number | null | undefined;
167167
}) => {
168-
const referenceUrlName = `${value}`;
168+
const urlName = `${value}`;
169169

170170
const content = truncate ? <TruncatableText>{value}</TruncatableText> : value;
171171

172-
return isString(value) && referenceUrlName.length > 0 ? (
172+
return isString(value) && urlName.length > 0 ? (
173173
<DefaultDraggable
174174
field={fieldName}
175-
id={`event-details-value-default-draggable-${contextId}-${eventId}-${fieldName}-${value}-${referenceUrlName}`}
175+
id={`event-details-value-default-draggable-${contextId}-${eventId}-${fieldName}-${value}-${urlName}`}
176176
tooltipContent={value}
177177
value={value}
178178
>
179-
{!isUrlInvalid(referenceUrlName) && (
180-
<EuiLink target="_blank" href={referenceUrlName}>
179+
{!isUrlInvalid(urlName) && (
180+
<EuiLink target="_blank" href={urlName}>
181181
{content}
182182
</EuiLink>
183183
)}
184-
{isUrlInvalid(referenceUrlName) && <>{content}</>}
184+
{isUrlInvalid(urlName) && <>{content}</>}
185185
</DefaultDraggable>
186186
) : (
187187
getEmptyTagValue()

0 commit comments

Comments
 (0)