Files
trufflehog/pkg/engine/stdin.go
Tim StrazzereandGitHub 4cffadbd04 feat: allow input source from pipe (#4088)
* feat: allow input source from pipe

While performing a bit of experimentation,
I found it was easier to allow data to flow
from other segments of my machine via piping
it in, rather than flushing it to disk. This
can speed up the process when pre-processing
large amounts of data. This allow allowed me
to keep disk space low and just utilize a large
ram machine.

* (chore) update readme for new source pipe

* (fix) pipe -> stdin per PR
2025-05-23 09:53:20 -04:00

34 lines
1.1 KiB
Go

package engine
import (
"runtime"
"google.golang.org/protobuf/proto"
"google.golang.org/protobuf/types/known/anypb"
"github.com/trufflesecurity/trufflehog/v3/pkg/context"
"github.com/trufflesecurity/trufflehog/v3/pkg/pb/sourcespb"
"github.com/trufflesecurity/trufflehog/v3/pkg/sources"
"github.com/trufflesecurity/trufflehog/v3/pkg/sources/stdin"
)
// ScanStdinInput scans input that is piped into the application
func (e *Engine) ScanStdinInput(ctx context.Context, c sources.StdinConfig) (sources.JobProgressRef, error) {
connection := &sourcespb.Stdin{}
var conn anypb.Any
err := anypb.MarshalFrom(&conn, connection, proto.MarshalOptions{})
if err != nil {
ctx.Logger().Error(err, "failed to marshal stdin connection")
return sources.JobProgressRef{}, err
}
sourceName := "trufflehog - stdin"
sourceID, jobID, _ := e.sourceManager.GetIDs(ctx, sourceName, stdin.SourceType)
stdinSource := &stdin.Source{}
if err := stdinSource.Init(ctx, sourceName, jobID, sourceID, true, &conn, runtime.NumCPU()); err != nil {
return sources.JobProgressRef{}, err
}
return e.sourceManager.EnumerateAndScan(ctx, sourceName, stdinSource)
}