Skip to content

Commit 39db9d6

Browse files
authored
Lint (#339)
1 parent 80bfc26 commit 39db9d6

File tree

13 files changed

+127
-16
lines changed

13 files changed

+127
-16
lines changed

cmd/root.go

+20-4
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,11 @@ import (
2828
"github.com/crowdsecurity/cs-firewall-bouncer/pkg/metrics"
2929
)
3030

31-
const (
32-
name = "crowdsec-firewall-bouncer"
33-
)
31+
const name = "crowdsec-firewall-bouncer"
3432

3533
func backendCleanup(backend *backend.BackendCTX) {
3634
log.Info("Shutting down backend")
35+
3736
if err := backend.ShutDown(); err != nil {
3837
log.Errorf("while shutting down backend: %s", err)
3938
}
@@ -54,22 +53,27 @@ func HandleSignals(ctx context.Context) error {
5453
case <-ctx.Done():
5554
return ctx.Err()
5655
}
56+
5757
return nil
5858
}
5959

6060
func deleteDecisions(backend *backend.BackendCTX, decisions []*models.Decision, config *cfg.BouncerConfig) {
6161
nbDeletedDecisions := 0
62+
6263
for _, d := range decisions {
6364
if !slices.Contains(config.SupportedDecisionsTypes, strings.ToLower(*d.Type)) {
6465
log.Debugf("decisions for ip '%s' will not be deleted because its type is '%s'", *d.Value, *d.Type)
6566
continue
6667
}
68+
6769
if err := backend.Delete(d); err != nil {
6870
if !strings.Contains(err.Error(), "netlink receive: no such file or directory") {
6971
log.Errorf("unable to delete decision for '%s': %s", *d.Value, err)
7072
}
73+
7174
continue
7275
}
76+
7377
log.Debugf("deleted %s", *d.Value)
7478
nbDeletedDecisions++
7579
}
@@ -78,24 +82,29 @@ func deleteDecisions(backend *backend.BackendCTX, decisions []*models.Decision,
7882
if nbDeletedDecisions == 1 {
7983
noun = "decision"
8084
}
85+
8186
if nbDeletedDecisions > 0 {
8287
log.Debug("committing expired decisions")
88+
8389
if err := backend.Commit(); err != nil {
8490
log.Errorf("unable to commit expired decisions %v", err)
8591
return
8692
}
93+
8794
log.Debug("committed expired decisions")
8895
log.Infof("%d %s deleted", nbDeletedDecisions, noun)
8996
}
9097
}
9198

9299
func addDecisions(backend *backend.BackendCTX, decisions []*models.Decision, config *cfg.BouncerConfig) {
93100
nbNewDecisions := 0
101+
94102
for _, d := range decisions {
95103
if !slices.Contains(config.SupportedDecisionsTypes, strings.ToLower(*d.Type)) {
96104
log.Debugf("decisions for ip '%s' will not be added because its type is '%s'", *d.Value, *d.Type)
97105
continue
98106
}
107+
99108
if err := backend.Add(d); err != nil {
100109
log.Errorf("unable to insert decision for '%s': %s", *d.Value, err)
101110
continue
@@ -109,19 +118,21 @@ func addDecisions(backend *backend.BackendCTX, decisions []*models.Decision, con
109118
if nbNewDecisions == 1 {
110119
noun = "decision"
111120
}
121+
112122
if nbNewDecisions > 0 {
113123
log.Debug("committing added decisions")
124+
114125
if err := backend.Commit(); err != nil {
115126
log.Errorf("unable to commit add decisions %v", err)
116127
return
117128
}
129+
118130
log.Debug("committed added decisions")
119131
log.Infof("%d %s added", nbNewDecisions, noun)
120132
}
121133
}
122134

123135
func Execute() error {
124-
var err error
125136
configPath := flag.String("c", "", "path to crowdsec-firewall-bouncer.yaml")
126137
verbose := flag.Bool("v", false, "set verbose mode")
127138
bouncerVersion := flag.Bool("V", false, "display version and exit (deprecated)")
@@ -173,6 +184,7 @@ func Execute() error {
173184
defer backendCleanup(backend)
174185

175186
bouncer := &csbouncer.StreamBouncer{}
187+
176188
err = bouncer.ConfigReader(bytes.NewReader(configBytes))
177189
if err != nil {
178190
return err
@@ -204,9 +216,12 @@ func Execute() error {
204216
go backend.CollectMetrics()
205217
prometheus.MustRegister(metrics.TotalDroppedBytes, metrics.TotalDroppedPackets, metrics.TotalActiveBannedIPs)
206218
}
219+
207220
prometheus.MustRegister(csbouncer.TotalLAPICalls, csbouncer.TotalLAPIError)
221+
208222
go func() {
209223
http.Handle("/metrics", promhttp.Handler())
224+
210225
listenOn := net.JoinHostPort(
211226
config.PrometheusConfig.ListenAddress,
212227
config.PrometheusConfig.ListenPort,
@@ -215,6 +230,7 @@ func Execute() error {
215230
log.Error(http.ListenAndServe(listenOn, nil))
216231
}()
217232
}
233+
218234
g.Go(func() error {
219235
log.Infof("Processing new and deleted decisions . . .")
220236
for {

pkg/backend/backend.go

+7
Original file line numberDiff line numberDiff line change
@@ -61,15 +61,19 @@ func NewBackend(config *cfg.BouncerConfig) (*BackendCTX, error) {
6161
var err error
6262

6363
b := &BackendCTX{}
64+
6465
log.Printf("backend type : %s", config.Mode)
66+
6567
if config.DisableIPV6 {
6668
log.Println("IPV6 is disabled")
6769
}
70+
6871
switch config.Mode {
6972
case cfg.IptablesMode, cfg.IpsetMode:
7073
if runtime.GOOS != "linux" {
7174
return nil, fmt.Errorf("iptables and ipset is linux only")
7275
}
76+
7377
b.firewall, err = iptables.NewIPTables(config)
7478
if err != nil {
7579
return nil, err
@@ -78,6 +82,7 @@ func NewBackend(config *cfg.BouncerConfig) (*BackendCTX, error) {
7882
if runtime.GOOS != "linux" {
7983
return nil, fmt.Errorf("nftables is linux only")
8084
}
85+
8186
b.firewall, err = nftables.NewNFTables(config)
8287
if err != nil {
8388
return nil, err
@@ -86,6 +91,7 @@ func NewBackend(config *cfg.BouncerConfig) (*BackendCTX, error) {
8691
if !isPFSupported(runtime.GOOS) {
8792
log.Warning("pf mode can only work with openbsd and freebsd. It is available on other platforms only for testing purposes")
8893
}
94+
8995
b.firewall, err = pf.NewPF(config)
9096
if err != nil {
9197
return nil, err
@@ -98,5 +104,6 @@ func NewBackend(config *cfg.BouncerConfig) (*BackendCTX, error) {
98104
default:
99105
return b, fmt.Errorf("firewall '%s' is not supported", config.Mode)
100106
}
107+
101108
return b, nil
102109
}

pkg/cfg/config.go

+3
Original file line numberDiff line numberDiff line change
@@ -69,10 +69,12 @@ type BouncerConfig struct {
6969
// MergedConfig() returns the byte content of the patched configuration file (with .yaml.local).
7070
func MergedConfig(configPath string) ([]byte, error) {
7171
patcher := yamlpatch.NewPatcher(configPath, ".local")
72+
7273
data, err := patcher.MergedPatchContent()
7374
if err != nil {
7475
return nil, err
7576
}
77+
7678
return data, nil
7779
}
7880

@@ -119,6 +121,7 @@ func NewConfig(reader io.Reader) (*BouncerConfig, error) {
119121
if config.BlacklistsIpv6 == "" {
120122
config.BlacklistsIpv6 = "crowdsec6-blacklists"
121123
}
124+
122125
if config.SetType == "" {
123126
config.SetType = "nethash"
124127
}

pkg/cfg/logging.go

+3
Original file line numberDiff line numberDiff line change
@@ -76,14 +76,17 @@ func (c *LoggingConfig) validate() error {
7676
if c.LogMode != "stdout" && c.LogMode != "file" {
7777
return fmt.Errorf("log_mode should be either 'stdout' or 'file'")
7878
}
79+
7980
return nil
8081
}
8182

8283
func (c *LoggingConfig) setup(fileName string) error {
8384
c.setDefaults()
85+
8486
if err := c.validate(); err != nil {
8587
return err
8688
}
89+
8790
log.SetLevel(*c.LogLevel)
8891

8992
if c.LogMode == "stdout" {

pkg/iptables/iptables.go

+24-2
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,9 @@ type iptables struct {
2929

3030
func NewIPTables(config *cfg.BouncerConfig) (types.Backend, error) {
3131
var err error
32+
3233
ret := &iptables{}
34+
3335
ipv4Ctx := &ipTablesContext{
3436
Name: "ipset",
3537
version: "v4",
@@ -70,6 +72,7 @@ func NewIPTables(config *cfg.BouncerConfig) (types.Backend, error) {
7072
if err != nil {
7173
return nil, fmt.Errorf("unable to find ipset")
7274
}
75+
7376
ipv4Ctx.ipsetBin = ipsetBin
7477
if config.Mode == cfg.IpsetMode {
7578
ipv4Ctx.ipsetContentOnly = true
@@ -96,10 +99,12 @@ func NewIPTables(config *cfg.BouncerConfig) (types.Backend, error) {
9699
}
97100
}
98101
}
102+
99103
ret.v4 = ipv4Ctx
100104
if config.DisableIPV6 {
101105
return ret, nil
102106
}
107+
103108
ipv6Ctx.ipsetBin = ipsetBin
104109
if config.Mode == cfg.IpsetMode {
105110
ipv6Ctx.ipsetContentOnly = true
@@ -126,6 +131,7 @@ func NewIPTables(config *cfg.BouncerConfig) (types.Backend, error) {
126131
}
127132
}
128133
}
134+
129135
ret.v6 = ipv6Ctx
130136

131137
return ret, nil
@@ -135,18 +141,20 @@ func (ipt *iptables) Init() error {
135141
var err error
136142

137143
log.Printf("iptables for ipv4 initiated")
144+
138145
// flush before init
139-
if err := ipt.v4.shutDown(); err != nil {
146+
if err = ipt.v4.shutDown(); err != nil {
140147
return fmt.Errorf("iptables shutdown failed: %w", err)
141148
}
142149

143150
// Create iptable to rule to attach the set
144-
if err := ipt.v4.CheckAndCreate(); err != nil {
151+
if err = ipt.v4.CheckAndCreate(); err != nil {
145152
return fmt.Errorf("iptables init failed: %w", err)
146153
}
147154

148155
if ipt.v6 != nil {
149156
log.Printf("iptables for ipv6 initiated")
157+
150158
err = ipt.v6.shutDown() // flush before init
151159
if err != nil {
152160
return fmt.Errorf("iptables shutdown failed: %w", err)
@@ -157,6 +165,7 @@ func (ipt *iptables) Init() error {
157165
return fmt.Errorf("iptables init failed: %w", err)
158166
}
159167
}
168+
160169
return nil
161170
}
162171

@@ -181,15 +190,19 @@ func (ipt *iptables) Add(decision *models.Decision) error {
181190
log.Debugf("not adding '%s' because ipv6 is disabled", *decision.Value)
182191
return nil
183192
}
193+
184194
if err := ipt.v6.add(decision); err != nil {
185195
return fmt.Errorf("failed inserting ban ip '%s' for iptables ipv4 rule", *decision.Value)
186196
}
197+
187198
done = true
188199
}
200+
189201
if strings.Contains(*decision.Value, ".") {
190202
if err := ipt.v4.add(decision); err != nil {
191203
return fmt.Errorf("failed inserting ban ip '%s' for iptables ipv6 rule", *decision.Value)
192204
}
205+
193206
done = true
194207
}
195208

@@ -205,35 +218,44 @@ func (ipt *iptables) ShutDown() error {
205218
if err != nil {
206219
return fmt.Errorf("iptables for ipv4 shutdown failed: %w", err)
207220
}
221+
208222
if ipt.v6 != nil {
209223
err = ipt.v6.shutDown()
210224
if err != nil {
211225
return fmt.Errorf("iptables for ipv6 shutdown failed: %w", err)
212226
}
213227
}
228+
214229
return nil
215230
}
216231

217232
func (ipt *iptables) Delete(decision *models.Decision) error {
218233
done := false
234+
219235
if strings.Contains(*decision.Value, ":") {
220236
if ipt.v6 == nil {
221237
log.Debugf("not deleting '%s' because ipv6 is disabled", *decision.Value)
222238
return nil
223239
}
240+
224241
if err := ipt.v6.delete(decision); err != nil {
225242
return fmt.Errorf("failed deleting ban")
226243
}
244+
227245
done = true
228246
}
247+
229248
if strings.Contains(*decision.Value, ".") {
230249
if err := ipt.v4.delete(decision); err != nil {
231250
return fmt.Errorf("failed deleting ban")
232251
}
252+
233253
done = true
234254
}
255+
235256
if !done {
236257
return fmt.Errorf("failed deleting ban: ip %s was not recognized", *decision.Value)
237258
}
259+
238260
return nil
239261
}

0 commit comments

Comments
 (0)