mirror of
https://github.com/migatu/conjurer.git
synced 2026-07-14 21:38:38 +00:00
86 lines
2.4 KiB
Python
86 lines
2.4 KiB
Python
import logging
|
|
import threading
|
|
import json
|
|
import time
|
|
from queue import Queue, Empty
|
|
from flask import Flask, jsonify, request
|
|
from waitress import serve
|
|
|
|
HOST_ADDRESS = "192.168.1.191"
|
|
PORT_ADDRESS = 5000
|
|
OUT_COMM_Q = Queue()
|
|
IN_COMM_Q = Queue()
|
|
awaiting_q = []
|
|
incoming_q = Queue()
|
|
app = Flask(__name__)
|
|
|
|
@app.route("/conjurer", methods=["POST"])
|
|
def answer_external_command():
|
|
app.logger.info(request)
|
|
record = json.loads(request.data)
|
|
app.logger.info(record)
|
|
app.logger.info("DATA RECEIVED")
|
|
incoming_q.put(record)
|
|
return jsonify("SUCCESS")
|
|
|
|
@app.route("/conjurer", methods=["GET"])
|
|
def check_alive():
|
|
return jsonify("ALIVE")
|
|
|
|
def flask_debug(_logger):
|
|
"""
|
|
The `flask_debug` function starts a Flask application in debug mode without using the reloader.
|
|
Do not use for production for fucks sake.
|
|
"""
|
|
_logger.info("Attempt debug")
|
|
# trunk-ignore(bandit/B201)
|
|
app.run(debug=True, use_reloader=False, host=HOST_ADDRESS, port=PORT_ADDRESS)
|
|
|
|
|
|
def waitress_run(_logger):
|
|
"""
|
|
The `waitress_run` function serves the `app` on host "0.0.0.0"
|
|
and port 5000 using the Waitress WSGI server.
|
|
"""
|
|
_logger.info("Attempt waitress")
|
|
serve(app, host=HOST_ADDRESS, port=PORT_ADDRESS)
|
|
|
|
def scan_queue(_logger):
|
|
while True:
|
|
data = OUT_COMM_Q.get()
|
|
_logger.info(data)
|
|
awaiting_q.append(data)
|
|
|
|
def scan_incoming(_logger):
|
|
while True:
|
|
try:
|
|
answer = incoming_q.get(block=False)
|
|
_logger.info("DATA FOUND")
|
|
for record in awaiting_q:
|
|
if record.uuid in answer.keys():
|
|
record.stop = True
|
|
record.entries = answer[record.uuid]
|
|
IN_COMM_Q.put(record)
|
|
except Empty:
|
|
time.sleep(1)
|
|
|
|
|
|
def comm_subroutine(logger):
|
|
#logger.setLevel(logging.DEBUG)
|
|
logger.info("Started")
|
|
threads = []
|
|
threads.append(threading.Thread(target=flask_debug, args=(logger,)))
|
|
threads.append(threading.Thread(target=waitress_run, args=(logger,)))
|
|
threads.append(threading.Thread(target=scan_queue,args=(logger,)))
|
|
threads.append(threading.Thread(target=scan_incoming,args=(logger,)))
|
|
|
|
|
|
for worker in threads:
|
|
worker.start()
|
|
for worker in threads:
|
|
worker.join()
|
|
|
|
if __name__ == "__main__":
|
|
logging_client = logging.getLogger(__name__)
|
|
comm_subroutine(logging_client)
|