mirror of
https://github.com/ail-project/ail-framework.git
synced 2024-11-10 08:38:28 +00:00
submit users input paste
This commit is contained in:
parent
970709219c
commit
6143bc3dce
12 changed files with 867 additions and 9 deletions
|
@ -57,7 +57,6 @@ if __name__ == '__main__':
|
||||||
while True:
|
while True:
|
||||||
|
|
||||||
message = p.get_from_set()
|
message = p.get_from_set()
|
||||||
#print(message)
|
|
||||||
# Recovering the streamed message informations.
|
# Recovering the streamed message informations.
|
||||||
if message is not None:
|
if message is not None:
|
||||||
splitted = message.split()
|
splitted = message.split()
|
||||||
|
|
|
@ -92,6 +92,11 @@ host = localhost
|
||||||
port = 6380
|
port = 6380
|
||||||
db = 0
|
db = 0
|
||||||
|
|
||||||
|
[Redis_Log_submit]
|
||||||
|
host = localhost
|
||||||
|
port = 6380
|
||||||
|
db = 1
|
||||||
|
|
||||||
[Redis_Queues]
|
[Redis_Queues]
|
||||||
host = localhost
|
host = localhost
|
||||||
port = 6381
|
port = 6381
|
||||||
|
|
|
@ -120,3 +120,6 @@ publish = Redis_Duplicate,Redis_alertHandler,Redis_Tags
|
||||||
[Bitcoin]
|
[Bitcoin]
|
||||||
subscribe = Redis_Global
|
subscribe = Redis_Global
|
||||||
publish = Redis_Duplicate,Redis_alertHandler,Redis_Tags
|
publish = Redis_Duplicate,Redis_alertHandler,Redis_Tags
|
||||||
|
|
||||||
|
[submit_paste]
|
||||||
|
publish = Redis_Mixer
|
||||||
|
|
117
bin/submit_paste.py
Executable file
117
bin/submit_paste.py
Executable file
|
@ -0,0 +1,117 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
# -*-coding:UTF-8 -*
|
||||||
|
|
||||||
|
import configparser
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
import gzip
|
||||||
|
import io
|
||||||
|
import redis
|
||||||
|
import base64
|
||||||
|
import datetime
|
||||||
|
|
||||||
|
from Helper import Process
|
||||||
|
|
||||||
|
def add_tags(tags, tagsgalaxies, path):
|
||||||
|
list_tag = tags.split(',')
|
||||||
|
list_tag_galaxies = tagsgalaxies.split(',')
|
||||||
|
|
||||||
|
if list_tag != ['']:
|
||||||
|
for tag in list_tag:
|
||||||
|
#add tag
|
||||||
|
r_serv_metadata.sadd('tag:'+path, tag)
|
||||||
|
r_serv_tags.sadd(tag, path)
|
||||||
|
#add new tag in list of all used tags
|
||||||
|
r_serv_tags.sadd('list_tags', tag)
|
||||||
|
|
||||||
|
if list_tag_galaxies != ['']:
|
||||||
|
for tag in list_tag_galaxies:
|
||||||
|
#add tag
|
||||||
|
r_serv_metadata.sadd('tag:'+path, tag)
|
||||||
|
r_serv_tags.sadd(tag, path)
|
||||||
|
#add new tag in list of all used tags
|
||||||
|
r_serv_tags.sadd('list_tags', tag)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
if len(sys.argv) != 6:
|
||||||
|
print('usage:', 'submit_paste.py', 'ltags', 'ltagsgalaxies', 'paste_content', 'paste_name', 'id')
|
||||||
|
exit(1)
|
||||||
|
|
||||||
|
try:
|
||||||
|
ltags = sys.argv[1]
|
||||||
|
ltagsgalaxies = sys.argv[2]
|
||||||
|
paste_content = sys.argv[3]
|
||||||
|
paste_name = sys.argv[4]
|
||||||
|
id = sys.argv[5]
|
||||||
|
except:
|
||||||
|
print('unable to get elements')
|
||||||
|
exit(1)
|
||||||
|
|
||||||
|
configfile = os.path.join(os.environ['AIL_BIN'], 'packages/config.cfg')
|
||||||
|
if not os.path.exists(configfile):
|
||||||
|
raise Exception('Unable to find the configuration file. \
|
||||||
|
Did you set environment variables? \
|
||||||
|
Or activate the virtualenv.')
|
||||||
|
|
||||||
|
cfg = configparser.ConfigParser()
|
||||||
|
cfg.read(configfile)
|
||||||
|
|
||||||
|
r_serv_log_submit = redis.StrictRedis(
|
||||||
|
host=cfg.get("Redis_Log_submit", "host"),
|
||||||
|
port=cfg.getint("Redis_Log_submit", "port"),
|
||||||
|
db=cfg.getint("Redis_Log_submit", "db"),
|
||||||
|
decode_responses=True)
|
||||||
|
|
||||||
|
r_serv_tags = redis.StrictRedis(
|
||||||
|
host=cfg.get("ARDB_Tags", "host"),
|
||||||
|
port=cfg.getint("ARDB_Tags", "port"),
|
||||||
|
db=cfg.getint("ARDB_Tags", "db"),
|
||||||
|
decode_responses=True)
|
||||||
|
|
||||||
|
r_serv_metadata = redis.StrictRedis(
|
||||||
|
host=cfg.get("ARDB_Metadata", "host"),
|
||||||
|
port=cfg.getint("ARDB_Metadata", "port"),
|
||||||
|
db=cfg.getint("ARDB_Metadata", "db"),
|
||||||
|
decode_responses=True)
|
||||||
|
|
||||||
|
# TODO put on config
|
||||||
|
expire_time = 10200
|
||||||
|
|
||||||
|
r_serv_log_submit.expire(id + ':end', expire_time)
|
||||||
|
r_serv_log_submit.expire(id + ':nb_total', expire_time)
|
||||||
|
r_serv_log_submit.expire(id + ':nb_end', expire_time)
|
||||||
|
r_serv_log_submit.expire(id + ':error', expire_time)
|
||||||
|
|
||||||
|
config_section = 'submit_paste'
|
||||||
|
p = Process(config_section)
|
||||||
|
|
||||||
|
now = datetime.datetime.now()
|
||||||
|
save_path = 'submitted/' + now.strftime("%Y") + '/' + now.strftime("%m") + '/' + now.strftime("%d") + '/' + id + '.gz'
|
||||||
|
|
||||||
|
full_path = filename = os.path.join(os.environ['AIL_HOME'],
|
||||||
|
p.config.get("Directories", "pastes"), save_path)
|
||||||
|
|
||||||
|
if os.path.isfile(full_path):
|
||||||
|
error = r_serv_log_submit.get(id + ':error')
|
||||||
|
r_serv_log_submit.set(id + ':error', error + '<br></br>File: ' + save_path + ' already exist in submitted pastes')
|
||||||
|
exit(1)
|
||||||
|
|
||||||
|
|
||||||
|
gzipencoded = gzip.compress(paste_content.encode())
|
||||||
|
gzip64encoded = base64.standard_b64encode(gzipencoded).decode()
|
||||||
|
|
||||||
|
# send paste to Global module
|
||||||
|
relay_message = "{0} {1}".format(save_path, gzip64encoded)
|
||||||
|
p.populate_set_out(relay_message, 'Mixer')
|
||||||
|
|
||||||
|
# add tags
|
||||||
|
add_tags(ltags, ltagsgalaxies, full_path)
|
||||||
|
|
||||||
|
r_serv_log_submit.incr(id + ':nb_end')
|
||||||
|
|
||||||
|
|
||||||
|
if r_serv_log_submit.get(id + ':nb_end') == r_serv_log_submit.get(id + ':nb_total'):
|
||||||
|
r_serv_log_submit.set(id + ':end', 1)
|
||||||
|
|
||||||
|
exit(0)
|
|
@ -28,6 +28,7 @@ cfg = Flask_config.cfg
|
||||||
|
|
||||||
Flask_config.app = Flask(__name__, static_url_path='/static/')
|
Flask_config.app = Flask(__name__, static_url_path='/static/')
|
||||||
app = Flask_config.app
|
app = Flask_config.app
|
||||||
|
#app.secret_key = Flask_config.secret_key
|
||||||
|
|
||||||
# ========= HEADER GENERATION ========
|
# ========= HEADER GENERATION ========
|
||||||
|
|
||||||
|
|
|
@ -10,6 +10,7 @@ import os
|
||||||
|
|
||||||
# FLASK #
|
# FLASK #
|
||||||
app = None
|
app = None
|
||||||
|
#secret_key = 'ail-super-secret_key01C'
|
||||||
|
|
||||||
# CONFIG #
|
# CONFIG #
|
||||||
configfile = os.path.join(os.environ['AIL_BIN'], 'packages/config.cfg')
|
configfile = os.path.join(os.environ['AIL_BIN'], 'packages/config.cfg')
|
||||||
|
@ -35,6 +36,12 @@ r_serv_log = redis.StrictRedis(
|
||||||
db=cfg.getint("Redis_Log", "db"),
|
db=cfg.getint("Redis_Log", "db"),
|
||||||
decode_responses=True)
|
decode_responses=True)
|
||||||
|
|
||||||
|
r_serv_log_submit = redis.StrictRedis(
|
||||||
|
host=cfg.get("Redis_Log_submit", "host"),
|
||||||
|
port=cfg.getint("Redis_Log_submit", "port"),
|
||||||
|
db=cfg.getint("Redis_Log_submit", "db"),
|
||||||
|
decode_responses=True)
|
||||||
|
|
||||||
r_serv_charts = redis.StrictRedis(
|
r_serv_charts = redis.StrictRedis(
|
||||||
host=cfg.get("ARDB_Trending", "host"),
|
host=cfg.get("ARDB_Trending", "host"),
|
||||||
port=cfg.getint("ARDB_Trending", "port"),
|
port=cfg.getint("ARDB_Trending", "port"),
|
||||||
|
|
203
var/www/modules/PasteSubmit/Flask_PasteSubmit.py
Normal file
203
var/www/modules/PasteSubmit/Flask_PasteSubmit.py
Normal file
|
@ -0,0 +1,203 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
# -*-coding:UTF-8 -*
|
||||||
|
|
||||||
|
'''
|
||||||
|
Flask functions and routes for the trending modules page
|
||||||
|
'''
|
||||||
|
import redis
|
||||||
|
from flask import Flask, render_template, jsonify, request, Blueprint, session
|
||||||
|
|
||||||
|
'''import random'''
|
||||||
|
|
||||||
|
import unicodedata
|
||||||
|
import string
|
||||||
|
import subprocess
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
import datetime
|
||||||
|
|
||||||
|
from pytaxonomies import Taxonomies
|
||||||
|
from pymispgalaxies import Galaxies, Clusters
|
||||||
|
|
||||||
|
# ============ VARIABLES ============
|
||||||
|
import Flask_config
|
||||||
|
|
||||||
|
app = Flask_config.app
|
||||||
|
cfg = Flask_config.cfg
|
||||||
|
r_serv_tags = Flask_config.r_serv_tags
|
||||||
|
r_serv_log_submit = Flask_config.r_serv_log_submit
|
||||||
|
|
||||||
|
PasteSubmit = Blueprint('PasteSubmit', __name__, template_folder='templates')
|
||||||
|
|
||||||
|
valid_filename_chars = "-_ %s%s" % (string.ascii_letters, string.digits)
|
||||||
|
|
||||||
|
# ============ FUNCTIONS ============
|
||||||
|
def one():
|
||||||
|
return 1
|
||||||
|
|
||||||
|
def clean_filename(filename, whitelist=valid_filename_chars, replace=' '):
|
||||||
|
# replace characters
|
||||||
|
for r in replace:
|
||||||
|
filename = filename.replace(r,'_')
|
||||||
|
|
||||||
|
# keep only valid ascii chars
|
||||||
|
cleaned_filename = unicodedata.normalize('NFKD', filename).encode('ASCII', 'ignore').decode()
|
||||||
|
|
||||||
|
# keep only whitelisted chars
|
||||||
|
return ''.join(c for c in cleaned_filename if c in whitelist)
|
||||||
|
|
||||||
|
'''@app.before_request
|
||||||
|
def csrf_protect():
|
||||||
|
if request.method == "POST":
|
||||||
|
token = session.pop('_csrf_token', None)
|
||||||
|
if not token or token != request.form.get('_csrf_token'):
|
||||||
|
abort(400)
|
||||||
|
|
||||||
|
def generate_csrf_token():
|
||||||
|
if '_csrf_token' not in session:
|
||||||
|
session['_csrf_token'] = some_random_string()
|
||||||
|
return session['_csrf_token']
|
||||||
|
|
||||||
|
app.jinja_env.globals['csrf_token'] = generate_csrf_token
|
||||||
|
|
||||||
|
def some_random_string():
|
||||||
|
N = 15
|
||||||
|
return ''.join(random.SystemRandom().choice(string.ascii_uppercase + string.digits) for _ in range(N))'''
|
||||||
|
|
||||||
|
|
||||||
|
def addTagsVerification(tags, tagsgalaxies):
|
||||||
|
|
||||||
|
list_tag = tags.split(',')
|
||||||
|
list_tag_galaxies = tagsgalaxies.split(',')
|
||||||
|
|
||||||
|
taxonomies = Taxonomies()
|
||||||
|
active_taxonomies = r_serv_tags.smembers('active_taxonomies')
|
||||||
|
|
||||||
|
active_galaxies = r_serv_tags.smembers('active_galaxies')
|
||||||
|
|
||||||
|
if list_tag != ['']:
|
||||||
|
for tag in list_tag:
|
||||||
|
# verify input
|
||||||
|
tax = tag.split(':')[0]
|
||||||
|
if tax in active_taxonomies:
|
||||||
|
if tag in r_serv_tags.smembers('active_tag_' + tax):
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
|
||||||
|
if list_tag_galaxies != ['']:
|
||||||
|
for tag in list_tag_galaxies:
|
||||||
|
# verify input
|
||||||
|
gal = tag.split(':')[1]
|
||||||
|
gal = gal.split('=')[0]
|
||||||
|
|
||||||
|
if gal in active_galaxies:
|
||||||
|
if tag in r_serv_tags.smembers('active_tag_galaxies_' + gal):
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
return True
|
||||||
|
# ============= ROUTES ==============
|
||||||
|
|
||||||
|
@PasteSubmit.route("/PasteSubmit/", methods=['GET'])
|
||||||
|
def PasteSubmit_page():
|
||||||
|
#active taxonomies
|
||||||
|
active_taxonomies = r_serv_tags.smembers('active_taxonomies')
|
||||||
|
|
||||||
|
#active galaxies
|
||||||
|
active_galaxies = r_serv_tags.smembers('active_galaxies')
|
||||||
|
|
||||||
|
return render_template("PasteSubmit.html",
|
||||||
|
active_taxonomies = active_taxonomies,
|
||||||
|
active_galaxies = active_galaxies)
|
||||||
|
|
||||||
|
@PasteSubmit.route("/PasteSubmit/submit", methods=['POST'])
|
||||||
|
def submit():
|
||||||
|
|
||||||
|
paste_name = request.form['paste_name']
|
||||||
|
ltags = request.form['tags_taxonomies']
|
||||||
|
ltagsgalaxies = request.form['tags_galaxies']
|
||||||
|
paste_content = request.form['paste_content']
|
||||||
|
|
||||||
|
if paste_content != '':
|
||||||
|
if sys.getsizeof(paste_content) < 900000:
|
||||||
|
|
||||||
|
if ltags or ltagsgalaxies:
|
||||||
|
if not addTagsVerification(ltags, ltagsgalaxies):
|
||||||
|
return 'INVALID TAGS'
|
||||||
|
|
||||||
|
to_launch = os.environ['AIL_BIN'] + 'submit_paste.py'
|
||||||
|
# get id
|
||||||
|
id = str(r_serv_tags.get('submit_id'))
|
||||||
|
|
||||||
|
if paste_name:
|
||||||
|
# clean file name
|
||||||
|
id = clean_filename(paste_name)
|
||||||
|
|
||||||
|
# create logs
|
||||||
|
r_serv_log_submit.set(id + ':end', 0)
|
||||||
|
r_serv_log_submit.set(id + ':nb_total', 1)
|
||||||
|
r_serv_log_submit.set(id + ':nb_end', 0)
|
||||||
|
r_serv_log_submit.set(id + ':error', 'error:')
|
||||||
|
|
||||||
|
#incr id
|
||||||
|
r_serv_tags.incr('submit_id')
|
||||||
|
|
||||||
|
# add submitted tags
|
||||||
|
if(ltags != ''):
|
||||||
|
ltags = ltags + ',submitted'
|
||||||
|
else:
|
||||||
|
ltags ='submitted'
|
||||||
|
|
||||||
|
# launch process
|
||||||
|
process = subprocess.Popen(["python", to_launch, ltags, ltagsgalaxies, paste_content, paste_name, id],
|
||||||
|
stdout=subprocess.PIPE)
|
||||||
|
|
||||||
|
return render_template("submiting.html",
|
||||||
|
id = id)
|
||||||
|
|
||||||
|
else:
|
||||||
|
return 'size error'
|
||||||
|
|
||||||
|
return 'submit'
|
||||||
|
|
||||||
|
@PasteSubmit.route("/PasteSubmit/submit_status", methods=['GET'])
|
||||||
|
def submit_status():
|
||||||
|
id = request.args.get('id')
|
||||||
|
|
||||||
|
if id:
|
||||||
|
end = r_serv_log_submit.get(id + ':end')
|
||||||
|
nb_total = r_serv_log_submit.get(id + ':nb_total')
|
||||||
|
nb_end = r_serv_log_submit.get(id + ':nb_end')
|
||||||
|
error = r_serv_log_submit.get(id + ':error')
|
||||||
|
if (end != None) and (nb_total != None) and (nb_end != None) and (error != None):
|
||||||
|
|
||||||
|
in_progress = nb_end + ' / ' + nb_total
|
||||||
|
prog = int(int(nb_end) * 100 / int(nb_total))
|
||||||
|
|
||||||
|
if error == 'error:':
|
||||||
|
isError = False
|
||||||
|
else:
|
||||||
|
isError = True
|
||||||
|
|
||||||
|
if end == '0':
|
||||||
|
end = False
|
||||||
|
else:
|
||||||
|
end = True
|
||||||
|
|
||||||
|
return jsonify(end=end,
|
||||||
|
in_progress=in_progress,
|
||||||
|
prog=prog,
|
||||||
|
isError=isError,
|
||||||
|
error=error)
|
||||||
|
else:
|
||||||
|
return 'to do'
|
||||||
|
else:
|
||||||
|
return 'INVALID ID'
|
||||||
|
|
||||||
|
# ========= REGISTRATION =========
|
||||||
|
app.register_blueprint(PasteSubmit)
|
203
var/www/modules/PasteSubmit/templates/PasteSubmit.html
Normal file
203
var/www/modules/PasteSubmit/templates/PasteSubmit.html
Normal file
|
@ -0,0 +1,203 @@
|
||||||
|
<!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="{{ url_for('static', filename='css/dygraph_gallery.css') }}" rel="stylesheet" type="text/css" />
|
||||||
|
<link href="{{ url_for('static', filename='css/tags.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="{{ url_for('static', filename='js/jquery.flot.js') }}"></script>
|
||||||
|
<script src="{{ url_for('static', filename='js/jquery.flot.pie.js') }}"></script>
|
||||||
|
<script src="{{ url_for('static', filename='js/jquery.flot.time.js') }}"></script>
|
||||||
|
<script src="{{ url_for('static', filename='js/tags.js') }}"></script>
|
||||||
|
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
{% include 'navbar.html' %}
|
||||||
|
|
||||||
|
<div id="page-wrapper">
|
||||||
|
<div class="row">
|
||||||
|
<!-- /.col-lg-12 -->
|
||||||
|
|
||||||
|
<form action="/PasteSubmit/submit" id="pasteSubmitForm" method="post" onsubmit="submitPaste()">
|
||||||
|
|
||||||
|
<input type="hidden" id="tags_taxonomies" name="tags_taxonomies" value="test">
|
||||||
|
<input type="hidden" id="tags_galaxies" name="tags_galaxies" value="test">
|
||||||
|
|
||||||
|
<div class="panel panel-primary pull-left" style="width: 40%;">
|
||||||
|
<div class="panel-heading">paste info
|
||||||
|
</div>
|
||||||
|
<div class="panel-body">
|
||||||
|
|
||||||
|
<div class="form-group row">
|
||||||
|
<label class="col-sm-2 col-form-label">ID: 34</label>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="paste_name">Name</label>
|
||||||
|
<input type="text" class="form-control" id="paste_name" name="paste_name" placeholder="Optionnal">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="file_submit">Or submit a file</label>
|
||||||
|
<input type="file" class="form-control-file" id="file_submit">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="panel panel-info pull-right" style="width: auto;">
|
||||||
|
<div class="panel-heading"> Tags :
|
||||||
|
<ul class="list-group">
|
||||||
|
<li class="list-group-item">
|
||||||
|
|
||||||
|
<div class="form-group input-group" >
|
||||||
|
<input id="ltags" style="width:450%;" type="text">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="btn-group btn-block">
|
||||||
|
<button type="button" class="btn btn-primary dropdown-toggle btn-block" data-toggle="dropdown">Taxonomie Selection
|
||||||
|
<i class="fa fa-chevron-down"></i>
|
||||||
|
</button>
|
||||||
|
<ul class="dropdown-menu scrollable-menu" role="menu">
|
||||||
|
<li><a href="#" id="all-tags-taxonomies">All Tags <i class="fa fa-tags"></i></a></li>
|
||||||
|
<li role="separator" class="divider"></li>
|
||||||
|
{% for taxo in active_taxonomies %}
|
||||||
|
<li><a href="#" id="{{ taxo }}-id{{ loop.index0 }}">{{ taxo }}</a></li>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</li>
|
||||||
|
<li class="list-group-item">
|
||||||
|
|
||||||
|
<div class="form-group input-group" >
|
||||||
|
<input id="ltagsgalaxies" style="width:450%;" type="text">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="btn-group btn-block">
|
||||||
|
<button type="button" class="btn btn-primary dropdown-toggle btn-block" data-toggle="dropdown">Galaxy Selection
|
||||||
|
<i class="fa fa-chevron-down"></i>
|
||||||
|
</button>
|
||||||
|
<ul class="dropdown-menu scrollable-menu" role="menu">
|
||||||
|
<li><a href="#" id="all-tags-galaxies">All Tags <i class="fa fa-tags"></i></a></li>
|
||||||
|
<li role="separator" class="divider"></li>
|
||||||
|
{% for galaxy in active_galaxies %}
|
||||||
|
<li><a href="#" id="{{ galaxy }}-idgalax{{ loop.index0 }}">{{ galaxy }}</a></li>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<textarea class="form-control" id="paste_content" name="paste_content" rows="25"></textarea>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<button class="btn btn-primary " name="submit" type="submit">Submit this paste</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</form>
|
||||||
|
<div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<!-- /.row -->
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<!-- /#page-wrapper -->
|
||||||
|
|
||||||
|
</body>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
var ltags
|
||||||
|
var ltagsgalaxies
|
||||||
|
$(document).ready(function(){
|
||||||
|
|
||||||
|
$.getJSON('/Tags/get_all_tags_taxonomies',
|
||||||
|
function(data) {
|
||||||
|
|
||||||
|
ltags = $('#ltags').tagSuggest({
|
||||||
|
data: data,
|
||||||
|
maxDropHeight: 200,
|
||||||
|
name: 'ltags'
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
$.getJSON('/Tags/get_all_tags_galaxies',
|
||||||
|
function(data) {
|
||||||
|
|
||||||
|
ltagsgalaxies = $('#ltagsgalaxies').tagSuggest({
|
||||||
|
data: data,
|
||||||
|
maxDropHeight: 200,
|
||||||
|
name: 'ltagsgalaxies'
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
activePage = "page-PasteSubmit"
|
||||||
|
$("#"+activePage).addClass("active");
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
function submitPaste(){
|
||||||
|
document.getElementById("tags_taxonomies").value = ltags.getValue();
|
||||||
|
document.getElementById("tags_galaxies").value = ltagsgalaxies.getValue();
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
jQuery("#all-tags-taxonomies").click(function(e){
|
||||||
|
//change input tags list
|
||||||
|
$.getJSON('/Tags/get_all_tags_taxonomies',
|
||||||
|
function(data) {
|
||||||
|
ltags.setData(data)
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
</script>
|
||||||
|
<script>
|
||||||
|
jQuery("#all-tags-galaxies").click(function(e){
|
||||||
|
$.getJSON('/Tags/get_all_tags_galaxies',
|
||||||
|
function(data) {
|
||||||
|
ltagsgalaxies.setData(data)
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
{% for taxo in active_taxonomies %}
|
||||||
|
jQuery("#{{ taxo }}-id{{ loop.index0 }}").click(function(e){
|
||||||
|
$.getJSON('/Tags/get_tags_taxonomie?taxonomie={{ taxo }}',
|
||||||
|
function(data) {
|
||||||
|
ltags.setData(data)
|
||||||
|
});
|
||||||
|
});
|
||||||
|
{% endfor %}
|
||||||
|
</script>
|
||||||
|
<script>
|
||||||
|
{% for galaxy in active_galaxies %}
|
||||||
|
jQuery("#{{ galaxy }}-idgalax{{ loop.index0 }}").click(function(e){
|
||||||
|
$.getJSON('/Tags/get_tags_galaxy?galaxy={{ galaxy }}',
|
||||||
|
function(data) {
|
||||||
|
ltagsgalaxies.setData(data)
|
||||||
|
});
|
||||||
|
});
|
||||||
|
{% endfor %}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
</html>
|
|
@ -0,0 +1 @@
|
||||||
|
<li id='page-PasteSubmit'><a href="{{ url_for('PasteSubmit.PasteSubmit_page') }}"><i class="glyphicon glyphicon-new-window"></i> PasteSubmit </a></li>
|
318
var/www/modules/PasteSubmit/templates/submiting.html
Normal file
318
var/www/modules/PasteSubmit/templates/submiting.html
Normal file
|
@ -0,0 +1,318 @@
|
||||||
|
<!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="{{ url_for('static', filename='css/dygraph_gallery.css') }}" rel="stylesheet" type="text/css" />
|
||||||
|
<link href="{{ url_for('static', filename='css/tags.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="{{ url_for('static', filename='js/jquery.flot.js') }}"></script>
|
||||||
|
<script src="{{ url_for('static', filename='js/jquery.flot.pie.js') }}"></script>
|
||||||
|
<script src="{{ url_for('static', filename='js/jquery.flot.time.js') }}"></script>
|
||||||
|
<script src="/static//js/bootstrap.min.js"></script>
|
||||||
|
<script src="{{ url_for('static', filename='js/tags.js') }}"></script>
|
||||||
|
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
{% include 'navbar.html' %}
|
||||||
|
|
||||||
|
<div id="page-wrapper">
|
||||||
|
<div class="row">
|
||||||
|
<!-- /.col-lg-12 -->
|
||||||
|
|
||||||
|
<form action="/PasteSubmit/submit" id="pasteSubmitForm" method="post" onsubmit="submitPaste()">
|
||||||
|
|
||||||
|
<input type="hidden" id="tags_taxonomies" name="tags_taxonomies" value="test">
|
||||||
|
<input type="hidden" id="tags_galaxies" name="tags_galaxies" value="test">
|
||||||
|
|
||||||
|
<div class="panel panel-primary pull-left" style="width: 40%;">
|
||||||
|
<div class="panel-heading">paste info
|
||||||
|
</div>
|
||||||
|
<div class="panel-body">
|
||||||
|
|
||||||
|
<div class="form-group row">
|
||||||
|
<label class="col-sm-2 col-form-label">ID: 34</label>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="paste_name">Name</label>
|
||||||
|
<input type="text" class="form-control" id="paste_name" name="paste_name" placeholder="Optionnal">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="file_submit">Or submit a file</label>
|
||||||
|
<input type="file" class="form-control-file" id="file_submit">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="panel panel-info pull-right" style="width: auto;">
|
||||||
|
<div class="panel-heading"> Tags :
|
||||||
|
<ul class="list-group">
|
||||||
|
<li class="list-group-item">
|
||||||
|
|
||||||
|
<div class="form-group input-group" >
|
||||||
|
<input id="ltags" style="width:450%;" type="text">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="btn-group btn-block">
|
||||||
|
<button type="button" class="btn btn-primary dropdown-toggle btn-block" data-toggle="dropdown">Taxonomie Selection
|
||||||
|
<i class="fa fa-chevron-down"></i>
|
||||||
|
</button>
|
||||||
|
<ul class="dropdown-menu scrollable-menu" role="menu">
|
||||||
|
<li><a href="#" id="all-tags-taxonomies">All Tags <i class="fa fa-tags"></i></a></li>
|
||||||
|
<li role="separator" class="divider"></li>
|
||||||
|
{% for taxo in active_taxonomies %}
|
||||||
|
<li><a href="#" id="{{ taxo }}-id{{ loop.index0 }}">{{ taxo }}</a></li>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</li>
|
||||||
|
<li class="list-group-item">
|
||||||
|
|
||||||
|
<div class="form-group input-group" >
|
||||||
|
<input id="ltagsgalaxies" style="width:450%;" type="text">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="btn-group btn-block">
|
||||||
|
<button type="button" class="btn btn-primary dropdown-toggle btn-block" data-toggle="dropdown">Galaxy Selection
|
||||||
|
<i class="fa fa-chevron-down"></i>
|
||||||
|
</button>
|
||||||
|
<ul class="dropdown-menu scrollable-menu" role="menu">
|
||||||
|
<li><a href="#" id="all-tags-galaxies">All Tags <i class="fa fa-tags"></i></a></li>
|
||||||
|
<li role="separator" class="divider"></li>
|
||||||
|
{% for galaxy in active_galaxies %}
|
||||||
|
<li><a href="#" id="{{ galaxy }}-idgalax{{ loop.index0 }}">{{ galaxy }}</a></li>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<textarea class="form-control" id="paste_content" name="paste_content" rows="25"></textarea>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<button class="btn btn-primary " name="submit" type="submit">Submit this paste</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<!-- /.row -->
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<!-- /#page-wrapper -->
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="modalsubmit" class="modal fade" role="dialog">
|
||||||
|
<div class="modal-dialog modal-lg">
|
||||||
|
|
||||||
|
<!-- Modal content-->
|
||||||
|
<div id="mymodalcontent" class="modal-content">
|
||||||
|
<div class="modal-header" style="border-bottom: 4px solid #cccccc; background-color: #cccccc; color: #ffffff;">
|
||||||
|
<p class="heading"><h1>Submitting Pastes ...</h1></p>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="modal-body">
|
||||||
|
<br></br>
|
||||||
|
|
||||||
|
<div class="progress">
|
||||||
|
<div class="progress-bar progress-bar-striped active" role="progressbar"
|
||||||
|
aria-valuenow="40" aria-valuemin="0" aria-valuemax="100" style="width:40%" id="progress-bar">
|
||||||
|
40%
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<span class="btn btn-info" id="files_submitted_btn">
|
||||||
|
Files Submitted <span class="badge badge-light" id="files_submitted">1 / 1</span>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
<br></br>
|
||||||
|
|
||||||
|
<div class="panel panel-danger hidden" id="panel_error">
|
||||||
|
<div class="panel-heading">ERROR</div>
|
||||||
|
<div class="panel-body">
|
||||||
|
<p id="error_message">error</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button class="btn btn-success btn-tags hidden " data-dismiss="modal" id="success_submit_button">
|
||||||
|
<span class="label-icon">Success </span>
|
||||||
|
<i class="fa fa-check"></i>
|
||||||
|
</button>
|
||||||
|
<button class="btn btn-danger btn-tags hidden" data-dismiss="modal" id="error_submit_button">
|
||||||
|
<span class="label-icon">ERROR </span>
|
||||||
|
<i class="fa fa-times"></i>
|
||||||
|
</button>
|
||||||
|
<a class="btn btn-tags pull-left hidden" href="{{ url_for('Tags.get_tagged_paste') }}?ltags=submitted" target="_blank" id="submit_result">
|
||||||
|
<span class="label-icon">Submitted Pastes </span>
|
||||||
|
<i class="fa fa-paper-plane fa-2x"></i>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
var ltags
|
||||||
|
var ltagsgalaxies
|
||||||
|
$(document).ready(function(){
|
||||||
|
|
||||||
|
$.getJSON('/Tags/get_all_tags_taxonomies',
|
||||||
|
function(data) {
|
||||||
|
|
||||||
|
ltags = $('#ltags').tagSuggest({
|
||||||
|
data: data,
|
||||||
|
maxDropHeight: 200,
|
||||||
|
name: 'ltags'
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
$.getJSON('/Tags/get_all_tags_galaxies',
|
||||||
|
function(data) {
|
||||||
|
|
||||||
|
ltagsgalaxies = $('#ltagsgalaxies').tagSuggest({
|
||||||
|
data: data,
|
||||||
|
maxDropHeight: 200,
|
||||||
|
name: 'ltagsgalaxies'
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
activePage = "page-PasteSubmit"
|
||||||
|
$("#"+activePage).addClass("active");
|
||||||
|
|
||||||
|
$('#modalsubmit').modal({backdrop: 'static'})
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
function submitPaste(){
|
||||||
|
document.getElementById("tags_taxonomies").value = ltags.getValue();
|
||||||
|
document.getElementById("tags_galaxies").value = ltagsgalaxies.getValue();
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
jQuery("#all-tags-taxonomies").click(function(e){
|
||||||
|
//change input tags list
|
||||||
|
$.getJSON('/Tags/get_all_tags_taxonomies',
|
||||||
|
function(data) {
|
||||||
|
ltags.setData(data)
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
</script>
|
||||||
|
<script>
|
||||||
|
jQuery("#all-tags-galaxies").click(function(e){
|
||||||
|
$.getJSON('/Tags/get_all_tags_galaxies',
|
||||||
|
function(data) {
|
||||||
|
ltagsgalaxies.setData(data)
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
{% for taxo in active_taxonomies %}
|
||||||
|
jQuery("#{{ taxo }}-id{{ loop.index0 }}").click(function(e){
|
||||||
|
$.getJSON('/Tags/get_tags_taxonomie?taxonomie={{ taxo }}',
|
||||||
|
function(data) {
|
||||||
|
ltags.setData(data)
|
||||||
|
});
|
||||||
|
});
|
||||||
|
{% endfor %}
|
||||||
|
</script>
|
||||||
|
<script>
|
||||||
|
{% for galaxy in active_galaxies %}
|
||||||
|
jQuery("#{{ galaxy }}-idgalax{{ loop.index0 }}").click(function(e){
|
||||||
|
$.getJSON('/Tags/get_tags_galaxy?galaxy={{ galaxy }}',
|
||||||
|
function(data) {
|
||||||
|
ltagsgalaxies.setData(data)
|
||||||
|
});
|
||||||
|
});
|
||||||
|
{% endfor %}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
var i = 0;
|
||||||
|
var err = 0;
|
||||||
|
$(".progress-bar").css("width", i + "%").text(i + " %");
|
||||||
|
function makeProgress(){
|
||||||
|
|
||||||
|
$.getJSON('/PasteSubmit/submit_status?id={{ id }}',
|
||||||
|
function(data) {
|
||||||
|
|
||||||
|
var end = data.end;
|
||||||
|
var prog = data.prog;
|
||||||
|
var in_progress = data.in_progress;
|
||||||
|
var isError = data.isError;
|
||||||
|
var error = data.error;
|
||||||
|
|
||||||
|
if(i < 100){
|
||||||
|
$(".progress-bar").css("width", prog + "%").text(prog + " %");
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!end){
|
||||||
|
|
||||||
|
document.getElementById('files_submitted').innerHTML = in_progress;
|
||||||
|
|
||||||
|
//error handler
|
||||||
|
if(isError){
|
||||||
|
document.getElementById('error_message').innerHTML = error;
|
||||||
|
$("#panel_error").removeClass('hidden');
|
||||||
|
$("#error_submit_button").removeClass('hidden');
|
||||||
|
err = err + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Wait for sometime before running this script again
|
||||||
|
if(err < 100){
|
||||||
|
setTimeout("makeProgress()", 100);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
//error handler
|
||||||
|
if(isError){
|
||||||
|
document.getElementById('error_message').innerHTML = error;
|
||||||
|
$("#panel_error").removeClass('hidden');
|
||||||
|
$("#error_submit_button").removeClass('hidden');
|
||||||
|
} else {
|
||||||
|
$("#success_submit_button").removeClass('hidden');
|
||||||
|
$("#submit_result").removeClass('hidden');
|
||||||
|
$("#progress-bar").removeClass('active');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
makeProgress();
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</html>
|
|
@ -64,6 +64,7 @@ def get_tags_with_synonyms(tag):
|
||||||
else:
|
else:
|
||||||
return {'name':tag,'id':tag}
|
return {'name':tag,'id':tag}
|
||||||
|
|
||||||
|
|
||||||
# ============= ROUTES ==============
|
# ============= ROUTES ==============
|
||||||
|
|
||||||
@Tags.route("/Tags/", methods=['GET'])
|
@Tags.route("/Tags/", methods=['GET'])
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
<div class="input-group custom-search-form">
|
<div class="input-group custom-search-form">
|
||||||
<form action="/search" id="form-search" method=POST>
|
<form action="/search" id="form-search" method=POST>
|
||||||
<input type="text" name="query" class="form-control" placeholder="Search Paste">
|
<input type="text" name="query" class="form-control" placeholder="Search Paste">
|
||||||
<input type="hidden" name="index_name" class="form-control" value="0" placeholder="Index Name">
|
<input type="hidden" name="index_name" class="form-control" value="0" placeholder="Index Name">
|
||||||
<span class="input-group-btn">
|
<span class="input-group-btn">
|
||||||
<button class="btn btn-default" type="submit">
|
<button class="btn btn-default" type="submit">
|
||||||
<i class="fa fa-search"></i>
|
<i class="fa fa-search"></i>
|
||||||
</button>
|
</button>
|
||||||
<img id="loading-gif" src="{{url_for('static', filename='image/loading.gif') }}" height="26" width="26" style="margin: 4px; visibility: hidden;">
|
<img id="loading-gif" src="{{url_for('static', filename='image/loading.gif') }}" height="26" width="26" style="margin: 4px; visibility: hidden;">
|
||||||
</form>
|
</form>
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
Loading…
Reference in a new issue