Skip to content

Commit 9246a34

Browse files
committed
ZH #27 #28 #29
1 parent 0aa087a commit 9246a34

File tree

8 files changed

+121
-49
lines changed

8 files changed

+121
-49
lines changed

app/routes/cfg_category_range_mapping.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ def update_cfg_category_range_mapping(id):
7474

7575

7676
def update_cfg_category_range_mapping_current(id, current):
77+
db.session.rollback()
7778
entity = cfg_category_range_mapping.CfgCategoryRangeMapping.query.get(id)
7879
if not entity:
7980
return
@@ -86,7 +87,11 @@ def update_cfg_category_range_mapping_current(id, current):
8687
id=id
8788
)
8889
db.session.merge(entity)
89-
db.session.commit()
90+
try:
91+
db.session.commit()
92+
except:
93+
db.session.rollback()
94+
raise
9095
return
9196

9297

app/routes/yara_rules.py

Lines changed: 70 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,11 @@ def merge_signatures():
116116
yr.description = description.strip('"')
117117
yr.revision = 1
118118
db.session.add(yr)
119-
db.session.commit()
119+
try:
120+
db.session.commit()
121+
except:
122+
db.session.rollback()
123+
raise
120124
return jsonify(yr.to_dict()), 201
121125

122126

@@ -139,7 +143,11 @@ def merge_signatures_by_id():
139143
merged_state = "Merged"
140144
if not cfg_states.Cfg_states.query.filter_by(state=merged_state).first():
141145
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
143151

144152
merge_from_yr.state = merged_state
145153
db.session.add(merge_from_yr)
@@ -154,7 +162,11 @@ def merge_signatures_by_id():
154162
db.session.add(
155163
comments.Comments(comment=merged_from_comment, entity_type=ENTITY_MAPPING["SIGNATURE"],
156164
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
158170

159171
delete_bookmarks(ENTITY_MAPPING["SIGNATURE"], merge_from_id, current_user.id)
160172

@@ -200,7 +212,6 @@ def get_all_yara_rules():
200212
include_tags = bool(distutils.util.strtobool(request.args.get('include_tags', "true")))
201213
include_comments = bool(distutils.util.strtobool(request.args.get('include_comments', "true")))
202214

203-
204215
if include_yara_string:
205216
include_yara_string = True
206217

@@ -391,7 +402,11 @@ def create_yara_rule():
391402
entity.state = draft_state.state
392403

393404
db.session.add(entity)
394-
db.session.commit()
405+
try:
406+
db.session.commit()
407+
except:
408+
db.session.rollback()
409+
raise
395410

396411
entity.tags = create_tags_mapping(entity.__tablename__, entity.id, request.json['tags'])
397412

@@ -424,15 +439,23 @@ def create_yara_rule():
424439
dirty = True
425440

426441
if dirty:
427-
db.session.commit()
442+
try:
443+
db.session.commit()
444+
except:
445+
db.session.rollback()
446+
raise
428447

429448
db.session.add(yara_rule.Yara_rule_history(date_created=datetime.datetime.now(),
430449
revision=entity.revision,
431450
rule_json=json.dumps(entity.to_revision_dict()),
432451
user_id=current_user.id,
433452
yara_rule_id=entity.id,
434453
state=entity.state))
435-
db.session.commit()
454+
try:
455+
db.session.commit()
456+
except:
457+
db.session.rollback()
458+
raise
436459
return jsonify(entity.to_dict()), 201
437460

438461

@@ -443,7 +466,11 @@ def activate_yara_rule(id):
443466
entity = yara_rule.Yara_rule.query.get(id)
444467
entity.active = 1
445468
db.session.merge(entity)
446-
db.session.commit()
469+
try:
470+
db.session.commit()
471+
except:
472+
db.session.rollback()
473+
raise
447474
return jsonify(entity.to_dict()), 201
448475

449476
@app.route('/ThreatKB/yara_rules/<int:id>', methods=['PUT'])
@@ -514,7 +541,7 @@ def update_yara_rule(id):
514541
description=request.json.get("description", None),
515542
references=request.json.get("references", None),
516543
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'],
518545
condition=yara_rule.Yara_rule.make_yara_sane(request.json["condition"], "condition:"),
519546
strings=yara_rule.Yara_rule.make_yara_sane(request.json["strings"], "strings:"),
520547
eventid=temp_sig_id,
@@ -524,7 +551,7 @@ def update_yara_rule(id):
524551
modified_user_id=current_user.id,
525552
last_revision_date=datetime.datetime.now(),
526553
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,
528555
revision=entity.revision if do_not_bump_revision else entity.revision + 1,
529556
imports=yara_rule.Yara_rule.get_imports_from_string(request.json.get("imports", None)),
530557
active=request.json.get("active", entity.active)
@@ -551,15 +578,23 @@ def update_yara_rule(id):
551578
if old_state == release_state.state and entity.state == release_state.state and not do_not_bump_revision:
552579
entity.state = draft_state.state
553580

581+
if get_new_sig_id:
582+
update_cfg_category_range_mapping_current(request.json['category']['id'], temp_sig_id)
583+
554584
db.session.merge(entity)
555-
db.session.commit()
585+
try:
586+
db.session.commit()
587+
except:
588+
db.session.rollback()
589+
raise
556590

557591
dirty = False
558592
for name, value_dict in request.json.get("metadata_values", {}).items():
559593
if not name or not value_dict:
560594
continue
561595

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(
563598
Metadata.key == name).filter(Metadata.artifact_type == ENTITY_MAPPING["SIGNATURE"]).filter(
564599
MetadataMapping.artifact_id == entity.id).first()
565600
if m and m[0]:
@@ -569,12 +604,17 @@ def update_yara_rule(id):
569604
else:
570605
m = db.session.query(Metadata).filter(Metadata.key == name).filter(
571606
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,
573609
created_user_id=current_user.id))
574610
dirty = True
575611

576612
if dirty:
577-
db.session.commit()
613+
try:
614+
db.session.commit()
615+
except:
616+
db.session.rollback()
617+
raise
578618

579619
# THIS IS UGLY. FIGURE OUT WHY MERGE ISN'T WORKING
580620
entity = yara_rule.Yara_rule.query.get(entity.id)
@@ -586,9 +626,6 @@ def update_yara_rule(id):
586626
yara_rule_id=entity.id,
587627
state=entity.state))
588628

