From 5b0f04c241edb056b24046d6ece4585c41472cc2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20B=C3=BClow?= Date: Thu, 12 Jun 2025 12:01:31 +0200 Subject: [PATCH] Bugfixes for file upload --- server/internal/database/createFile.go | 23 +++++++++++++++++------ server/internal/database/file.go | 9 ++++++++- server/internal/processing/basic/basic.go | 2 +- server/internal/processing/types.go | 1 + 4 files changed, 27 insertions(+), 8 deletions(-) diff --git a/server/internal/database/createFile.go b/server/internal/database/createFile.go index 6116bef..516fa1f 100644 --- a/server/internal/database/createFile.go +++ b/server/internal/database/createFile.go @@ -3,6 +3,7 @@ package database import ( "context" "log/slog" + "encoding/hex" "github.com/jackc/pgx/v5" "golang.org/x/crypto/blake2b" @@ -20,19 +21,29 @@ func CreateFile(ctx context.Context, name string, fileBytes []byte) (sqlc.File, var err error bl2hash := blake2b.Sum256(fileBytes) - file.Blake2 = bl2hash[:] - file.Size = int64(len(fileBytes)) + slog.Debug("calculated Blake2b hash", "file-name", name, "file-bl2", hex.EncodeToString(bl2hash[:]), "file-size", len(fileBytes)) + mime, _ := store.GetBytesFileType(fileBytes[:262]) - file.Mimetype, _ = store.GetBytesFileType(fileBytes[:262]) - - file, err = queries.CreateFile(ctx, sqlc.CreateFileParams{}) + file, err = queries.CreateFile(ctx, sqlc.CreateFileParams{ + Name: name, + Mimetype: mime, + Size: int64(len(fileBytes)), + Blake2: bl2hash[:], + }) if err == pgx.ErrNoRows { - slog.Info("File already exists", "file-uuid", file.ID.String()) + file, err := queries.GetFileByBlake2(ctx, bl2hash[:]) + if err != nil { + slog.Error("Error saving file to database", "error", err, "file-name", name) + return file, err + } + slog.Debug("File already exists", "file-uuid", file.ID.String(), "file-name", file.Name, "file-bl2", hex.EncodeToString(file.Blake2), "file-size", file.Size, "file-mime", file.Mimetype, "file-description", file.Description.String) return file, nil } if err != nil { slog.Error("Error saving file to database", "error", err, "file-name", name) err = nil + } else { + slog.Debug("New file created", "file-uuid", file.ID.String(), "file-name", file.Name, "file-bl2", hex.EncodeToString(file.Blake2), "file-size", file.Size, "file-mime", file.Mimetype, "file-description", file.Description.String) } //Using UUIDs instead of the file hash to make switching storage backends easier diff --git a/server/internal/database/file.go b/server/internal/database/file.go index 7d2b0b9..453dc09 100644 --- a/server/internal/database/file.go +++ b/server/internal/database/file.go @@ -2,6 +2,7 @@ package database import ( "context" + "encoding/hex" "fmt" "log/slog" @@ -23,6 +24,10 @@ func GetFileByID(fileID string) (sqlc.File, error) { func InsertFileProperties(properties sqlc.InsertFilePropertiesParams) error { query := sqlc.New(pool) + slog.Debug("InsertFileProperties", "file-uuid", properties.ID.String(), "file-sha256", + hex.EncodeToString(properties.Sha256), "file-md5", hex.EncodeToString(properties.Md5), + "file-mime", properties.LibmagicMime.String, "file-extension", properties.LibmagicExtension.String, + "file-apple", properties.LibmagicApple.String) err := query.InsertFileProperties(context.Background(), properties) if err != nil { slog.Error("Unable to add file properties", "file-uuid", properties.ID.String(), "error", err) @@ -49,8 +54,10 @@ func InsertJsonResult(fileID pgtype.UUID, data []byte, table string) error { } if err != nil { slog.Error("Unable to insert DIEC results", "file-uuid", fileID.String(), "error", err) + return err } - return err + slog.Debug("InsertJsonResult", "file-uuid", fileID.String(), "table", table) + return nil } // GetFileMime() returns the MimeType for a file diff --git a/server/internal/processing/basic/basic.go b/server/internal/processing/basic/basic.go index 99fbd12..d4ca34e 100644 --- a/server/internal/processing/basic/basic.go +++ b/server/internal/processing/basic/basic.go @@ -28,7 +28,7 @@ func BasicProcessing(job sqlc.ProcessingJob) error { } fileProperties := sqlc.InsertFilePropertiesParams{} - fileProperties.ID.Bytes = job.FileID.Bytes + fileProperties.ID = job.FileID fileProperties.Md5 = md5sum[:] fileProperties.Sha256 = sha256sum[:] fileProperties.LibmagicMime.String = fileCmdResult.MimeType diff --git a/server/internal/processing/types.go b/server/internal/processing/types.go index ece6126..0de648d 100644 --- a/server/internal/processing/types.go +++ b/server/internal/processing/types.go @@ -78,3 +78,4 @@ func TypeFromMime(mimetype string) string { return TypeOther } +