Files
motus_remote/web/app.py
2021-12-30 17:29:53 +00:00

71 lines
1.7 KiB
Python

import os
from functools import wraps
import rq
from flask import Flask, jsonify, request
from redis import Redis
from rq.job import Job
import tasks
app = Flask(__name__)
queue = rq.Queue("motus", connection=Redis.from_url("redis://"))
redis = Redis()
# APIKEY Decororator
def apikey(f):
@wraps(f)
def check_apikey(*args, **kwargs):
if request.headers.get("X-Api-Key") == "fbdhjsbf43443refdsafa":
return f(*args, **kwargs)
return jsonify({"message": "ERROR: Unauthorized"}), 401
return check_apikey
@app.route("/")
@app.route("/index")
def index():
return jsonify({"message": "OK: Hello"}), 200
@app.route("/check")
@apikey
def check():
algorithm = request.args.get("type", default="sha256", type=str)
filename = request.args.get("filename", default="", type=str)
hashval = request.args.get("hash", default="", type=str)
if filename == "" or hashval == "":
return jsonify({"message": "ERROR: Invalid Arguments"}), 400
if algorithm == "sha256":
pass
else:
return jsonify({"message": "ERROR: Unknown Algorithm"}), 400
try:
unused_filesize = os.path.getsize(filename)
except:
return jsonify({"message": "ERROR: Unable to Access File"}), 400
job = queue.enqueue(tasks.check_hash, algorithm, filename, hashval)
job.meta["status"] = "Processing: 0%"
job.save_meta()
return jsonify({"message": "OK: Job Submitted", "jobid": job.get_id()}), 200
@app.route("/status")
@apikey
def status():
jobid = request.args.get("jobid", type=str)
job = Job.fetch(jobid, connection=redis)
try:
meta = job.get_meta()
return jsonify({"status": meta}), 200
except:
return jsonify({"status": "Failed"}), 400