@@ -116,7 +116,11 @@ def merge_signatures():
116
116
yr .description = description .strip ('"' )
117
117
yr .revision = 1
118
118
db .session .add (yr )
119
- db .session .commit ()
119
+ try :
120
+ db .session .commit ()
121
+ except :
122
+ db .session .rollback ()
123
+ raise
120
124
return jsonify (yr .to_dict ()), 201
121
125
122
126
@@ -139,7 +143,11 @@ def merge_signatures_by_id():
139
143
merged_state = "Merged"
140
144
if not cfg_states .Cfg_states .query .filter_by (state = merged_state ).first ():
141
145
db .session .add (cfg_states .Cfg_states (state = merged_state ))
142
- db .session .commit ()
146
+ try :
147
+ db .session .commit ()
148
+ except :
149
+ db .session .rollback ()
150
+ raise
143
151
144
152
merge_from_yr .state = merged_state
145
153
db .session .add (merge_from_yr )
@@ -154,7 +162,11 @@ def merge_signatures_by_id():
154
162
db .session .add (
155
163
comments .Comments (comment = merged_from_comment , entity_type = ENTITY_MAPPING ["SIGNATURE" ],
156
164
entity_id = merge_to_yr .id , user_id = current_user .id ))
157
- db .session .commit ()
165
+ try :
166
+ db .session .commit ()
167
+ except :
168
+ db .session .rollback ()
169
+ raise
158
170
159
171
delete_bookmarks (ENTITY_MAPPING ["SIGNATURE" ], merge_from_id , current_user .id )
160
172
@@ -200,7 +212,6 @@ def get_all_yara_rules():
200
212
include_tags = bool (distutils .util .strtobool (request .args .get ('include_tags' , "true" )))
201
213
include_comments = bool (distutils .util .strtobool (request .args .get ('include_comments' , "true" )))
202
214
203
-
204
215
if include_yara_string :
205
216
include_yara_string = True
206
217
@@ -391,7 +402,11 @@ def create_yara_rule():
391
402
entity .state = draft_state .state
392
403
393
404
db .session .add (entity )
394
- db .session .commit ()
405
+ try :
406
+ db .session .commit ()
407
+ except :
408
+ db .session .rollback ()
409
+ raise
395
410
396
411
entity .tags = create_tags_mapping (entity .__tablename__ , entity .id , request .json ['tags' ])
397
412
@@ -424,15 +439,23 @@ def create_yara_rule():
424
439
dirty = True
425
440
426
441
if dirty :
427
- db .session .commit ()
442
+ try :
443
+ db .session .commit ()
444
+ except :
445
+ db .session .rollback ()
446
+ raise
428
447
429
448
db .session .add (yara_rule .Yara_rule_history (date_created = datetime .datetime .now (),
430
449
revision = entity .revision ,
431
450
rule_json = json .dumps (entity .to_revision_dict ()),
432
451
user_id = current_user .id ,
433
452
yara_rule_id = entity .id ,
434
453
state = entity .state ))
435
- db .session .commit ()
454
+ try :
455
+ db .session .commit ()
456
+ except :
457
+ db .session .rollback ()
458
+ raise
436
459
return jsonify (entity .to_dict ()), 201
437
460
438
461
@@ -443,7 +466,11 @@ def activate_yara_rule(id):
443
466
entity = yara_rule .Yara_rule .query .get (id )
444
467
entity .active = 1
445
468
db .session .merge (entity )
446
- db .session .commit ()
469
+ try :
470
+ db .session .commit ()
471
+ except :
472
+ db .session .rollback ()
473
+ raise
447
474
return jsonify (entity .to_dict ()), 201
448
475
449
476
@app .route ('/ThreatKB/yara_rules/<int:id>' , methods = ['PUT' ])
@@ -514,7 +541,7 @@ def update_yara_rule(id):
514
541
description = request .json .get ("description" , None ),
515
542
references = request .json .get ("references" , None ),
516
543
category = request .json ['category' ]['category' ] if request .json ['category' ] and 'category' in request
517
- .json ['category' ] else request .json ['category' ],
544
+ .json ['category' ] else request .json ['category' ],
518
545
condition = yara_rule .Yara_rule .make_yara_sane (request .json ["condition" ], "condition:" ),
519
546
strings = yara_rule .Yara_rule .make_yara_sane (request .json ["strings" ], "strings:" ),
520
547
eventid = temp_sig_id ,
@@ -524,7 +551,7 @@ def update_yara_rule(id):
524
551
modified_user_id = current_user .id ,
525
552
last_revision_date = datetime .datetime .now (),
526
553
owner_user_id = request .json ['owner_user' ]['id' ] if request .json .get ("owner_user" , None ) and request
527
- .json ["owner_user" ].get ("id" , None ) else None ,
554
+ .json ["owner_user" ].get ("id" , None ) else None ,
528
555
revision = entity .revision if do_not_bump_revision else entity .revision + 1 ,
529
556
imports = yara_rule .Yara_rule .get_imports_from_string (request .json .get ("imports" , None )),
530
557
active = request .json .get ("active" , entity .active )
@@ -551,15 +578,23 @@ def update_yara_rule(id):
551
578
if old_state == release_state .state and entity .state == release_state .state and not do_not_bump_revision :
552
579
entity .state = draft_state .state
553
580
581
+ if get_new_sig_id :
582
+ update_cfg_category_range_mapping_current (request .json ['category' ]['id' ], temp_sig_id )
583
+
554
584
db .session .merge (entity )
555
- db .session .commit ()
585
+ try :
586
+ db .session .commit ()
587
+ except :
588
+ db .session .rollback ()
589
+ raise
556
590
557
591
dirty = False
558
592
for name , value_dict in request .json .get ("metadata_values" , {}).items ():
559
593
if not name or not value_dict :
560
594
continue
561
595
562
- m = db .session .query (MetadataMapping , Metadata ).join (Metadata , Metadata .id == MetadataMapping .metadata_id ).filter (
596
+ m = db .session .query (MetadataMapping , Metadata ).join (Metadata ,
597
+ Metadata .id == MetadataMapping .metadata_id ).filter (
563
598
Metadata .key == name ).filter (Metadata .artifact_type == ENTITY_MAPPING ["SIGNATURE" ]).filter (
564
599
MetadataMapping .artifact_id == entity .id ).first ()
565
600
if m and m [0 ]:
@@ -569,12 +604,17 @@ def update_yara_rule(id):
569
604
else :
570
605
m = db .session .query (Metadata ).filter (Metadata .key == name ).filter (
571
606
Metadata .artifact_type == ENTITY_MAPPING ["SIGNATURE" ]).first ()
572
- db .session .add (MetadataMapping (value = value_dict ["value" ] if m .required else value_dict .get ("value" , None ), metadata_id = m .id , artifact_id = entity .id ,
607
+ db .session .add (MetadataMapping (value = value_dict ["value" ] if m .required else value_dict .get ("value" , None ),
608
+ metadata_id = m .id , artifact_id = entity .id ,
573
609
created_user_id = current_user .id ))
574
610
dirty = True
575
611
576
612
if dirty :
577
- db .session .commit ()
613
+ try :
614
+ db .session .commit ()
615
+ except :
616
+ db .session .rollback ()
617
+ raise
578
618
579
619
# THIS IS UGLY. FIGURE OUT WHY MERGE ISN'T WORKING
580
620
entity = yara_rule .Yara_rule .query .get (entity .id )
@@ -586,9 +626,6 @@ def update_yara_rule(id):
586
626
yara_rule_id = entity .id ,
587
627
state = entity .state ))
588
628
589
- if get_new_sig_id :
590
- update_cfg_category_range_mapping_current (request .json ['category' ]['id' ], temp_sig_id )
591
-
592
629
current_tags = get_tags_for_source (entity .__tablename__ , entity .id )
593
630
new_tags = request .json ['tags' ]
594
631
tags_to_delete , tags_to_create = [c_tag for c_tag in current_tags if c_tag not in new_tags ], [n_tag for n_tag in
@@ -639,7 +676,11 @@ def delete_yara_rule(id):
639
676
abort (403 )
640
677
641
678
db .session .merge (entity )
642
- db .session .commit ()
679
+ try :
680
+ db .session .commit ()
681
+ except :
682
+ db .session .rollback ()
683
+ raise
643
684
644
685
# delete_tags_mapping(entity.__tablename__, entity.id)
645
686
delete_bookmarks (ENTITY_MAPPING ["SIGNATURE" ], id , current_user .id )
@@ -650,7 +691,11 @@ def delete_yara_rule(id):
650
691
db .session .query (yara_rule .Yara_rule_history ).filter (
651
692
yara_rule .Yara_rule_history .yara_rule_id .in_ ([entity .id ])).delete (synchronize_session = 'fetch' )
652
693
db .session .delete (entity )
653
- db .session .commit ()
694
+ try :
695
+ db .session .commit ()
696
+ except :
697
+ db .session .rollback ()
698
+ raise
654
699
655
700
delete_bookmarks (ENTITY_MAPPING ["SIGNATURE" ], id , current_user .id )
656
701
@@ -684,7 +729,7 @@ def copy_yara_rules():
684
729
Return: yara strings for copy"""
685
730
686
731
signatures = []
687
- if 'copy' in request .json and request .json ['copy' ]\
732
+ if 'copy' in request .json and request .json ['copy' ] \
688
733
and 'ids' in request .json ['copy' ] and request .json ['copy' ]['ids' ]:
689
734
for sig_id in request .json ['copy' ]['ids' ]:
690
735
sig = yara_rule .Yara_rule .query .get (sig_id )
@@ -709,5 +754,9 @@ def delete_all_inactive_yara_rules():
709
754
db .session .query (yara_rule .Yara_rule_history ).filter (
710
755
yara_rule .Yara_rule_history .yara_rule_id .in_ (rules_to_delete_ids )).delete (synchronize_session = 'fetch' )
711
756
db .session .query (yara_rule .Yara_rule ).filter (yara_rule .Yara_rule .active == 0 ).delete ()
712
- db .session .commit ()
757
+ try :
758
+ db .session .commit ()
759
+ except :
760
+ db .session .rollback ()
761
+ raise
713
762
return jsonify ('' ), 200
0 commit comments