Passed
Pull Request — master (#40)
by Stefano
03:01
created

cmd.rawCookiesToCookies   A

Complexity

Conditions 3

Size

Total Lines 20
Code Lines 13

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
eloc 13
nop 1
dl 0
loc 20
rs 9.75
c 0
b 0
f 0
1
package cmd
2
3
import (
4
	"net/http"
5
	"net/url"
6
	"strings"
7
	"time"
8
9
	"github.com/pkg/errors"
10
	"github.com/spf13/cobra"
11
	"github.com/stefanoj3/dirstalk/pkg/scan"
12
)
13
14
func scanConfigFromCmd(cmd *cobra.Command) (*scan.Config, error) {
15
	c := &scan.Config{}
16
17
	var err error
18
19
	c.DictionaryPath = cmd.Flag(flagDictionary).Value.String()
20
21
	c.HTTPMethods, err = cmd.Flags().GetStringSlice(flagHTTPMethods)
22
	if err != nil {
23
		return nil, errors.Wrap(err, "failed to read http methods flag")
24
	}
25
26
	c.Threads, err = cmd.Flags().GetInt(flagThreads)
27
	if err != nil {
28
		return nil, errors.Wrap(err, "failed to read threads flag")
29
	}
30
31
	c.TimeoutInMilliseconds, err = cmd.Flags().GetInt(flagHTTPTimeout)
32
	if err != nil {
33
		return nil, errors.Wrap(err, "failed to read http-timeout flag")
34
	}
35
36
	c.ScanDepth, err = cmd.Flags().GetInt(flagScanDepth)
37
	if err != nil {
38
		return nil, errors.Wrap(err, "failed to read http-timeout flag")
39
	}
40
41
	socks5Host := cmd.Flag(flagSocks5Host).Value.String()
42
	if len(socks5Host) > 0 {
43
		c.Socks5Url, err = url.Parse("socks5://" + socks5Host)
44
		if err != nil {
45
			return nil, errors.Wrap(err, "invalid value for "+flagSocks5Host)
46
		}
47
	}
48
49
	c.UserAgent = cmd.Flag(flagUserAgent).Value.String()
50
51
	c.UseCookieJar, err = cmd.Flags().GetBool(flagCookieJar)
52
	if err != nil {
53
		return nil, errors.Wrap(err, "cookie jar flag is invalid")
54
	}
55
56
	rawCookies, err := cmd.Flags().GetStringSlice(flagCookies)
57
	if err != nil {
58
		return nil, errors.Wrap(err, "failed to read cookies flag")
59
	}
60
61
	c.Cookies, err = rawCookiesToCookies(rawCookies)
62
	if err != nil {
63
		return nil, errors.Wrap(err, "failed to convert rawCookies to objects")
64
	}
65
66
	return c, nil
67
}
68
69
func rawCookiesToCookies(rawCookies []string) ([]*http.Cookie, error) {
70
	cookies := make([]*http.Cookie, 0, len(rawCookies))
71
72
	for _, rawCookie := range rawCookies {
73
		parts := strings.Split(rawCookie, "=")
74
		if len(parts) != 2 {
75
			return nil, errors.Errorf("cookie format is invalid: %s", rawCookie)
76
		}
77
78
		cookies = append(
79
			cookies,
80
			&http.Cookie{
81
				Name:    parts[0],
82
				Value:   parts[1],
83
				Expires: time.Now().AddDate(0, 0, 2),
84
			},
85
		)
86
	}
87
88
	return cookies, nil
89
}
90