63 lines
1.8 KiB
Go
63 lines
1.8 KiB
Go
package capa
|
|
|
|
import (
|
|
"log/slog"
|
|
"net/url"
|
|
"net/http"
|
|
"fmt"
|
|
"io"
|
|
|
|
"git.jmbit.de/jmb/scanfile/server/internal/database"
|
|
"git.jmbit.de/jmb/scanfile/server/internal/sqlc"
|
|
"github.com/jackc/pgx/v5/pgtype"
|
|
"github.com/spf13/viper"
|
|
)
|
|
|
|
|
|
func CapaProcessing(job sqlc.ProcessingJob) error {
|
|
database.StartProcessingJob(job.ID)
|
|
capaBytes, err := CapaScan(job.FileID)
|
|
if err != nil {
|
|
database.FailProcessingJob(job.ID, err)
|
|
slog.Error("Error processing file", "file-uuid", job.FileID.String(), "error", err)
|
|
return err
|
|
}
|
|
var params sqlc.InsertFileCapaParams
|
|
params.FileID = job.FileID
|
|
params.Data = capaBytes
|
|
err = database.InsertFileCapa(params)
|
|
if err != nil {
|
|
database.FailProcessingJob(job.ID, err)
|
|
slog.Error("Error processing file CAPA data", "file-uuid", job.FileID.String(), "error", err)
|
|
return err
|
|
}
|
|
|
|
database.FinishProcessingJob(job.ID)
|
|
return nil
|
|
}
|
|
|
|
func CapaScan(fileID pgtype.UUID) ([]byte, error) {
|
|
var by []byte
|
|
slog.Debug("Started Capa scan", "file-uuid", fileID.String())
|
|
capaUrl, err := url.Parse(viper.GetString("processing.capaurl"))
|
|
if err != nil {
|
|
slog.Error("Error in CapaScan parsing URL for ole service", "file-uuid", fileID.String(), "error", err)
|
|
return by, err
|
|
}
|
|
capaUrl.Path = "/capa/analyze"
|
|
capaUrl.RawQuery = fmt.Sprintf("file=%s", fileID.String())
|
|
capaResp, err := http.Get(capaUrl.String())
|
|
slog.Debug("CAPA scan request", "file-uuid", fileID.String(), "url", capaUrl.String(), "status-code", capaResp.StatusCode)
|
|
if err != nil {
|
|
slog.Error("Error in CapaScan getting capa result from service", "file-uuid", fileID.String(), "error", err)
|
|
}
|
|
defer capaResp.Body.Close()
|
|
body, err := io.ReadAll(capaResp.Body)
|
|
if err != nil {
|
|
slog.Error("Error in CapaScan parsing body", "file-uuid", fileID.String(), "error", err)
|
|
}
|
|
|
|
slog.Debug("CapaScan", "file-uuid", fileID.String(), "data", body)
|
|
return body, nil
|
|
}
|
|
|