scanfile/server/internal/database/file.go

96 lines
3.2 KiB
Go

package database
import (
"context"
"encoding/hex"
"fmt"
"log/slog"
"git.jmbit.de/jmb/scanfile/server/internal/sqlc"
"github.com/jackc/pgx/v5/pgtype"
)
func GetFileByID(fileID string) (sqlc.File, error) {
var pgUUID pgtype.UUID
err := pgUUID.Scan(fileID)
if err != nil {
slog.Error("Unable to convert string to UUID", "file-uuid", fileID, "error", err)
}
query := sqlc.New(pool)
file, err := query.GetFileByUUID(context.Background(), pgUUID)
return file, nil
}
func DeleteFileByID(fileID string) error {
var pgUUID pgtype.UUID
err := pgUUID.Scan(fileID)
if err != nil {
slog.Error("Unable to convert string to UUID", "file-uuid", fileID, "error", err)
}
query := sqlc.New(pool)
err = query.DeleteFile(context.Background(), pgUUID)
if err != nil {
slog.Error("Unable to delete file", "file-uuid", fileID, "error", err)
}
return err
}
func InsertFileProperties(properties sqlc.InsertFilePropertiesParams) error {
query := sqlc.New(pool)
slog.Debug("InsertFileProperties", "file-uuid", properties.FileID.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.FileID.String(), "error", err)
}
return err
}
// InsertJsonResult() into one of the following tables:
// diec, msoffice_mraptor, msoffice_oleid, msoffice_olevba
func InsertJsonResult(fileID pgtype.UUID, data []byte, table string) error {
query := sqlc.New(pool)
var err error
switch table {
case "diec":
err = query.InsertFileDIEC(context.Background(), sqlc.InsertFileDIECParams{FileID: fileID, Data: data})
case "msoffice_oleid":
err = query.InsertFileMsofficeOleid(context.Background(), sqlc.InsertFileMsofficeOleidParams{FileID: fileID, Data: data})
case "msoffice_olevba":
err = query.InsertFileMsofficeOlevba(context.Background(), sqlc.InsertFileMsofficeOlevbaParams{FileID: fileID, Data: data})
case "msoffice_mraptor":
err = query.InsertFileMsofficeMraptor(context.Background(), sqlc.InsertFileMsofficeMraptorParams{FileID: fileID, Data: data})
default:
err = fmt.Errorf("Invalid table name")
}
if err != nil {
slog.Error("Unable to insert DIEC results", "file-uuid", fileID.String(), "error", err)
return err
}
slog.Debug("InsertJsonResult", "file-uuid", fileID.String(), "table", table)
return nil
}
// GetFileMime() returns the MimeType for a file
func GetFileMime(fileID pgtype.UUID) (string, error) {
query := sqlc.New(pool)
mimeType, err := query.GetFileMime(context.Background(), fileID)
if err != nil {
slog.Error("Error getting file Mimetype", "file-uuid", fileID.String(), "error", err)
return "", err
}
return mimeType, nil
}
func GetFileProperties(fileID pgtype.UUID) (sqlc.FileProperty, error) {
query := sqlc.New(pool)
fileProperties, err := query.GetFileProperties(context.Background(), fileID)
if err != nil {
slog.Error("Error in GetFileProperties", "file-uuid", fileID, "error", err)
}
return fileProperties, err
}