58 lines
1.7 KiB
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
|
|
}
|