121 lines
3.2 KiB
Python
121 lines
3.2 KiB
Python
import json
|
|
import logging
|
|
import typing
|
|
import uuid
|
|
|
|
import time
|
|
|
|
from clients.webclients import Client, CLIENTS
|
|
|
|
from flask import Flask, render_template, request, redirect, session
|
|
|
|
from tasks import tasks
|
|
from selector.config import CONFIGS, URLS, HOSTS, RESULT_HOST
|
|
|
|
app = Flask(__name__)
|
|
clients: typing.Dict[str, Client] = {}
|
|
log: logging.Logger = logging.getLogger(__name__)
|
|
|
|
|
|
@app.route("/")
|
|
def index():
|
|
return render_template("index.html", clients=CLIENTS)
|
|
|
|
|
|
@app.route("/login", methods=["POST"])
|
|
def login():
|
|
game = request.form["game"]
|
|
if not game in CLIENTS or game not in HOSTS:
|
|
return redirect("/?invalid_game")
|
|
client = CLIENTS[game](host=HOSTS[game], username=request.form['username'], password=request.form['password'])
|
|
if client.login():
|
|
session['logged_in'] = True
|
|
session['uid'] = str(uuid.uuid4())
|
|
session['username'] = request.form['username']
|
|
session['cookies'] = client.cookies
|
|
session['game'] = game
|
|
session['host'] = BIOGAMES_HOST
|
|
clients[session['uid']] = client
|
|
return redirect("/results")
|
|
return redirect("/?fail")
|
|
|
|
|
|
@app.route("/results")
|
|
def results():
|
|
if not ('logged_in' in session and session['logged_in']):
|
|
return redirect("/")
|
|
if session['logged_in'] and not session['uid'] in clients:
|
|
clients[session['uid']] = CLIENTS[session['game']](host=session['host'], **session['cookies'])
|
|
status = tasks.redis.get(session['username'])
|
|
if status:
|
|
job_status = json.loads(status)
|
|
else:
|
|
job_status = {}
|
|
#for job in job_status:
|
|
# results = []
|
|
# for path in job_status[job]['results']:
|
|
# results.append(path.replace(tasks.DATA_PATH, RESULT_HOST))
|
|
# print(results) #TODO???
|
|
return render_template("results.html", jobs=job_status)
|
|
|
|
|
|
@app.route("/games")
|
|
def games():
|
|
if not ('logged_in' in session and session['logged_in']):
|
|
return redirect("/")
|
|
if session['logged_in'] and not session['uid'] in clients:
|
|
clients[session['uid']] = CLIENTS[session['game']](host=session['host'], **session['cookies'])
|
|
return render_template("games.html", logs=clients[session['uid']].list(), configs=CONFIGS)
|
|
|
|
|
|
@app.route("/start", methods=['POST'])
|
|
def start():
|
|
print(str(request.form['logs']))
|
|
status = {
|
|
"status": "PENDING",
|
|
"submit": time.strftime("%c"),
|
|
"log_ids": request.form.getlist('logs'),
|
|
"config": request.form['config'],
|
|
}
|
|
params = {
|
|
"log_ids": request.form.getlist('logs'),
|
|
"config": CONFIGS[request.form['config']],
|
|
"username": session['username'],
|
|
"cookies": session['cookies'],
|
|
"host": session['host'],
|
|
"clientName": session['game'],
|
|
"name": request.form['name'],
|
|
}
|
|
tasks.status_update(session['username'], request.form['name'], status)
|
|
tasks.analyze.delay(**params)
|
|
return redirect("/results")
|
|
|
|
|
|
@app.route("/status")
|
|
def status():
|
|
return json.dumps(json.loads(tasks.redis.get(session['username'])), indent=2)
|
|
|
|
|
|
@app.template_filter('get_url')
|
|
def get_url(path: str):
|
|
return path.replace(tasks.DATA_PATH, RESULT_HOST)
|
|
|
|
@app.template_filter('get_name')
|
|
def get_url(path: str):
|
|
return path.replace(tasks.DATA_PATH, "")
|
|
|
|
|
|
@app.template_filter('get_prefix')
|
|
def get_prefix(job):
|
|
print(job)
|
|
try:
|
|
return RESULT_HOST + URLS[job['config']]
|
|
except:
|
|
return RESULT_HOST + "#"
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
app.config.update({"SECRET_KEY": "59765798-2784-11e8-8d05-db4d6f6606c9"})
|
|
app.run(host="0.0.0.0", debug=True)
|