diff --git a/api/views.py b/api/views.py index 0ae7e04..72b5518 100644 --- a/api/views.py +++ b/api/views.py @@ -1,10 +1,9 @@ -import os import json -import shutil -from datetime import datetime +from uuid import uuid4 from django.urls import reverse_lazy +from django.http import JsonResponse from django.shortcuts import get_object_or_404, redirect from django.utils.translation import gettext_lazy as _ from django.views.decorators.csrf import csrf_exempt @@ -16,9 +15,8 @@ from django.views.generic.edit import ( DeleteView, UpdateView, ) -from django.http import JsonResponse -from uuid import uuid4 +from utils.save_snapshots import move_json, save_in_disk from dashboard.mixins import DashboardView from evidence.models import Annotation from evidence.parse import Build @@ -27,39 +25,6 @@ from api.models import Token from api.tables import TokensTable -def move_json(path_name, user): - tmp_snapshots = settings.SNAPSHOTS_DIR - path_dir = os.path.join(tmp_snapshots, user) - - if os.path.isfile(path_name): - shutil.copy(path_name, path_dir) - os.remove(path_name) - - -def save_in_disk(data, user): - uuid = data.get('uuid', '') - now = datetime.now() - year = now.year - month = now.month - day = now.day - hour = now.hour - minutes = now.minute - tmp_snapshots = settings.SNAPSHOTS_DIR - - name_file = f"{year}-{month}-{day}-{hour}-{minutes}_{user}_{uuid}.json" - path_dir = os.path.join(tmp_snapshots, user, "errors") - path_name = os.path.join(path_dir, name_file) - - if not os.path.isdir(path_dir): - os.system(f'mkdir -p {path_dir}') - - with open(path_name, 'w') as snapshot_file: - snapshot_file.write(json.dumps(data)) - - return path_name - - - @csrf_exempt def NewSnapshot(request): # Accept only posts diff --git a/device/forms.py b/device/forms.py index b2f0d3c..38d649e 100644 --- a/device/forms.py +++ b/device/forms.py @@ -1,5 +1,6 @@ from django import forms from utils.device import create_annotation, create_doc, create_index +from utils.save_snapshots import move_json, save_in_disk DEVICE_TYPES = [ @@ -55,9 +56,12 @@ class BaseDeviceFormSet(forms.BaseFormSet): doc = create_doc(row) if not commit: return doc - + + path_name = save_in_disk(doc, self.user.name) create_index(doc, self.user) create_annotation(doc, user, commit=commit) + move_json(path_name, self.user.name) + return doc diff --git a/dhub/settings.py b/dhub/settings.py index 3a55985..c307073 100644 --- a/dhub/settings.py +++ b/dhub/settings.py @@ -10,6 +10,7 @@ For the full list of settings and their values, see https://docs.djangoproject.com/en/5.0/ref/settings/ """ +import os import xapian from pathlib import Path @@ -62,7 +63,7 @@ EMAIL_FILE_PATH = config('EMAIL_FILE_PATH', default='/tmp/app-messages') ENABLE_EMAIL = config("ENABLE_EMAIL", default=True, cast=bool) -SNAPSHOTS_DIR = config("SNAPSHOTS_DIR", default="/tmp/") +EVIDENCES_DIR = config("EVIDENCES_DIR", default=os.path.join(BASE_DIR, "db")) # Application definition diff --git a/evidence/forms.py b/evidence/forms.py index db98f2d..a47024e 100644 --- a/evidence/forms.py +++ b/evidence/forms.py @@ -9,6 +9,7 @@ from utils.forms import MultipleFileField from device.models import Device from evidence.parse import Build from evidence.models import Annotation +from utils.save_snapshots import move_json, save_in_disk class UploadForm(forms.Form): @@ -48,7 +49,9 @@ class UploadForm(forms.Form): return for ev in self.evidences: + path_name = save_in_disk(ev[1], user.institution.name) Build(ev[1], user) + move_json(path_name, user.institution.name) class UserTagForm(forms.Form): @@ -151,8 +154,10 @@ class ImportForm(forms.Form): if commit: for doc, cred in table: - cred.save() - create_index(doc, self.user) - return table + path_name = save_in_disk(doc, self.user.name) + cred.save() + create_index(doc, self.user) + move_json(path_name, self.user.name) + return table return