Skip to content

Commit 2943857

Browse files
committed
fix: resolve golangci-lint warnings and update GitHub Actions
- add http.MaxBytesReader (64MB cap) to form handlers (gosec G120) - replace sort with slices.Sort/SortFunc (revive) - use min() builtin instead of if/else (modernize) - extract setupLog helper with secret masking - add modernize linter to golangci config - bump docker/setup-qemu-action and setup-buildx-action to v4
1 parent 23a564f commit 2943857

6 files changed

Lines changed: 24 additions & 22 deletions

File tree

.github/workflows/ci.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,11 +50,11 @@ jobs:
5050
COVERALLS_TOKEN: ${{ secrets.GITHUB_TOKEN }}
5151

5252
- name: set up QEMU
53-
uses: docker/setup-qemu-action@v3
53+
uses: docker/setup-qemu-action@v4
5454

5555
- name: set up Docker Buildx
5656
id: buildx
57-
uses: docker/setup-buildx-action@v3
57+
uses: docker/setup-buildx-action@v4
5858

5959
- name: available platforms
6060
run: echo ${{ steps.buildx.outputs.platforms }}

backend/.golangci.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ linters:
3030
- unparam
3131
- unused
3232
- whitespace
33+
- modernize
3334
settings:
3435
goconst:
3536
min-len: 2
@@ -80,4 +81,4 @@ formatters:
8081
paths:
8182
- third_party$
8283
- builtin$
83-
- examples$
84+
- examples$

backend/extractor/pics.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
package extractor
22

33
import (
4+
"cmp"
45
"io"
56
"net/http"
6-
"sort"
7+
"slices"
78
"sync"
89
"time"
910

@@ -39,7 +40,7 @@ func (f *UReadability) extractPics(iselect *goquery.Selection, url string) (main
3940
images[r.size] = r.url
4041
allImages = append(allImages, r.url)
4142
}
42-
sort.Strings(allImages)
43+
slices.Sort(allImages)
4344
if len(images) == 0 {
4445
return "", nil, false
4546
}
@@ -49,7 +50,7 @@ func (f *UReadability) extractPics(iselect *goquery.Selection, url string) (main
4950
for k := range images {
5051
keys = append(keys, k)
5152
}
52-
sort.Sort(sort.Reverse(sort.IntSlice(keys)))
53+
slices.SortFunc(keys, func(a, b int) int { return cmp.Compare(b, a) })
5354
mainImage = images[keys[0]]
5455
log.Printf("[DEBUG] total images from %s = %d, main=%s (%d)", url, len(images), mainImage, keys[0])
5556
return mainImage, allImages, true

backend/extractor/text.go

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,7 @@ func (f *UReadability) getText(content, title string) string {
4141
// get snippet from clean text content
4242
func (f *UReadability) getSnippet(cleanText string) string {
4343
cleanText = strings.ReplaceAll(cleanText, "\n", " ")
44-
size := len([]rune(cleanText))
45-
if size > f.SnippetSize {
46-
size = f.SnippetSize
47-
}
44+
size := min(len([]rune(cleanText)), f.SnippetSize)
4845
snippet := []rune(cleanText)[:size]
4946
// go back in snippet and found first space
5047
for i := len(snippet) - 1; i >= 0; i-- {

backend/main.go

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,12 +34,7 @@ func main() {
3434
if _, err := flags.Parse(&opts); err != nil {
3535
os.Exit(1)
3636
}
37-
var options []log.Option
38-
if opts.Debug {
39-
options = []log.Option{log.Debug, log.CallerFile}
40-
}
41-
options = append(options, log.Msec, log.LevelBraces)
42-
log.Setup(options...)
37+
setupLog(opts.Debug, opts.MongoURI, opts.Token)
4338

4439
log.Printf("[INFO] started ukeeper-readability service %s", revision)
4540
db, err := datastore.New(opts.MongoURI, opts.MongoDB, opts.MongoDelay)
@@ -69,3 +64,12 @@ func main() {
6964

7065
srv.Run(ctx, opts.Address, opts.Port, opts.FrontendDir)
7166
}
67+
68+
func setupLog(dbg bool, secrets ...string) { //nolint:revive // control flag is fine for init helper
69+
log.Secret(secrets...)
70+
if dbg {
71+
log.Setup(log.Debug, log.CallerFile, log.Msec, log.LevelBraces)
72+
return
73+
}
74+
log.Setup(log.Msec, log.LevelBraces)
75+
}

backend/rest/server.go

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -204,8 +204,8 @@ func (s *Server) extractArticleEmulateReadability(w http.ResponseWriter, r *http
204204

205205
// generates previews for the provided test URLs
206206
func (s *Server) handlePreview(w http.ResponseWriter, r *http.Request) {
207-
err := r.ParseForm()
208-
if err != nil {
207+
r.Body = http.MaxBytesReader(w, r.Body, 64<<20) // limit to 64MB
208+
if err := r.ParseForm(); err != nil {
209209
http.Error(w, "Failed to parse form", http.StatusBadRequest)
210210
return
211211
}
@@ -268,17 +268,16 @@ func (s *Server) handlePreview(w http.ResponseWriter, r *http.Request) {
268268
Results: results,
269269
}
270270

271-
err = s.rulePage.ExecuteTemplate(w, "preview.gohtml", data)
272-
if err != nil {
271+
if err := s.rulePage.ExecuteTemplate(w, "preview.gohtml", data); err != nil {
273272
http.Error(w, err.Error(), http.StatusInternalServerError)
274273
return
275274
}
276275
}
277276

278277
// saveRule upsert rule, forcing enabled=true
279278
func (s *Server) saveRule(w http.ResponseWriter, r *http.Request) {
280-
err := r.ParseForm()
281-
if err != nil {
279+
r.Body = http.MaxBytesReader(w, r.Body, 64<<20) // limit to 64MB
280+
if err := r.ParseForm(); err != nil {
282281
http.Error(w, "Failed to parse form", http.StatusBadRequest)
283282
return
284283
}

0 commit comments

Comments
 (0)