@@ -206,6 +206,7 @@ def create_raw(self, **kwargs):
206
206
name = kwargs .get ('name' , None )
207
207
description = kwargs .get ('description' , None )
208
208
indicator_pattern = kwargs .get ('indicator_pattern' , None )
209
+ main_observable_type = kwargs .get ('main_observable_type' , None )
209
210
pattern_type = kwargs .get ('pattern_type' , None )
210
211
valid_from = kwargs .get ('valid_from' , None )
211
212
valid_until = kwargs .get ('valid_until' , None )
@@ -216,7 +217,7 @@ def create_raw(self, **kwargs):
216
217
modified = kwargs .get ('modified' , None )
217
218
created_by_ref = kwargs .get ('createdByRef' , None )
218
219
219
- if name is not None and indicator_pattern is not None :
220
+ if name is not None and indicator_pattern is not None and main_observable_type is not None :
220
221
self .opencti .log ('info' , 'Creating Indicator {' + name + '}.' )
221
222
query = """
222
223
mutation IndicatorAdd($input: IndicatorAddInput) {
@@ -230,6 +231,7 @@ def create_raw(self, **kwargs):
230
231
'name' : name ,
231
232
'description' : description ,
232
233
'indicator_pattern' : indicator_pattern ,
234
+ 'main_observable_type' : main_observable_type ,
233
235
'pattern_type' : pattern_type ,
234
236
'valid_from' : valid_from ,
235
237
'valid_until' : valid_until ,
@@ -243,7 +245,10 @@ def create_raw(self, **kwargs):
243
245
})
244
246
return self .opencti .process_multiple_fields (result ['data' ]['indicatorAdd' ])
245
247
else :
246
- self .opencti .log ('error' , '[opencti_indicator] Missing parameters: name and indicator_pattern' )
248
+ self .opencti .log (
249
+ 'error' ,
250
+ '[opencti_indicator] Missing parameters: name and indicator_pattern and main_observable_type'
251
+ )
247
252
248
253
"""
249
254
Create a Indicator object only if it not exists, update it on request
@@ -256,6 +261,7 @@ def create(self, **kwargs):
256
261
name = kwargs .get ('name' , None )
257
262
description = kwargs .get ('description' , None )
258
263
indicator_pattern = kwargs .get ('indicator_pattern' , None )
264
+ main_observable_type = kwargs .get ('main_observable_type' , None )
259
265
pattern_type = kwargs .get ('pattern_type' , None )
260
266
valid_from = kwargs .get ('valid_from' , None )
261
267
valid_until = kwargs .get ('valid_until' , None )
@@ -287,6 +293,7 @@ def create(self, **kwargs):
287
293
name = name ,
288
294
description = description ,
289
295
indicator_pattern = indicator_pattern ,
296
+ main_observable_type = main_observable_type ,
290
297
pattern_type = pattern_type ,
291
298
valid_from = valid_from ,
292
299
valid_until = valid_until ,
@@ -297,6 +304,54 @@ def create(self, **kwargs):
297
304
createdByRef = created_by_ref
298
305
)
299
306
307
+ """
308
+ Add a Stix-Observable object to Indicator object (observable_refs)
309
+
310
+ :param id: the id of the Indicator
311
+ :param entity_id: the id of the Stix-Observable
312
+ :return Boolean
313
+ """
314
+
315
+ def add_stix_observable (self , ** kwargs ):
316
+ id = kwargs .get ('id' , None )
317
+ indicator = kwargs .get ('indicator' , None )
318
+ stix_observable_id = kwargs .get ('stix_observable_id' , None )
319
+ if id is not None and stix_observable_id is not None :
320
+ if indicator is None :
321
+ indicator = self .read (id = id )
322
+ if indicator is None :
323
+ self .opencti .log ('error' , '[opencti_indicator] Cannot add Object Ref, indicator not found' )
324
+ return False
325
+ if stix_observable_id in indicator ['observableRefsIds' ]:
326
+ return True
327
+ else :
328
+ self .opencti .log (
329
+ 'info' ,
330
+ 'Adding Stix-Observable {' + stix_observable_id + '} to Indicator {' + id + '}'
331
+ )
332
+ query = """
333
+ mutation IndicatorEdit($id: ID!, $input: RelationAddInput) {
334
+ indicatorEdit(id: $id) {
335
+ relationAdd(input: $input) {
336
+ id
337
+ }
338
+ }
339
+ }
340
+ """
341
+ self .opencti .query (query , {
342
+ 'id' : id ,
343
+ 'input' : {
344
+ 'fromRole' : 'observables_aggregation' ,
345
+ 'toId' : stix_observable_id ,
346
+ 'toRole' : 'soo' ,
347
+ 'through' : 'observable_refs'
348
+ }
349
+ })
350
+ return True
351
+ else :
352
+ self .opencti .log ('error' , '[opencti_indicator] Missing parameters: id and stix_observable_id' )
353
+ return False
354
+
300
355
"""
301
356
Export an Indicator object in STIX2
302
357
0 commit comments