Projects STRLCPY bearer Commits 97e8e408
🤬
Revision indexing in progress... (symbol navigation in revisions will be accurate after indexed)
  • ■ ■ ■ ■ ■
    go.mod
    skipped 24 lines
    25 25   github.com/struCoder/pidusage v0.2.1
    26 26   github.com/tangzero/inflector v1.0.0
    27 27   github.com/weppos/publicsuffix-go v0.30.0
    28  - github.com/wlredeye/jsonlines v0.0.0-20160904163743-36b5e1bd13d0
    29 28   github.com/zricethezav/gitleaks/v8 v8.16.0
    30 29   golang.org/x/exp v0.0.0-20230304125523-9ff063c70017
    31 30   golang.org/x/mod v0.9.0
    skipped 71 lines
    103 102   github.com/go-redis/redis v6.15.9+incompatible
    104 103   github.com/hashicorp/hcl v1.0.0 // indirect
    105 104   github.com/magiconair/properties v1.8.7 // indirect
    106  - github.com/mitchellh/mapstructure v1.5.0 // indirect
     105 + github.com/mitchellh/mapstructure v1.5.0
    107 106   github.com/pelletier/go-toml v1.9.5
    108 107   github.com/pelletier/go-toml/v2 v2.0.7 // indirect
    109 108   github.com/spf13/afero v1.9.5 // indirect
    skipped 16 lines
  • ■ ■ ■ ■ ■ ■
    go.sum
    skipped 399 lines
    400 400  github.com/weppos/publicsuffix-go v0.30.0 h1:QHPZ2GRu/YE7cvejH9iyavPOkVCB4dNxp2ZvtT+vQLY=
    401 401  github.com/weppos/publicsuffix-go v0.30.0/go.mod h1:kBi8zwYnR0zrbm8RcuN1o9Fzgpnnn+btVN8uWPMyXAY=
    402 402  github.com/weppos/publicsuffix-go/publicsuffix/generator v0.0.0-20220927085643-dc0d00c92642/go.mod h1:GHfoeIdZLdZmLjMlzBftbTDntahTttUMWjxZwQJhULE=
    403  -github.com/wlredeye/jsonlines v0.0.0-20160904163743-36b5e1bd13d0 h1:ZsWrjHNVlxO2ej+fws7pbFNYf6hGQa+zCAvz9Ddyyrs=
    404  -github.com/wlredeye/jsonlines v0.0.0-20160904163743-36b5e1bd13d0/go.mod h1:QywrYcudWflgMizuKFF70dswp/brPwihcARIe13aiKo=
    405 403  github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM=
    406 404  github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw=
    407 405  github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb h1:zGWFAtiMcyryUHoUjUJX0/lt1H2+i2Ka2n+D3DImSNo=
    skipped 418 lines
  • ■ ■ ■ ■
    pkg/commands/process/balancer/worker.go
    skipped 8 lines
    9 9   
    10 10   "github.com/google/uuid"
    11 11   "github.com/rs/zerolog/log"
    12  - "github.com/wlredeye/jsonlines"
    13 12   
    14 13   "github.com/bearer/bearer/pkg/commands/process/balancer/filelist"
    15 14   "github.com/bearer/bearer/pkg/commands/process/repo_info"
    skipped 1 lines
    17 16   workertype "github.com/bearer/bearer/pkg/commands/process/worker/work"
    18 17   "github.com/bearer/bearer/pkg/git"
    19 18   "github.com/bearer/bearer/pkg/report/detections"
     19 + "github.com/bearer/bearer/pkg/util/jsonlines"
    20 20   "github.com/bearer/bearer/pkg/util/output"
    21 21   "github.com/bearer/bearer/pkg/util/tmpfile"
    22 22  )
    skipped 297 lines
  • ■ ■ ■ ■ ■
    pkg/commands/process/repo_info/repo_info.go
    skipped 3 lines
    4 4   "fmt"
    5 5   "io"
    6 6   
    7  - "github.com/wlredeye/jsonlines"
    8  - 
    9 7   "github.com/bearer/bearer/pkg/commands/process/worker/work"
    10 8   "github.com/bearer/bearer/pkg/git"
     9 + "github.com/bearer/bearer/pkg/util/jsonlines"
    11 10  )
    12 11   
    13 12  type renamedFileReport struct {
    skipped 58 lines
  • ■ ■ ■ ■
    pkg/report/output/detectors/detectors.go
    skipped 5 lines
    6 6   
    7 7   "github.com/bearer/bearer/pkg/commands/process/settings"
    8 8   "github.com/bearer/bearer/pkg/types"
     9 + "github.com/bearer/bearer/pkg/util/jsonlines"
    9 10   "github.com/bearer/bearer/pkg/util/output"
    10 11   "github.com/rs/zerolog/log"
    11  - "github.com/wlredeye/jsonlines"
    12 12  )
    13 13   
    14 14  func GetOutput(report types.Report, config settings.Config) ([]interface{}, error) {
    skipped 18 lines
  • ■ ■ ■ ■
    pkg/report/writer/detectors.go
    skipped 22 lines
    23 23   "github.com/bearer/bearer/pkg/report/source"
    24 24   
    25 25   "github.com/bearer/bearer/pkg/util/blamer"
    26  - "github.com/wlredeye/jsonlines"
     26 + "github.com/bearer/bearer/pkg/util/jsonlines"
    27 27  )
    28 28   
    29 29  type StoredSchema struct {
    skipped 216 lines
  • ■ ■ ■ ■ ■ ■
    pkg/util/jsonlines/jsonlines.go
     1 +package jsonlines
     2 + 
     3 +import (
     4 + "encoding/json"
     5 + "fmt"
     6 + "io"
     7 + "reflect"
     8 + 
     9 + "github.com/bearer/bearer/pkg/util/linescanner"
     10 +)
     11 + 
     12 +const maxTokenSizeBytes int = 5 * 1024 * 1024
     13 + 
     14 +func getOriginalSlice(ptrToSlice interface{}) (slice reflect.Value, err error) {
     15 + ptr2sl := reflect.TypeOf(ptrToSlice)
     16 + if ptr2sl.Kind() != reflect.Ptr {
     17 + return reflect.ValueOf(nil), fmt.Errorf("expected pointer to slice, got %s", ptr2sl.Kind())
     18 + }
     19 + 
     20 + originalSlice := reflect.Indirect(reflect.ValueOf(ptrToSlice))
     21 + sliceType := originalSlice.Type()
     22 + if sliceType.Kind() != reflect.Slice {
     23 + return reflect.ValueOf(nil), fmt.Errorf("expected pointer to slice, got pointer to %s", sliceType.Kind())
     24 + }
     25 + return originalSlice, nil
     26 +}
     27 + 
     28 +func Encode(w io.Writer, ptrToSlice interface{}) error {
     29 + slice, err := getOriginalSlice(ptrToSlice)
     30 + if err != nil {
     31 + return fmt.Errorf("wrong value inputed into jsonlines encode: %s", err)
     32 + }
     33 + 
     34 + for i := 0; i < slice.Len(); i++ {
     35 + err := json.NewEncoder(w).Encode(slice.Index(i).Interface())
     36 + if err != nil {
     37 + return fmt.Errorf("failed to encode json: %s", err)
     38 + }
     39 + }
     40 + 
     41 + return nil
     42 +}
     43 + 
     44 +func Decode(r io.Reader, ptrToSlice interface{}) error {
     45 + originalSlice, err := getOriginalSlice(ptrToSlice)
     46 + if err != nil {
     47 + return fmt.Errorf("wrong value inputed into jsonline decode: %s", err)
     48 + }
     49 + 
     50 + scanner := linescanner.NewSize(r, maxTokenSizeBytes)
     51 + 
     52 + member := originalSlice.Type().Elem()
     53 + 
     54 + for {
     55 + ok := scanner.Scan()
     56 + if !ok {
     57 + break
     58 + }
     59 + 
     60 + item := scanner.Bytes()
     61 + if len(item) == 0 {
     62 + continue
     63 + }
     64 + 
     65 + newObj := reflect.New(member).Interface()
     66 + 
     67 + err := json.Unmarshal(item, newObj)
     68 + if err != nil {
     69 + return fmt.Errorf("failed to unmarshal item: %s", err)
     70 + }
     71 + 
     72 + ptrToNewObj := reflect.Indirect(reflect.ValueOf(newObj))
     73 + originalSlice.Set(reflect.Append(originalSlice, ptrToNewObj))
     74 + }
     75 + 
     76 + return nil
     77 +}
     78 + 
  • ■ ■ ■ ■ ■ ■
    pkg/util/jsonlines/jsonlines_test.go
     1 +package jsonlines_test
     2 + 
     3 +import (
     4 + "os"
     5 + "testing"
     6 + 
     7 + "github.com/bearer/bearer/pkg/util/jsonlines"
     8 + "github.com/mitchellh/mapstructure"
     9 + "github.com/stretchr/testify/assert"
     10 +)
     11 + 
     12 +func TestJsonlines(t *testing.T) {
     13 + type TestFile struct {
     14 + Name string
     15 + Order int
     16 + }
     17 + 
     18 + originalValue := []TestFile{
     19 + {
     20 + Name: "test struct 1",
     21 + Order: 1,
     22 + },
     23 + {
     24 + Name: "test struct 2",
     25 + Order: 2,
     26 + },
     27 + {
     28 + Name: "test struct 3 \n",
     29 + Order: 3,
     30 + },
     31 + }
     32 + 
     33 + file, err := os.CreateTemp(t.TempDir(), "")
     34 + if err != nil {
     35 + t.Fatalf("failed to create temp file %s", err)
     36 + }
     37 + defer file.Close()
     38 + 
     39 + err = jsonlines.Encode(file, &originalValue)
     40 + if err != nil {
     41 + t.Fatalf("failed to encode %s", err)
     42 + }
     43 + 
     44 + _, err = file.Seek(0, 0)
     45 + if err != nil {
     46 + t.Fatalf("failed to seek file to begning %s", err)
     47 + }
     48 + 
     49 + decodedValue := make([]interface{}, 0)
     50 + 
     51 + err = jsonlines.Decode(file, &decodedValue)
     52 + if err != nil {
     53 + t.Fatalf("failed to encode %s", err)
     54 + }
     55 + 
     56 + decodedObjects := []TestFile{}
     57 + 
     58 + for _, v := range decodedValue {
     59 + var object TestFile
     60 + err := mapstructure.Decode(v, &object)
     61 + if err != nil {
     62 + t.Fatalf("failed to decode mapstructure %s", err)
     63 + }
     64 + 
     65 + decodedObjects = append(decodedObjects, object)
     66 + }
     67 + 
     68 + assert.Equal(t, originalValue, decodedObjects)
     69 +}
     70 + 
  • ■ ■ ■ ■ ■ ■
    pkg/util/linescanner/linescanner.go
    skipped 11 lines
    12 12   length int
    13 13   byteOffset int
    14 14   lineNumber int
    15  - text string
     15 + bytes []byte
    16 16   err error
    17 17  }
    18 18   
    skipped 4 lines
    23 23   }
    24 24  }
    25 25   
     26 +func NewSize(input io.Reader, size int) *Scanner {
     27 + return &Scanner{
     28 + input: bufio.NewReaderSize(input, size),
     29 + }
     30 +}
     31 + 
    26 32  // Scan attempts to read a line and returns whether it was successful
    27 33  func (scanner *Scanner) Scan() bool {
    28 34   if scanner.err != nil {
    29 35   return false
    30 36   }
    31 37   
    32  - text, err := scanner.input.ReadString('\n')
    33  - 
     38 + bytes, err := scanner.input.ReadBytes('\n')
     39 + scanner.bytes = bytes
    34 40   scanner.err = err
    35 41   scanner.byteOffset += scanner.length
    36  - scanner.length = len(text)
    37  - scanner.text = strings.TrimRight(text, "\r\n")
     42 + scanner.length = len(bytes)
    38 43   scanner.lineNumber++
    39 44   
    40  - return err == nil || err != io.EOF
     45 + return true
    41 46  }
    42 47   
    43 48  // Err can be called once Scan returns false to see if the scan ended due to
    skipped 8 lines
    52 57   
    53 58  // Text returns the text of the current line
    54 59  func (scanner *Scanner) Text() string {
    55  - return scanner.text
     60 + text := string(scanner.bytes)
     61 + return strings.TrimRight(text, "\r\n")
     62 +}
     63 + 
     64 +// Bytes returns the bytes of the current line
     65 +func (scanner *Scanner) Bytes() []byte {
     66 + return scanner.bytes
    56 67  }
    57 68   
    58 69  // LineNumber returns the 1-based offset of the current line
    skipped 9 lines
Please wait...
Page is in error, reload to recover