From dc76bc1cb7d43c93810ec18618275ad86ce081a6 Mon Sep 17 00:00:00 2001 From: Wojciech Janota Date: Wed, 7 Dec 2022 10:21:11 +0100 Subject: [PATCH] WIP --- database.db | Bin 28672 -> 28672 bytes .../__pycache__/communication.cpython-310.pyc | Bin 7190 -> 8273 bytes network/communication.py | 50 ++++++++++++++++-- temp_file.qcow2 | 4 ++ 4 files changed, 50 insertions(+), 4 deletions(-) diff --git a/database.db b/database.db index 5fcb2b73b60b1f18787f9b11479005f4ee010ad6..c955bbc5cf1e5999122b981664918084bc76f7c2 100644 GIT binary patch delta 352 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 WBp~4y0aU3#RQMyx;-3xY^Zx)qkI4N1 diff --git a/network/communication.py b/network/communication.py index 494fe25..2f50864 100644 --- a/network/communication.py +++ b/network/communication.py @@ -1,5 +1,5 @@ from http.client import NON_AUTHORITATIVE_INFORMATION -from flask import Flask, request, jsonify +from flask import Flask, request, jsonify, send_file, make_response from utils.database.database import Database from utils.exceptions import DatabaseException from utils.models.models import Client, VMImage, User @@ -7,6 +7,7 @@ from utils.middleware.auth import require_auth import json import bcrypt import jwt +import base64 class FlaskAppWrapper(object): @@ -178,7 +179,7 @@ class Server(): "data": None, "error": None }) - response.status_code = 201 + response.status_code = 202 return response except Exception as ex: response = jsonify({ @@ -193,6 +194,14 @@ class Server(): def get_client_data(request_user, self, client_mac_address): try: client_data = self.database.get_client_by_mac_address(client_mac_address) + if client_data == None: + response = jsonify({ + "message": "Client not found in database", + "data": None, + "error": None + }) + response.status_code = 404 + return response return jsonify(client_data.as_dict()) except Exception as ex: response = jsonify({ @@ -216,10 +225,39 @@ class Server(): }) response.status_code = 500 return response - + + @require_auth + def get_vm_data(request_user, self, vm_id): + try: + vm_image: VMImage = self.database.get_image_by_id(vm_id) + return jsonify(vm_image.as_dict()) + except Exception as ex: + response = jsonify({ + "message": "Internal server error", + "data": None, + "error": str(ex) + }) + response.status_code = 500 + return response + + @require_auth + def serve_vm_image(request_user, self, vm_id): + try: + image_data = self.database.get_image_by_id(vm_id) + with open(image_data.image_file, "rb") as image_file: + data = image_file.read() + response = make_response(data) + response.headers.set('Content-Type', 'application/octet-stream') + return response + except Exception as ex: + response = jsonify({ + "error": str(ex) + }) + response.status_code = 500 + return response def run(self): - # add admin user to dataabse (or update existing one) + # add admin user to database (or update existing one) salt = bcrypt.gensalt() temp_password_hash = bcrypt.hashpw( self.access_password.encode("utf-8"), salt) @@ -236,6 +274,10 @@ class Server(): handler=self.register_new_client_to_database, methods=["POST"]) self.app.add_endpoint(endpoint="/images", endpoint_name="add_image", handler=self.add_image_to_database, methods=["POST"]) + self.app.add_endpoint(endpoint="/images/", endpoint_name="get_vm_data", + handler=self.get_vm_data, methods=["GET"]) + self.app.add_endpoint(endpoint="/images//download", endpoint_name="download_vm", + handler=self.serve_vm_image, methods=["GET"]) self.app.add_endpoint(endpoint="/clients", endpoint_name="update_client", handler=self.update_client_data, methods=["PUT"]) self.app.add_endpoint(endpoint="/clients/", endpoint_name="get_client_data", handler=self.get_client_data, methods=["GET"]) self.app.add_endpoint(endpoint="/clients//vms", endpoint_name="get_client_vms_list", handler=self.get_client_list_of_vms, methods=["GET"]) diff --git a/temp_file.qcow2 b/temp_file.qcow2 index e69de29..c8bdf25 100644 --- a/temp_file.qcow2 +++ b/temp_file.qcow2 @@ -0,0 +1,4 @@ +duiuwqhdiuhwqiudhewiufhwieuhiuwhfiuiueyr837r87438r3iuh87duihew8732roh87yro3r +ry398yr983yr937yr743tfhuieh9843ty347nv743nyv34[9yt34 +4yv9[843qyt9843yt98439843ry3948feiuh9843fy934t +ru09438ur9843ur9843ut9834tup43349]] \ No newline at end of file