mirror of
https://github.com/ail-project/ail-framework.git
synced 2025-02-17 06:46:25 +00:00
galaxy description and tags
This commit is contained in:
parent
f5cae0d99c
commit
f3f6b76428
4 changed files with 498 additions and 2 deletions
|
@ -84,7 +84,6 @@ for module_name, txt in list(to_add_to_header_dico.items()):
|
|||
to_add_to_header = []
|
||||
for module_name, txt in to_add_to_header_dico.items():
|
||||
to_add_to_header.append(txt)
|
||||
print(to_add_to_header)
|
||||
|
||||
modified_header = modified_header.replace('<!--insert here-->', '\n'.join(to_add_to_header))
|
||||
|
||||
|
|
|
@ -12,6 +12,7 @@ import json
|
|||
import Paste
|
||||
|
||||
from pytaxonomies import Taxonomies
|
||||
from pymispgalaxies import Galaxies, Clusters
|
||||
|
||||
# ============ VARIABLES ============
|
||||
import Flask_config
|
||||
|
@ -25,6 +26,21 @@ max_preview_modal = Flask_config.max_preview_modal
|
|||
|
||||
Tags = Blueprint('Tags', __name__, template_folder='templates')
|
||||
|
||||
galaxies = Galaxies()
|
||||
clusters = Clusters(skip_duplicates=True)
|
||||
|
||||
list_all_tags = {}
|
||||
for name, c in clusters.items(): #galaxy name + tags
|
||||
list_all_tags[name] = c
|
||||
|
||||
list_galaxies = []
|
||||
for g in galaxies.values():
|
||||
list_galaxies.append(g.to_json())
|
||||
|
||||
list_clusters = []
|
||||
for c in clusters.values():
|
||||
list_clusters.append(c.to_json())
|
||||
|
||||
# ============ FUNCTIONS ============
|
||||
def one():
|
||||
return 1
|
||||
|
@ -336,7 +352,6 @@ def taxonomies():
|
|||
version = version,
|
||||
enabled = enabled,
|
||||
n_tags=n_tags)
|
||||
#return 'O'
|
||||
|
||||
@Tags.route("/Tags/edit_taxonomie")
|
||||
def edit_taxonomie():
|
||||
|
@ -467,7 +482,204 @@ def edit_taxonomie_tag():
|
|||
else:
|
||||
return "INCORRECT INPUT"
|
||||
|
||||
@Tags.route("/Tags/galaxies")
|
||||
def galaxies():
|
||||
|
||||
active_galaxies = r_serv_tags.smembers('active_galaxies')
|
||||
|
||||
total_tags = {}
|
||||
for name, tags in clusters.items(): #galaxie name + tags
|
||||
total_tags[name] = len(tags)
|
||||
|
||||
name = []
|
||||
icon = []
|
||||
version = []
|
||||
all_type = []
|
||||
namespace = []
|
||||
description = []
|
||||
enabled = []
|
||||
n_tags = []
|
||||
|
||||
for galaxie_json in list_galaxies:
|
||||
|
||||
galaxie = json.loads(galaxie_json)
|
||||
|
||||
name.append(galaxie['name'])
|
||||
icon.append(galaxie['icon'])
|
||||
version.append(galaxie['version'])
|
||||
type = galaxie['type']
|
||||
if type == 'mitre-pre-attack-relashipship':
|
||||
type = 'mitre-pre-attack-relationship'
|
||||
all_type.append(type)
|
||||
namespace.append(galaxie['namespace'])
|
||||
description.append(galaxie['description'])
|
||||
|
||||
|
||||
if type in active_galaxies:
|
||||
enabled.append(True)
|
||||
else:
|
||||
enabled.append(False)
|
||||
|
||||
n = str(r_serv_tags.scard('active_tag_galaxies_' + type))
|
||||
n_tags.append(n + '/' + str(total_tags[type]) )
|
||||
|
||||
return render_template("galaxies.html",
|
||||
name=name,
|
||||
icon = icon,
|
||||
version = version,
|
||||
description = description,
|
||||
namespace = namespace,
|
||||
all_type = all_type,
|
||||
enabled = enabled,
|
||||
n_tags=n_tags)
|
||||
|
||||
|
||||
@Tags.route("/Tags/edit_galaxy")
|
||||
def edit_galaxy():
|
||||
|
||||
id = request.args.get('galaxy')
|
||||
|
||||
for clusters_json in list_clusters:
|
||||
|
||||
#get clusters
|
||||
cluster = json.loads(clusters_json)
|
||||
|
||||
if cluster['type'] == id:
|
||||
|
||||
type = id
|
||||
active_tag = r_serv_tags.smembers('active_tag_galaxies_' + type)
|
||||
|
||||
name = cluster['name']
|
||||
description = cluster['description']
|
||||
version = cluster['version']
|
||||
source = cluster['source']
|
||||
|
||||
val = cluster['values']
|
||||
|
||||
tags = []
|
||||
for data in val:
|
||||
try:
|
||||
meta = data['meta']
|
||||
'''synonyms = meta['synonyms']
|
||||
logo = meta['logo']
|
||||
refs = meta['refs']'''
|
||||
except KeyError:
|
||||
meta = []
|
||||
tag_name = data['value']
|
||||
tag_name = 'misp-galaxy:{}="{}"'.format(type, tag_name)
|
||||
try:
|
||||
tag_description = data['description']
|
||||
except KeyError:
|
||||
tag_description = ''
|
||||
|
||||
tags.append( (tag_name, tag_description, meta) )
|
||||
|
||||
status = []
|
||||
for tag in tags:
|
||||
if tag[0] in active_tag:
|
||||
status.append(True)
|
||||
else:
|
||||
status.append(False)
|
||||
|
||||
active_galaxies = r_serv_tags.smembers('active_galaxies')
|
||||
if id in active_galaxies:
|
||||
active = True
|
||||
else:
|
||||
active = False
|
||||
|
||||
return render_template("edit_galaxy.html",
|
||||
id = type,
|
||||
name = name,
|
||||
description = description,
|
||||
version = version,
|
||||
active = active,
|
||||
tags = tags,
|
||||
status = status)
|
||||
|
||||
|
||||
return 'INVALID GALAXY'
|
||||
|
||||
|
||||
@Tags.route("/Tags/active_galaxy")
|
||||
def active_galaxy():
|
||||
|
||||
id = request.args.get('galaxy')
|
||||
|
||||
# verify input
|
||||
try:
|
||||
l_tags = list_all_tags[id]
|
||||
except KeyError:
|
||||
return "INCORRECT INPUT"
|
||||
|
||||
r_serv_tags.sadd('active_galaxies', id)
|
||||
for tag in l_tags:
|
||||
r_serv_tags.sadd('active_tag_galaxies_' + id, 'misp-galaxy:{}="{}"'.format(id, tag))
|
||||
|
||||
return redirect(url_for('Tags.galaxies'))
|
||||
|
||||
|
||||
@Tags.route("/Tags/disable_galaxy")
|
||||
def disable_galaxy():
|
||||
|
||||
id = request.args.get('galaxy')
|
||||
|
||||
# verify input
|
||||
try:
|
||||
l_tags = list_all_tags[id]
|
||||
except KeyError:
|
||||
return "INCORRECT INPUT"
|
||||
|
||||
r_serv_tags.srem('active_galaxies', id)
|
||||
for tag in l_tags:
|
||||
r_serv_tags.srem('active_tag_galaxies_' + id, 'misp-galaxy:{}="{}"'.format(id, tag))
|
||||
|
||||
return redirect(url_for('Tags.galaxies'))
|
||||
|
||||
|
||||
@Tags.route("/Tags/edit_galaxy_tag")
|
||||
def edit_galaxy_tag():
|
||||
|
||||
arg1 = request.args.getlist('tag_enabled')
|
||||
arg2 = request.args.getlist('tag_disabled')
|
||||
|
||||
id = request.args.get('galaxy')
|
||||
|
||||
#verify input
|
||||
try:
|
||||
l_tags = list_all_tags[id]
|
||||
except KeyError:
|
||||
return "INCORRECT INPUT"
|
||||
|
||||
#get full tags
|
||||
list_tag = []
|
||||
for tag in l_tags:
|
||||
list_tag.append('misp-galaxy:{}="{}"'.format(id, tag))
|
||||
|
||||
|
||||
#check tags validity
|
||||
if ( all(elem in list_tag for elem in arg1) or (len(arg1) == 0) ) and ( all(elem in list_tag for elem in arg2) or (len(arg2) == 0) ):
|
||||
|
||||
active_tag = r_serv_tags.smembers('active_tag_galaxies_' + id)
|
||||
|
||||
diff = list(set(arg1) ^ set(list_tag))
|
||||
|
||||
#remove tags
|
||||
for tag in diff:
|
||||
r_serv_tags.srem('active_tag_galaxies_' + id, tag)
|
||||
|
||||
#all tags unchecked
|
||||
if len(arg1) == 0 and len(arg2) == 0:
|
||||
r_serv_tags.srem('active_galaxies', id)
|
||||
|
||||
#add new tags
|
||||
for tag in arg2:
|
||||
r_serv_tags.sadd('active_galaxies', id)
|
||||
r_serv_tags.sadd('active_tag_galaxies_' + id, tag)
|
||||
|
||||
return redirect(url_for('Tags.galaxies'))
|
||||
|
||||
else:
|
||||
return "INCORRECT INPUT"
|
||||
|
||||
# ========= REGISTRATION =========
|
||||
app.register_blueprint(Tags)
|
||||
|
|
164
var/www/modules/Tags/templates/edit_galaxy.html
Normal file
164
var/www/modules/Tags/templates/edit_galaxy.html
Normal file
|
@ -0,0 +1,164 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
|
||||
<title>Analysis Information Leak framework Dashboard</title>
|
||||
|
||||
<!-- Core CSS -->
|
||||
<link href="{{ url_for('static', filename='css/bootstrap.min.css') }}" rel="stylesheet">
|
||||
<link href="{{ url_for('static', filename='font-awesome/css/font-awesome.css') }}" rel="stylesheet">
|
||||
<link href="{{ url_for('static', filename='css/sb-admin-2.css') }}" rel="stylesheet">
|
||||
<link href="/static//css/dataTables.bootstrap.css" rel="stylesheet" type="text/css" />
|
||||
<!-- JS -->
|
||||
<script type="text/javascript" src="{{ url_for('static', filename='js/dygraph-combined.js') }}"></script>
|
||||
<script language="javascript" src="{{ url_for('static', filename='js/jquery.js')}}"></script>
|
||||
<script src="/static//js/bootstrap.min.js"></script>
|
||||
<script src="/static//js/jquery.dataTables.min.js"></script>
|
||||
<script src="/static//js/dataTables.bootstrap.js"></script>
|
||||
|
||||
<style>
|
||||
.tooltip-inner {
|
||||
text-align: left;
|
||||
height: 200%;
|
||||
width: 200%;
|
||||
max-width: 500px;
|
||||
max-height: 500px;
|
||||
font-size: 13px;
|
||||
}
|
||||
xmp {
|
||||
white-space:pre-wrap;
|
||||
word-wrap:break-word;
|
||||
}
|
||||
.test thead{
|
||||
background: #d91f2d;
|
||||
color: #fff;
|
||||
}
|
||||
</style>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
|
||||
{% include 'navbar.html' %}
|
||||
|
||||
<div id="page-wrapper">
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<a href="/Tags/galaxies" class="btn btn-light pull-left">
|
||||
<i class="fa fa-arrow-left fa"></i> List Galaxies
|
||||
</a>
|
||||
</div>
|
||||
<!-- /.col-lg-12 -->
|
||||
</div>
|
||||
<!-- /.row -->
|
||||
|
||||
<div class="panel panel-primary">
|
||||
<div class="panel-heading">{{ name }}
|
||||
{% if active %}
|
||||
<span class="label label-success pull-right"> Enabled</span>
|
||||
{% endif %}
|
||||
{% if not active %}
|
||||
<span class="label label-danger pull-right"> Disabled</span>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
{{ description }}
|
||||
<br><br>
|
||||
Version: {{ version }}
|
||||
{% if active %}
|
||||
<a href="{{ url_for('Tags.disable_galaxy') }}?galaxy={{ id }}" class="btn btn-danger pull-right">
|
||||
<i class="fa fa-times fa"></i> Disable Galaxy
|
||||
</a>
|
||||
{% endif %}
|
||||
{% if not active %}
|
||||
<a href="{{ url_for('Tags.active_galaxy') }}?galaxy={{ id }}" class="btn btn-success pull-right">
|
||||
<i class="fa fa-check-square-o fa"></i> Enable Galaxy
|
||||
</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<form action="/Tags/edit_galaxy_tag" id="checkboxForm">
|
||||
<input type="hidden" value="{{ id }}" name="galaxy" />
|
||||
|
||||
|
||||
<table class="test table table-striped table-bordered table-hover table-responsive " id="myTable_">
|
||||
<thead>
|
||||
<tr>
|
||||
<th></th>
|
||||
<th style="max-width: 800px;">Tag</th>
|
||||
<th style="max-width: 800px;">Description</th>
|
||||
<th>Enabled</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
|
||||
{% for tag in tags %}
|
||||
<tr>
|
||||
<td>
|
||||
{% if status[loop.index0] %}
|
||||
<div style="display:none;">Enabled</div>
|
||||
<input type="checkbox" value="{{ tag[0] }}" id="{{ tag[0] }}" name="tag_enabled" checked>
|
||||
{% endif %}
|
||||
{% if not status[loop.index0] %}
|
||||
<div style="display:none;">Disabled</div>
|
||||
<input type="checkbox" value="{{ tag[0] }}" id="{{ tag[0] }}" name="tag_disabled" >
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>{{ tag[0] }}</td>
|
||||
<td>{{ tag[1] }}</td>
|
||||
<td style="text-align: center;">
|
||||
{% if status[loop.index0] %}
|
||||
<div style="display:none;">Enabled</div>
|
||||
<div style="color:Green; display:inline-block"><i class="fa fa-check-circle fa-2x"></i></div>
|
||||
{% endif %}
|
||||
{% if not status[loop.index0] %}
|
||||
<div style="display:none;">Disabled</div>
|
||||
<div style="color:Red; display:inline-block"><i class="fa fa-times-circle fa-2x"></i></div>
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
|
||||
<div class="input-group-btn">
|
||||
<button class="btn btn-primary btn-lg">
|
||||
<i class="fa fa-check-square-o fa"></i>
|
||||
Update Tags
|
||||
</button>
|
||||
</div>
|
||||
|
||||
</form>
|
||||
|
||||
</div>
|
||||
<!-- /#page-wrapper -->
|
||||
|
||||
|
||||
</body>
|
||||
|
||||
<script>
|
||||
$(document).ready(function(){
|
||||
|
||||
$('#myTable_').DataTable(
|
||||
{
|
||||
"aLengthMenu": [[5, 10, 15, 20, -1], [5, 10, 15, 20, "All"]],
|
||||
"iDisplayLength": 10,
|
||||
//"order": [[ 1, "asc" ]]
|
||||
}
|
||||
);
|
||||
|
||||
});
|
||||
</script>
|
||||
|
||||
<script>
|
||||
function submitActiveTags(){
|
||||
document.getElementById("checkboxForm").submit();
|
||||
}
|
||||
</script>
|
||||
|
||||
</html>
|
121
var/www/modules/Tags/templates/galaxies.html
Normal file
121
var/www/modules/Tags/templates/galaxies.html
Normal file
|
@ -0,0 +1,121 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
|
||||
<title>Analysis Information Leak framework Dashboard</title>
|
||||
|
||||
<!-- Core CSS -->
|
||||
<link href="{{ url_for('static', filename='css/bootstrap.min.css') }}" rel="stylesheet">
|
||||
<link href="{{ url_for('static', filename='font-awesome/css/font-awesome.css') }}" rel="stylesheet">
|
||||
<link href="{{ url_for('static', filename='css/sb-admin-2.css') }}" rel="stylesheet">
|
||||
<link href="/static//css/dataTables.bootstrap.css" rel="stylesheet" type="text/css" />
|
||||
<!-- JS -->
|
||||
<script type="text/javascript" src="{{ url_for('static', filename='js/dygraph-combined.js') }}"></script>
|
||||
<script language="javascript" src="{{ url_for('static', filename='js/jquery.js')}}"></script>
|
||||
<script src="/static//js/bootstrap.min.js"></script>
|
||||
<script src="/static//js/jquery.dataTables.min.js"></script>
|
||||
<script src="/static//js/dataTables.bootstrap.js"></script>
|
||||
|
||||
<style>
|
||||
.tooltip-inner {
|
||||
text-align: left;
|
||||
height: 200%;
|
||||
width: 200%;
|
||||
max-width: 500px;
|
||||
max-height: 500px;
|
||||
font-size: 13px;
|
||||
}
|
||||
xmp {
|
||||
white-space:pre-wrap;
|
||||
word-wrap:break-word;
|
||||
}
|
||||
.test thead{
|
||||
background: #d91f2d;
|
||||
color: #fff;
|
||||
}
|
||||
</style>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
|
||||
{% include 'navbar.html' %}
|
||||
|
||||
<div id="page-wrapper">
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<h1 class="page-header">Galaxies</h1>
|
||||
</div>
|
||||
<!-- /.col-lg-12 -->
|
||||
</div>
|
||||
<!-- /.row -->
|
||||
|
||||
<table class="test table table-striped table-bordered table-hover table-responsive " id="myTable_">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th style="max-width: 800px;">Description</th>
|
||||
<th>Namespace</th>
|
||||
<th>Version</th>
|
||||
<th>Enabled</th>
|
||||
<th>Active Tags</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
|
||||
{% for type in all_type %}
|
||||
<tr>
|
||||
<td>
|
||||
{{ name[loop.index0] }}
|
||||
<div>
|
||||
<i class="fa fa-{{ icon[loop.index0] }}"></i>
|
||||
</div>
|
||||
</td>
|
||||
<td>{{ description[loop.index0] }}</td>
|
||||
<td>{{ namespace[loop.index0] }}</td>
|
||||
<td>{{ version[loop.index0] }}</td>
|
||||
<td style="text-align: center;">
|
||||
{% if enabled[loop.index0] %}
|
||||
<div style="display:none;">Enabled</div>
|
||||
<div style="color:Green; display:inline-block"><i class="fa fa-check-circle fa-2x"></i></div>
|
||||
{% endif %}
|
||||
{% if not enabled[loop.index0] %}
|
||||
<div style="display:none;">Disabled</div>
|
||||
<div style="color:Red; display:inline-block"><i class="fa fa-times-circle fa-2x"></i></div>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td style="text-align: center;">
|
||||
<div style="display:none;">{{ n_tags[loop.index0] }}</div>
|
||||
<a class="btn btn-primary" href="{{ url_for('Tags.edit_galaxy') }}?galaxy={{ type }}">Active Tags <span class="badge">{{ n_tags[loop.index0] }}</span></a>
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
<!-- /#page-wrapper -->
|
||||
|
||||
|
||||
</body>
|
||||
|
||||
<script>
|
||||
$(document).ready(function(){
|
||||
|
||||
//search_table = $('#myTable_').DataTable({ "order": [[ 2, "desc" ]] });
|
||||
|
||||
$('#myTable_').DataTable(
|
||||
{
|
||||
"aLengthMenu": [[5, 10, 15, 20, -1], [5, 10, 15, 20, "All"]],
|
||||
"iDisplayLength": 15,
|
||||
//"order": [[ 1, "asc" ]]
|
||||
}
|
||||
);
|
||||
|
||||
});
|
||||
</script>
|
||||
|
||||
</html>
|
Loading…
Add table
Reference in a new issue