Skip to content

Commit 5cdaf56

Browse files
author
Alexander Pashkov
committed
Refactor
Signed-off-by: Alexander Pashkov <[email protected]>
1 parent d4d0068 commit 5cdaf56

File tree

2 files changed

+91
-82
lines changed

2 files changed

+91
-82
lines changed

config/config.go

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import (
1818
"fmt"
1919
"math"
2020
"net/textproto"
21+
"net/url"
2122
"os"
2223
"regexp"
2324
"runtime"
@@ -226,6 +227,92 @@ type HTTPProbe struct {
226227
EnableRegexpsFromParams bool `yaml:"enable_regexps_from_params,omitempty"`
227228
}
228229

230+
func (s *HTTPProbe) AddRegexpsFromParams(params url.Values) error {
231+
if !s.EnableRegexpsFromParams {
232+
return nil
233+
}
234+
paramRegexps, err := extractParamRegexps(params)
235+
if err != nil {
236+
return err
237+
}
238+
if paramRegexps.FailIfBodyMatchesRegexp != nil {
239+
s.FailIfBodyMatchesRegexp = append(s.FailIfBodyMatchesRegexp, *paramRegexps.FailIfBodyMatchesRegexp)
240+
}
241+
if paramRegexps.FailIfBodyNotMatchesRegexp != nil {
242+
s.FailIfBodyNotMatchesRegexp = append(s.FailIfBodyNotMatchesRegexp, *paramRegexps.FailIfBodyNotMatchesRegexp)
243+
}
244+
if paramRegexps.FailIfHeaderMatchesRegexp != nil {
245+
s.FailIfHeaderMatchesRegexp = append(s.FailIfHeaderMatchesRegexp, *paramRegexps.FailIfHeaderMatchesRegexp)
246+
}
247+
if paramRegexps.FailIfHeaderNotMatchesRegexp != nil {
248+
s.FailIfHeaderNotMatchesRegexp = append(s.FailIfHeaderNotMatchesRegexp, *paramRegexps.FailIfHeaderNotMatchesRegexp)
249+
}
250+
return nil
251+
}
252+
253+
func extractParamRegexps(params url.Values) (*HTTPRegexps, error) {
254+
var (
255+
dynamicHTTPRegexps HTTPRegexps
256+
err error
257+
)
258+
259+
if re := params.Get("fail_if_body_matches_regexp"); re != "" {
260+
dynamicHTTPRegexps.FailIfBodyMatchesRegexp, err = regexpFromURLEncodedString(re)
261+
if err != nil {
262+
return nil, fmt.Errorf("failed to parse fail_if_body_matches_regexp: %s", err)
263+
}
264+
}
265+
if re := params.Get("fail_if_body_not_matches_regexp"); re != "" {
266+
dynamicHTTPRegexps.FailIfBodyNotMatchesRegexp, err = regexpFromURLEncodedString(re)
267+
if err != nil {
268+
return nil, fmt.Errorf("failed to parse fail_if_body_not_matches_regexp: %s", err)
269+
}
270+
}
271+
if re := params.Get("fail_if_header_matches_regexp"); re != "" {
272+
dynamicHTTPRegexps.FailIfHeaderMatchesRegexp, err = extractHeaderMatch(
273+
params.Get("fail_if_header_matches_regexp_header"), re)
274+
if err != nil {
275+
return nil, fmt.Errorf("failed to parse %s: %s", "fail_if_header_matches_regexp", err)
276+
}
277+
}
278+
if re := params.Get("fail_if_header_not_matches_regexp"); re != "" {
279+
dynamicHTTPRegexps.FailIfHeaderNotMatchesRegexp, err = extractHeaderMatch(re, "fail_if_header_not_matches_regexp")
280+
if err != nil {
281+
return nil, fmt.Errorf("failed to parse %s: %s", "fail_if_header_matches_regexp", err)
282+
}
283+
}
284+
return &dynamicHTTPRegexps, nil
285+
}
286+
287+
func extractHeaderMatch(headerParam, headerRegexpParam string) (*HeaderMatch, error) {
288+
var dynamicHeaderMatch HeaderMatch
289+
var err error
290+
291+
if headerParam == "" || headerRegexpParam == "" {
292+
return nil, fmt.Errorf("both fail_if_header_matches_regexp and fail_if_header_matches_regexp_header must be specified")
293+
}
294+
295+
dynamicHeaderMatch.Header = headerParam
296+
regexp, err := regexpFromURLEncodedString(headerRegexpParam)
297+
if err != nil {
298+
return nil, fmt.Errorf("failed to parse %s: %s", headerRegexpParam, err)
299+
}
300+
dynamicHeaderMatch.Regexp = *regexp
301+
return &dynamicHeaderMatch, err
302+
}
303+
304+
func regexpFromURLEncodedString(a string) (*Regexp, error) {
305+
re, err := url.QueryUnescape(a)
306+
if err != nil {
307+
return nil, fmt.Errorf("failed to unescape regexp: %s", err)
308+
}
309+
regexp, err := NewRegexp(re)
310+
if err != nil {
311+
return nil, fmt.Errorf("failed to compile regexp: %s", err)
312+
}
313+
return &regexp, nil
314+
}
315+
229316
type HTTPRegexps struct {
230317
FailIfBodyMatchesRegexp *Regexp `yaml:"fail_if_body_matches_regexp,omitempty"`
231318
FailIfBodyNotMatchesRegexp *Regexp `yaml:"fail_if_body_not_matches_regexp,omitempty"`

prober/handler.go

Lines changed: 4 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -63,25 +63,10 @@ func Handler(w http.ResponseWriter, r *http.Request, c *config.Config, logger lo
6363
return
6464
}
6565

66-
if module.HTTP.EnableRegexpsFromParams {
67-
var err error
68-
paramRegexps, err := extractHTTPParamRegexps(params)
69-
if err != nil {
70-
http.Error(w, fmt.Sprintf("Failed to extract regular expressions from params: %s", err), http.StatusBadRequest)
71-
return
72-
}
73-
if paramRegexps.FailIfBodyMatchesRegexp != nil {
74-
module.HTTP.FailIfBodyMatchesRegexp = append(module.HTTP.FailIfBodyMatchesRegexp, *paramRegexps.FailIfBodyMatchesRegexp)
75-
}
76-
if paramRegexps.FailIfBodyNotMatchesRegexp != nil {
77-
module.HTTP.FailIfBodyNotMatchesRegexp = append(module.HTTP.FailIfBodyNotMatchesRegexp, *paramRegexps.FailIfBodyNotMatchesRegexp)
78-
}
79-
if paramRegexps.FailIfHeaderMatchesRegexp != nil {
80-
module.HTTP.FailIfHeaderMatchesRegexp = append(module.HTTP.FailIfHeaderMatchesRegexp, *paramRegexps.FailIfHeaderMatchesRegexp)
81-
}
82-
if paramRegexps.FailIfHeaderNotMatchesRegexp != nil {
83-
module.HTTP.FailIfHeaderNotMatchesRegexp = append(module.HTTP.FailIfHeaderNotMatchesRegexp, *paramRegexps.FailIfHeaderNotMatchesRegexp)
84-
}
66+
err := module.HTTP.AddRegexpsFromParams(params)
67+
if err != nil {
68+
http.Error(w, fmt.Sprintf("Failed to parse regexps from URL parameters: %s", err), http.StatusBadRequest)
69+
return
8570
}
8671

8772
timeoutSeconds, err := getTimeout(r, module, timeoutOffset)
@@ -160,69 +145,6 @@ func Handler(w http.ResponseWriter, r *http.Request, c *config.Config, logger lo
160145
h.ServeHTTP(w, r)
161146
}
162147

163-
func extractHTTPParamRegexps(params url.Values) (*config.HTTPRegexps, error) {
164-
var (
165-
dynamicHTTPRegexps config.HTTPRegexps
166-
err error
167-
)
168-
169-
if re := params.Get("fail_if_body_matches_regexp"); re != "" {
170-
dynamicHTTPRegexps.FailIfBodyMatchesRegexp, err = regexpFromURLEncodedString(re)
171-
if err != nil {
172-
return nil, fmt.Errorf("failed to parse fail_if_body_matches_regexp: %s", err)
173-
}
174-
}
175-
if re := params.Get("fail_if_body_not_matches_regexp"); re != "" {
176-
dynamicHTTPRegexps.FailIfBodyNotMatchesRegexp, err = regexpFromURLEncodedString(re)
177-
if err != nil {
178-
return nil, fmt.Errorf("failed to parse fail_if_body_not_matches_regexp: %s", err)
179-
}
180-
}
181-
if re := params.Get("fail_if_header_matches_regexp"); re != "" {
182-
dynamicHTTPRegexps.FailIfHeaderMatchesRegexp, err = extractHeaderMatch(
183-
params.Get("fail_if_header_matches_regexp_header"), re)
184-
if err != nil {
185-
return nil, fmt.Errorf("failed to parse %s: %s", "fail_if_header_matches_regexp", err)
186-
}
187-
}
188-
if re := params.Get("fail_if_header_not_matches_regexp"); re != "" {
189-
dynamicHTTPRegexps.FailIfHeaderNotMatchesRegexp, err = extractHeaderMatch(re, "fail_if_header_not_matches_regexp")
190-
if err != nil {
191-
return nil, fmt.Errorf("failed to parse %s: %s", "fail_if_header_matches_regexp", err)
192-
}
193-
}
194-
return &dynamicHTTPRegexps, nil
195-
}
196-
197-
func extractHeaderMatch(headerParam, headerRegexpParam string) (*config.HeaderMatch, error) {
198-
var dynamicHeaderMatch config.HeaderMatch
199-
var err error
200-
201-
if headerParam == "" || headerRegexpParam == "" {
202-
return nil, fmt.Errorf("both fail_if_header_matches_regexp and fail_if_header_matches_regexp_header must be specified")
203-
}
204-
205-
dynamicHeaderMatch.Header = headerParam
206-
regexp, err := regexpFromURLEncodedString(headerRegexpParam)
207-
if err != nil {
208-
return nil, fmt.Errorf("failed to parse %s: %s", headerRegexpParam, err)
209-
}
210-
dynamicHeaderMatch.Regexp = *regexp
211-
return &dynamicHeaderMatch, err
212-
}
213-
214-
func regexpFromURLEncodedString(a string) (*config.Regexp, error) {
215-
re, err := url.QueryUnescape(a)
216-
if err != nil {
217-
return nil, fmt.Errorf("failed to unescape regexp: %s", err)
218-
}
219-
regexp, err := config.NewRegexp(re)
220-
if err != nil {
221-
return nil, fmt.Errorf("failed to compile regexp: %s", err)
222-
}
223-
return &regexp, nil
224-
}
225-
226148
func setHTTPHost(hostname string, module *config.Module) error {
227149
// By creating a new hashmap and copying values there we
228150
// ensure that the initial configuration remain intact.

0 commit comments

Comments
 (0)