scanfile/server/internal/processing/processing.go
2025-07-25 12:43:28 +02:00

57 lines
1.6 KiB
Go

package processing
import (
"context"
"log/slog"
"sync"
"time"
"git.jmbit.de/jmb/scanfile/server/internal/database"
"git.jmbit.de/jmb/scanfile/server/internal/processing/basic"
"git.jmbit.de/jmb/scanfile/server/internal/processing/msoffice"
"git.jmbit.de/jmb/scanfile/server/internal/processing/yara"
"github.com/jackc/pgx/v5/pgtype"
)
// Used to determine if a task was started by a previous instance that stalled out or died
var startup time.Time
func Setup(wg *sync.WaitGroup) {
startup = time.Now()
go yara.InitYara()
}
// Submit() starts the analysis process for a file.
func Submit(ctx context.Context, file pgtype.UUID) error {
// Always start a basic task
job, err := database.NewProcessingJob(ctx, file, TypeBasic)
if err != nil {
slog.Error("Could not submit processing job", "error", err, "file-uuid", file, "type", TypeBasic)
return err
}
go basic.BasicProcessing(job)
yaraJob, err := database.NewProcessingJob(ctx, file, TypeYARA)
if err != nil {
slog.Error("Could not submit processing job", "error", err, "file-uuid", file, "type", TypeBasic)
return err
}
go yara.YaraProcessing(yaraJob)
mimeType, err := database.GetFileMime(file)
if err != nil {
slog.Error("Could not retrieve MimeType", "error", err, "file-uuid", file)
return err
}
switch TypeFromMime(mimeType) {
case TypeMSOffice:
officeJob, err := database.NewProcessingJob(ctx, file, TypeMSOffice)
if err != nil {
slog.Error("Could not submit processing job", "error", err, "file-uuid", file, "type", TypeMSOffice)
return err
}
go msoffice.MSOfficeProcessing(officeJob)
}
return nil
}