Skip to content

Commit 91954bc

Browse files
ValentinBouzinFiligranCelineSebe
authored andcommitted
[backend] saved filter module updated (#6044)
1 parent dad7787 commit 91954bc

11 files changed

+245
-15
lines changed

opencti-platform/opencti-graphql/graphql-codegen.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ generates:
5555
DraftWorkspace: ../modules/draftWorkspace/draftWorkspace-types#BasicStoreEntityDraftWorkspace
5656
ExclusionList: ../modules/exclusionList/exclusionList-types#BasicStoreEntityExclusionList
5757
FintelTemplate: ../modules/fintelTemplate/fintelTemplate-types#BasicStoreEntityFintelTemplate
58+
SavedFilter: ../modules/savedFilter/savedFilter-types#BasicStoreEntitySavedFilter
5859
./graphql.schema.json:
5960
plugins:
6061
- "introspection"

opencti-platform/opencti-graphql/src/generated/graphql.ts

Lines changed: 96 additions & 4 deletions
Large diffs are not rendered by default.

opencti-platform/opencti-graphql/src/modules/filter/savedFilter-domain.ts

Lines changed: 0 additions & 8 deletions
This file was deleted.
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import type { StixSavedFilter, StoreEntitySavedFilter } from './savedFilter-types';
2+
import { buildStixObject } from '../../database/stix-converter';
3+
4+
const convertSavedFiltersToStix = (instance: StoreEntitySavedFilter): StixSavedFilter => {
5+
const stixObject = buildStixObject(instance);
6+
return {
7+
...stixObject,
8+
name: instance.name,
9+
filter: instance.filter,
10+
scope: instance.scope,
11+
};
12+
};
13+
14+
export default convertSavedFiltersToStix;
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import { type BasicStoreEntitySavedFilter, ENTITY_TYPE_SAVED_FILTER, StoreEntitySavedFilter } from './savedFilter-types';
2+
import type { AuthContext, AuthUser } from '../../types/user';
3+
import { listEntitiesPaginated } from '../../database/middleware-loader';
4+
import type { QuerySavedFiltersArgs, SavedFilterAddInput } from '../../generated/graphql';
5+
import { createInternalObject, deleteInternalObject } from '../../domain/internalObject';
6+
7+
export const findAll = (context: AuthContext, user: AuthUser, args: QuerySavedFiltersArgs) => {
8+
return listEntitiesPaginated<BasicStoreEntitySavedFilter>(context, user, [ENTITY_TYPE_SAVED_FILTER], args);
9+
};
10+
export const addSavedFilter = (context: AuthContext, user: AuthUser, input: SavedFilterAddInput) => {
11+
return createInternalObject<StoreEntitySavedFilter>(context, user, input, ENTITY_TYPE_SAVED_FILTER);
12+
};
13+
export const deleteSavedFilter = (context: AuthContext, user: AuthUser, savedFilterId: string) => {
14+
return deleteInternalObject(context, user, savedFilterId, ENTITY_TYPE_SAVED_FILTER);
15+
};
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import { registerGraphqlSchema } from '../../graphql/schema';
2+
import savedFilterTypeDefs from './savedFilter.graphql';
3+
import savedFilterResolver from './savedFilter-resolver';
4+
5+
registerGraphqlSchema({
6+
schema: savedFilterTypeDefs,
7+
resolver: savedFilterResolver
8+
});
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import type { BasicStoreEntity, StoreEntity } from '../../types/store';
2+
import type { StixObject } from '../../types/stix-common';
3+
4+
export const ENTITY_TYPE_SAVED_FILTER = 'SavedFilter';
5+
6+
export interface BasicStoreEntitySavedFilter extends BasicStoreEntity {
7+
user: string
8+
name: string
9+
filter: string
10+
scope: string[]
11+
}
12+
13+
export interface StoreEntitySavedFilter extends StoreEntity {
14+
user: string
15+
name: string
16+
filter: string
17+
scope: string[]
18+
}
19+
20+
export interface StixSavedFilter extends StixObject {
21+
user: string
22+
name: string
23+
filter: string
24+
scope: string[]
25+
}

opencti-platform/opencti-graphql/src/modules/filter/savedFilter.graphql renamed to opencti-platform/opencti-graphql/src/modules/savedFilter/savedFilter.graphql

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
type SavedFilter implements InternalObject & BasicObject {
22
id: ID!
3-
name: String!
43
standard_id: String!
54
entity_type: String!
65
parent_types: [String]!
6+
# SavedFilters
7+
name: String!
78
filters: String!
9+
scope: [String!]
810
created_at: DateTime!
9-
scope: [String]
1011
}
1112

1213
type SavedFilterEdge {
@@ -37,7 +38,7 @@ type Query {
3738
}
3839

3940
type Mutation {
40-
savedFilterAdd(input: SavedFilterAddInput): SavedFilter @auth
41+
savedFilterAdd(input: SavedFilterAddInput!): SavedFilter @auth
4142
savedFilterDelete(id: ID!): ID @auth
4243
# savedFiltersDelete(): ID @auth
4344
}
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
import { v4 as uuidv4 } from 'uuid';
2+
import { ENTITY_TYPE_USER } from 'src/schema/internalObject';
3+
import convertSavedFiltersToStix from './savedFilter-converter';
4+
import { ENTITY_TYPE_SAVED_FILTER, type StoreEntitySavedFilter, type StixSavedFilter } from './savedFilter-types';
5+
import { ABSTRACT_INTERNAL_OBJECT } from '../../schema/general';
6+
import { type ModuleDefinition, registerDefinition } from '../../schema/module';
7+
import { isFeatureEnabled } from '../../config/conf';
8+
9+
const SAVED_FILTER_DEFINITION: ModuleDefinition<StoreEntitySavedFilter, StixSavedFilter> = {
10+
type: {
11+
id: 'saved-filter',
12+
name: ENTITY_TYPE_SAVED_FILTER,
13+
category: ABSTRACT_INTERNAL_OBJECT,
14+
aliased: false,
15+
},
16+
identifier: {
17+
definition: {
18+
[ENTITY_TYPE_SAVED_FILTER]: () => uuidv4()
19+
},
20+
},
21+
attributes: [
22+
{
23+
name: 'user',
24+
label: 'User',
25+
type: 'string',
26+
format: 'id',
27+
entityTypes: [ENTITY_TYPE_USER],
28+
mandatoryType: 'no',
29+
editDefault: false,
30+
multiple: false,
31+
upsert: true,
32+
isFilterable: true
33+
},
34+
{
35+
name: 'name',
36+
label: 'Name',
37+
type: 'string',
38+
format: 'short',
39+
mandatoryType: 'external',
40+
editDefault: false,
41+
multiple: false,
42+
upsert: false,
43+
isFilterable: true
44+
},
45+
{
46+
name: 'filter',
47+
label: 'Filter',
48+
type: 'string',
49+
format: 'short',
50+
mandatoryType: 'external',
51+
editDefault: false,
52+
multiple: true,
53+
upsert: false,
54+
isFilterable: true
55+
},
56+
{
57+
name: 'scope',
58+
label: 'Scope',
59+
type: 'string',
60+
format: 'short',
61+
mandatoryType: 'external',
62+
editDefault: false,
63+
multiple: true,
64+
upsert: false,
65+
isFilterable: true
66+
}
67+
],
68+
relations: [],
69+
representative: (instance: StixSavedFilter) => {
70+
return instance.name;
71+
},
72+
converter: convertSavedFiltersToStix,
73+
};
74+
75+
const isSavedFiltersEnabled = isFeatureEnabled('SAVED_FILTERS');
76+
77+
if (isSavedFiltersEnabled) {
78+
registerDefinition(SAVED_FILTER_DEFINITION);
79+
}

opencti-platform/opencti-graphql/src/schema/internalObject.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { ENTITY_TYPE_DELETE_OPERATION } from '../modules/deleteOperation/deleteO
66
import { ENTITY_TYPE_DRAFT_WORKSPACE } from '../modules/draftWorkspace/draftWorkspace-types';
77
import { ENTITY_TYPE_EXCLUSION_LIST } from '../modules/exclusionList/exclusionList-types';
88
import { ENTITY_TYPE_FINTEL_TEMPLATE } from '../modules/fintelTemplate/fintelTemplate-types';
9+
import { ENTITY_TYPE_SAVED_FILTER } from '../modules/savedFilter/savedFilter-types';
910

1011
export const ENTITY_TYPE_SETTINGS = 'Settings';
1112
export const ENTITY_TYPE_MIGRATION_STATUS = 'MigrationStatus';
@@ -45,6 +46,7 @@ const DATED_INTERNAL_OBJECTS = [
4546
ENTITY_TYPE_DELETE_OPERATION,
4647
ENTITY_TYPE_DRAFT_WORKSPACE,
4748
ENTITY_TYPE_EXCLUSION_LIST,
49+
ENTITY_TYPE_SAVED_FILTER,
4850
];
4951
const INTERNAL_OBJECTS = [
5052
ENTITY_TYPE_SETTINGS,
@@ -74,6 +76,7 @@ const INTERNAL_OBJECTS = [
7476
ENTITY_TYPE_DRAFT_WORKSPACE,
7577
ENTITY_TYPE_EXCLUSION_LIST,
7678
ENTITY_TYPE_FINTEL_TEMPLATE,
79+
ENTITY_TYPE_SAVED_FILTER,
7780
];
7881
const HISTORY_OBJECTS = [ENTITY_TYPE_WORK];
7982

0 commit comments

Comments
 (0)