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 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) } 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 }