| skipped 2 lines |
3 | 3 | | import ( |
4 | 4 | | "bufio" |
5 | 5 | | "fmt" |
6 | | - | "net/http" |
7 | 6 | | "os" |
8 | 7 | | "regexp" |
9 | 8 | | "strings" |
| skipped 7 lines |
17 | 16 | | ) |
18 | 17 | | |
19 | 18 | | type Runner struct { |
20 | | - | Client *http.Client |
21 | 19 | | Input chan string |
22 | 20 | | Output chan string |
23 | 21 | | InWg *sync.WaitGroup |
| skipped 3 lines |
27 | 25 | | |
28 | 26 | | func New(options *input.Options) Runner { |
29 | 27 | | return Runner{ |
30 | | - | Client: customClient(options.Timeout), |
31 | 28 | | Input: make(chan string, options.Concurrency), |
32 | 29 | | Output: make(chan string, options.Concurrency), |
33 | 30 | | InWg: &sync.WaitGroup{}, |
| skipped 52 lines |
86 | 83 | | |
87 | 84 | | dregex := CompileRegex(DomainRegex) |
88 | 85 | | |
89 | | - | for value := range r.Input { |
| 86 | + | for i := 0; i < r.Options.Concurrency; i++ { |
90 | 87 | | r.InWg.Add(1) |
91 | 88 | | |
92 | | - | go func(value string) { |
| 89 | + | go func() { |
93 | 90 | | defer r.InWg.Done() |
94 | | - | result, err := checkCSP(value, dregex, r.Client) |
95 | 91 | | |
96 | | - | if err == nil { |
| 92 | + | for value := range r.Input { |
| 93 | + | client := customClient(r.Options.Timeout) |
| 94 | + | |
| 95 | + | result, err := checkCSP(value, dregex, client) |
| 96 | + | if err != nil { |
| 97 | + | if r.Options.Verbose { |
| 98 | + | gologger.Error().Msgf("%s", err) |
| 99 | + | } |
| 100 | + | |
| 101 | + | return |
| 102 | + | } |
| 103 | + | |
97 | 104 | | for _, res := range result { |
98 | 105 | | if resTrimmed := strings.TrimSpace(res); resTrimmed != "" { |
99 | 106 | | if r.Options.Domain != "" { |
| skipped 5 lines |
105 | 112 | | } |
106 | 113 | | } |
107 | 114 | | } |
108 | | - | } else { |
109 | | - | if r.Options.Verbose { |
110 | | - | gologger.Error().Msgf("%s", err) |
111 | | - | } |
112 | 115 | | } |
113 | | - | }(value) |
| 116 | + | }() |
114 | 117 | | } |
115 | 118 | | } |
116 | 119 | | |
| skipped 35 lines |