74 lines
1.9 KiB
Python
74 lines
1.9 KiB
Python
import os
|
|
from redis import Redis
|
|
import rq
|
|
from rq.job import Job
|
|
import tasks
|
|
from flask import Flask, request, jsonify
|
|
from functools import wraps
|
|
|
|
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)
|
|
else:
|
|
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:
|
|
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():
|
|
headers = request.headers
|
|
auth = headers.get("X-Api-Key")
|
|
if auth != "fbdhjsbf43443refdsafa":
|
|
return jsonify({"message": "ERROR: Unauthorized"}), 401
|
|
|
|
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
|