From d6d9daabf07d1517e37b0b4aa5effdcfcb614e59 Mon Sep 17 00:00:00 2001 From: Martin Weick Date: Mon, 7 Dec 2020 12:41:32 +0100 Subject: [PATCH] #3 add delete all --- middleware/app_be/services/minioservice.py | 34 ++++++++++++++++++++++ middleware/app_be/views/rest_api.py | 4 +++ 2 files changed, 38 insertions(+) diff --git a/middleware/app_be/services/minioservice.py b/middleware/app_be/services/minioservice.py index 20e35a6..97bc090 100644 --- a/middleware/app_be/services/minioservice.py +++ b/middleware/app_be/services/minioservice.py @@ -1,5 +1,8 @@ +import base64 +import hashlib from typing import Union +import xml.etree.ElementTree as ET import requests from django.conf import settings @@ -70,4 +73,35 @@ class MinioService: print("Something went wrong while deleting") except: return False + return True + + @staticmethod + def delete_all() -> bool: + """Delete every file from the dropbox storage. + + :return: Whether the storage was successfully emptied + """ + try: + r = requests.get(settings.AWS_HOST + "?list") + root = ET.fromstring(r.content) + list = [] + for child in root.iter('{http://s3.amazonaws.com/doc/2006-03-01/}Contents'): + list.append(child.find('{http://s3.amazonaws.com/doc/2006-03-01/}Key').text) + + body = "" + for key in list: + body += "" + key + "" + + body += "" + print(body) + header = {"Content-MD5": base64.b64encode(hashlib.md5(body.encode()).digest()), + 'Content-Type': 'binary/application/xml'} + r = requests.post(settings.AWS_HOST + "?delete", data=body, headers=header) + if r.status_code == 200: + print("Successfully deleted all files!") + else: + print("Something went wrong by deleting", r.status_code, r.content) + exit() + except: + return False return True \ No newline at end of file diff --git a/middleware/app_be/views/rest_api.py b/middleware/app_be/views/rest_api.py index bd99437..7d66728 100644 --- a/middleware/app_be/views/rest_api.py +++ b/middleware/app_be/views/rest_api.py @@ -146,6 +146,10 @@ class ImageEndpoint: print('Error deleting dropbox folder') result_bool = False + if not MinioService.delete_all(): + print('Error deleting minio folder') + result_bool = False + return JsonResponse({'Result': result_bool}, safe=False) @staticmethod