diff --git a/server/internal/database/file.go b/server/internal/database/file.go index 49dfa39..56d7c7b 100644 --- a/server/internal/database/file.go +++ b/server/internal/database/file.go @@ -22,15 +22,29 @@ func GetFileByID(fileID string) (sqlc.File, error) { 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.ID.String(), "file-sha256", + 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.ID.String(), "error", err) + slog.Error("Unable to add file properties", "file-uuid", properties.FileID.String(), "error", err) } return err } diff --git a/server/internal/database/queries-file_properties.sql b/server/internal/database/queries-file_properties.sql index faff843..6f270db 100644 --- a/server/internal/database/queries-file_properties.sql +++ b/server/internal/database/queries-file_properties.sql @@ -1,11 +1,12 @@ -- name: InsertFileProperties :exec INSERT INTO file_properties ( - id, sha256, md5, libmagic_mime, libmagic_extension, libmagic_apple -) VALUES ($1, $2, $3, $4, $5, $6); + file_id, sha256, md5, libmagic_mime, libmagic_extension, libmagic_apple +) VALUES ($1, $2, $3, $4, $5, $6) +; -- name: GetFileProperties :one SELECT * FROM file_properties -WHERE id = $1; +WHERE file_id = $1; -- name: InsertFileDIEC :exec INSERT INTO diec ( diff --git a/server/internal/database/schema.sql b/server/internal/database/schema.sql index 9661278..de47ab1 100644 --- a/server/internal/database/schema.sql +++ b/server/internal/database/schema.sql @@ -69,7 +69,8 @@ CREATE TABLE IF NOT EXISTS msoffice ( CREATE TABLE IF NOT EXISTS file_properties ( - id UUID PRIMARY KEY, + id BIGSERIAL PRIMARY KEY, + file_id UUID REFERENCES files (id) ON DELETE CASCADE, sha256 BYTEA, md5 BYTEA, libmagic_mime TEXT, @@ -91,5 +92,6 @@ CREATE INDEX idx_msoffice_oleid_file_id ON msoffice_oleid (file_id); CREATE INDEX idx_msoffice_olevba_file_id ON msoffice_olevba (file_id); CREATE INDEX idx_msoffice_mraptor_file_id ON msoffice_mraptor (file_id); CREATE INDEX idx_msoffice_results_file_id ON msoffice (file_id); -CREATE INDEX idx_file_properties_id ON file_properties (id); +CREATE INDEX idx_file_properties_file_id ON file_properties (file_id); CREATE INDEX idx_file_id ON files (id); +CREATE INDEX idx_yara_results_file_id ON yara_results (file_id); diff --git a/server/internal/processing/basic/basic.go b/server/internal/processing/basic/basic.go index a943b20..2681524 100644 --- a/server/internal/processing/basic/basic.go +++ b/server/internal/processing/basic/basic.go @@ -28,7 +28,10 @@ func BasicProcessing(job sqlc.ProcessingJob) error { } fileProperties := sqlc.InsertFilePropertiesParams{} - fileProperties.ID = job.FileID + fileProperties.LibmagicMime.Valid = true + fileProperties.LibmagicApple.Valid = true + fileProperties.LibmagicExtension.Valid = true + fileProperties.FileID = job.FileID fileProperties.Md5 = md5sum[:] fileProperties.Sha256 = sha256sum[:] fileProperties.LibmagicMime.String = fileCmdResult.MimeType diff --git a/server/internal/sqlc/models.go b/server/internal/sqlc/models.go index ed23421..ce06ad0 100644 --- a/server/internal/sqlc/models.go +++ b/server/internal/sqlc/models.go @@ -26,7 +26,8 @@ type File struct { } type FileProperty struct { - ID pgtype.UUID + ID int64 + FileID pgtype.UUID Sha256 []byte Md5 []byte LibmagicMime pgtype.Text diff --git a/server/internal/sqlc/queries-file_properties.sql.go b/server/internal/sqlc/queries-file_properties.sql.go index be3f75a..c36ecde 100644 --- a/server/internal/sqlc/queries-file_properties.sql.go +++ b/server/internal/sqlc/queries-file_properties.sql.go @@ -12,15 +12,16 @@ import ( ) const getFileProperties = `-- name: GetFileProperties :one -SELECT id, sha256, md5, libmagic_mime, libmagic_extension, libmagic_apple FROM file_properties -WHERE id = $1 +SELECT id, file_id, sha256, md5, libmagic_mime, libmagic_extension, libmagic_apple FROM file_properties +WHERE file_id = $1 ` -func (q *Queries) GetFileProperties(ctx context.Context, id pgtype.UUID) (FileProperty, error) { - row := q.db.QueryRow(ctx, getFileProperties, id) +func (q *Queries) GetFileProperties(ctx context.Context, fileID pgtype.UUID) (FileProperty, error) { + row := q.db.QueryRow(ctx, getFileProperties, fileID) var i FileProperty err := row.Scan( &i.ID, + &i.FileID, &i.Sha256, &i.Md5, &i.LibmagicMime, @@ -48,12 +49,12 @@ func (q *Queries) InsertFileDIEC(ctx context.Context, arg InsertFileDIECParams) const insertFileProperties = `-- name: InsertFileProperties :exec INSERT INTO file_properties ( - id, sha256, md5, libmagic_mime, libmagic_extension, libmagic_apple + file_id, sha256, md5, libmagic_mime, libmagic_extension, libmagic_apple ) VALUES ($1, $2, $3, $4, $5, $6) ` type InsertFilePropertiesParams struct { - ID pgtype.UUID + FileID pgtype.UUID Sha256 []byte Md5 []byte LibmagicMime pgtype.Text @@ -63,7 +64,7 @@ type InsertFilePropertiesParams struct { func (q *Queries) InsertFileProperties(ctx context.Context, arg InsertFilePropertiesParams) error { _, err := q.db.Exec(ctx, insertFileProperties, - arg.ID, + arg.FileID, arg.Sha256, arg.Md5, arg.LibmagicMime,