diff --git a/fri/server/main.py b/fri/server/main.py
index 6ee4624..348f57a 100644
--- a/fri/server/main.py
+++ b/fri/server/main.py
@@ -1,49 +1,116 @@
-from flask import Flask, request, jsonify, render_template
+from flask import Flask, request, jsonify, send_file, send_from_directory
from werkzeug.utils import secure_filename
import os
+from subprocess import call
+from pathlib import Path
-UPLOAD_FOLDER = "./uploaded_files"
-
-if not os.path.exists(UPLOAD_FOLDER):
- os.makedirs(UPLOAD_FOLDER)
-
app = Flask(__name__)
app.secret_key = "secret key"
-app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
-
-
-@app.route('/upload', methods=['POST'])
-def upload():
- if 'files[]' not in request.files:
- resp = jsonify({'message' : 'No file in the request'})
- resp.status_code = 400
- return resp
-
- files = request.files.getlist('files[]')
-
- errors = {}
- success = False
-
- for file in files:
- if file:
- filename = secure_filename(file.filename)
- file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
- success = True
-
- if success and errors:
- errors['message'] = 'File(s) successfully uploaded'
- resp = jsonify(errors)
- resp.status_code = 500
- return resp
- if success:
- resp = jsonify({'message' : 'Files successfully uploaded'})
- resp.status_code = 201
- return resp
- else:
- resp = jsonify(errors)
- resp.status_code = 500
- return resp
+
+# To upload multiple file. For example, /upload/test?apikey=xyz
+@app.route('/upload/
', methods=['POST'])
+def upload(dir):
+ apikey = request.args.get('apikey')
+ dirname = dir + "_" + apikey
+
+ if 'files[]' not in request.files:
+ resp = jsonify({'message': 'No file in the request'})
+ resp.status_code = 400
+ return resp
+
+ files = request.files.getlist('files[]')
+
+ errors = {}
+ success = False
+
+ if not os.path.exists(secure_filename(dirname)):
+ os.makedirs(secure_filename(dirname))
+
+ for file in files:
+ if file:
+ filename = secure_filename(file.filename)
+ file.save(secure_filename(dirname)+"/"+filename)
+ success = True
+
+ if success and errors:
+ errors['message'] = 'File(s) successfully uploaded'
+ resp = jsonify(errors)
+ resp.status_code = 500
+ return resp
+ if success:
+ resp = jsonify({'message': 'Files successfully uploaded'})
+ resp.status_code = 201
+ return resp
+ else:
+ resp = jsonify(errors)
+ resp.status_code = 500
+ return resp
+
+# To execute any python file. For example, /execute/test?apikey=xyz
+@app.route('/execute/', methods=['POST'])
+def execute(dir):
+ apikey = request.args.get('apikey')
+ dirname = dir + "_" + apikey
+
+ if 'file' not in request.files:
+ resp = jsonify({'message': 'No file in the request'})
+ resp.status_code = 400
+ return resp
+
+ file = request.files['file']
+
+ if file.filename == '':
+ resp = jsonify({'message': 'No file selected for Executing'})
+ resp.status_code = 400
+ return resp
+
+ errors = {}
+ success = False
+
+ if not os.path.exists(secure_filename(dirname)):
+ os.makedirs(secure_filename(dirname))
+
+ if file:
+ filename = secure_filename(file.filename)
+ file.save(secure_filename(dirname)+"/"+filename)
+ output_filename = filename + ".out"
+ file_path = secure_filename(dirname) + "/"+filename
+ outputfile_path = secure_filename(dirname)+"/"+output_filename
+ f = open(outputfile_path, "w")
+ call(["nohup", "python3", file_path], stdout=f)
+ success = True
+
+ if success:
+ resp = jsonify({'message': 'Files successfully executed'})
+ resp.status_code = 201
+ return resp
+ else:
+ resp = jsonify(errors)
+ resp.status_code = 500
+ return resp
+
+
+
+# to download /download/?fetch=. For example, /download/test?fetch=example.py.out&apikey=xyz
+@app.route('/download/', methods=['POST', 'GET'])
+def download(dir):
+ download_file = request.args.get('fetch')
+ apikey = request.args.get('apikey')
+ dirname = dir + "_" + apikey
+
+ if not os.path.exists(secure_filename(dirname)):
+ resp = jsonify({'message': 'Directory not found'})
+ resp.status_code = 400
+ return resp
+
+ try:
+ return send_from_directory(secure_filename(dirname), download_file, as_attachment=True)
+ except:
+ resp = jsonify({'message': 'file not found'})
+ resp.status_code = 400
+ return resp
+
if __name__ == "__main__":
app.run(host="0.0.0.0")
diff --git a/fri/service_config.sh b/fri/service_config.sh
index c6530e3..7be2144 100644
--- a/fri/service_config.sh
+++ b/fri/service_config.sh
@@ -1,6 +1,6 @@
#!/bin/bash
-SERVICES=('upload' 'execute')
+SERVICES=('upload' 'execute' 'download')
for service in "${SERVICES[@]}"
do
name="name="$service