96 lines
3.2 KiB
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
|
|
|
|
}
|