From fae269eb8d415f05e3c94cba446a4d629d85fd92 Mon Sep 17 00:00:00 2001
From: Cayo Puigdefabregas <cayo@puigdefabregas.eu>
Date: Tue, 15 Oct 2024 16:58:51 +0200
Subject: [PATCH] save placeholders

---
 api/views.py      | 41 +++--------------------------------------
 device/forms.py   |  6 +++++-
 dhub/settings.py  |  3 ++-
 evidence/forms.py | 11 ++++++++---
 4 files changed, 18 insertions(+), 43 deletions(-)

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