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