Skip to content

Commit

Permalink
Fix filtering tags by special characters
Browse files Browse the repository at this point in the history
  • Loading branch information
JiaweiWu committed Jul 4, 2022
1 parent b52ff2a commit aecc065
Show file tree
Hide file tree
Showing 3 changed files with 57 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -123,4 +123,14 @@ describe('mapFiltersToKql', () => {
'alert.attributes.tags:(a or b or c)',
]);
});

test('should handle tags with special characters', () => {
expect(
mapFiltersToKql({
tagsFilter: ['a:b', 'b{c', 'c}d', 'd<f', 'f>e', '"ab', 'a\\b'],
})
).toEqual([
'alert.attributes.tags:(a\\:b or b\\{c or c\\}d or d\\<f or f\\>e or \\"ab or a\\\\b)',
]);
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,11 @@ export const mapFiltersToKql = ({
}
}
if (tagsFilter && tagsFilter.length) {
filters.push(`alert.attributes.tags:(${tagsFilter.join(' or ')})`);
filters.push(
`alert.attributes.tags:(${tagsFilter
.map((tag) => tag.replace(/([\)\(\<\>\}\{\"\:\\])/gm, '\\$&'))
.join(' or ')})`
);
}

return filters;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -622,7 +622,7 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => {
await assertRulesLength(3);
});

it('should filter alerts by the tag', async () => {
it('should filter rules by the tag', async () => {
await createAlert({
supertest,
objectRemover,
Expand Down Expand Up @@ -686,6 +686,47 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => {
await assertRulesLength(2);
});

it('should filter rules by tags with special characters', async () => {
await createAlert({
supertest,
objectRemover,
overwrites: {
tags: ['a:b'],
},
});
await createAlert({
supertest,
objectRemover,
overwrites: {
tags: ['a<b'],
},
});
await createAlert({
supertest,
objectRemover,
overwrites: {
tags: ['a{b'],
},
});

await refreshAlertsList();
await testSubjects.click('ruleTagFilter');

await testSubjects.click('ruleTagFilterOption-a:b');
await find.waitForDeletedByCssSelector('.euiBasicTable-loading');
await assertRulesLength(1);

await testSubjects.click('ruleTagFilterOption-a:b');
await testSubjects.click('ruleTagFilterOption-a<b');
await find.waitForDeletedByCssSelector('.euiBasicTable-loading');
await assertRulesLength(1);

await testSubjects.click('ruleTagFilterOption-a<b');
await testSubjects.click('ruleTagFilterOption-a{b');
await find.waitForDeletedByCssSelector('.euiBasicTable-loading');
await assertRulesLength(1);
});

it('should not prevent rules with action execution capabilities from being edited', async () => {
const action = await createAction({ supertest, objectRemover });
await createAlert({
Expand Down

0 comments on commit aecc065

Please sign in to comment.