From 395ec12ad798ad113d4e6d0663983b8caea58833 Mon Sep 17 00:00:00 2001 From: Aman Ullah Date: Fri, 3 Apr 2026 18:14:06 +0500 Subject: [PATCH 1/5] introduce OCR handler for supporting imgs and videos mime types --- main.go | 5 + pkg/feature/feature.go | 1 + pkg/handlers/handlers.go | 25 +++ pkg/handlers/ocr.go | 283 +++++++++++++++++++++++++ pkg/handlers/ocr_test.go | 187 ++++++++++++++++ pkg/handlers/testdata/image.png | Bin 0 -> 8015 bytes pkg/handlers/testdata/test_no_text.png | Bin 0 -> 925 bytes pkg/handlers/testdata/test_secret.png | Bin 0 -> 37106 bytes pkg/handlers/testdata/test_secret.webm | Bin 0 -> 302355 bytes 9 files changed, 501 insertions(+) create mode 100644 pkg/handlers/ocr.go create mode 100644 pkg/handlers/ocr_test.go create mode 100644 pkg/handlers/testdata/image.png create mode 100644 pkg/handlers/testdata/test_no_text.png create mode 100644 pkg/handlers/testdata/test_secret.png create mode 100644 pkg/handlers/testdata/test_secret.webm diff --git a/main.go b/main.go index d01a5fb50db9..9a64ec6748ee 100644 --- a/main.go +++ b/main.go @@ -92,6 +92,7 @@ var ( gitCloneTimeout = cli.Flag("git-clone-timeout", "Maximum time to spend cloning a repository, as a duration.").Hidden().Duration() skipAdditionalRefs = cli.Flag("skip-additional-refs", "Skip additional references.").Bool() userAgentSuffix = cli.Flag("user-agent-suffix", "Suffix to add to User-Agent.").String() + enableOCR = cli.Flag("enable-ocr", "Enable OCR scanning of images and video frames for secrets. Requires tesseract and ffmpeg.").Bool() gitScan = cli.Command("git", "Find credentials in git repositories.") gitScanURI = gitScan.Arg("uri", "Git repository URL. https://, file://, or ssh:// schema expected.").Required().String() @@ -506,6 +507,10 @@ func run(state overseer.State, logSync func() error) { feature.UserAgentSuffix.Store(*userAgentSuffix) } + if *enableOCR { + feature.EnableOCR.Store(true) + } + // OSS Default APK handling on feature.EnableAPKHandler.Store(true) diff --git a/pkg/feature/feature.go b/pkg/feature/feature.go index 080788c0218c..84e265959411 100644 --- a/pkg/feature/feature.go +++ b/pkg/feature/feature.go @@ -15,6 +15,7 @@ var ( UseGitMirror atomic.Bool GitlabProjectsPerPage atomic.Int64 UseGithubGraphQLAPI atomic.Bool // use github graphql api to fetch issues, pr's and comments + EnableOCR atomic.Bool ) type AtomicString struct { diff --git a/pkg/handlers/handlers.go b/pkg/handlers/handlers.go index 4f98eeef3342..4219d18e672e 100644 --- a/pkg/handlers/handlers.go +++ b/pkg/handlers/handlers.go @@ -224,6 +224,7 @@ const ( rpmHandlerType handlerType = "rpm" apkHandlerType handlerType = "apk" defaultHandlerType handlerType = "default" + ocrHandlerType handlerType = "ocr" apkExt = ".apk" ) @@ -264,6 +265,15 @@ const ( jarMime mimeType = "application/java-archive" msgMime mimeType = "application/vnd.ms-outlook" docMime mimeType = "application/msword" + + // Image MIME types for OCR. + pngMime mimeType = "image/png" + jpegMime mimeType = "image/jpeg" + + // Video MIME types for OCR. + mp4Mime mimeType = "video/mp4" + mkvMime mimeType = "video/x-matroska" + webmMime mimeType = "video/webm" ) // skipArchiverMimeTypes is a set of MIME types that should bypass archiver library processing because they are either @@ -301,6 +311,11 @@ var skipArchiverMimeTypes = map[mimeType]struct{}{ apkMime: {}, msgMime: {}, docMime: {}, + pngMime: {}, + jpegMime: {}, + mp4Mime: {}, + mkvMime: {}, + webmMime: {}, } // selectHandler dynamically selects and configures a FileHandler based on the provided |mimetype| type and archive flag. @@ -320,6 +335,16 @@ func selectHandler(mimeT mimeType, isGenericArchive bool) FileHandler { return newRPMHandler() case apkMime: return newAPKHandler() + case pngMime, jpegMime: + if feature.EnableOCR.Load() { + return newOCRHandler() + } + return newDefaultHandler(defaultHandlerType) + case mp4Mime, mkvMime, webmMime: + if feature.EnableOCR.Load() { + return newOCRHandler() + } + return newDefaultHandler(defaultHandlerType) default: if isGenericArchive { return newArchiveHandler() diff --git a/pkg/handlers/ocr.go b/pkg/handlers/ocr.go new file mode 100644 index 000000000000..7ab496b70ba6 --- /dev/null +++ b/pkg/handlers/ocr.go @@ -0,0 +1,283 @@ +package handlers + +import ( + "bytes" + "fmt" + "image" + "image/color" + _ "image/jpeg" // Register JPEG decoder for image.Decode. + "image/png" + "io" + "os" + "os/exec" + "path/filepath" + "sort" + "strings" + "time" + + logContext "github.com/trufflesecurity/trufflehog/v3/pkg/context" + "github.com/trufflesecurity/trufflehog/v3/pkg/feature" +) + +const ( + maxOCRImageSize = 50 * 1024 * 1024 // 50 MB + maxOCRVideoSize = 500 * 1024 * 1024 // 500 MB + frameIntervalSeconds = 1 // Extract 1 frame per second. +) + +// ocrHandler extracts text from images and video frames using external +// tools (tesseract for OCR, ffmpeg for video frame extraction) and feeds +// the extracted text into the standard text processing pipeline. +type ocrHandler struct{ *defaultHandler } + +var _ FileHandler = (*ocrHandler)(nil) + +func newOCRHandler() *ocrHandler { + return &ocrHandler{defaultHandler: newDefaultHandler(ocrHandlerType)} +} + +// HandleFile processes image and video files by extracting text via OCR. +func (h *ocrHandler) HandleFile(ctx logContext.Context, input fileReader) chan DataOrErr { + dataOrErrChan := make(chan DataOrErr, defaultBufferSize) + + if !feature.EnableOCR.Load() { + close(dataOrErrChan) + return dataOrErrChan + } + + go func() { + defer close(dataOrErrChan) + defer func() { + if r := recover(); r != nil { + var panicErr error + if e, ok := r.(error); ok { + panicErr = e + } else { + panicErr = fmt.Errorf("panic occurred: %v", r) + } + dataOrErrChan <- DataOrErr{ + Err: fmt.Errorf("%w: panic error: %v", ErrProcessingFatal, panicErr), + } + } + }() + + start := time.Now() + + mimeStr := mimeType(input.mime.String()) + var text string + var err error + + switch { + case isImageMime(mimeStr): + text, err = h.ocrImage(ctx, input) + case isVideoMime(mimeStr): + text, err = h.ocrVideo(ctx, input) + default: + err = fmt.Errorf("unsupported MIME type for OCR: %s", mimeStr) + } + + if err != nil { + dataOrErrChan <- DataOrErr{ + Err: fmt.Errorf("%w: OCR processing error: %v", ErrProcessingWarning, err), + } + h.measureLatencyAndHandleErrors(ctx, start, err, dataOrErrChan) + return + } + + if strings.TrimSpace(text) == "" { + h.measureLatencyAndHandleErrors(ctx, start, nil, dataOrErrChan) + return + } + + textReader := mimeTypeReader{ + mimeExt: ".txt", + mimeName: textMime, + Reader: strings.NewReader(text), + } + + if err := h.handleNonArchiveContent(ctx, textReader, dataOrErrChan); err != nil { + h.measureLatencyAndHandleErrors(ctx, start, err, dataOrErrChan) + return + } + + h.metrics.incFilesProcessed() + h.measureLatencyAndHandleErrors(ctx, start, nil, dataOrErrChan) + }() + + return dataOrErrChan +} + +// ocrImage extracts text from a single image using tesseract. +func (h *ocrHandler) ocrImage(ctx logContext.Context, input io.Reader) (string, error) { + if _, err := exec.LookPath("tesseract"); err != nil { + return "", fmt.Errorf("tesseract not found in PATH: %w", err) + } + + imgData, err := io.ReadAll(io.LimitReader(input, maxOCRImageSize+1)) + if err != nil { + return "", fmt.Errorf("error reading image data: %w", err) + } + if len(imgData) > maxOCRImageSize { + ctx.Logger().V(2).Info("skipping image: size exceeds OCR limit", "limit", maxOCRImageSize) + return "", nil + } + + processedData, err := preprocessImage(imgData) + if err != nil { + ctx.Logger().V(3).Info("image preprocessing failed, using original", "error", err) + processedData = imgData + } + + tmpFile, err := os.CreateTemp("", "trufflehog-ocr-*.png") + if err != nil { + return "", fmt.Errorf("error creating temp file: %w", err) + } + defer os.Remove(tmpFile.Name()) + + if _, err := tmpFile.Write(processedData); err != nil { + tmpFile.Close() + return "", fmt.Errorf("error writing temp file: %w", err) + } + tmpFile.Close() + + var stdout, stderr bytes.Buffer + cmd := exec.CommandContext(ctx, "tesseract", + tmpFile.Name(), "stdout", + "--psm", "6", + "--dpi", "300", + "-c", "preserve_interword_spaces=1", + "-c", "textord_space_size_is_variable=0", + ) + cmd.Stdout = &stdout + cmd.Stderr = &stderr + + if err := cmd.Run(); err != nil { + return "", fmt.Errorf("tesseract failed: %w (stderr: %s)", err, stderr.String()) + } + + return stdout.String(), nil +} + +// ocrVideo extracts text from video frames using ffmpeg for frame extraction +// and tesseract for OCR on each frame. +func (h *ocrHandler) ocrVideo(ctx logContext.Context, input io.Reader) (string, error) { + if _, err := exec.LookPath("ffmpeg"); err != nil { + return "", fmt.Errorf("ffmpeg not found in PATH: %w", err) + } + if _, err := exec.LookPath("tesseract"); err != nil { + return "", fmt.Errorf("tesseract not found in PATH: %w", err) + } + + videoData, err := io.ReadAll(io.LimitReader(input, maxOCRVideoSize+1)) + if err != nil { + return "", fmt.Errorf("error reading video data: %w", err) + } + if len(videoData) > maxOCRVideoSize { + ctx.Logger().V(2).Info("skipping video: size exceeds OCR limit", "limit", maxOCRVideoSize) + return "", nil + } + + tmpVideo, err := os.CreateTemp("", "trufflehog-ocr-video-*") + if err != nil { + return "", fmt.Errorf("error creating temp video file: %w", err) + } + defer os.Remove(tmpVideo.Name()) + + if _, err := tmpVideo.Write(videoData); err != nil { + tmpVideo.Close() + return "", fmt.Errorf("error writing temp video file: %w", err) + } + tmpVideo.Close() + + tmpFrameDir, err := os.MkdirTemp("", "trufflehog-ocr-frames-*") + if err != nil { + return "", fmt.Errorf("error creating temp frame dir: %w", err) + } + defer os.RemoveAll(tmpFrameDir) + + // Extract frames at 1fps. + var stderr bytes.Buffer + cmd := exec.CommandContext(ctx, "ffmpeg", + "-i", tmpVideo.Name(), + "-vf", fmt.Sprintf("fps=%d", frameIntervalSeconds), + "-vsync", "vfr", + filepath.Join(tmpFrameDir, "frame_%04d.png"), + ) + cmd.Stderr = &stderr + + if err := cmd.Run(); err != nil { + return "", fmt.Errorf("ffmpeg frame extraction failed: %w (stderr: %s)", err, stderr.String()) + } + + frames, err := filepath.Glob(filepath.Join(tmpFrameDir, "frame_*.png")) + if err != nil { + return "", fmt.Errorf("error listing extracted frames: %w", err) + } + sort.Strings(frames) + + var allText strings.Builder + for _, framePath := range frames { + frameFile, err := os.Open(framePath) + if err != nil { + ctx.Logger().V(3).Info("skipping frame: unable to open", "path", framePath, "error", err) + continue + } + + text, err := h.ocrImage(ctx, frameFile) + frameFile.Close() + if err != nil { + ctx.Logger().V(3).Info("skipping frame: OCR failed", "path", framePath, "error", err) + continue + } + + if trimmed := strings.TrimSpace(text); trimmed != "" { + if allText.Len() > 0 { + allText.WriteString("\n") + } + allText.WriteString(trimmed) + } + } + + return allText.String(), nil +} + +func isImageMime(m mimeType) bool { + return m == pngMime || m == jpegMime +} + +func isVideoMime(m mimeType) bool { + return m == mp4Mime || m == mkvMime || m == webmMime +} + +const preprocessScaleFactor = 2 + +// preprocessImage decodes an image, converts it to grayscale, and scales it up +// by 2x to improve tesseract accuracy on small or low-contrast text. +// Falls back gracefully — callers should use the original data if this errors. +func preprocessImage(data []byte) ([]byte, error) { + src, _, err := image.Decode(bytes.NewReader(data)) + if err != nil { + return nil, fmt.Errorf("decoding image: %w", err) + } + + bounds := src.Bounds() + w, h := bounds.Dx()*preprocessScaleFactor, bounds.Dy()*preprocessScaleFactor + + gray := image.NewGray(image.Rect(0, 0, w, h)) + for y := 0; y < h; y++ { + srcY := bounds.Min.Y + y/preprocessScaleFactor + for x := 0; x < w; x++ { + srcX := bounds.Min.X + x/preprocessScaleFactor + r, g, b, _ := src.At(srcX, srcY).RGBA() + // ITU-R BT.601 luminance. + lum := (19595*r + 38470*g + 7471*b + 1<<15) >> 24 + gray.SetGray(x, y, color.Gray{Y: uint8(lum)}) + } + } + + var buf bytes.Buffer + if err := png.Encode(&buf, gray); err != nil { + return nil, fmt.Errorf("encoding preprocessed image: %w", err) + } + return buf.Bytes(), nil +} diff --git a/pkg/handlers/ocr_test.go b/pkg/handlers/ocr_test.go new file mode 100644 index 000000000000..b3dde94a4e24 --- /dev/null +++ b/pkg/handlers/ocr_test.go @@ -0,0 +1,187 @@ +package handlers + +import ( + "os" + "os/exec" + "testing" + "time" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/trufflesecurity/trufflehog/v3/pkg/context" + "github.com/trufflesecurity/trufflehog/v3/pkg/feature" +) + +func skipIfNoTesseract(t *testing.T) { + t.Helper() + if _, err := exec.LookPath("tesseract"); err != nil { + t.Skip("tesseract not found in PATH, skipping OCR test") + } +} + +func skipIfNoFFmpeg(t *testing.T) { + t.Helper() + if _, err := exec.LookPath("ffmpeg"); err != nil { + t.Skip("ffmpeg not found in PATH, skipping video OCR test") + } +} + +// TestOCRHandlerImage verifies that the OCR handler extracts text from an image. +// Expects testdata/test_secret.png to contain visible text (e.g., a fake AWS key). +func TestOCRHandlerImage(t *testing.T) { + skipIfNoTesseract(t) + feature.EnableOCR.Store(true) + defer feature.EnableOCR.Store(false) + + file, err := os.Open("testdata/image.png") + require.NoError(t, err) + defer file.Close() + + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + defer cancel() + + rdr, err := newFileReader(ctx, file) + require.NoError(t, err) + defer rdr.Close() + + handler := newOCRHandler() + dataOrErrChan := handler.HandleFile(context.AddLogger(ctx), rdr) + + count := 0 + for dataOrErr := range dataOrErrChan { + if dataOrErr.Err != nil { + t.Logf("received error: %v", dataOrErr.Err) + continue + } + count++ + assert.NotEmpty(t, dataOrErr.Data) + } + + assert.Greater(t, count, 0, "expected at least one chunk of OCR text from test_secret.png") +} + +// TestOCRHandlerImageNoText verifies that a blank image produces no chunks. +// Expects testdata/test_no_text.png to be an image with no readable text. +func TestOCRHandlerImageNoText(t *testing.T) { + skipIfNoTesseract(t) + feature.EnableOCR.Store(true) + defer feature.EnableOCR.Store(false) + + file, err := os.Open("testdata/test_no_text.png") + require.NoError(t, err) + defer file.Close() + + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + defer cancel() + + rdr, err := newFileReader(ctx, file) + require.NoError(t, err) + defer rdr.Close() + + handler := newOCRHandler() + dataOrErrChan := handler.HandleFile(context.AddLogger(ctx), rdr) + + count := 0 + for dataOrErr := range dataOrErrChan { + if dataOrErr.Err != nil { + continue + } + count++ + } + + assert.Equal(t, 0, count, "expected no chunks from a blank image") +} + +// TestOCRHandlerDisabled verifies that the handler produces no output when the feature flag is off. +func TestOCRHandlerDisabled(t *testing.T) { + feature.EnableOCR.Store(false) + + file, err := os.Open("testdata/test_secret.png") + require.NoError(t, err) + defer file.Close() + + ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) + defer cancel() + + rdr, err := newFileReader(ctx, file) + require.NoError(t, err) + defer rdr.Close() + + handler := newOCRHandler() + dataOrErrChan := handler.HandleFile(context.AddLogger(ctx), rdr) + + count := 0 + for range dataOrErrChan { + count++ + } + + assert.Equal(t, 0, count, "expected no chunks when OCR is disabled") +} + +// TestOCRHandlerVideo verifies that the OCR handler extracts text from video frames. +// Expects testdata/test_secret.webm to be a short video with visible text in at least one frame. +func TestOCRHandlerVideo(t *testing.T) { + skipIfNoTesseract(t) + skipIfNoFFmpeg(t) + feature.EnableOCR.Store(true) + defer feature.EnableOCR.Store(false) + + file, err := os.Open("testdata/test_secret.webm") + require.NoError(t, err) + defer file.Close() + + ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) + defer cancel() + + rdr, err := newFileReader(ctx, file) + require.NoError(t, err) + defer rdr.Close() + + handler := newOCRHandler() + dataOrErrChan := handler.HandleFile(context.AddLogger(ctx), rdr) + + count := 0 + for dataOrErr := range dataOrErrChan { + if dataOrErr.Err != nil { + t.Logf("received error: %v", dataOrErr.Err) + continue + } + count++ + assert.NotEmpty(t, dataOrErr.Data) + } + + assert.Greater(t, count, 0, "expected at least one chunk of OCR text from test_secret.mp4") +} + +// TestOCRMimeTypeRouting verifies that selectHandler routes image/video MIME types +// to the OCR handler when the feature flag is enabled, and to the default handler when disabled. +func TestOCRMimeTypeRouting(t *testing.T) { + tests := []struct { + name string + mime mimeType + ocrEnabled bool + wantOCR bool + }{ + {"png with OCR enabled", pngMime, true, true}, + {"jpeg with OCR enabled", jpegMime, true, true}, + {"mp4 with OCR enabled", mp4Mime, true, true}, + {"mkv with OCR enabled", mkvMime, true, true}, + {"webm with OCR enabled", webmMime, true, true}, + {"png with OCR disabled", pngMime, false, false}, + {"jpeg with OCR disabled", jpegMime, false, false}, + {"mp4 with OCR disabled", mp4Mime, false, false}, + {"text/plain always default", textMime, true, false}, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + feature.EnableOCR.Store(tt.ocrEnabled) + defer feature.EnableOCR.Store(false) + + handler := selectHandler(tt.mime, false) + _, isOCR := handler.(*ocrHandler) + assert.Equal(t, tt.wantOCR, isOCR) + }) + } +} diff --git a/pkg/handlers/testdata/image.png b/pkg/handlers/testdata/image.png new file mode 100644 index 0000000000000000000000000000000000000000..5fe78c4aea27bbd50a17649af45623785cf945c0 GIT binary patch literal 8015 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 literal 0 HcmV?d00001 diff --git a/pkg/handlers/testdata/test_no_text.png b/pkg/handlers/testdata/test_no_text.png new file mode 100644 index 0000000000000000000000000000000000000000..afd85eeb77ca35a1a93d49686948f00b2659ba95 GIT binary patch literal 925 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
    $;_9WKE^!pL{GT_3U_FneI_BrAz3fUPMVJ9BQ3I zH$w-ztn3Yb$lqCg!==coS22XNBXz$*x3a;94sk!6)JeX!GM~kA&5HZmF%)mc`g1{T z-psNuMt3suhO=G^KQ%k;x%s85!-(Gx(_vB;+#VwB)UT=Xe1cL~c!l-jc{7K6O7cZx zgeCT&a~Us_BnyE9gZ;(Cp=x3x*Is=wq`+^N?4m1cuSbFno_2gbaxKQKfv-r%Y}qr% z)^3l^VN|kC3}1Lh?5kRJo!qNqs8$`eUm-RNQ6qt=(~{M>=TGFSjWPtTazr|$?!#6X z+ff413|s z30ck^CfuzNh|joSxG%FWSBF5GLAz=f4z#4I`)0nCcm2c?CS`dFVEscN9!AJ}s7;w> zPv#T{hSzS{Z()Iytm8CjXY?RC>yd{Jp_y} zq8CK+{6+p1C&|KdAeb(5v79PTH$_R)Hpo&X5&-m<$(ih<8}`l9)h0lIk2n^f2dd%@ zo(WKM!BesK!C{}g%>v!{qa9d5u;sK5;*XsK5knpTivK`-cLlIz7(@g8J#-j=b;Esv zb*Xn{ruF6jkoPP0lNCPYM%YvBH|Yo)Od!yY=t<@gmZ635ktDDVp@$$Gv=#*#Vc$e;lT54kpCV z?|xy`j)$>tmG`Mvl5k$!a}v*u#Y@t-eluPYYLZR$pVRU3 zoWFjYZur!~wM^vk!h7w35-T3o*h}J=BKfCb4wD(T2m9DfXRmuCQO8p5e{)zk9(O8d ziXbZmU1PIq^!G~Rk?m}}mD(%CQGenp;rhjByLfZlty2fAl|GXOCIfd+Y`eFcEJ%ye(6!$BC_&ce#4Y3f&!40w?{z&4G zMCmv_-Vei#8Ha8den6T2F1^J7!&Fr-c-(dkg-2ogVngBGE}HOrhNdv|+n;YF;Dtv! z`;P75M`G6CK|o0{`A`RybfI%V5mMP43Z@iG>&3E3f<9?4Pk47Mq{ z{yS6^KVXHrI5go+33wAqD;3p2By-KSM!&AQ>PIUy3+>Yv@`vrh z-Z-uzFGMNF6xI+D;?>JQ&#;pQa6bx^zkTN|7km{R0r)$#A)x6#7;>x`z)7HToer=+ zUFm6XR<_etU>6{|<|d-ym}Cif_Choa(>393;f`py4LoH>8~9fTxc8jMD~z=uL1Zf$ zizDvs+7QyODquYUHI^13I0bvoI3+5mK<8PpJ;CTok8gx*+V*eSjYSSowkv{%-p-Mt@~G$%aD3nUR4;JQfo-qn`u7zX6& zX?K^d;Y|XYAvB=#x^TC7CCo%n1^2|B#c~uNl-&pmvvxyO7!-vv|8Xpe>B6Gxg#A*D z-B&+|S=oT!i!QF4j{Z|ZvQv`qr*2NgzDdf>P`Sekme}9#B0kUT*%R8@YHq3<@#klb zC~isc)n!w1bMx#@4~3xtFpxs6U*1f~kl4c5e>#_>6- zq^w`1SBB}zELC(9jr3jM?f!I}ELs0F4}X|u)Jv8;=O{KP`4GgP=1}cOR|#>+bmGq( zZMsQH{`x+;>MyWb-MQD@f>UfzN)W811El5YL z2P>4BKizcipGeju(C;-PZoCUV8I$mH5btg6`yb8KO<hZjXROjIzy^Xq7%YBe{ zaJ2izL1mv=)Sth^`Q?rrwm#^+YeVs1l3~W#-iMt;!NUxnrg<*YCLe@<3Go#yu=P|) ziBo#j<6isO@IifgAww>bhdb>>?`LE4-P44_BpvO6-l1}3c}(EdL|2Nnk4TTp4dT-4 zxXAmaxn3{!3d->v&@9+Dq!u+B61T9V9Q&Zc>uaixDSygC#?<0Uq5h<~8&^F@ikaN? zet8`_U+VSuze_4qJg8tu$a?3Um&N(sSS`$*_xQofSY6(e+ZES>l?72n8X}!tXPpu2 z7A?ZWfDGsH^@1Go0bIiuM9J+8pQY+OiPZSlx z>iyeztV}|3vD1^p^deJ8N>J{KuVXRvwu`vJ(4~?zO(QEPb7xV90v!uOtz8pQY$9*e z!jxL8tnN~_vYO$5@;Wn33Og2oVCb6-*t(@(>Ikgx_ zyAU4_)T_lfG3=`E)ZqEHdS<%ko8W8I37ia=f}vE#X-MU-=SQq1dxmXGvhT~0?WER* zCy2hg$SC5_R?6Vfx+}X`{+a z%>Ku|nTCe|5HtP)4xv<5Pz6!7A`gF{3kl{J1m>7ba~s`6ul@~aC)f(mN|B8F=!!f# z;OqX3ve=$RGAGwWBbn=N99h!5D-iEoy2E-64uZ+a+~7+WE;Of`u)aEFI5hPy1X&LP z(q}lg%|nj;zaYq+Ua4k&^vyiV4aSrtbTJH{w3fWnAsUYF3Z0aOP6kX@IG(Pd58g)8 zJFleQhoeAvInSP*6u7m3*b>3nkv^Z3!eRF+VEt-BZwvQQ=L;a1EdTg}lW!t;#4d zodKy;8^)&8*tq4%swaJ_`yh8sDchsI)`VMdP!{{!C5FLcxBX6Km2$B>C|!Uy7?-GD zV(w{`2Qa*uHgFti-;9cWdP7WLK)h7t;+oD73+G*RRW0O7ZUpNBay(^ly2b8-IK$jy z`)i*C5%+JQ+2)*TS}6kq_i9_D6fSX`iaBrLNhs-Q6ee6ePOKi0=8P?EHF3Doc9UB z;eLolp$Uy1mzW2T?Kk0cx|b;I)(vmHd;qq{m6j|u5|{V^z}56{s5Td@!7iw0@Uz}# z0V~byVDP3|x==cf-OKR7Yv54acMW3z695ieNaePVhS`C)^kc2TU$ttA0}y%Y`i z^{s}&zkhB2b)J6v0z9bS{80Tq09Y;qH}C^4_zQrX-D2aQ1_19isffQG)Xl7YLW!yG zEp<9s)8n4)dka5Asmy5>$Ox%)W1KXFve^l?XlsX3<8F~rFbK?XfDB_m`PWmQ65yva zF!DzzY$EW?md0;Nz__AcMIa9<*yDZI^bVGRNQWI&2fNAI|He^yiA?e1v<_}iob z{Pa4&(BR)<&HXKWnPo567vy^!3u@C`*l|T)xL%f)%cN>^Ams(ss#5^*%2~p{x45Xy zp|7SUmyq>>D$@`?WE&5*Mn}d|4(v8E8K-2L#hGWbH>_IG|K3brt#yr8Z}&BI1hHGjav63G@Rq3QWz}-NR<%OZC#;i+q$kq%UjT0c$=L z%|J+okcYU5v$A}Nnn+q$zvce%ZWxxZu6I^w>{&*mryfqSJ&TpgD&nL61dQLxGyGs# zuz2n`i9#xq6vX{c-lf}*>H2RW;8yXs`rl)~*`G0iQjgh7I$63fO~A`p^&Pke zg?Z-g?ARWH16@{L1^}MiuYbIpvRHrMsj%q-w&ySp%^|b(u7|9a1y5I{&A;&$#IZ$H zQo|YVLA(}V9ujx*nLt0q{?H|I!{{f{=lgnN}4EXTb~mD|k2W z1MqDI(_jY@pPQ+Y8iVr50)j*MOr9Nwir}COI6MyO86yp?0`S#s?VEW*UJF!m$fYu~ z6i^Y7=D@<7#~Gvl0ffXNgdM5c7nB;<|7DEy08}UJwUg}RLl{}gP@2LM+uQuHROH?sE8iz%FJ`ziedN^ z3{4VT=EHG;uJ-^gginB%EX4^ zR~C3yrz>j^l{&J7)oDNUE3 z%n0nrJK}yZdoKx(z=8*XRMBB%HG`B2BXw;UPoMPKkTK-X2nzRU>}Ya6!A>bl;aApS zqaAuPka8;-VU0lRYe~ff9Pn3~JN{^pQ7(M%z7>{ULyr)~D@!XZJp-S9Py26?$!{sV zf|B$ydXY^vmY2)W_?=6R&2U};bb36^i>{94?_@uLj_s`Oml@@S&6$-a_#W9)wtF@^ zZZUek0MipmWio-*|7EgtoQD|>_C>}T--iEuexN8w2uXmT|IuV^gMUug#jFF9fr%C2 z=-w&AztBvSEAunFF+oAe20Du&jDHr{$maKhrtcN zK5SG+!*^)FnB4**oUcs4;5;gTH=hE+Vk=`T}%0ZvlP63&ca|L2A)3sBDV>;on<)U--gQP1r@}PFun7AmX&`s9fwp#wSDI=@HPvt1hvn=ZvLJmR6p}3ilAzIO__HY(j22*D zu+i}QYZ7n-=gSA5V%>~bx|Vq59hQ%IGk4@i+$c{L`=V^H*#s&0OUlKVAvuW57`>Q> zfYp-Aku{-x4##^0u<*GPQzP&7?~>u^iRIYA>%{ zH;GI?T*}HMX_{&+5b9m(f41yLDbE`vCCSUKfuen+#p8NHg34t~!-@sZe-eUe>vQDL zV>Fl1j^9bXxn7g1nqKv}2O_yOgy-!9Pf(u8LaIXf;S8sboBbR^c4)ou{OP`GQGk9j zBbm1V$!zuCmN^Pzd9HF=xT(vk7D^$!>RW(R4mu0J8 zJi<*h=a# zU8i?^6Ez~cUY~OLGztiC>3l{qGaacWMc#e3}U(KCvMyxqEB?Tol3UWQ7 zlXso_Jw_7gj5Xq=;o>Zr%t-gAeKU{CM_ri`mc+=Zl0FQ!kg)?jeN8burle`77P7?X zuw$yQR8y$*(RMO)blfgWfHixN=~mZMI)96h(X_9VQ7k@nA&XAx<6#^l&Ef4#!LAd% zuf@q zbhG2~o`X^h5#Xv(rmc`F=`rCK*!<(+ohNj&%JX0ugzl@PtCZy-L0xO>HTX0RssE>bDOMD!f2@HCM1fGPcz%o8fxd5MeYdI2safXaf ztE19M1MOtIhDBwj8!n|XD&ZB%N|?Z3B*0ZAsd*(KSXYoGl-J#qQX^V%sTcVGE0%IG z86`h$?`_r4yxFFZbIx_T{ZoqZsM2O�%nX&CZ3bq*9Yj*5&%Hw_@ol7d<%Ar6~J; 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 ^PoUqvyn2G{u@_=2#LOc*3cyb~LTM}Ac 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 MKVe~WA+VGG576@pvH$=8 literal 0 HcmV?d00001 From e54f4b428d80192d72db328d4f030e992518908e Mon Sep 17 00:00:00 2001 From: Mustansir Muzaffar Date: Fri, 3 Apr 2026 21:05:20 +0500 Subject: [PATCH 2/5] use better model for accurate ocr --- README.md | 44 ++++++ pkg/handlers/ocr.go | 210 +++++++++++++++++++++++--- pkg/handlers/ocr_test.go | 6 +- pkg/handlers/testdata/image.png | Bin 8015 -> 0 bytes pkg/handlers/testdata/test_secret.png | Bin 37106 -> 35533 bytes 5 files changed, 238 insertions(+), 22 deletions(-) delete mode 100644 pkg/handlers/testdata/image.png diff --git a/README.md b/README.md index 20f309afec1e..7215311382c1 100644 --- a/README.md +++ b/README.md @@ -384,6 +384,50 @@ trufflehog huggingface --model --include-discussions --include-prs aws s3 cp s3://example/gzipped/data.gz - | gunzip -c | trufflehog stdin ``` +## 19. Scan image and video files for secrets (OCR) + +TruffleHog can extract text from **PNG/JPEG images** and **MP4/MKV/WebM video frames** using OCR, then scan that text for secrets. This is useful for catching credentials embedded in screenshots, screen recordings, or documentation images. + +### Prerequisites + +- **Tesseract OCR** — the OCR engine used to extract text from images +- **FFmpeg** — required only for video files (extracts frames before OCR) + +```bash +# Ubuntu / Debian +sudo apt install tesseract-ocr ffmpeg + +# macOS +brew install tesseract ffmpeg +``` + +### Improved accuracy with tessdata-best (recommended) + +By default Tesseract ships with a fast but less accurate model. For secret scanning — where a single misread character invalidates a match — download the high-quality `tessdata-best` model: + +```bash +mkdir -p ~/.tessdata-best +curl -L -o ~/.tessdata-best/eng.traineddata \ + https://github.com/tesseract-ocr/tessdata_best/raw/main/eng.traineddata +``` + +TruffleHog automatically detects and uses `~/.tessdata-best` when present. You can also point to any custom tessdata directory via the `TESSDATA_PREFIX` environment variable. + +### Usage + +Enable OCR with the `--enable-ocr` flag when scanning any source that may contain image or video files: + +```bash +# Scan a filesystem path containing images +trufflehog filesystem /path/to/screenshots --enable-ocr + +# Scan a git repo whose history may include committed images +trufflehog git https://github.com/example/repo --enable-ocr + +# Scan an S3 bucket for secrets in images +trufflehog s3 --bucket=my-bucket --enable-ocr --results=verified +``` + # :question: FAQ - All I see is `🐷🔑🐷 TruffleHog. Unearth your secrets. 🐷🔑🐷` and the program exits, what gives? diff --git a/pkg/handlers/ocr.go b/pkg/handlers/ocr.go index 7ab496b70ba6..25a1b1caa49a 100644 --- a/pkg/handlers/ocr.go +++ b/pkg/handlers/ocr.go @@ -107,7 +107,25 @@ func (h *ocrHandler) HandleFile(ctx logContext.Context, input fileReader) chan D return dataOrErrChan } -// ocrImage extracts text from a single image using tesseract. +// tessdataDir returns the tessdata directory to use, preferring tessdata-best +// models when available. Resolution order: +// 1. TESSDATA_PREFIX environment variable (explicit user override) +// 2. ~/.tessdata-best (conventional install location for tessdata-best) +// 3. Empty string → let Tesseract use its compiled-in default +func tessdataDir() string { + if v := os.Getenv("TESSDATA_PREFIX"); v != "" { + return v + } + if home, err := os.UserHomeDir(); err == nil { + p := filepath.Join(home, ".tessdata-best") + if _, err := os.Stat(filepath.Join(p, "eng.traineddata")); err == nil { + return p + } + } + return "" +} + +// ocrImage extracts text from a single image using Tesseract. func (h *ocrHandler) ocrImage(ctx logContext.Context, input io.Reader) (string, error) { if _, err := exec.LookPath("tesseract"); err != nil { return "", fmt.Errorf("tesseract not found in PATH: %w", err) @@ -140,14 +158,20 @@ func (h *ocrHandler) ocrImage(ctx logContext.Context, input io.Reader) (string, } tmpFile.Close() - var stdout, stderr bytes.Buffer - cmd := exec.CommandContext(ctx, "tesseract", - tmpFile.Name(), "stdout", - "--psm", "6", - "--dpi", "300", + args := []string{tmpFile.Name(), "stdout", "--oem", "1", "--psm", "6", "--dpi", "300", "-c", "preserve_interword_spaces=1", "-c", "textord_space_size_is_variable=0", - ) + // Restrict to printable ASCII — secrets are always ASCII and this prevents + // Tesseract from substituting Unicode lookalikes (curly quotes, em-dash, etc.) + // which would cause secret patterns to fail to match. + "-c", `tessedit_char_whitelist= !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_` + "`" + `abcdefghijklmnopqrstuvwxyz{|}~`, + } + if dir := tessdataDir(); dir != "" { + args = append(args, "--tessdata-dir", dir) + } + + var stdout, stderr bytes.Buffer + cmd := exec.CommandContext(ctx, "tesseract", args...) cmd.Stdout = &stdout cmd.Stderr = &stderr @@ -249,10 +273,20 @@ func isVideoMime(m mimeType) bool { return m == mp4Mime || m == mkvMime || m == webmMime } -const preprocessScaleFactor = 2 - -// preprocessImage decodes an image, converts it to grayscale, and scales it up -// by 2x to improve tesseract accuracy on small or low-contrast text. +const preprocessScaleFactor = 3 + +// preprocessImage prepares a screenshot for Tesseract OCR of typed/code text. +// +// Pipeline: +// 1. Convert to grayscale (ITU-R BT.601 luminance). +// 2. Stretch contrast so the full 0–255 range is used. +// 3. Upscale 3× with bilinear interpolation — more pixels per character +// stroke lets Tesseract resolve details that distinguish l/1/I and 0/O. +// 4. Binarize with Otsu's method — eliminates anti-aliasing gray zones that +// cause similar-character confusions like L→1 or 9→0. +// 5. Auto-invert if the background is dark (terminal/dark-theme screenshots) +// because Tesseract's LSTM engine expects dark text on a light background. +// // Falls back gracefully — callers should use the original data if this errors. func preprocessImage(data []byte) ([]byte, error) { src, _, err := image.Decode(bytes.NewReader(data)) @@ -261,23 +295,161 @@ func preprocessImage(data []byte) ([]byte, error) { } bounds := src.Bounds() - w, h := bounds.Dx()*preprocessScaleFactor, bounds.Dy()*preprocessScaleFactor + srcW, srcH := bounds.Dx(), bounds.Dy() - gray := image.NewGray(image.Rect(0, 0, w, h)) - for y := 0; y < h; y++ { - srcY := bounds.Min.Y + y/preprocessScaleFactor - for x := 0; x < w; x++ { - srcX := bounds.Min.X + x/preprocessScaleFactor - r, g, b, _ := src.At(srcX, srcY).RGBA() + // Step 1: grayscale at original resolution. + gray := image.NewGray(image.Rect(0, 0, srcW, srcH)) + for y := 0; y < srcH; y++ { + for x := 0; x < srcW; x++ { + r, g, b, _ := src.At(bounds.Min.X+x, bounds.Min.Y+y).RGBA() // ITU-R BT.601 luminance. lum := (19595*r + 38470*g + 7471*b + 1<<15) >> 24 gray.SetGray(x, y, color.Gray{Y: uint8(lum)}) } } + // Step 2: contrast normalization — stretch histogram to full 0–255 range. + gray = normalizeContrast(gray, srcW, srcH) + + // Step 3: upscale with bilinear interpolation. + dstW, dstH := srcW*preprocessScaleFactor, srcH*preprocessScaleFactor + scaled := image.NewGray(image.Rect(0, 0, dstW, dstH)) + for y := 0; y < dstH; y++ { + for x := 0; x < dstW; x++ { + scaled.SetGray(x, y, color.Gray{Y: bilinearSample(gray, srcW, srcH, x, y, dstW, dstH)}) + } + } + + // Step 4 & 5: Otsu binarization + auto-invert for dark backgrounds. + thresh := otsuThreshold(scaled, dstW, dstH) + out := binarizeAndNormalizeBg(scaled, thresh, dstW, dstH) + var buf bytes.Buffer - if err := png.Encode(&buf, gray); err != nil { + if err := png.Encode(&buf, out); err != nil { return nil, fmt.Errorf("encoding preprocessed image: %w", err) } return buf.Bytes(), nil } + +// normalizeContrast stretches the grayscale histogram so the darkest pixel +// becomes 0 and the brightest becomes 255, maximising contrast before scaling. +func normalizeContrast(img *image.Gray, w, h int) *image.Gray { + lo, hi := uint8(255), uint8(0) + for y := 0; y < h; y++ { + for x := 0; x < w; x++ { + v := img.GrayAt(x, y).Y + if v < lo { + lo = v + } + if v > hi { + hi = v + } + } + } + if hi == lo { + return img // flat image, nothing to stretch + } + scale := 255.0 / float64(hi-lo) + out := image.NewGray(image.Rect(0, 0, w, h)) + for y := 0; y < h; y++ { + for x := 0; x < w; x++ { + v := img.GrayAt(x, y).Y + out.SetGray(x, y, color.Gray{Y: uint8(float64(v-lo) * scale)}) + } + } + return out +} + +// bilinearSample maps a destination pixel back to fractional source coordinates +// and interpolates between the four surrounding source pixels. +func bilinearSample(img *image.Gray, srcW, srcH, dstX, dstY, dstW, dstH int) uint8 { + fx := float64(dstX) * float64(srcW-1) / float64(dstW-1) + fy := float64(dstY) * float64(srcH-1) / float64(dstH-1) + + x0, y0 := int(fx), int(fy) + x1, y1 := x0+1, y0+1 + if x1 >= srcW { + x1 = srcW - 1 + } + if y1 >= srcH { + y1 = srcH - 1 + } + dx, dy := fx-float64(x0), fy-float64(y0) + + v00 := float64(img.GrayAt(x0, y0).Y) + v10 := float64(img.GrayAt(x1, y0).Y) + v01 := float64(img.GrayAt(x0, y1).Y) + v11 := float64(img.GrayAt(x1, y1).Y) + + return uint8(v00*(1-dx)*(1-dy) + v10*dx*(1-dy) + v01*(1-dx)*dy + v11*dx*dy) +} + +// otsuThreshold computes the optimal binarization threshold using Otsu's method, +// which maximises inter-class variance between foreground and background pixels. +func otsuThreshold(img *image.Gray, w, h int) uint8 { + total := w * h + var hist [256]int + for y := 0; y < h; y++ { + for x := 0; x < w; x++ { + hist[img.GrayAt(x, y).Y]++ + } + } + + sum := 0 + for i, c := range hist { + sum += i * c + } + + var sumB, wB int + var best float64 + thresh := uint8(128) + for i, c := range hist { + wB += c + if wB == 0 { + continue + } + wF := total - wB + if wF == 0 { + break + } + sumB += i * c + mB := float64(sumB) / float64(wB) + mF := float64(sum-sumB) / float64(wF) + v := float64(wB) * float64(wF) * (mB - mF) * (mB - mF) + if v > best { + best = v + thresh = uint8(i) + } + } + return thresh +} + +// binarizeAndNormalizeBg converts img to pure black-and-white using thresh, then +// inverts the result if the background is dark so that Tesseract always receives +// dark text on a white background (its preferred input for the LSTM engine). +func binarizeAndNormalizeBg(img *image.Gray, thresh uint8, w, h int) *image.Gray { + out := image.NewGray(image.Rect(0, 0, w, h)) + lightPx := 0 + for y := 0; y < h; y++ { + for x := 0; x < w; x++ { + if img.GrayAt(x, y).Y >= thresh { + out.SetGray(x, y, color.Gray{Y: 255}) + lightPx++ + } + } + } + // If more than half the pixels are dark, the background is dark (e.g. a + // terminal screenshot). Invert so text becomes dark on a white background. + if lightPx < w*h/2 { + for y := 0; y < h; y++ { + for x := 0; x < w; x++ { + if out.GrayAt(x, y).Y == 0 { + out.SetGray(x, y, color.Gray{Y: 255}) + } else { + out.SetGray(x, y, color.Gray{Y: 0}) + } + } + } + } + return out +} diff --git a/pkg/handlers/ocr_test.go b/pkg/handlers/ocr_test.go index b3dde94a4e24..674249cc9315 100644 --- a/pkg/handlers/ocr_test.go +++ b/pkg/handlers/ocr_test.go @@ -34,7 +34,7 @@ func TestOCRHandlerImage(t *testing.T) { feature.EnableOCR.Store(true) defer feature.EnableOCR.Store(false) - file, err := os.Open("testdata/image.png") + file, err := os.Open("testdata/test_secret.png") require.NoError(t, err) defer file.Close() @@ -131,7 +131,7 @@ func TestOCRHandlerVideo(t *testing.T) { require.NoError(t, err) defer file.Close() - ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) + ctx, cancel := context.WithTimeout(context.Background(), 120*time.Second) defer cancel() rdr, err := newFileReader(ctx, file) @@ -151,7 +151,7 @@ func TestOCRHandlerVideo(t *testing.T) { assert.NotEmpty(t, dataOrErr.Data) } - assert.Greater(t, count, 0, "expected at least one chunk of OCR text from test_secret.mp4") + assert.Greater(t, count, 0, "expected at least one chunk of OCR text from test_secret.webm") } // TestOCRMimeTypeRouting verifies that selectHandler routes image/video MIME types diff --git a/pkg/handlers/testdata/image.png b/pkg/handlers/testdata/image.png deleted file mode 100644 index 5fe78c4aea27bbd50a17649af45623785cf945c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8015 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 diff --git a/pkg/handlers/testdata/test_secret.png b/pkg/handlers/testdata/test_secret.png index b83403756767e44c2a6b2761f1c98acf46bfe314..1ddbd018f96258c0369be3b172f945877ec3effd 100644 GIT binary patch literal 35533 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 literal 37106 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 Date: Mon, 6 Apr 2026 12:47:36 +0500 Subject: [PATCH 3/5] support multiple ocr providers --- README.md | 125 ++- main.go | 33 + pkg/config/config.go | 2 + pkg/handlers/handlers.go | 13 +- pkg/handlers/ocr.go | 93 +- pkg/handlers/ocr_test.go | 9 +- pkg/ocr/custom.go | 197 +++++ pkg/ocr/google.go | 130 +++ pkg/ocr/openai.go | 101 +++ pkg/ocr/provider.go | 77 ++ pkg/ocr/tesseract.go | 74 ++ pkg/pb/configpb/config.pb.go | 816 +++++++++++++++++- pkg/pb/configpb/config.pb.validate.go | 1151 +++++++++++++++++++++++++ proto/config.proto | 80 ++ 14 files changed, 2781 insertions(+), 120 deletions(-) create mode 100644 pkg/ocr/custom.go create mode 100644 pkg/ocr/google.go create mode 100644 pkg/ocr/openai.go create mode 100644 pkg/ocr/provider.go create mode 100644 pkg/ocr/tesseract.go diff --git a/README.md b/README.md index 7215311382c1..4afdac46e620 100644 --- a/README.md +++ b/README.md @@ -386,24 +386,54 @@ aws s3 cp s3://example/gzipped/data.gz - | gunzip -c | trufflehog stdin ## 19. Scan image and video files for secrets (OCR) -TruffleHog can extract text from **PNG/JPEG images** and **MP4/MKV/WebM video frames** using OCR, then scan that text for secrets. This is useful for catching credentials embedded in screenshots, screen recordings, or documentation images. +TruffleHog can extract text from **PNG/JPEG images** and **MP4/MKV/WebM video frames**, then scan that text for secrets. This catches credentials embedded in screenshots, screen recordings, and documentation images. -### Prerequisites +Before text is sent to any OCR engine, TruffleHog runs an image preprocessing pipeline — grayscale conversion, contrast normalization, 3× upscaling, and Otsu binarization — to maximize character accuracy regardless of which provider you use. -- **Tesseract OCR** — the OCR engine used to extract text from images -- **FFmpeg** — required only for video files (extracts frames before OCR) +**FFmpeg is required for video files** (to extract frames). It is not needed for image-only scanning. ```bash # Ubuntu / Debian -sudo apt install tesseract-ocr ffmpeg +sudo apt install ffmpeg # macOS -brew install tesseract ffmpeg +brew install ffmpeg ``` -### Improved accuracy with tessdata-best (recommended) +--- + +### Choosing an OCR provider + +TruffleHog supports four OCR providers. Pick the one that fits your setup: + +| Provider | Accuracy | Setup | Cost | +|---|---|---|---| +| Tesseract (local) | Good | Install binary | Free | +| Google Cloud Vision | Excellent | API key | Pay-per-use | +| OpenAI GPT-4o | Excellent | API key | Pay-per-use | +| Custom HTTP server | Depends | Self-hosted | Varies | + +--- + +### Option A — Tesseract (local, no API key) + +Install Tesseract and enable OCR with the `--enable-ocr` flag: + +```bash +# Ubuntu / Debian +sudo apt install tesseract-ocr -By default Tesseract ships with a fast but less accurate model. For secret scanning — where a single misread character invalidates a match — download the high-quality `tessdata-best` model: +# macOS +brew install tesseract +``` + +```bash +trufflehog filesystem /path/to/screenshots --enable-ocr +``` + +**Improving Tesseract accuracy** + +The default Tesseract model is optimized for speed. For better results with secret scanning — where a single misread character breaks a match — use the `tessdata-best` model: ```bash mkdir -p ~/.tessdata-best @@ -411,23 +441,84 @@ curl -L -o ~/.tessdata-best/eng.traineddata \ https://github.com/tesseract-ocr/tessdata_best/raw/main/eng.traineddata ``` -TruffleHog automatically detects and uses `~/.tessdata-best` when present. You can also point to any custom tessdata directory via the `TESSDATA_PREFIX` environment variable. +TruffleHog automatically detects and uses `~/.tessdata-best` when present. You can also override the path via the `TESSDATA_PREFIX` environment variable. + +--- + +### Option B — Remote OCR provider (Google, OpenAI, or custom) -### Usage +For higher accuracy or to avoid installing local dependencies, configure a remote OCR provider. OCR is enabled automatically — no `--enable-ocr` needed. -Enable OCR with the `--enable-ocr` flag when scanning any source that may contain image or video files: +**Single-source scans** (`filesystem`, `git`, `github`, etc.) — use the dedicated `--ocr-config` flag pointing to a YAML file that contains only the `ocr:` block: ```bash -# Scan a filesystem path containing images -trufflehog filesystem /path/to/screenshots --enable-ocr +trufflehog filesystem /path/to/screenshots --ocr-config=ocr.yaml +``` -# Scan a git repo whose history may include committed images -trufflehog git https://github.com/example/repo --enable-ocr +**Multi-source scans** (`multi-scan`) — add the `ocr:` block directly to your existing `--config` file alongside `sources:` and `detectors:`, so everything stays in one place: -# Scan an S3 bucket for secrets in images -trufflehog s3 --bucket=my-bucket --enable-ocr --results=verified +```bash +trufflehog multi-scan --config=config.yaml ``` +In both cases the `ocr:` block has the same structure and accepts exactly one provider: + +**Google Cloud Vision** + +Service account credentials are recommended for production. Create a service account with the `Cloud Vision API User` role, download the JSON key file, and reference it in the config: + +```yaml +ocr: + google: + credentials_file: "/path/to/service-account.json" +``` + +If you prefer an API key instead: + +```yaml +ocr: + google: + api_key: "${GOOGLE_VISION_API_KEY}" +``` + +**OpenAI GPT-4o** + +```yaml +ocr: + openai: + api_key: "${OPENAI_API_KEY}" + model: "gpt-4o" # optional — gpt-4o is the default +``` + +**Custom HTTP server** + +For any other HTTP-based OCR service. The `body_template` is a Go template with two variables: `{{.Base64Image}}` (base64-encoded PNG) and `{{.MimeType}}` (always `image/png`). The `text_path` is a dot-separated path into the JSON response body; numeric segments are treated as array indices. + +```yaml +ocr: + custom: + endpoint: "https://my-ocr.example.com/v1/extract" + auth: + type: bearer # see auth types below + value: "${OCR_TOKEN}" + request: + content_type: "application/json" + body_template: '{"image": "{{.Base64Image}}", "mime_type": "{{.MimeType}}"}' + response: + text_path: "result.text" # e.g. "choices.0.message.content" for nested responses +``` + +**Auth types** + +| `type` | Behaviour | Required fields | +|---|---|---| +| `bearer` | Adds `Authorization: Bearer ` | `value` | +| `header` | Sets an arbitrary request header | `header_name`, `value` | +| `api_key_query` | Appends the key as a URL query parameter | `param_name`, `value` | +| `basic` | HTTP Basic Auth | `username`, `password` | + +All string fields support `${ENV_VAR}` expansion so secrets never need to be hardcoded in the config file. + # :question: FAQ - All I see is `🐷🔑🐷 TruffleHog. Unearth your secrets. 🐷🔑🐷` and the program exits, what gives? diff --git a/main.go b/main.go index 9a64ec6748ee..d482420af38e 100644 --- a/main.go +++ b/main.go @@ -34,6 +34,8 @@ import ( "github.com/trufflesecurity/trufflehog/v3/pkg/engine/defaults" "github.com/trufflesecurity/trufflehog/v3/pkg/feature" "github.com/trufflesecurity/trufflehog/v3/pkg/handlers" + "github.com/trufflesecurity/trufflehog/v3/pkg/ocr" + "github.com/trufflesecurity/trufflehog/v3/pkg/pb/configpb" "github.com/trufflesecurity/trufflehog/v3/pkg/log" "github.com/trufflesecurity/trufflehog/v3/pkg/output" "github.com/trufflesecurity/trufflehog/v3/pkg/sources" @@ -93,6 +95,7 @@ var ( skipAdditionalRefs = cli.Flag("skip-additional-refs", "Skip additional references.").Bool() userAgentSuffix = cli.Flag("user-agent-suffix", "Suffix to add to User-Agent.").String() enableOCR = cli.Flag("enable-ocr", "Enable OCR scanning of images and video frames for secrets. Requires tesseract and ffmpeg.").Bool() + ocrConfigFilename = cli.Flag("ocr-config", "Path to OCR provider config file. Configures the OCR provider (google, openai, or custom) and automatically enables OCR.").ExistingFile() gitScan = cli.Command("git", "Find credentials in git repositories.") gitScanURI = gitScan.Arg("uri", "Git repository URL. https://, file://, or ssh:// schema expected.").Required().String() @@ -509,6 +512,7 @@ func run(state overseer.State, logSync func() error) { if *enableOCR { feature.EnableOCR.Store(true) + logger.Info("OCR enabled", "provider", "tesseract") } // OSS Default APK handling on @@ -533,6 +537,35 @@ func run(state overseer.State, logSync func() error) { } } + // Wire up a remote OCR provider if configured. Two sources are supported: + // 1. --ocr-config: a dedicated OCR config file (takes precedence). Useful for + // single-source scans (filesystem, git, etc.) where --config is not used. + // 2. ocr: block inside --config: convenient for multi-scan where sources, + // detectors, and OCR config all live in one file. + // Either way, the provider is set and OCR is enabled automatically. + var ocrCfgBlock *configpb.OCRConfig + if *ocrConfigFilename != "" { + ocrFileCfg, err := config.Read(*ocrConfigFilename) + if err != nil { + logFatal(err, "error parsing the provided OCR config file") + } + if ocrFileCfg.Ocr == nil { + logFatal(fmt.Errorf("no ocr: block found in %s", *ocrConfigFilename), "invalid OCR config") + } + ocrCfgBlock = ocrFileCfg.Ocr + } else if conf.Ocr != nil { + ocrCfgBlock = conf.Ocr + } + if ocrCfgBlock != nil { + provider, err := ocr.NewProvider(ocrCfgBlock) + if err != nil { + logFatal(err, "error initializing OCR provider") + } + handlers.SetOCRProvider(provider) + feature.EnableOCR.Store(true) + logger.Info("OCR enabled", "provider", ocr.ProviderName(ocrCfgBlock)) + } + if *detectorTimeout != 0 { logger.Info("Setting detector timeout", "timeout", detectorTimeout.String()) engine.SetDetectorTimeout(*detectorTimeout) diff --git a/pkg/config/config.go b/pkg/config/config.go index 47fe3868c5d8..46080ec9aa7f 100644 --- a/pkg/config/config.go +++ b/pkg/config/config.go @@ -25,6 +25,7 @@ import ( type Config struct { Sources []sources.ConfiguredSource Detectors []detectors.Detector + Ocr *configpb.OCRConfig // populated when an ocr: block is present in the YAML } // Read parses a given filename into a Config. @@ -69,6 +70,7 @@ func NewYAML(input []byte) (*Config, error) { return &Config{ Detectors: detectorConfigs, Sources: sourceConfigs, + Ocr: inputYAML.GetOcr(), }, nil } diff --git a/pkg/handlers/handlers.go b/pkg/handlers/handlers.go index 4219d18e672e..1a3081e2f6bf 100644 --- a/pkg/handlers/handlers.go +++ b/pkg/handlers/handlers.go @@ -16,10 +16,19 @@ import ( logContext "github.com/trufflesecurity/trufflehog/v3/pkg/context" "github.com/trufflesecurity/trufflehog/v3/pkg/feature" "github.com/trufflesecurity/trufflehog/v3/pkg/iobuf" + "github.com/trufflesecurity/trufflehog/v3/pkg/ocr" "github.com/trufflesecurity/trufflehog/v3/pkg/pb/source_metadatapb" "github.com/trufflesecurity/trufflehog/v3/pkg/sources" ) +// activeOCRProvider is the ocr.Provider used when OCR is enabled. +// It defaults to TesseractProvider and may be replaced via SetOCRProvider before scanning begins. +var activeOCRProvider ocr.Provider = &ocr.TesseractProvider{} + +// SetOCRProvider replaces the package-level OCR provider. +// Call this once at startup before any files are processed. +func SetOCRProvider(p ocr.Provider) { activeOCRProvider = p } + // fileReader is a custom reader that wraps an io.Reader and provides additional functionality for identifying // and handling different file types. It abstracts away the complexity of detecting file formats, MIME types, // and archive types, allowing for a more modular and extensible file handling process. @@ -337,12 +346,12 @@ func selectHandler(mimeT mimeType, isGenericArchive bool) FileHandler { return newAPKHandler() case pngMime, jpegMime: if feature.EnableOCR.Load() { - return newOCRHandler() + return newOCRHandler(activeOCRProvider) } return newDefaultHandler(defaultHandlerType) case mp4Mime, mkvMime, webmMime: if feature.EnableOCR.Load() { - return newOCRHandler() + return newOCRHandler(activeOCRProvider) } return newDefaultHandler(defaultHandlerType) default: diff --git a/pkg/handlers/ocr.go b/pkg/handlers/ocr.go index 25a1b1caa49a..f3ccb85618c6 100644 --- a/pkg/handlers/ocr.go +++ b/pkg/handlers/ocr.go @@ -17,6 +17,7 @@ import ( logContext "github.com/trufflesecurity/trufflehog/v3/pkg/context" "github.com/trufflesecurity/trufflehog/v3/pkg/feature" + "github.com/trufflesecurity/trufflehog/v3/pkg/ocr" ) const ( @@ -25,15 +26,20 @@ const ( frameIntervalSeconds = 1 // Extract 1 frame per second. ) -// ocrHandler extracts text from images and video frames using external -// tools (tesseract for OCR, ffmpeg for video frame extraction) and feeds -// the extracted text into the standard text processing pipeline. -type ocrHandler struct{ *defaultHandler } +// ocrHandler extracts text from images and video frames using the configured +// ocr.Provider and feeds the extracted text into the standard text processing pipeline. +type ocrHandler struct { + *defaultHandler + provider ocr.Provider +} var _ FileHandler = (*ocrHandler)(nil) -func newOCRHandler() *ocrHandler { - return &ocrHandler{defaultHandler: newDefaultHandler(ocrHandlerType)} +func newOCRHandler(p ocr.Provider) *ocrHandler { + return &ocrHandler{ + defaultHandler: newDefaultHandler(ocrHandlerType), + provider: p, + } } // HandleFile processes image and video files by extracting text via OCR. @@ -107,30 +113,8 @@ func (h *ocrHandler) HandleFile(ctx logContext.Context, input fileReader) chan D return dataOrErrChan } -// tessdataDir returns the tessdata directory to use, preferring tessdata-best -// models when available. Resolution order: -// 1. TESSDATA_PREFIX environment variable (explicit user override) -// 2. ~/.tessdata-best (conventional install location for tessdata-best) -// 3. Empty string → let Tesseract use its compiled-in default -func tessdataDir() string { - if v := os.Getenv("TESSDATA_PREFIX"); v != "" { - return v - } - if home, err := os.UserHomeDir(); err == nil { - p := filepath.Join(home, ".tessdata-best") - if _, err := os.Stat(filepath.Join(p, "eng.traineddata")); err == nil { - return p - } - } - return "" -} - -// ocrImage extracts text from a single image using Tesseract. +// ocrImage reads, preprocesses, and OCRs a single image using the configured provider. func (h *ocrHandler) ocrImage(ctx logContext.Context, input io.Reader) (string, error) { - if _, err := exec.LookPath("tesseract"); err != nil { - return "", fmt.Errorf("tesseract not found in PATH: %w", err) - } - imgData, err := io.ReadAll(io.LimitReader(input, maxOCRImageSize+1)) if err != nil { return "", fmt.Errorf("error reading image data: %w", err) @@ -146,51 +130,14 @@ func (h *ocrHandler) ocrImage(ctx logContext.Context, input io.Reader) (string, processedData = imgData } - tmpFile, err := os.CreateTemp("", "trufflehog-ocr-*.png") - if err != nil { - return "", fmt.Errorf("error creating temp file: %w", err) - } - defer os.Remove(tmpFile.Name()) - - if _, err := tmpFile.Write(processedData); err != nil { - tmpFile.Close() - return "", fmt.Errorf("error writing temp file: %w", err) - } - tmpFile.Close() - - args := []string{tmpFile.Name(), "stdout", "--oem", "1", "--psm", "6", "--dpi", "300", - "-c", "preserve_interword_spaces=1", - "-c", "textord_space_size_is_variable=0", - // Restrict to printable ASCII — secrets are always ASCII and this prevents - // Tesseract from substituting Unicode lookalikes (curly quotes, em-dash, etc.) - // which would cause secret patterns to fail to match. - "-c", `tessedit_char_whitelist= !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_` + "`" + `abcdefghijklmnopqrstuvwxyz{|}~`, - } - if dir := tessdataDir(); dir != "" { - args = append(args, "--tessdata-dir", dir) - } - - var stdout, stderr bytes.Buffer - cmd := exec.CommandContext(ctx, "tesseract", args...) - cmd.Stdout = &stdout - cmd.Stderr = &stderr - - if err := cmd.Run(); err != nil { - return "", fmt.Errorf("tesseract failed: %w (stderr: %s)", err, stderr.String()) - } - - return stdout.String(), nil + return h.provider.ExtractText(ctx, processedData) } -// ocrVideo extracts text from video frames using ffmpeg for frame extraction -// and tesseract for OCR on each frame. +// ocrVideo extracts frames from a video using ffmpeg and OCRs each frame. func (h *ocrHandler) ocrVideo(ctx logContext.Context, input io.Reader) (string, error) { if _, err := exec.LookPath("ffmpeg"); err != nil { return "", fmt.Errorf("ffmpeg not found in PATH: %w", err) } - if _, err := exec.LookPath("tesseract"); err != nil { - return "", fmt.Errorf("tesseract not found in PATH: %w", err) - } videoData, err := io.ReadAll(io.LimitReader(input, maxOCRVideoSize+1)) if err != nil { @@ -275,17 +222,17 @@ func isVideoMime(m mimeType) bool { const preprocessScaleFactor = 3 -// preprocessImage prepares a screenshot for Tesseract OCR of typed/code text. +// preprocessImage prepares a screenshot for OCR of typed/code text. // // Pipeline: // 1. Convert to grayscale (ITU-R BT.601 luminance). // 2. Stretch contrast so the full 0–255 range is used. // 3. Upscale 3× with bilinear interpolation — more pixels per character -// stroke lets Tesseract resolve details that distinguish l/1/I and 0/O. +// stroke lets the OCR engine resolve details that distinguish l/1/I and 0/O. // 4. Binarize with Otsu's method — eliminates anti-aliasing gray zones that // cause similar-character confusions like L→1 or 9→0. // 5. Auto-invert if the background is dark (terminal/dark-theme screenshots) -// because Tesseract's LSTM engine expects dark text on a light background. +// because most OCR engines expect dark text on a light background. // // Falls back gracefully — callers should use the original data if this errors. func preprocessImage(data []byte) ([]byte, error) { @@ -425,8 +372,8 @@ func otsuThreshold(img *image.Gray, w, h int) uint8 { } // binarizeAndNormalizeBg converts img to pure black-and-white using thresh, then -// inverts the result if the background is dark so that Tesseract always receives -// dark text on a white background (its preferred input for the LSTM engine). +// inverts the result if the background is dark so that OCR engines always receive +// dark text on a white background. func binarizeAndNormalizeBg(img *image.Gray, thresh uint8, w, h int) *image.Gray { out := image.NewGray(image.Rect(0, 0, w, h)) lightPx := 0 diff --git a/pkg/handlers/ocr_test.go b/pkg/handlers/ocr_test.go index 674249cc9315..bed2a1a4c5dd 100644 --- a/pkg/handlers/ocr_test.go +++ b/pkg/handlers/ocr_test.go @@ -11,6 +11,7 @@ import ( "github.com/trufflesecurity/trufflehog/v3/pkg/context" "github.com/trufflesecurity/trufflehog/v3/pkg/feature" + "github.com/trufflesecurity/trufflehog/v3/pkg/ocr" ) func skipIfNoTesseract(t *testing.T) { @@ -45,7 +46,7 @@ func TestOCRHandlerImage(t *testing.T) { require.NoError(t, err) defer rdr.Close() - handler := newOCRHandler() + handler := newOCRHandler(&ocr.TesseractProvider{}) dataOrErrChan := handler.HandleFile(context.AddLogger(ctx), rdr) count := 0 @@ -79,7 +80,7 @@ func TestOCRHandlerImageNoText(t *testing.T) { require.NoError(t, err) defer rdr.Close() - handler := newOCRHandler() + handler := newOCRHandler(&ocr.TesseractProvider{}) dataOrErrChan := handler.HandleFile(context.AddLogger(ctx), rdr) count := 0 @@ -108,7 +109,7 @@ func TestOCRHandlerDisabled(t *testing.T) { require.NoError(t, err) defer rdr.Close() - handler := newOCRHandler() + handler := newOCRHandler(&ocr.TesseractProvider{}) dataOrErrChan := handler.HandleFile(context.AddLogger(ctx), rdr) count := 0 @@ -138,7 +139,7 @@ func TestOCRHandlerVideo(t *testing.T) { require.NoError(t, err) defer rdr.Close() - handler := newOCRHandler() + handler := newOCRHandler(&ocr.TesseractProvider{}) dataOrErrChan := handler.HandleFile(context.AddLogger(ctx), rdr) count := 0 diff --git a/pkg/ocr/custom.go b/pkg/ocr/custom.go new file mode 100644 index 000000000000..113e0e747f43 --- /dev/null +++ b/pkg/ocr/custom.go @@ -0,0 +1,197 @@ +package ocr + +import ( + "bytes" + "context" + "encoding/base64" + "encoding/json" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" + "text/template" + + "github.com/trufflesecurity/trufflehog/v3/pkg/pb/configpb" +) + +// CustomHTTPProvider extracts text from a user-defined HTTP OCR endpoint. +// Authentication, request body, and response parsing are all configurable. +type CustomHTTPProvider struct { + cfg *configpb.CustomOCRConfig + bodyTmpl *template.Template + httpClient *http.Client +} + +// templateData holds the variables available inside body_template. +type templateData struct { + Base64Image string + MimeType string +} + +// NewCustomHTTPProvider constructs a CustomHTTPProvider from the proto config. +// It validates required fields and pre-compiles the body template. +func NewCustomHTTPProvider(cfg *configpb.CustomOCRConfig) (*CustomHTTPProvider, error) { + if cfg == nil { + return nil, fmt.Errorf("custom ocr: config must not be nil") + } + if cfg.GetEndpoint() == "" { + return nil, fmt.Errorf("custom ocr: endpoint must not be empty") + } + + reqCfg := cfg.GetRequest() + rawTmpl := "" + if reqCfg != nil { + rawTmpl = reqCfg.GetBodyTemplate() + } + if rawTmpl == "" { + return nil, fmt.Errorf("custom ocr: request.body_template must not be empty") + } + + respCfg := cfg.GetResponse() + if respCfg == nil || respCfg.GetTextPath() == "" { + return nil, fmt.Errorf("custom ocr: response.text_path must not be empty") + } + + tmpl, err := template.New("body").Parse(rawTmpl) + if err != nil { + return nil, fmt.Errorf("custom ocr: parsing body_template: %w", err) + } + + return &CustomHTTPProvider{ + cfg: cfg, + bodyTmpl: tmpl, + httpClient: &http.Client{}, + }, nil +} + +// ExtractText sends imageData to the configured endpoint and returns the extracted text. +func (p *CustomHTTPProvider) ExtractText(ctx context.Context, imageData []byte) (string, error) { + encoded := base64.StdEncoding.EncodeToString(imageData) + + var bodyBuf bytes.Buffer + if err := p.bodyTmpl.Execute(&bodyBuf, templateData{ + Base64Image: encoded, + MimeType: "image/png", + }); err != nil { + return "", fmt.Errorf("custom ocr: rendering body template: %w", err) + } + + endpoint := p.buildURL() + req, err := http.NewRequestWithContext(ctx, http.MethodPost, endpoint, &bodyBuf) + if err != nil { + return "", fmt.Errorf("custom ocr: creating request: %w", err) + } + + contentType := "application/json" + if reqCfg := p.cfg.GetRequest(); reqCfg != nil && reqCfg.GetContentType() != "" { + contentType = reqCfg.GetContentType() + } + req.Header.Set("Content-Type", contentType) + + if err := p.applyAuth(req); err != nil { + return "", err + } + + resp, err := p.httpClient.Do(req) + if err != nil { + return "", fmt.Errorf("custom ocr: HTTP request failed: %w", err) + } + defer resp.Body.Close() + + body, err := io.ReadAll(resp.Body) + if err != nil { + return "", fmt.Errorf("custom ocr: reading response: %w", err) + } + if resp.StatusCode < 200 || resp.StatusCode >= 300 { + return "", fmt.Errorf("custom ocr: unexpected status %d: %s", resp.StatusCode, body) + } + + return p.extractText(body) +} + +// buildURL appends a query-param API key when auth.type is "api_key_query". +func (p *CustomHTTPProvider) buildURL() string { + auth := p.cfg.GetAuth() + if auth == nil || auth.GetType() != "api_key_query" { + return p.cfg.GetEndpoint() + } + u, err := url.Parse(p.cfg.GetEndpoint()) + if err != nil { + return p.cfg.GetEndpoint() + } + q := u.Query() + q.Set(auth.GetParamName(), ExpandEnv(auth.GetValue())) + u.RawQuery = q.Encode() + return u.String() +} + +// applyAuth sets authentication headers/credentials on req based on auth.type. +func (p *CustomHTTPProvider) applyAuth(req *http.Request) error { + auth := p.cfg.GetAuth() + if auth == nil { + return nil + } + switch auth.GetType() { + case "bearer": + req.Header.Set("Authorization", "Bearer "+ExpandEnv(auth.GetValue())) + case "header": + if auth.GetHeaderName() == "" { + return fmt.Errorf("custom ocr: auth.header_name must not be empty when type is \"header\"") + } + req.Header.Set(auth.GetHeaderName(), ExpandEnv(auth.GetValue())) + case "api_key_query": + // Already handled in buildURL; nothing to do on the request itself. + case "basic": + req.SetBasicAuth(ExpandEnv(auth.GetUsername()), ExpandEnv(auth.GetPassword())) + case "": + // No auth configured. + default: + return fmt.Errorf("custom ocr: unknown auth type %q (want: bearer, header, api_key_query, basic)", auth.GetType()) + } + return nil +} + +// extractText navigates the dot-separated text_path into the parsed JSON response +// and returns the string value at that location. +// +// Path segments that are purely numeric are treated as array indices. +// Example: "choices.0.message.content" → response["choices"][0]["message"]["content"] +func (p *CustomHTTPProvider) extractText(body []byte) (string, error) { + var parsed interface{} + if err := json.Unmarshal(body, &parsed); err != nil { + return "", fmt.Errorf("custom ocr: parsing JSON response: %w", err) + } + + textPath := p.cfg.GetResponse().GetTextPath() + segments := strings.Split(textPath, ".") + current := parsed + for _, seg := range segments { + switch node := current.(type) { + case map[string]interface{}: + val, ok := node[seg] + if !ok { + return "", fmt.Errorf("custom ocr: key %q not found in response at path %q", seg, textPath) + } + current = val + case []interface{}: + idx, err := strconv.Atoi(seg) + if err != nil { + return "", fmt.Errorf("custom ocr: segment %q is not a valid array index in path %q", seg, textPath) + } + if idx < 0 || idx >= len(node) { + return "", fmt.Errorf("custom ocr: index %d out of bounds (len=%d) in path %q", idx, len(node), textPath) + } + current = node[idx] + default: + return "", fmt.Errorf("custom ocr: cannot traverse segment %q in path %q: not an object or array", seg, textPath) + } + } + + text, ok := current.(string) + if !ok { + return "", fmt.Errorf("custom ocr: value at path %q is not a string (got %T)", textPath, current) + } + return text, nil +} diff --git a/pkg/ocr/google.go b/pkg/ocr/google.go new file mode 100644 index 000000000000..14439d493d4a --- /dev/null +++ b/pkg/ocr/google.go @@ -0,0 +1,130 @@ +package ocr + +import ( + "bytes" + "context" + "encoding/base64" + "encoding/json" + "fmt" + "io" + "net/http" + "os" + + "golang.org/x/oauth2" + "golang.org/x/oauth2/google" + + "github.com/trufflesecurity/trufflehog/v3/pkg/pb/configpb" +) + +const ( + googleVisionEndpoint = "https://vision.googleapis.com/v1/images:annotate" + googleVisionScope = "https://www.googleapis.com/auth/cloud-vision" +) + +// GoogleProvider extracts text using the Google Cloud Vision TEXT_DETECTION API. +type GoogleProvider struct { + apiKey string // non-empty when using API key auth + httpClient *http.Client +} + +// NewGoogleProvider constructs a GoogleProvider from the proto config. +func NewGoogleProvider(cfg *configpb.GoogleOCRConfig) (*GoogleProvider, error) { + switch auth := cfg.GetAuth().(type) { + + case *configpb.GoogleOCRConfig_CredentialsFile: + path := ExpandEnv(auth.CredentialsFile) + if path == "" { + return nil, fmt.Errorf("google ocr: credentials_file must not be empty") + } + jsonKey, err := os.ReadFile(path) + if err != nil { + return nil, fmt.Errorf("google ocr: reading credentials file %q: %w", path, err) + } + creds, err := google.CredentialsFromJSON(context.Background(), jsonKey, googleVisionScope) + if err != nil { + return nil, fmt.Errorf("google ocr: parsing service account credentials: %w", err) + } + return &GoogleProvider{ + httpClient: oauth2.NewClient(context.Background(), creds.TokenSource), + }, nil + + case *configpb.GoogleOCRConfig_ApiKey: + apiKey := ExpandEnv(auth.ApiKey) + if apiKey == "" { + return nil, fmt.Errorf("google ocr: api_key must not be empty") + } + return &GoogleProvider{ + apiKey: apiKey, + httpClient: &http.Client{}, + }, nil + + default: + return nil, fmt.Errorf("google ocr: one of credentials_file or api_key must be set") + } +} + +// ExtractText sends imageData to the Google Cloud Vision API and returns the detected text. +func (p *GoogleProvider) ExtractText(ctx context.Context, imageData []byte) (string, error) { + encoded := base64.StdEncoding.EncodeToString(imageData) + + reqBody, err := json.Marshal(map[string]interface{}{ + "requests": []map[string]interface{}{ + { + "image": map[string]string{"content": encoded}, + "features": []map[string]interface{}{ + {"type": "TEXT_DETECTION"}, + }, + }, + }, + }) + if err != nil { + return "", fmt.Errorf("google ocr: marshaling request: %w", err) + } + + url := googleVisionEndpoint + if p.apiKey != "" { + url = fmt.Sprintf("%s?key=%s", googleVisionEndpoint, p.apiKey) + } + + req, err := http.NewRequestWithContext(ctx, http.MethodPost, url, bytes.NewReader(reqBody)) + if err != nil { + return "", fmt.Errorf("google ocr: creating request: %w", err) + } + req.Header.Set("Content-Type", "application/json") + + resp, err := p.httpClient.Do(req) + if err != nil { + return "", fmt.Errorf("google ocr: HTTP request failed: %w", err) + } + defer resp.Body.Close() + + body, err := io.ReadAll(resp.Body) + if err != nil { + return "", fmt.Errorf("google ocr: reading response: %w", err) + } + if resp.StatusCode != http.StatusOK { + return "", fmt.Errorf("google ocr: unexpected status %d: %s", resp.StatusCode, body) + } + + // Response shape: {"responses": [{"fullTextAnnotation": {"text": "..."}}]} + var result struct { + Responses []struct { + FullTextAnnotation struct { + Text string `json:"text"` + } `json:"fullTextAnnotation"` + Error *struct { + Message string `json:"message"` + } `json:"error"` + } `json:"responses"` + } + if err := json.Unmarshal(body, &result); err != nil { + return "", fmt.Errorf("google ocr: parsing response: %w", err) + } + if len(result.Responses) == 0 { + return "", nil + } + if result.Responses[0].Error != nil { + return "", fmt.Errorf("google ocr: API error: %s", result.Responses[0].Error.Message) + } + return result.Responses[0].FullTextAnnotation.Text, nil +} diff --git a/pkg/ocr/openai.go b/pkg/ocr/openai.go new file mode 100644 index 000000000000..465f229a935a --- /dev/null +++ b/pkg/ocr/openai.go @@ -0,0 +1,101 @@ +package ocr + +import ( + "bytes" + "context" + "encoding/base64" + "encoding/json" + "fmt" + "io" + "net/http" +) + +const openAIEndpoint = "https://api.openai.com/v1/chat/completions" + +// ocrPrompt instructs the model to return only the visible text, verbatim. +const ocrPrompt = "Extract all text visible in this image exactly as it appears, preserving formatting. Output only the extracted text with no commentary." + +// OpenAIProvider extracts text using the OpenAI chat completions vision API. +type OpenAIProvider struct { + apiKey string + model string + httpClient *http.Client +} + +// NewOpenAIProvider creates an OpenAIProvider. model defaults to "gpt-4o" if empty. +func NewOpenAIProvider(apiKey, model string) *OpenAIProvider { + if model == "" { + model = "gpt-4o" + } + return &OpenAIProvider{ + apiKey: apiKey, + model: model, + httpClient: &http.Client{}, + } +} + +// ExtractText sends imageData to the OpenAI vision API and returns the extracted text. +func (p *OpenAIProvider) ExtractText(ctx context.Context, imageData []byte) (string, error) { + encoded := base64.StdEncoding.EncodeToString(imageData) + dataURL := fmt.Sprintf("data:image/png;base64,%s", encoded) + + reqBody, err := json.Marshal(map[string]interface{}{ + "model": p.model, + "messages": []map[string]interface{}{ + { + "role": "user", + "content": []map[string]interface{}{ + {"type": "text", "text": ocrPrompt}, + {"type": "image_url", "image_url": map[string]string{"url": dataURL}}, + }, + }, + }, + "max_tokens": 4096, + }) + if err != nil { + return "", fmt.Errorf("openai ocr: marshaling request: %w", err) + } + + req, err := http.NewRequestWithContext(ctx, http.MethodPost, openAIEndpoint, bytes.NewReader(reqBody)) + if err != nil { + return "", fmt.Errorf("openai ocr: creating request: %w", err) + } + req.Header.Set("Content-Type", "application/json") + req.Header.Set("Authorization", "Bearer "+p.apiKey) + + resp, err := p.httpClient.Do(req) + if err != nil { + return "", fmt.Errorf("openai ocr: HTTP request failed: %w", err) + } + defer resp.Body.Close() + + body, err := io.ReadAll(resp.Body) + if err != nil { + return "", fmt.Errorf("openai ocr: reading response: %w", err) + } + if resp.StatusCode != http.StatusOK { + return "", fmt.Errorf("openai ocr: unexpected status %d: %s", resp.StatusCode, body) + } + + // Response shape: {"choices": [{"message": {"content": "..."}}]} + var result struct { + Choices []struct { + Message struct { + Content string `json:"content"` + } `json:"message"` + } `json:"choices"` + Error *struct { + Message string `json:"message"` + } `json:"error"` + } + if err := json.Unmarshal(body, &result); err != nil { + return "", fmt.Errorf("openai ocr: parsing response: %w", err) + } + if result.Error != nil { + return "", fmt.Errorf("openai ocr: API error: %s", result.Error.Message) + } + if len(result.Choices) == 0 { + return "", nil + } + return result.Choices[0].Message.Content, nil +} diff --git a/pkg/ocr/provider.go b/pkg/ocr/provider.go new file mode 100644 index 000000000000..64fb78996554 --- /dev/null +++ b/pkg/ocr/provider.go @@ -0,0 +1,77 @@ +package ocr + +import ( + "context" + "fmt" + "os" + "strings" + + "github.com/trufflesecurity/trufflehog/v3/pkg/pb/configpb" +) + +// Provider extracts text from a preprocessed PNG image. +// imageData is always PNG-encoded bytes produced by the preprocessing pipeline. +type Provider interface { + ExtractText(ctx context.Context, imageData []byte) (string, error) +} + +// ExpandEnv replaces ${VAR} and $VAR occurrences in s with the corresponding +// environment variable values, identical to os.ExpandEnv. +func ExpandEnv(s string) string { + return os.ExpandEnv(s) +} + +// ProviderName returns a human-readable name for the provider described by cfg, +// suitable for log output. +func ProviderName(cfg *configpb.OCRConfig) string { + if cfg == nil { + return "tesseract" + } + switch cfg.GetProvider().(type) { + case *configpb.OCRConfig_Tesseract: + return "tesseract" + case *configpb.OCRConfig_Google: + return "google" + case *configpb.OCRConfig_Openai: + return "openai" + case *configpb.OCRConfig_Custom: + return "custom" + default: + return "unknown" + } +} + +// NewProvider builds the correct Provider from a protobuf OCRConfig. +// If cfg is nil the TesseractProvider is returned so that --enable-ocr without +// an explicit config block continues to work exactly as before. +func NewProvider(cfg *configpb.OCRConfig) (Provider, error) { + if cfg == nil { + return &TesseractProvider{}, nil + } + + switch p := cfg.GetProvider().(type) { + case *configpb.OCRConfig_Tesseract: + _ = p + return &TesseractProvider{}, nil + + case *configpb.OCRConfig_Google: + return NewGoogleProvider(p.Google) + + case *configpb.OCRConfig_Openai: + apiKey := ExpandEnv(p.Openai.GetApiKey()) + if apiKey == "" { + return nil, fmt.Errorf("ocr.openai.api_key must not be empty") + } + model := strings.TrimSpace(p.Openai.GetModel()) + if model == "" { + model = "gpt-4o" + } + return NewOpenAIProvider(apiKey, model), nil + + case *configpb.OCRConfig_Custom: + return NewCustomHTTPProvider(p.Custom) + + default: + return nil, fmt.Errorf("unknown OCR provider in config") + } +} diff --git a/pkg/ocr/tesseract.go b/pkg/ocr/tesseract.go new file mode 100644 index 000000000000..e42a407236e7 --- /dev/null +++ b/pkg/ocr/tesseract.go @@ -0,0 +1,74 @@ +package ocr + +import ( + "bytes" + "context" + "fmt" + "os" + "os/exec" + "path/filepath" +) + +// TesseractProvider extracts text using the local Tesseract binary. +// It is the default provider when --enable-ocr is set without an ocr config block. +type TesseractProvider struct{} + +// ExtractText writes imageData (PNG) to a temp file and runs Tesseract on it. +func (p *TesseractProvider) ExtractText(ctx context.Context, imageData []byte) (string, error) { + if _, err := exec.LookPath("tesseract"); err != nil { + return "", fmt.Errorf("tesseract not found in PATH: %w", err) + } + + tmpFile, err := os.CreateTemp("", "trufflehog-ocr-*.png") + if err != nil { + return "", fmt.Errorf("error creating temp file: %w", err) + } + defer os.Remove(tmpFile.Name()) + + if _, err := tmpFile.Write(imageData); err != nil { + tmpFile.Close() + return "", fmt.Errorf("error writing temp file: %w", err) + } + tmpFile.Close() + + args := []string{tmpFile.Name(), "stdout", "--oem", "1", "--psm", "6", "--dpi", "300", + "-c", "preserve_interword_spaces=1", + "-c", "textord_space_size_is_variable=0", + // Restrict to printable ASCII — secrets are always ASCII and this prevents + // Tesseract from substituting Unicode lookalikes (curly quotes, em-dash, etc.) + // which would cause secret patterns to fail to match. + "-c", `tessedit_char_whitelist= !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_` + "`" + `abcdefghijklmnopqrstuvwxyz{|}~`, + } + if dir := tessdataDir(); dir != "" { + args = append(args, "--tessdata-dir", dir) + } + + var stdout, stderr bytes.Buffer + cmd := exec.CommandContext(ctx, "tesseract", args...) + cmd.Stdout = &stdout + cmd.Stderr = &stderr + + if err := cmd.Run(); err != nil { + return "", fmt.Errorf("tesseract failed: %w (stderr: %s)", err, stderr.String()) + } + + return stdout.String(), nil +} + +// tessdataDir returns the tessdata directory to use, preferring tessdata-best +// models when available. Resolution order: +// 1. TESSDATA_PREFIX environment variable (explicit user override) +// 2. ~/.tessdata-best (conventional install location for tessdata-best) +// 3. Empty string → let Tesseract use its compiled-in default +func tessdataDir() string { + if v := os.Getenv("TESSDATA_PREFIX"); v != "" { + return v + } + if home, err := os.UserHomeDir(); err == nil { + p := filepath.Join(home, ".tessdata-best") + if _, err := os.Stat(filepath.Join(p, "eng.traineddata")); err == nil { + return p + } + } + return "" +} diff --git a/pkg/pb/configpb/config.pb.go b/pkg/pb/configpb/config.pb.go index cc760fcba20a..2f0e9bb0c680 100644 --- a/pkg/pb/configpb/config.pb.go +++ b/pkg/pb/configpb/config.pb.go @@ -7,6 +7,7 @@ package configpb import ( + _ "github.com/envoyproxy/protoc-gen-validate/validate" custom_detectorspb "github.com/trufflesecurity/trufflehog/v3/pkg/pb/custom_detectorspb" sourcespb "github.com/trufflesecurity/trufflehog/v3/pkg/pb/sourcespb" protoreflect "google.golang.org/protobuf/reflect/protoreflect" @@ -29,6 +30,7 @@ type Config struct { Sources []*sourcespb.LocalSource `protobuf:"bytes,9,rep,name=sources,proto3" json:"sources,omitempty"` Detectors []*custom_detectorspb.CustomRegex `protobuf:"bytes,13,rep,name=detectors,proto3" json:"detectors,omitempty"` + Ocr *OCRConfig `protobuf:"bytes,14,opt,name=ocr,proto3" json:"ocr,omitempty"` } func (x *Config) Reset() { @@ -77,25 +79,669 @@ func (x *Config) GetDetectors() []*custom_detectorspb.CustomRegex { return nil } +func (x *Config) GetOcr() *OCRConfig { + if x != nil { + return x.Ocr + } + return nil +} + +// OCRConfig selects which OCR backend to use when --enable-ocr is active. +// Exactly one provider must be set. If the ocr block is omitted entirely, +// TruffleHog falls back to the local Tesseract binary (same as --enable-ocr alone). +type OCRConfig struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Provider: + // + // *OCRConfig_Tesseract + // *OCRConfig_Google + // *OCRConfig_Openai + // *OCRConfig_Custom + Provider isOCRConfig_Provider `protobuf_oneof:"provider"` +} + +func (x *OCRConfig) Reset() { + *x = OCRConfig{} + if protoimpl.UnsafeEnabled { + mi := &file_config_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *OCRConfig) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*OCRConfig) ProtoMessage() {} + +func (x *OCRConfig) ProtoReflect() protoreflect.Message { + mi := &file_config_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use OCRConfig.ProtoReflect.Descriptor instead. +func (*OCRConfig) Descriptor() ([]byte, []int) { + return file_config_proto_rawDescGZIP(), []int{1} +} + +func (m *OCRConfig) GetProvider() isOCRConfig_Provider { + if m != nil { + return m.Provider + } + return nil +} + +func (x *OCRConfig) GetTesseract() *TesseractOCRConfig { + if x, ok := x.GetProvider().(*OCRConfig_Tesseract); ok { + return x.Tesseract + } + return nil +} + +func (x *OCRConfig) GetGoogle() *GoogleOCRConfig { + if x, ok := x.GetProvider().(*OCRConfig_Google); ok { + return x.Google + } + return nil +} + +func (x *OCRConfig) GetOpenai() *OpenAIOCRConfig { + if x, ok := x.GetProvider().(*OCRConfig_Openai); ok { + return x.Openai + } + return nil +} + +func (x *OCRConfig) GetCustom() *CustomOCRConfig { + if x, ok := x.GetProvider().(*OCRConfig_Custom); ok { + return x.Custom + } + return nil +} + +type isOCRConfig_Provider interface { + isOCRConfig_Provider() +} + +type OCRConfig_Tesseract struct { + Tesseract *TesseractOCRConfig `protobuf:"bytes,1,opt,name=tesseract,proto3,oneof"` +} + +type OCRConfig_Google struct { + Google *GoogleOCRConfig `protobuf:"bytes,2,opt,name=google,proto3,oneof"` +} + +type OCRConfig_Openai struct { + Openai *OpenAIOCRConfig `protobuf:"bytes,3,opt,name=openai,proto3,oneof"` +} + +type OCRConfig_Custom struct { + Custom *CustomOCRConfig `protobuf:"bytes,4,opt,name=custom,proto3,oneof"` +} + +func (*OCRConfig_Tesseract) isOCRConfig_Provider() {} + +func (*OCRConfig_Google) isOCRConfig_Provider() {} + +func (*OCRConfig_Openai) isOCRConfig_Provider() {} + +func (*OCRConfig_Custom) isOCRConfig_Provider() {} + +// TesseractOCRConfig uses the local Tesseract binary. +// Included for explicitness; reserved for future per-field options (e.g. tessdata path). +type TesseractOCRConfig struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *TesseractOCRConfig) Reset() { + *x = TesseractOCRConfig{} + if protoimpl.UnsafeEnabled { + mi := &file_config_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TesseractOCRConfig) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TesseractOCRConfig) ProtoMessage() {} + +func (x *TesseractOCRConfig) ProtoReflect() protoreflect.Message { + mi := &file_config_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TesseractOCRConfig.ProtoReflect.Descriptor instead. +func (*TesseractOCRConfig) Descriptor() ([]byte, []int) { + return file_config_proto_rawDescGZIP(), []int{2} +} + +// GoogleOCRConfig is a preset for the Google Cloud Vision TEXT_DETECTION API. +// Exactly one auth method must be set. Service account credentials are recommended +// over API keys for production use. +type GoogleOCRConfig struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Auth: + // + // *GoogleOCRConfig_CredentialsFile + // *GoogleOCRConfig_ApiKey + Auth isGoogleOCRConfig_Auth `protobuf_oneof:"auth"` +} + +func (x *GoogleOCRConfig) Reset() { + *x = GoogleOCRConfig{} + if protoimpl.UnsafeEnabled { + mi := &file_config_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GoogleOCRConfig) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GoogleOCRConfig) ProtoMessage() {} + +func (x *GoogleOCRConfig) ProtoReflect() protoreflect.Message { + mi := &file_config_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GoogleOCRConfig.ProtoReflect.Descriptor instead. +func (*GoogleOCRConfig) Descriptor() ([]byte, []int) { + return file_config_proto_rawDescGZIP(), []int{3} +} + +func (m *GoogleOCRConfig) GetAuth() isGoogleOCRConfig_Auth { + if m != nil { + return m.Auth + } + return nil +} + +func (x *GoogleOCRConfig) GetCredentialsFile() string { + if x, ok := x.GetAuth().(*GoogleOCRConfig_CredentialsFile); ok { + return x.CredentialsFile + } + return "" +} + +func (x *GoogleOCRConfig) GetApiKey() string { + if x, ok := x.GetAuth().(*GoogleOCRConfig_ApiKey); ok { + return x.ApiKey + } + return "" +} + +type isGoogleOCRConfig_Auth interface { + isGoogleOCRConfig_Auth() +} + +type GoogleOCRConfig_CredentialsFile struct { + // credentials_file is the path to a Google service account JSON key file. + // Supports ${ENV_VAR} expansion. Recommended for production. + CredentialsFile string `protobuf:"bytes,1,opt,name=credentials_file,json=credentialsFile,proto3,oneof"` +} + +type GoogleOCRConfig_ApiKey struct { + // api_key is a Google Cloud API key. Simpler but less secure than a service account. + // Supports ${ENV_VAR} expansion. + ApiKey string `protobuf:"bytes,2,opt,name=api_key,json=apiKey,proto3,oneof"` +} + +func (*GoogleOCRConfig_CredentialsFile) isGoogleOCRConfig_Auth() {} + +func (*GoogleOCRConfig_ApiKey) isGoogleOCRConfig_Auth() {} + +// OpenAIOCRConfig is a preset for the OpenAI chat completions vision API (GPT-4o by default). +type OpenAIOCRConfig struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // API key for the OpenAI API. Supports ${ENV_VAR} expansion. + ApiKey string `protobuf:"bytes,1,opt,name=api_key,json=apiKey,proto3" json:"api_key,omitempty"` + // Model to use (default: "gpt-4o"). + Model string `protobuf:"bytes,2,opt,name=model,proto3" json:"model,omitempty"` +} + +func (x *OpenAIOCRConfig) Reset() { + *x = OpenAIOCRConfig{} + if protoimpl.UnsafeEnabled { + mi := &file_config_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *OpenAIOCRConfig) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*OpenAIOCRConfig) ProtoMessage() {} + +func (x *OpenAIOCRConfig) ProtoReflect() protoreflect.Message { + mi := &file_config_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use OpenAIOCRConfig.ProtoReflect.Descriptor instead. +func (*OpenAIOCRConfig) Descriptor() ([]byte, []int) { + return file_config_proto_rawDescGZIP(), []int{4} +} + +func (x *OpenAIOCRConfig) GetApiKey() string { + if x != nil { + return x.ApiKey + } + return "" +} + +func (x *OpenAIOCRConfig) GetModel() string { + if x != nil { + return x.Model + } + return "" +} + +// CustomOCRConfig describes a generic HTTP OCR server. +type CustomOCRConfig struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Full URL of the OCR endpoint. + Endpoint string `protobuf:"bytes,1,opt,name=endpoint,proto3" json:"endpoint,omitempty"` + Auth *OCRAuthConfig `protobuf:"bytes,2,opt,name=auth,proto3" json:"auth,omitempty"` + Request *OCRRequestConfig `protobuf:"bytes,3,opt,name=request,proto3" json:"request,omitempty"` + Response *OCRResponseConfig `protobuf:"bytes,4,opt,name=response,proto3" json:"response,omitempty"` +} + +func (x *CustomOCRConfig) Reset() { + *x = CustomOCRConfig{} + if protoimpl.UnsafeEnabled { + mi := &file_config_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CustomOCRConfig) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CustomOCRConfig) ProtoMessage() {} + +func (x *CustomOCRConfig) ProtoReflect() protoreflect.Message { + mi := &file_config_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CustomOCRConfig.ProtoReflect.Descriptor instead. +func (*CustomOCRConfig) Descriptor() ([]byte, []int) { + return file_config_proto_rawDescGZIP(), []int{5} +} + +func (x *CustomOCRConfig) GetEndpoint() string { + if x != nil { + return x.Endpoint + } + return "" +} + +func (x *CustomOCRConfig) GetAuth() *OCRAuthConfig { + if x != nil { + return x.Auth + } + return nil +} + +func (x *CustomOCRConfig) GetRequest() *OCRRequestConfig { + if x != nil { + return x.Request + } + return nil +} + +func (x *CustomOCRConfig) GetResponse() *OCRResponseConfig { + if x != nil { + return x.Response + } + return nil +} + +// OCRAuthConfig describes how to authenticate against the OCR endpoint. +type OCRAuthConfig struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // type must be one of: bearer, header, api_key_query, basic. + Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` + // value is the token or API key. Supports ${ENV_VAR} expansion. + Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` + // header_name is used when type is "header" (e.g. "X-Api-Key"). + HeaderName string `protobuf:"bytes,3,opt,name=header_name,json=headerName,proto3" json:"header_name,omitempty"` + // param_name is the query parameter name used when type is "api_key_query". + ParamName string `protobuf:"bytes,4,opt,name=param_name,json=paramName,proto3" json:"param_name,omitempty"` + // username / password are used when type is "basic". Both support ${ENV_VAR} expansion. + Username string `protobuf:"bytes,5,opt,name=username,proto3" json:"username,omitempty"` + Password string `protobuf:"bytes,6,opt,name=password,proto3" json:"password,omitempty"` +} + +func (x *OCRAuthConfig) Reset() { + *x = OCRAuthConfig{} + if protoimpl.UnsafeEnabled { + mi := &file_config_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *OCRAuthConfig) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*OCRAuthConfig) ProtoMessage() {} + +func (x *OCRAuthConfig) ProtoReflect() protoreflect.Message { + mi := &file_config_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use OCRAuthConfig.ProtoReflect.Descriptor instead. +func (*OCRAuthConfig) Descriptor() ([]byte, []int) { + return file_config_proto_rawDescGZIP(), []int{6} +} + +func (x *OCRAuthConfig) GetType() string { + if x != nil { + return x.Type + } + return "" +} + +func (x *OCRAuthConfig) GetValue() string { + if x != nil { + return x.Value + } + return "" +} + +func (x *OCRAuthConfig) GetHeaderName() string { + if x != nil { + return x.HeaderName + } + return "" +} + +func (x *OCRAuthConfig) GetParamName() string { + if x != nil { + return x.ParamName + } + return "" +} + +func (x *OCRAuthConfig) GetUsername() string { + if x != nil { + return x.Username + } + return "" +} + +func (x *OCRAuthConfig) GetPassword() string { + if x != nil { + return x.Password + } + return "" +} + +// OCRRequestConfig controls how the HTTP request body is constructed. +type OCRRequestConfig struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // content_type of the request (default: "application/json"). + ContentType string `protobuf:"bytes,1,opt,name=content_type,json=contentType,proto3" json:"content_type,omitempty"` + // body_template is a Go text/template string. + // Available variables: {{.Base64Image}}, {{.MimeType}}. + BodyTemplate string `protobuf:"bytes,2,opt,name=body_template,json=bodyTemplate,proto3" json:"body_template,omitempty"` +} + +func (x *OCRRequestConfig) Reset() { + *x = OCRRequestConfig{} + if protoimpl.UnsafeEnabled { + mi := &file_config_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *OCRRequestConfig) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*OCRRequestConfig) ProtoMessage() {} + +func (x *OCRRequestConfig) ProtoReflect() protoreflect.Message { + mi := &file_config_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use OCRRequestConfig.ProtoReflect.Descriptor instead. +func (*OCRRequestConfig) Descriptor() ([]byte, []int) { + return file_config_proto_rawDescGZIP(), []int{7} +} + +func (x *OCRRequestConfig) GetContentType() string { + if x != nil { + return x.ContentType + } + return "" +} + +func (x *OCRRequestConfig) GetBodyTemplate() string { + if x != nil { + return x.BodyTemplate + } + return "" +} + +// OCRResponseConfig controls how the text is extracted from the HTTP response. +type OCRResponseConfig struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // text_path is a dot-separated path into the JSON response body. + // Examples: "text", "result.text", "choices.0.message.content" + TextPath string `protobuf:"bytes,1,opt,name=text_path,json=textPath,proto3" json:"text_path,omitempty"` +} + +func (x *OCRResponseConfig) Reset() { + *x = OCRResponseConfig{} + if protoimpl.UnsafeEnabled { + mi := &file_config_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *OCRResponseConfig) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*OCRResponseConfig) ProtoMessage() {} + +func (x *OCRResponseConfig) ProtoReflect() protoreflect.Message { + mi := &file_config_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use OCRResponseConfig.ProtoReflect.Descriptor instead. +func (*OCRResponseConfig) Descriptor() ([]byte, []int) { + return file_config_proto_rawDescGZIP(), []int{8} +} + +func (x *OCRResponseConfig) GetTextPath() string { + if x != nil { + return x.TextPath + } + return "" +} + var File_config_proto protoreflect.FileDescriptor var file_config_proto_rawDesc = []byte{ 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, 0x0d, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x16, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x64, 0x65, - 0x74, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x75, 0x0a, - 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2e, 0x0a, 0x07, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x73, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x07, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x3b, 0x0a, 0x09, 0x64, 0x65, 0x74, 0x65, 0x63, - 0x74, 0x6f, 0x72, 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, 0x75, 0x73, - 0x74, 0x6f, 0x6d, 0x5f, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x2e, 0x43, 0x75, - 0x73, 0x74, 0x6f, 0x6d, 0x52, 0x65, 0x67, 0x65, 0x78, 0x52, 0x09, 0x64, 0x65, 0x74, 0x65, 0x63, - 0x74, 0x6f, 0x72, 0x73, 0x42, 0x3a, 0x5a, 0x38, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, - 0x6f, 0x6d, 0x2f, 0x74, 0x72, 0x75, 0x66, 0x66, 0x6c, 0x65, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, - 0x74, 0x79, 0x2f, 0x74, 0x72, 0x75, 0x66, 0x66, 0x6c, 0x65, 0x68, 0x6f, 0x67, 0x2f, 0x76, 0x33, - 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x62, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x70, 0x62, - 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x74, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x76, + 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x9a, 0x01, 0x0a, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x12, 0x2e, 0x0a, 0x07, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x09, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x4c, 0x6f, 0x63, + 0x61, 0x6c, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x07, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x73, 0x12, 0x3b, 0x0a, 0x09, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x18, 0x0d, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x64, 0x65, + 0x74, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x2e, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x52, 0x65, + 0x67, 0x65, 0x78, 0x52, 0x09, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x12, 0x23, + 0x0a, 0x03, 0x6f, 0x63, 0x72, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4f, 0x43, 0x52, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x03, + 0x6f, 0x63, 0x72, 0x22, 0xec, 0x01, 0x0a, 0x09, 0x4f, 0x43, 0x52, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x12, 0x3a, 0x0a, 0x09, 0x74, 0x65, 0x73, 0x73, 0x65, 0x72, 0x61, 0x63, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x54, 0x65, + 0x73, 0x73, 0x65, 0x72, 0x61, 0x63, 0x74, 0x4f, 0x43, 0x52, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x48, 0x00, 0x52, 0x09, 0x74, 0x65, 0x73, 0x73, 0x65, 0x72, 0x61, 0x63, 0x74, 0x12, 0x31, 0x0a, + 0x06, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x4f, 0x43, 0x52, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x00, 0x52, 0x06, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x12, 0x31, 0x0a, 0x06, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x69, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x41, 0x49, + 0x4f, 0x43, 0x52, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x00, 0x52, 0x06, 0x6f, 0x70, 0x65, + 0x6e, 0x61, 0x69, 0x12, 0x31, 0x0a, 0x06, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x75, 0x73, + 0x74, 0x6f, 0x6d, 0x4f, 0x43, 0x52, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x00, 0x52, 0x06, + 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x42, 0x0a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, + 0x65, 0x72, 0x22, 0x14, 0x0a, 0x12, 0x54, 0x65, 0x73, 0x73, 0x65, 0x72, 0x61, 0x63, 0x74, 0x4f, + 0x43, 0x52, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x61, 0x0a, 0x0f, 0x47, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x4f, 0x43, 0x52, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2b, 0x0a, 0x10, 0x63, + 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x61, 0x6c, 0x73, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x19, 0x0a, 0x07, 0x61, 0x70, 0x69, 0x5f, + 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x06, 0x61, 0x70, 0x69, + 0x4b, 0x65, 0x79, 0x42, 0x06, 0x0a, 0x04, 0x61, 0x75, 0x74, 0x68, 0x22, 0x40, 0x0a, 0x0f, 0x4f, + 0x70, 0x65, 0x6e, 0x41, 0x49, 0x4f, 0x43, 0x52, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x17, + 0x0a, 0x07, 0x61, 0x70, 0x69, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x61, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x22, 0xcd, 0x01, + 0x0a, 0x0f, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x4f, 0x43, 0x52, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x12, 0x24, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x90, 0x01, 0x01, 0x52, 0x08, 0x65, + 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x29, 0x0a, 0x04, 0x61, 0x75, 0x74, 0x68, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4f, + 0x43, 0x52, 0x41, 0x75, 0x74, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x04, 0x61, 0x75, + 0x74, 0x68, 0x12, 0x32, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4f, 0x43, 0x52, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x07, 0x72, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x35, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x2e, 0x4f, 0x43, 0x52, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x52, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xb1, 0x01, + 0x0a, 0x0d, 0x4f, 0x43, 0x52, 0x41, 0x75, 0x74, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, + 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, + 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x68, 0x65, 0x61, + 0x64, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, + 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x61, + 0x72, 0x61, 0x6d, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x70, 0x61, 0x72, 0x61, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, + 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, + 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, + 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, + 0x64, 0x22, 0x5a, 0x0a, 0x10, 0x4f, 0x43, 0x52, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x62, 0x6f, 0x64, 0x79, + 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0c, 0x62, 0x6f, 0x64, 0x79, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x22, 0x30, 0x0a, + 0x11, 0x4f, 0x43, 0x52, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x65, 0x78, 0x74, 0x50, 0x61, 0x74, 0x68, 0x42, + 0x3a, 0x5a, 0x38, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x72, + 0x75, 0x66, 0x66, 0x6c, 0x65, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2f, 0x74, 0x72, + 0x75, 0x66, 0x66, 0x6c, 0x65, 0x68, 0x6f, 0x67, 0x2f, 0x76, 0x33, 0x2f, 0x70, 0x6b, 0x67, 0x2f, + 0x70, 0x62, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, } var ( @@ -110,20 +756,36 @@ func file_config_proto_rawDescGZIP() []byte { return file_config_proto_rawDescData } -var file_config_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_config_proto_msgTypes = make([]protoimpl.MessageInfo, 9) var file_config_proto_goTypes = []interface{}{ (*Config)(nil), // 0: config.Config - (*sourcespb.LocalSource)(nil), // 1: sources.LocalSource - (*custom_detectorspb.CustomRegex)(nil), // 2: custom_detectors.CustomRegex + (*OCRConfig)(nil), // 1: config.OCRConfig + (*TesseractOCRConfig)(nil), // 2: config.TesseractOCRConfig + (*GoogleOCRConfig)(nil), // 3: config.GoogleOCRConfig + (*OpenAIOCRConfig)(nil), // 4: config.OpenAIOCRConfig + (*CustomOCRConfig)(nil), // 5: config.CustomOCRConfig + (*OCRAuthConfig)(nil), // 6: config.OCRAuthConfig + (*OCRRequestConfig)(nil), // 7: config.OCRRequestConfig + (*OCRResponseConfig)(nil), // 8: config.OCRResponseConfig + (*sourcespb.LocalSource)(nil), // 9: sources.LocalSource + (*custom_detectorspb.CustomRegex)(nil), // 10: custom_detectors.CustomRegex } var file_config_proto_depIdxs = []int32{ - 1, // 0: config.Config.sources:type_name -> sources.LocalSource - 2, // 1: config.Config.detectors:type_name -> custom_detectors.CustomRegex - 2, // [2:2] is the sub-list for method output_type - 2, // [2:2] is the sub-list for method input_type - 2, // [2:2] is the sub-list for extension type_name - 2, // [2:2] is the sub-list for extension extendee - 0, // [0:2] is the sub-list for field type_name + 9, // 0: config.Config.sources:type_name -> sources.LocalSource + 10, // 1: config.Config.detectors:type_name -> custom_detectors.CustomRegex + 1, // 2: config.Config.ocr:type_name -> config.OCRConfig + 2, // 3: config.OCRConfig.tesseract:type_name -> config.TesseractOCRConfig + 3, // 4: config.OCRConfig.google:type_name -> config.GoogleOCRConfig + 4, // 5: config.OCRConfig.openai:type_name -> config.OpenAIOCRConfig + 5, // 6: config.OCRConfig.custom:type_name -> config.CustomOCRConfig + 6, // 7: config.CustomOCRConfig.auth:type_name -> config.OCRAuthConfig + 7, // 8: config.CustomOCRConfig.request:type_name -> config.OCRRequestConfig + 8, // 9: config.CustomOCRConfig.response:type_name -> config.OCRResponseConfig + 10, // [10:10] is the sub-list for method output_type + 10, // [10:10] is the sub-list for method input_type + 10, // [10:10] is the sub-list for extension type_name + 10, // [10:10] is the sub-list for extension extendee + 0, // [0:10] is the sub-list for field type_name } func init() { file_config_proto_init() } @@ -144,6 +806,112 @@ func file_config_proto_init() { return nil } } + file_config_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*OCRConfig); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_config_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TesseractOCRConfig); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_config_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GoogleOCRConfig); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_config_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*OpenAIOCRConfig); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_config_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CustomOCRConfig); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_config_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*OCRAuthConfig); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_config_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*OCRRequestConfig); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_config_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*OCRResponseConfig); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_config_proto_msgTypes[1].OneofWrappers = []interface{}{ + (*OCRConfig_Tesseract)(nil), + (*OCRConfig_Google)(nil), + (*OCRConfig_Openai)(nil), + (*OCRConfig_Custom)(nil), + } + file_config_proto_msgTypes[3].OneofWrappers = []interface{}{ + (*GoogleOCRConfig_CredentialsFile)(nil), + (*GoogleOCRConfig_ApiKey)(nil), } type x struct{} out := protoimpl.TypeBuilder{ @@ -151,7 +919,7 @@ func file_config_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_config_proto_rawDesc, NumEnums: 0, - NumMessages: 1, + NumMessages: 9, NumExtensions: 0, NumServices: 0, }, diff --git a/pkg/pb/configpb/config.pb.validate.go b/pkg/pb/configpb/config.pb.validate.go index e02545a95e0a..ef20f7260bc6 100644 --- a/pkg/pb/configpb/config.pb.validate.go +++ b/pkg/pb/configpb/config.pb.validate.go @@ -124,6 +124,35 @@ func (m *Config) validate(all bool) error { } + if all { + switch v := interface{}(m.GetOcr()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ConfigValidationError{ + field: "Ocr", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ConfigValidationError{ + field: "Ocr", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetOcr()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ConfigValidationError{ + field: "Ocr", + reason: "embedded message failed validation", + cause: err, + } + } + } + if len(errors) > 0 { return ConfigMultiError(errors) } @@ -200,3 +229,1125 @@ var _ interface { Cause() error ErrorName() string } = ConfigValidationError{} + +// Validate checks the field values on OCRConfig with the rules defined in the +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. +func (m *OCRConfig) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on OCRConfig with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in OCRConfigMultiError, or nil +// if none found. +func (m *OCRConfig) ValidateAll() error { + return m.validate(true) +} + +func (m *OCRConfig) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + switch v := m.Provider.(type) { + case *OCRConfig_Tesseract: + if v == nil { + err := OCRConfigValidationError{ + field: "Provider", + reason: "oneof value cannot be a typed-nil", + } + if !all { + return err + } + errors = append(errors, err) + } + + if all { + switch v := interface{}(m.GetTesseract()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, OCRConfigValidationError{ + field: "Tesseract", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, OCRConfigValidationError{ + field: "Tesseract", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetTesseract()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return OCRConfigValidationError{ + field: "Tesseract", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *OCRConfig_Google: + if v == nil { + err := OCRConfigValidationError{ + field: "Provider", + reason: "oneof value cannot be a typed-nil", + } + if !all { + return err + } + errors = append(errors, err) + } + + if all { + switch v := interface{}(m.GetGoogle()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, OCRConfigValidationError{ + field: "Google", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, OCRConfigValidationError{ + field: "Google", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetGoogle()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return OCRConfigValidationError{ + field: "Google", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *OCRConfig_Openai: + if v == nil { + err := OCRConfigValidationError{ + field: "Provider", + reason: "oneof value cannot be a typed-nil", + } + if !all { + return err + } + errors = append(errors, err) + } + + if all { + switch v := interface{}(m.GetOpenai()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, OCRConfigValidationError{ + field: "Openai", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, OCRConfigValidationError{ + field: "Openai", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetOpenai()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return OCRConfigValidationError{ + field: "Openai", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *OCRConfig_Custom: + if v == nil { + err := OCRConfigValidationError{ + field: "Provider", + reason: "oneof value cannot be a typed-nil", + } + if !all { + return err + } + errors = append(errors, err) + } + + if all { + switch v := interface{}(m.GetCustom()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, OCRConfigValidationError{ + field: "Custom", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, OCRConfigValidationError{ + field: "Custom", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetCustom()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return OCRConfigValidationError{ + field: "Custom", + reason: "embedded message failed validation", + cause: err, + } + } + } + + default: + _ = v // ensures v is used + } + + if len(errors) > 0 { + return OCRConfigMultiError(errors) + } + + return nil +} + +// OCRConfigMultiError is an error wrapping multiple validation errors returned +// by OCRConfig.ValidateAll() if the designated constraints aren't met. +type OCRConfigMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m OCRConfigMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m OCRConfigMultiError) AllErrors() []error { return m } + +// OCRConfigValidationError is the validation error returned by +// OCRConfig.Validate if the designated constraints aren't met. +type OCRConfigValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e OCRConfigValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e OCRConfigValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e OCRConfigValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e OCRConfigValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e OCRConfigValidationError) ErrorName() string { return "OCRConfigValidationError" } + +// Error satisfies the builtin error interface +func (e OCRConfigValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sOCRConfig.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = OCRConfigValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = OCRConfigValidationError{} + +// Validate checks the field values on TesseractOCRConfig with the rules +// defined in the proto definition for this message. If any rules are +// violated, the first error encountered is returned, or nil if there are no violations. +func (m *TesseractOCRConfig) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on TesseractOCRConfig with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// TesseractOCRConfigMultiError, or nil if none found. +func (m *TesseractOCRConfig) ValidateAll() error { + return m.validate(true) +} + +func (m *TesseractOCRConfig) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + if len(errors) > 0 { + return TesseractOCRConfigMultiError(errors) + } + + return nil +} + +// TesseractOCRConfigMultiError is an error wrapping multiple validation errors +// returned by TesseractOCRConfig.ValidateAll() if the designated constraints +// aren't met. +type TesseractOCRConfigMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m TesseractOCRConfigMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m TesseractOCRConfigMultiError) AllErrors() []error { return m } + +// TesseractOCRConfigValidationError is the validation error returned by +// TesseractOCRConfig.Validate if the designated constraints aren't met. +type TesseractOCRConfigValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e TesseractOCRConfigValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e TesseractOCRConfigValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e TesseractOCRConfigValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e TesseractOCRConfigValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e TesseractOCRConfigValidationError) ErrorName() string { + return "TesseractOCRConfigValidationError" +} + +// Error satisfies the builtin error interface +func (e TesseractOCRConfigValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sTesseractOCRConfig.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = TesseractOCRConfigValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = TesseractOCRConfigValidationError{} + +// Validate checks the field values on GoogleOCRConfig with the rules defined +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. +func (m *GoogleOCRConfig) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GoogleOCRConfig with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GoogleOCRConfigMultiError, or nil if none found. +func (m *GoogleOCRConfig) ValidateAll() error { + return m.validate(true) +} + +func (m *GoogleOCRConfig) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + switch v := m.Auth.(type) { + case *GoogleOCRConfig_CredentialsFile: + if v == nil { + err := GoogleOCRConfigValidationError{ + field: "Auth", + reason: "oneof value cannot be a typed-nil", + } + if !all { + return err + } + errors = append(errors, err) + } + // no validation rules for CredentialsFile + case *GoogleOCRConfig_ApiKey: + if v == nil { + err := GoogleOCRConfigValidationError{ + field: "Auth", + reason: "oneof value cannot be a typed-nil", + } + if !all { + return err + } + errors = append(errors, err) + } + // no validation rules for ApiKey + default: + _ = v // ensures v is used + } + + if len(errors) > 0 { + return GoogleOCRConfigMultiError(errors) + } + + return nil +} + +// GoogleOCRConfigMultiError is an error wrapping multiple validation errors +// returned by GoogleOCRConfig.ValidateAll() if the designated constraints +// aren't met. +type GoogleOCRConfigMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GoogleOCRConfigMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GoogleOCRConfigMultiError) AllErrors() []error { return m } + +// GoogleOCRConfigValidationError is the validation error returned by +// GoogleOCRConfig.Validate if the designated constraints aren't met. +type GoogleOCRConfigValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e GoogleOCRConfigValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e GoogleOCRConfigValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e GoogleOCRConfigValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e GoogleOCRConfigValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e GoogleOCRConfigValidationError) ErrorName() string { return "GoogleOCRConfigValidationError" } + +// Error satisfies the builtin error interface +func (e GoogleOCRConfigValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sGoogleOCRConfig.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = GoogleOCRConfigValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = GoogleOCRConfigValidationError{} + +// Validate checks the field values on OpenAIOCRConfig with the rules defined +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. +func (m *OpenAIOCRConfig) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on OpenAIOCRConfig with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// OpenAIOCRConfigMultiError, or nil if none found. +func (m *OpenAIOCRConfig) ValidateAll() error { + return m.validate(true) +} + +func (m *OpenAIOCRConfig) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for ApiKey + + // no validation rules for Model + + if len(errors) > 0 { + return OpenAIOCRConfigMultiError(errors) + } + + return nil +} + +// OpenAIOCRConfigMultiError is an error wrapping multiple validation errors +// returned by OpenAIOCRConfig.ValidateAll() if the designated constraints +// aren't met. +type OpenAIOCRConfigMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m OpenAIOCRConfigMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m OpenAIOCRConfigMultiError) AllErrors() []error { return m } + +// OpenAIOCRConfigValidationError is the validation error returned by +// OpenAIOCRConfig.Validate if the designated constraints aren't met. +type OpenAIOCRConfigValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e OpenAIOCRConfigValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e OpenAIOCRConfigValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e OpenAIOCRConfigValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e OpenAIOCRConfigValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e OpenAIOCRConfigValidationError) ErrorName() string { return "OpenAIOCRConfigValidationError" } + +// Error satisfies the builtin error interface +func (e OpenAIOCRConfigValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sOpenAIOCRConfig.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = OpenAIOCRConfigValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = OpenAIOCRConfigValidationError{} + +// Validate checks the field values on CustomOCRConfig with the rules defined +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. +func (m *CustomOCRConfig) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CustomOCRConfig with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// CustomOCRConfigMultiError, or nil if none found. +func (m *CustomOCRConfig) ValidateAll() error { + return m.validate(true) +} + +func (m *CustomOCRConfig) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + if _, err := url.Parse(m.GetEndpoint()); err != nil { + err = CustomOCRConfigValidationError{ + field: "Endpoint", + reason: "value must be a valid URI", + cause: err, + } + if !all { + return err + } + errors = append(errors, err) + } + + if all { + switch v := interface{}(m.GetAuth()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CustomOCRConfigValidationError{ + field: "Auth", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CustomOCRConfigValidationError{ + field: "Auth", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetAuth()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return CustomOCRConfigValidationError{ + field: "Auth", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if all { + switch v := interface{}(m.GetRequest()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CustomOCRConfigValidationError{ + field: "Request", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CustomOCRConfigValidationError{ + field: "Request", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetRequest()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return CustomOCRConfigValidationError{ + field: "Request", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if all { + switch v := interface{}(m.GetResponse()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CustomOCRConfigValidationError{ + field: "Response", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CustomOCRConfigValidationError{ + field: "Response", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetResponse()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return CustomOCRConfigValidationError{ + field: "Response", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if len(errors) > 0 { + return CustomOCRConfigMultiError(errors) + } + + return nil +} + +// CustomOCRConfigMultiError is an error wrapping multiple validation errors +// returned by CustomOCRConfig.ValidateAll() if the designated constraints +// aren't met. +type CustomOCRConfigMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CustomOCRConfigMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CustomOCRConfigMultiError) AllErrors() []error { return m } + +// CustomOCRConfigValidationError is the validation error returned by +// CustomOCRConfig.Validate if the designated constraints aren't met. +type CustomOCRConfigValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e CustomOCRConfigValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e CustomOCRConfigValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e CustomOCRConfigValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e CustomOCRConfigValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e CustomOCRConfigValidationError) ErrorName() string { return "CustomOCRConfigValidationError" } + +// Error satisfies the builtin error interface +func (e CustomOCRConfigValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sCustomOCRConfig.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = CustomOCRConfigValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = CustomOCRConfigValidationError{} + +// Validate checks the field values on OCRAuthConfig with the rules defined in +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. +func (m *OCRAuthConfig) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on OCRAuthConfig with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in OCRAuthConfigMultiError, or +// nil if none found. +func (m *OCRAuthConfig) ValidateAll() error { + return m.validate(true) +} + +func (m *OCRAuthConfig) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for Type + + // no validation rules for Value + + // no validation rules for HeaderName + + // no validation rules for ParamName + + // no validation rules for Username + + // no validation rules for Password + + if len(errors) > 0 { + return OCRAuthConfigMultiError(errors) + } + + return nil +} + +// OCRAuthConfigMultiError is an error wrapping multiple validation errors +// returned by OCRAuthConfig.ValidateAll() if the designated constraints +// aren't met. +type OCRAuthConfigMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m OCRAuthConfigMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m OCRAuthConfigMultiError) AllErrors() []error { return m } + +// OCRAuthConfigValidationError is the validation error returned by +// OCRAuthConfig.Validate if the designated constraints aren't met. +type OCRAuthConfigValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e OCRAuthConfigValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e OCRAuthConfigValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e OCRAuthConfigValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e OCRAuthConfigValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e OCRAuthConfigValidationError) ErrorName() string { return "OCRAuthConfigValidationError" } + +// Error satisfies the builtin error interface +func (e OCRAuthConfigValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sOCRAuthConfig.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = OCRAuthConfigValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = OCRAuthConfigValidationError{} + +// Validate checks the field values on OCRRequestConfig with the rules defined +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. +func (m *OCRRequestConfig) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on OCRRequestConfig with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// OCRRequestConfigMultiError, or nil if none found. +func (m *OCRRequestConfig) ValidateAll() error { + return m.validate(true) +} + +func (m *OCRRequestConfig) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for ContentType + + // no validation rules for BodyTemplate + + if len(errors) > 0 { + return OCRRequestConfigMultiError(errors) + } + + return nil +} + +// OCRRequestConfigMultiError is an error wrapping multiple validation errors +// returned by OCRRequestConfig.ValidateAll() if the designated constraints +// aren't met. +type OCRRequestConfigMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m OCRRequestConfigMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m OCRRequestConfigMultiError) AllErrors() []error { return m } + +// OCRRequestConfigValidationError is the validation error returned by +// OCRRequestConfig.Validate if the designated constraints aren't met. +type OCRRequestConfigValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e OCRRequestConfigValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e OCRRequestConfigValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e OCRRequestConfigValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e OCRRequestConfigValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e OCRRequestConfigValidationError) ErrorName() string { return "OCRRequestConfigValidationError" } + +// Error satisfies the builtin error interface +func (e OCRRequestConfigValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sOCRRequestConfig.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = OCRRequestConfigValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = OCRRequestConfigValidationError{} + +// Validate checks the field values on OCRResponseConfig with the rules defined +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. +func (m *OCRResponseConfig) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on OCRResponseConfig with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// OCRResponseConfigMultiError, or nil if none found. +func (m *OCRResponseConfig) ValidateAll() error { + return m.validate(true) +} + +func (m *OCRResponseConfig) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for TextPath + + if len(errors) > 0 { + return OCRResponseConfigMultiError(errors) + } + + return nil +} + +// OCRResponseConfigMultiError is an error wrapping multiple validation errors +// returned by OCRResponseConfig.ValidateAll() if the designated constraints +// aren't met. +type OCRResponseConfigMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m OCRResponseConfigMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m OCRResponseConfigMultiError) AllErrors() []error { return m } + +// OCRResponseConfigValidationError is the validation error returned by +// OCRResponseConfig.Validate if the designated constraints aren't met. +type OCRResponseConfigValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e OCRResponseConfigValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e OCRResponseConfigValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e OCRResponseConfigValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e OCRResponseConfigValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e OCRResponseConfigValidationError) ErrorName() string { + return "OCRResponseConfigValidationError" +} + +// Error satisfies the builtin error interface +func (e OCRResponseConfigValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sOCRResponseConfig.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = OCRResponseConfigValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = OCRResponseConfigValidationError{} diff --git a/proto/config.proto b/proto/config.proto index b74bbd54169e..ebd8304392fd 100644 --- a/proto/config.proto +++ b/proto/config.proto @@ -6,8 +6,88 @@ option go_package = "github.com/trufflesecurity/trufflehog/v3/pkg/pb/configpb"; import "sources.proto"; import "custom_detectors.proto"; +import "validate/validate.proto"; message Config { repeated sources.LocalSource sources = 9; repeated custom_detectors.CustomRegex detectors = 13; + OCRConfig ocr = 14; +} + +// OCRConfig selects which OCR backend to use when --enable-ocr is active. +// Exactly one provider must be set. If the ocr block is omitted entirely, +// TruffleHog falls back to the local Tesseract binary (same as --enable-ocr alone). +message OCRConfig { + oneof provider { + TesseractOCRConfig tesseract = 1; + GoogleOCRConfig google = 2; + OpenAIOCRConfig openai = 3; + CustomOCRConfig custom = 4; + } +} + +// TesseractOCRConfig uses the local Tesseract binary. +// Included for explicitness; reserved for future per-field options (e.g. tessdata path). +message TesseractOCRConfig {} + +// GoogleOCRConfig is a preset for the Google Cloud Vision TEXT_DETECTION API. +// Exactly one auth method must be set. Service account credentials are recommended +// over API keys for production use. +message GoogleOCRConfig { + oneof auth { + // credentials_file is the path to a Google service account JSON key file. + // Supports ${ENV_VAR} expansion. Recommended for production. + string credentials_file = 1; + // api_key is a Google Cloud API key. Simpler but less secure than a service account. + // Supports ${ENV_VAR} expansion. + string api_key = 2; + } +} + +// OpenAIOCRConfig is a preset for the OpenAI chat completions vision API (GPT-4o by default). +message OpenAIOCRConfig { + // API key for the OpenAI API. Supports ${ENV_VAR} expansion. + string api_key = 1; + // Model to use (default: "gpt-4o"). + string model = 2; +} + +// CustomOCRConfig describes a generic HTTP OCR server. +message CustomOCRConfig { + // Full URL of the OCR endpoint. + string endpoint = 1 [(validate.rules).string.uri_ref = true]; + OCRAuthConfig auth = 2; + OCRRequestConfig request = 3; + OCRResponseConfig response = 4; +} + +// OCRAuthConfig describes how to authenticate against the OCR endpoint. +message OCRAuthConfig { + // type must be one of: bearer, header, api_key_query, basic. + string type = 1; + // value is the token or API key. Supports ${ENV_VAR} expansion. + string value = 2; + // header_name is used when type is "header" (e.g. "X-Api-Key"). + string header_name = 3; + // param_name is the query parameter name used when type is "api_key_query". + string param_name = 4; + // username / password are used when type is "basic". Both support ${ENV_VAR} expansion. + string username = 5; + string password = 6; +} + +// OCRRequestConfig controls how the HTTP request body is constructed. +message OCRRequestConfig { + // content_type of the request (default: "application/json"). + string content_type = 1; + // body_template is a Go text/template string. + // Available variables: {{.Base64Image}}, {{.MimeType}}. + string body_template = 2; +} + +// OCRResponseConfig controls how the text is extracted from the HTTP response. +message OCRResponseConfig { + // text_path is a dot-separated path into the JSON response body. + // Examples: "text", "result.text", "choices.0.message.content" + string text_path = 1; } From 7a3b8105dd51cadd7314a0be20aeb2a3c4275ad0 Mon Sep 17 00:00:00 2001 From: Mustansir Muzaffar Date: Mon, 6 Apr 2026 13:03:30 +0500 Subject: [PATCH 4/5] change test_secret.png --- pkg/handlers/testdata/test_secret.png | Bin 35533 -> 14457 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/pkg/handlers/testdata/test_secret.png b/pkg/handlers/testdata/test_secret.png index 1ddbd018f96258c0369be3b172f945877ec3effd..5472288b366e320b25fcba71b9bab2dbcdb19aa2 100644 GIT binary patch literal 14457 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 On1qO|aFw8b!2bbwM{33Z literal 35533 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 From 7b710fffbb6d06f2fade67dde9b399ecec212126 Mon Sep 17 00:00:00 2001 From: Mustansir Muzaffar Date: Mon, 6 Apr 2026 13:12:48 +0500 Subject: [PATCH 5/5] some refactoring --- pkg/ocr/openai.go | 14 +++++++++++--- pkg/ocr/provider.go | 18 ++++-------------- 2 files changed, 15 insertions(+), 17 deletions(-) diff --git a/pkg/ocr/openai.go b/pkg/ocr/openai.go index 465f229a935a..bcb56a949540 100644 --- a/pkg/ocr/openai.go +++ b/pkg/ocr/openai.go @@ -8,6 +8,9 @@ import ( "fmt" "io" "net/http" + "strings" + + "github.com/trufflesecurity/trufflehog/v3/pkg/pb/configpb" ) const openAIEndpoint = "https://api.openai.com/v1/chat/completions" @@ -22,8 +25,13 @@ type OpenAIProvider struct { httpClient *http.Client } -// NewOpenAIProvider creates an OpenAIProvider. model defaults to "gpt-4o" if empty. -func NewOpenAIProvider(apiKey, model string) *OpenAIProvider { +// NewOpenAIProvider constructs an OpenAIProvider from the proto config. +func NewOpenAIProvider(cfg *configpb.OpenAIOCRConfig) (*OpenAIProvider, error) { + apiKey := ExpandEnv(cfg.GetApiKey()) + if apiKey == "" { + return nil, fmt.Errorf("openai ocr: api_key must not be empty") + } + model := strings.TrimSpace(cfg.GetModel()) if model == "" { model = "gpt-4o" } @@ -31,7 +39,7 @@ func NewOpenAIProvider(apiKey, model string) *OpenAIProvider { apiKey: apiKey, model: model, httpClient: &http.Client{}, - } + }, nil } // ExtractText sends imageData to the OpenAI vision API and returns the extracted text. diff --git a/pkg/ocr/provider.go b/pkg/ocr/provider.go index 64fb78996554..3069d1a09e34 100644 --- a/pkg/ocr/provider.go +++ b/pkg/ocr/provider.go @@ -4,7 +4,6 @@ import ( "context" "fmt" "os" - "strings" "github.com/trufflesecurity/trufflehog/v3/pkg/pb/configpb" ) @@ -49,27 +48,18 @@ func NewProvider(cfg *configpb.OCRConfig) (Provider, error) { return &TesseractProvider{}, nil } - switch p := cfg.GetProvider().(type) { + switch cfg.GetProvider().(type) { case *configpb.OCRConfig_Tesseract: - _ = p return &TesseractProvider{}, nil case *configpb.OCRConfig_Google: - return NewGoogleProvider(p.Google) + return NewGoogleProvider(cfg.GetGoogle()) case *configpb.OCRConfig_Openai: - apiKey := ExpandEnv(p.Openai.GetApiKey()) - if apiKey == "" { - return nil, fmt.Errorf("ocr.openai.api_key must not be empty") - } - model := strings.TrimSpace(p.Openai.GetModel()) - if model == "" { - model = "gpt-4o" - } - return NewOpenAIProvider(apiKey, model), nil + return NewOpenAIProvider(cfg.GetOpenai()) case *configpb.OCRConfig_Custom: - return NewCustomHTTPProvider(p.Custom) + return NewCustomHTTPProvider(cfg.GetCustom()) default: return nil, fmt.Errorf("unknown OCR provider in config")