589-
if get_new_sig_id:
590-
update_cfg_category_range_mapping_current(request.json['category']['id'], temp_sig_id)
591-
592629
current_tags = get_tags_for_source(entity.__tablename__, entity.id)
593630
new_tags = request.json['tags']
594631
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):
639676
abort(403)
640677

641678
db.session.merge(entity)
642-
db.session.commit()
679+
try:
680+
db.session.commit()
681+
except:
682+
db.session.rollback()
683+
raise
643684

644685
# delete_tags_mapping(entity.__tablename__, entity.id)
645686
delete_bookmarks(ENTITY_MAPPING["SIGNATURE"], id, current_user.id)
@@ -650,7 +691,11 @@ def delete_yara_rule(id):
650691
db.session.query(yara_rule.Yara_rule_history).filter(
651692
yara_rule.Yara_rule_history.yara_rule_id.in_([entity.id])).delete(synchronize_session='fetch')
652693
db.session.delete(entity)
653-
db.session.commit()
694+
try:
695+
db.session.commit()
696+
except:
697+
db.session.rollback()
698+
raise
654699

655700
delete_bookmarks(ENTITY_MAPPING["SIGNATURE"], id, current_user.id)
656701

@@ -684,7 +729,7 @@ def copy_yara_rules():
684729
Return: yara strings for copy"""
685730

686731
signatures = []
687-
if 'copy' in request.json and request.json['copy']\
732+
if 'copy' in request.json and request.json['copy'] \
688733
and 'ids' in request.json['copy'] and request.json['copy']['ids']:
689734
for sig_id in request.json['copy']['ids']:
690735
sig = yara_rule.Yara_rule.query.get(sig_id)
@@ -709,5 +754,9 @@ def delete_all_inactive_yara_rules():
709754
db.session.query(yara_rule.Yara_rule_history).filter(
710755
yara_rule.Yara_rule_history.yara_rule_id.in_(rules_to_delete_ids)).delete(synchronize_session='fetch')
711756
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
713762
return jsonify(''), 200

app/static/js/c2dns/c2dns-controller.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,10 @@ angular.module('ThreatKB')
121121
sort_dir: null
122122
};
123123

124+
$scope.customTooltip = function (row,col,value) {
125+
return value.map(u => u.text).join(', ');
126+
}
127+
124128
$scope.gridOptions = {
125129
paginationPageSizes: [25, 50, 75, 100],
126130
paginationPageSize: 25,
@@ -255,7 +259,8 @@ angular.module('ThreatKB')
255259
displayName: 'Tags',
256260
width: '180',
257261
enableSorting: false,
258-
cellTemplate: '<ul class="gridTags" append-to-body="true" ng-model="row.entity.tags">'
262+
cellTemplate: '<div class="gridTags" title="{{grid.appScope.customTooltip(row,col,COL_FIELD)}}">'
263+
+ '<ul class="gridTags" append-to-body="true" ng-model="row.entity.tags">'
259264
+ '<li ng-repeat="tag in (row.entity.tags | filter: $select.search) track by tag.id">'
260265
+ '<small>{{tag.text}}</small>'
261266
+ '</li>'

app/static/js/c2ip/c2ip-controller.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,9 @@ angular.module('ThreatKB')
121121
sort_dir: null
122122
};
123123

124+
$scope.customTooltip = function (row,col,value) {
125+
return value.map(u => u.text).join(', ');
126+
}
124127
$scope.gridOptions = {
125128
paginationPageSizes: [25, 50, 75, 100],
126129
paginationPageSize: 25,
@@ -257,7 +260,8 @@ angular.module('ThreatKB')
257260
displayName: 'Tags',
258261
width: '180',
259262
enableSorting: false,
260-
cellTemplate: '<ul class="gridTags" append-to-body="true" ng-model="row.entity.tags">'
263+
cellTemplate: '<div class="gridTags" title="{{grid.appScope.customTooltip(row,col,COL_FIELD)}}">'
264+
+ '<ul class="gridTags" append-to-body="true" ng-model="row.entity.tags">'
261265
+ '<li ng-repeat="tag in (row.entity.tags | filter: $select.search) track by tag.id">'
262266
+ '<small>{{tag.text}}</small>'
263267
+ '</li>'

app/static/js/yara_rule/yara_rule-controller.js

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,10 @@ angular.module('ThreatKB')
125125
sort_dir: null
126126
};
127127

128+
$scope.customTooltip = function (row,col,value) {
129+
return value.map(u => u.text).join(', ');
130+
}
131+
128132
$scope.gridOptions = {
129133
paginationPageSizes: [25, 50, 75, 100],
130134
paginationPageSize: 25,
@@ -269,15 +273,34 @@ angular.module('ThreatKB')
269273
{
270274
field: 'tags',
271275
displayName: 'Tags',
272-
width: '180',
276+
width: '160',
273277
enableSorting: false,
274-
cellTemplate: '<ul class="gridTags" append-to-body="true" ng-model="row.entity.tags">'
278+
cellTemplate: '<div class="gridTags" title="{{grid.appScope.customTooltip(row,col,COL_FIELD)}}">'
279+
+ '<ul class="gridTags" append-to-body="true" ng-model="row.entity.tags">'
275280
+ '<li ng-repeat="tag in (row.entity.tags | filter: $select.search) track by tag.id">'
276281
+ '<small>{{tag.text}}</small>'
277282
+ '</li>'
278283
+ '</ul>'
279284
+ '</div>'
280285
},
286+
{
287+
field: 'metadata_values',
288+
displayName: 'Severity',
289+
width: '90',
290+
enableSorting: true,
291+
cellTemplate: '<div ng-model="row.entity.metadata_values" style="text-align: center;">'
292+
+ '<span ng-bind="row.entity.metadata_values.severity.value"></span>'
293+
+ '</div>'
294+
},
295+
{
296+
field: 'metadata_values',
297+
displayName: 'Confidence',
298+
width: '115',
299+
enableSorting: true,
300+
cellTemplate: '<div ng-model="row.entity.metadata_values" style="text-align: center;">'
301+
+ '<span ng-bind="row.entity.metadata_values.confidence.value"></span>'
302+
+ '</div>'
303+
},
281304
{
282305
name: 'Actions',
283306
width: '180',
@@ -345,7 +368,7 @@ angular.module('ThreatKB')
345368
url += '&page_size=' + paginationOptions.pageSize;
346369
url += '&include_yara_string=0';
347370
url += '&short=1';
348-
url += '&include_metadata=0';
371+
url += '&include_metadata=1';
349372
url += '&view=' + $scope.view_selected;
350373

351374
switch (paginationOptions.sort_dir) {
@@ -566,7 +589,8 @@ angular.module('ThreatKB')
566589
"tags": [],
567590
"comments": [],
568591
"files": [],
569-
"imports": ""
592+
"imports": "",
593+
"severity": ""
570594
};
571595
};
572596

app/static/views/c2dns/c2dns.html

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -610,12 +610,9 @@ <h4 class="modal-title" id="myC2dnsLabel" style="float: left;">
610610
.gridTags {
611611
padding: 0;
612612
width: 180px;
613-
height: 2em;
613+
overflow: auto !important;
614+
height: 100% !important;
614615
line-height: 1em;
615-
text-overflow: ellipsis;
616-
word-break: break-all;
617-
overflow: hidden;
618-
white-space: nowrap;
619616
}
620617

621618
.gridTags:hover {

app/static/views/c2ip/c2ips.html

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -629,18 +629,9 @@ <h4 class="modal-title" id="myC2ipLabel" style="float: left;">
629629
.gridTags {
630630
padding: 0;
631631
width: 180px;
632-
height: 2em;
632+
overflow: auto !important;
633+
height: 100% !important;
633634
line-height: 1em;
634-
text-overflow: ellipsis;
635-
word-break: break-all;
636-
overflow: hidden;
637-
white-space: nowrap;
638-
}
639-
640-
.gridTags:hover {
641-
overflow: visible;
642-
white-space: normal;
643-
height: auto;
644635
}
645636

646637
.gridTags li:not(:last-child):after {

app/static/views/yara_rule/yara_rules.html

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -771,12 +771,9 @@ <h4 class="modal-title" id="myC2ipLabel" style="float: left">
771771
.gridTags {
772772
padding: 0;
773773
width: 180px;
774-
height: 2em;
774+
overflow: auto !important;
775+
height: 100% !important;
775776
line-height: 1em;
776-
text-overflow: ellipsis;
777-
word-break: break-all;
778-
overflow: hidden;
779-
white-space: nowrap;
780777
}
781778

782779
.gridTags:hover {

0 commit comments

Comments
 (0)