scanfile/server/internal/processing/basic/basic.go

48 lines
1.5 KiB
Go

package basic
import (
"crypto/md5"
"crypto/sha256"
"log/slog"
"git.jmbit.de/jmb/scanfile/server/internal/database"
"git.jmbit.de/jmb/scanfile/server/internal/sqlc"
"git.jmbit.de/jmb/scanfile/server/internal/store"
)
// BasicProcessing() determines type agnostic information about the file
func BasicProcessing(job sqlc.ProcessingJob) error {
database.StartProcessingJob(job.ID)
fileBytes, err := store.GetFileBytes(job.FileID.String())
if err != nil {
database.FailProcessingJob(job.ID, err)
return err
}
sha256sum := sha256.Sum256(fileBytes)
md5sum := md5.Sum(fileBytes)
fileCmdResult, err := FileCmd(job.FileID.String())
if err != nil {
database.FailProcessingJob(job.ID, err)
slog.Error("Error processing file", "file-uuid", job.FileID.String(), "error", err)
return err
}
fileProperties := sqlc.InsertFilePropertiesParams{}
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
fileProperties.LibmagicApple.String = fileCmdResult.Apple
fileProperties.LibmagicExtension.String = fileCmdResult.Extension
err = database.InsertFileProperties(fileProperties)
if err != nil {
database.FailProcessingJob(job.ID, err)
slog.Error("Error inserting basic file properties into database", "file-uuid", job.FileID.String(), "error", err)
return err
}
return nil
}