scanfile/server/internal/processing/msoffice/msoffice.go

58 lines
1.7 KiB
Go

package msoffice
import (
"encoding/json"
"log/slog"
"git.jmbit.de/jmb/scanfile/server/internal/database"
"git.jmbit.de/jmb/scanfile/server/internal/sqlc"
)
func MSOfficeProcessing(job sqlc.ProcessingJob) error {
database.StartProcessingJob(job.ID)
oleidResp, err := OleIDScan(job.FileID)
if err != nil {
database.FailProcessingJob(job.ID, err)
return err
}
olevbaResp, err := OleVBAScan(job.FileID)
if err != nil {
database.FailProcessingJob(job.ID, err)
return err
}
params := sqlc.InsertMSOfficeResultsParams{
FileID: job.FileID,
}
params.ContainerFormat.String = oleidResp.ContainerFormat
params.Encrypted.Bool = oleidResp.Encrypted
params.FileFormat.String = oleidResp.FileFormat
params.VbaMacros.String = oleidResp.VBAMacros
params.XlmMacros.String = oleidResp.XLMMacros
params.VbaStomping.Bool = olevbaResp.Stomping
params.NbAutoexec.Int32 = int32(olevbaResp.NbAutoexec)
params.NbIocs.Int32 = int32(olevbaResp.NbIocs)
params.NbMacros.Int32 = int32(olevbaResp.NbMacros)
params.NbSuspicious.Int32 = int32(olevbaResp.NbSuspicious)
params.OlevbaResults, err = json.Marshal(olevbaResp.Results)
if err != nil {
slog.Error("Error in MSOfficeProcessing while marshaling olevba results to json", "file-uuid", job.FileID.String(), "error", err, "job-id", job.ID)
database.FailProcessingJob(job.ID, err)
return err
}
params.Macros, err = json.Marshal(olevbaResp.Macros)
if err != nil {
slog.Error("Error in MSOfficeProcessing while marshaling macros to json", "file-uuid", job.FileID.String(), "error", err, "job-id", job.ID)
database.FailProcessingJob(job.ID, err)
return err
}
err = database.InsertMSOfficeResults(params)
if err != nil {
database.FailProcessingJob(job.ID, err)
return err
}
return nil
}