chore: fix golangci-lint errors

This commit is contained in:
Oleg Lobanov 2024-04-01 18:24:06 +02:00
parent d194d71293
commit ae0af1f996
No known key found for this signature in database
54 changed files with 452 additions and 475 deletions

View file

@ -2,6 +2,7 @@ package http
import (
"encoding/json"
"errors"
"log"
"net/http"
"os"
@ -11,7 +12,7 @@ import (
"github.com/golang-jwt/jwt/v4"
"github.com/golang-jwt/jwt/v4/request"
"github.com/filebrowser/filebrowser/v2/errors"
fbErrors "github.com/filebrowser/filebrowser/v2/errors"
"github.com/filebrowser/filebrowser/v2/users"
)
@ -65,7 +66,7 @@ func (e extractor) ExtractToken(r *http.Request) (string, error) {
func withUser(fn handleFunc) handleFunc {
return func(w http.ResponseWriter, r *http.Request, d *data) (int, error) {
keyFunc := func(token *jwt.Token) (interface{}, error) {
keyFunc := func(_ *jwt.Token) (interface{}, error) {
return d.settings.Key, nil
}
@ -109,13 +110,14 @@ func loginHandler(tokenExpireTime time.Duration) handleFunc {
}
user, err := auther.Auth(r, d.store.Users, d.settings, d.server)
if err == os.ErrPermission {
switch {
case errors.Is(err, os.ErrPermission):
return http.StatusForbidden, nil
} else if err != nil {
case err != nil:
return http.StatusInternalServerError, err
} else {
return printToken(w, r, d, user, tokenExpireTime)
}
return printToken(w, r, d, user, tokenExpireTime)
}
}
@ -124,7 +126,7 @@ type signupBody struct {
Password string `json:"password"`
}
var signupHandler = func(w http.ResponseWriter, r *http.Request, d *data) (int, error) {
var signupHandler = func(_ http.ResponseWriter, r *http.Request, d *data) (int, error) {
if !d.settings.Signup {
return http.StatusMethodNotAllowed, nil
}
@ -165,7 +167,7 @@ var signupHandler = func(w http.ResponseWriter, r *http.Request, d *data) (int,
log.Printf("new user: %s, home dir: [%s].", user.Username, userHome)
err = d.store.Users.Save(user)
if err == errors.ErrExist {
if errors.Is(err, fbErrors.ErrExist) {
return http.StatusConflict, err
} else if err != nil {
return http.StatusInternalServerError, err

View file

@ -4,6 +4,7 @@ package http
import (
"bytes"
"context"
"errors"
"fmt"
"io"
"net/http"
@ -45,7 +46,7 @@ func previewHandler(imgSvc ImgService, fileCache FileCache, enableThumbnails, re
return http.StatusBadRequest, err
}
file, err := files.NewFileInfo(files.FileOptions{
file, err := files.NewFileInfo(&files.FileOptions{
Fs: d.user.Fs,
Path: "/" + vars["path"],
Modify: d.user.Perm.Modify,
@ -84,7 +85,7 @@ func handleImagePreview(
format, err := imgSvc.FormatFromExtension(file.Extension)
// Unsupported extensions directly return the raw data
if err == img.ErrUnsupportedFormat || format == img.FormatGif {
if errors.Is(err, img.ErrUnsupportedFormat) || format == img.FormatGif {
return rawFileHandler(w, r, file)
}
if err != nil {

View file

@ -35,7 +35,7 @@ var withHashFile = func(fn handleFunc) handleFunc {
d.user = user
file, err := files.NewFileInfo(files.FileOptions{
file, err := files.NewFileInfo(&files.FileOptions{
Fs: d.user.Fs,
Path: link.Path,
Modify: d.user.Perm.Modify,
@ -62,7 +62,7 @@ var withHashFile = func(fn handleFunc) handleFunc {
// set fs root to the shared file/folder
d.user.Fs = afero.NewBasePathFs(d.user.Fs, basePath)
file, err = files.NewFileInfo(files.FileOptions{
file, err = files.NewFileInfo(&files.FileOptions{
Fs: d.user.Fs,
Path: filePath,
Modify: d.user.Perm.Modify,

View file

@ -44,9 +44,8 @@ func parseQueryFiles(r *http.Request, f *files.FileInfo, _ *users.User) ([]strin
return fileSlice, nil
}
// nolint: goconst,nolintlint
//nolint:goconst
func parseQueryAlgorithm(r *http.Request) (string, archiver.Writer, error) {
// TODO: use enum
switch r.URL.Query().Get("algo") {
case "zip", "true", "":
return ".zip", archiver.NewZip(), nil
@ -81,7 +80,7 @@ var rawHandler = withUser(func(w http.ResponseWriter, r *http.Request, d *data)
return http.StatusAccepted, nil
}
file, err := files.NewFileInfo(files.FileOptions{
file, err := files.NewFileInfo(&files.FileOptions{
Fs: d.user.Fs,
Path: r.URL.Path,
Modify: d.user.Perm.Modify,

View file

@ -2,6 +2,7 @@ package http
import (
"context"
"errors"
"fmt"
"io"
"net/http"
@ -14,13 +15,13 @@ import (
"github.com/shirou/gopsutil/v3/disk"
"github.com/spf13/afero"
"github.com/filebrowser/filebrowser/v2/errors"
fbErrors "github.com/filebrowser/filebrowser/v2/errors"
"github.com/filebrowser/filebrowser/v2/files"
"github.com/filebrowser/filebrowser/v2/fileutils"
)
var resourceGetHandler = withUser(func(w http.ResponseWriter, r *http.Request, d *data) (int, error) {
file, err := files.NewFileInfo(files.FileOptions{
file, err := files.NewFileInfo(&files.FileOptions{
Fs: d.user.Fs,
Path: r.URL.Path,
Modify: d.user.Perm.Modify,
@ -41,7 +42,7 @@ var resourceGetHandler = withUser(func(w http.ResponseWriter, r *http.Request, d
if checksum := r.URL.Query().Get("checksum"); checksum != "" {
err := file.Checksum(checksum)
if err == errors.ErrInvalidOption {
if errors.Is(err, fbErrors.ErrInvalidOption) {
return http.StatusBadRequest, nil
} else if err != nil {
return http.StatusInternalServerError, err
@ -55,12 +56,12 @@ var resourceGetHandler = withUser(func(w http.ResponseWriter, r *http.Request, d
})
func resourceDeleteHandler(fileCache FileCache) handleFunc {
return withUser(func(w http.ResponseWriter, r *http.Request, d *data) (int, error) {
return withUser(func(_ http.ResponseWriter, r *http.Request, d *data) (int, error) {
if r.URL.Path == "/" || !d.user.Perm.Delete {
return http.StatusForbidden, nil
}
file, err := files.NewFileInfo(files.FileOptions{
file, err := files.NewFileInfo(&files.FileOptions{
Fs: d.user.Fs,
Path: r.URL.Path,
Modify: d.user.Perm.Modify,
@ -102,7 +103,7 @@ func resourcePostHandler(fileCache FileCache) handleFunc {
return errToStatus(err), err
}
file, err := files.NewFileInfo(files.FileOptions{
file, err := files.NewFileInfo(&files.FileOptions{
Fs: d.user.Fs,
Path: r.URL.Path,
Modify: d.user.Perm.Modify,
@ -178,7 +179,7 @@ var resourcePutHandler = withUser(func(w http.ResponseWriter, r *http.Request, d
})
func resourcePatchHandler(fileCache FileCache) handleFunc {
return withUser(func(w http.ResponseWriter, r *http.Request, d *data) (int, error) {
return withUser(func(_ http.ResponseWriter, r *http.Request, d *data) (int, error) {
src := r.URL.Path
dst := r.URL.Query().Get("destination")
action := r.URL.Query().Get("action")
@ -230,7 +231,7 @@ func checkParent(src, dst string) error {
rel = filepath.ToSlash(rel)
if !strings.HasPrefix(rel, "../") && rel != ".." && rel != "." {
return errors.ErrSourceIsParent
return fbErrors.ErrSourceIsParent
}
return nil
@ -294,21 +295,20 @@ func delThumbs(ctx context.Context, fileCache FileCache, file *files.FileInfo) e
func patchAction(ctx context.Context, action, src, dst string, d *data, fileCache FileCache) error {
switch action {
// TODO: use enum
case "copy":
if !d.user.Perm.Create {
return errors.ErrPermissionDenied
return fbErrors.ErrPermissionDenied
}
return fileutils.Copy(d.user.Fs, src, dst)
case "rename":
if !d.user.Perm.Rename {
return errors.ErrPermissionDenied
return fbErrors.ErrPermissionDenied
}
src = path.Clean("/" + src)
dst = path.Clean("/" + dst)
file, err := files.NewFileInfo(files.FileOptions{
file, err := files.NewFileInfo(&files.FileOptions{
Fs: d.user.Fs,
Path: src,
Modify: d.user.Perm.Modify,
@ -328,7 +328,7 @@ func patchAction(ctx context.Context, action, src, dst string, d *data, fileCach
return fileutils.MoveFile(d.user.Fs, src, dst)
default:
return fmt.Errorf("unsupported action %s: %w", action, errors.ErrInvalidRequestParams)
return fmt.Errorf("unsupported action %s: %w", action, fbErrors.ErrInvalidRequestParams)
}
}
@ -338,7 +338,7 @@ type DiskUsageResponse struct {
}
var diskUsage = withUser(func(w http.ResponseWriter, r *http.Request, d *data) (int, error) {
file, err := files.NewFileInfo(files.FileOptions{
file, err := files.NewFileInfo(&files.FileOptions{
Fs: d.user.Fs,
Path: r.URL.Path,
Modify: d.user.Perm.Modify,

View file

@ -36,7 +36,7 @@ var settingsGetHandler = withAdmin(func(w http.ResponseWriter, r *http.Request,
return renderJSON(w, r, data)
})
var settingsPutHandler = withAdmin(func(w http.ResponseWriter, r *http.Request, d *data) (int, error) {
var settingsPutHandler = withAdmin(func(_ http.ResponseWriter, r *http.Request, d *data) (int, error) {
req := &settingsData{}
err := json.NewDecoder(r.Body).Decode(req)
if err != nil {

View file

@ -4,6 +4,7 @@ import (
"crypto/rand"
"encoding/base64"
"encoding/json"
"errors"
"fmt"
"net/http"
"sort"
@ -13,7 +14,7 @@ import (
"golang.org/x/crypto/bcrypt"
"github.com/filebrowser/filebrowser/v2/errors"
fbErrors "github.com/filebrowser/filebrowser/v2/errors"
"github.com/filebrowser/filebrowser/v2/share"
)
@ -37,7 +38,7 @@ var shareListHandler = withPermShare(func(w http.ResponseWriter, r *http.Request
} else {
s, err = d.store.Share.FindByUserID(d.user.ID)
}
if err == errors.ErrNotExist {
if errors.Is(err, fbErrors.ErrNotExist) {
return renderJSON(w, r, []*share.Link{})
}
@ -57,7 +58,7 @@ var shareListHandler = withPermShare(func(w http.ResponseWriter, r *http.Request
var shareGetsHandler = withPermShare(func(w http.ResponseWriter, r *http.Request, d *data) (int, error) {
s, err := d.store.Share.Gets(r.URL.Path, d.user.ID)
if err == errors.ErrNotExist {
if errors.Is(err, fbErrors.ErrNotExist) {
return renderJSON(w, r, []*share.Link{})
}
@ -68,7 +69,7 @@ var shareGetsHandler = withPermShare(func(w http.ResponseWriter, r *http.Request
return renderJSON(w, r, s)
})
var shareDeleteHandler = withPermShare(func(w http.ResponseWriter, r *http.Request, d *data) (int, error) {
var shareDeleteHandler = withPermShare(func(_ http.ResponseWriter, r *http.Request, d *data) (int, error) {
hash := strings.TrimSuffix(r.URL.Path, "/")
hash = strings.TrimPrefix(hash, "/")

View file

@ -2,6 +2,7 @@ package http
import (
"encoding/json"
"errors"
"fmt"
"io/fs"
"log"
@ -84,7 +85,7 @@ func handleWithStaticData(w http.ResponseWriter, _ *http.Request, d *data, fSys
fileContents, err := fs.ReadFile(fSys, file)
if err != nil {
if err == os.ErrNotExist {
if errors.Is(err, os.ErrNotExist) {
return http.StatusNotFound, err
}
return http.StatusInternalServerError, err

View file

@ -15,7 +15,7 @@ var subtitleHandler = withUser(func(w http.ResponseWriter, r *http.Request, d *d
return http.StatusAccepted, nil
}
file, err := files.NewFileInfo(files.FileOptions{
file, err := files.NewFileInfo(&files.FileOptions{
Fs: d.user.Fs,
Path: r.URL.Path,
Modify: d.user.Perm.Modify,
@ -27,12 +27,6 @@ var subtitleHandler = withUser(func(w http.ResponseWriter, r *http.Request, d *d
return errToStatus(err), err
}
// TODO: no idea what this does
// if files.IsNamedPipe(file.Mode) {
// setContentDisposition(w, r, file)
// return 0, nil
// }
if file.IsDir {
return http.StatusBadRequest, nil
}
@ -63,7 +57,6 @@ func subtitleFileHandler(w http.ResponseWriter, r *http.Request, file *files.Fil
return http.StatusInternalServerError, err
}
// TODO: not sure if this is needed here
setContentDisposition(w, r, file)
w.Header().Add("Content-Security-Policy", `script-src 'none';`)
w.Header().Set("Cache-Control", "private")

View file

@ -15,8 +15,8 @@ import (
)
func tusPostHandler() handleFunc {
return withUser(func(w http.ResponseWriter, r *http.Request, d *data) (int, error) {
file, err := files.NewFileInfo(files.FileOptions{
return withUser(func(_ http.ResponseWriter, r *http.Request, d *data) (int, error) {
file, err := files.NewFileInfo(&files.FileOptions{
Fs: d.user.Fs,
Path: r.URL.Path,
Modify: d.user.Perm.Modify,
@ -71,7 +71,7 @@ func tusHeadHandler() handleFunc {
return http.StatusForbidden, nil
}
file, err := files.NewFileInfo(files.FileOptions{
file, err := files.NewFileInfo(&files.FileOptions{
Fs: d.user.Fs,
Path: r.URL.Path,
Modify: d.user.Perm.Modify,
@ -101,10 +101,10 @@ func tusPatchHandler() handleFunc {
uploadOffset, err := getUploadOffset(r)
if err != nil {
return http.StatusBadRequest, fmt.Errorf("invalid upload offset: %v", err)
return http.StatusBadRequest, fmt.Errorf("invalid upload offset: %w", err)
}
file, err := files.NewFileInfo(files.FileOptions{
file, err := files.NewFileInfo(&files.FileOptions{
Fs: d.user.Fs,
Path: r.URL.Path,
Modify: d.user.Perm.Modify,
@ -133,19 +133,19 @@ func tusPatchHandler() handleFunc {
openFile, err := d.user.Fs.OpenFile(r.URL.Path, os.O_WRONLY|os.O_APPEND, files.PermFile)
if err != nil {
return http.StatusInternalServerError, fmt.Errorf("could not open file: %v", err)
return http.StatusInternalServerError, fmt.Errorf("could not open file: %w", err)
}
defer openFile.Close()
_, err = openFile.Seek(uploadOffset, 0)
if err != nil {
return http.StatusInternalServerError, fmt.Errorf("could not seek file: %v", err)
return http.StatusInternalServerError, fmt.Errorf("could not seek file: %w", err)
}
defer r.Body.Close()
bytesWritten, err := io.Copy(openFile, r.Body)
if err != nil {
return http.StatusInternalServerError, fmt.Errorf("could not write to file: %v", err)
return http.StatusInternalServerError, fmt.Errorf("could not write to file: %w", err)
}
w.Header().Set("Upload-Offset", strconv.FormatInt(uploadOffset+bytesWritten, 10))
@ -157,7 +157,7 @@ func tusPatchHandler() handleFunc {
func getUploadOffset(r *http.Request) (int64, error) {
uploadOffset, err := strconv.ParseInt(r.Header.Get("Upload-Offset"), 10, 64)
if err != nil {
return 0, fmt.Errorf("invalid upload offset: %v", err)
return 0, fmt.Errorf("invalid upload offset: %w", err)
}
return uploadOffset, nil
}

View file

@ -2,6 +2,7 @@ package http
import (
"encoding/json"
"errors"
"log"
"net/http"
"sort"
@ -11,7 +12,7 @@ import (
"golang.org/x/text/cases"
"golang.org/x/text/language"
"github.com/filebrowser/filebrowser/v2/errors"
fbErrors "github.com/filebrowser/filebrowser/v2/errors"
"github.com/filebrowser/filebrowser/v2/users"
)
@ -35,7 +36,7 @@ func getUserID(r *http.Request) (uint, error) {
func getUser(_ http.ResponseWriter, r *http.Request) (*modifyUserRequest, error) {
if r.Body == nil {
return nil, errors.ErrEmptyRequest
return nil, fbErrors.ErrEmptyRequest
}
req := &modifyUserRequest{}
@ -45,7 +46,7 @@ func getUser(_ http.ResponseWriter, r *http.Request) (*modifyUserRequest, error)
}
if req.What != "user" {
return nil, errors.ErrInvalidDataType
return nil, fbErrors.ErrInvalidDataType
}
return req, nil
@ -86,7 +87,7 @@ var usersGetHandler = withAdmin(func(w http.ResponseWriter, r *http.Request, d *
var userGetHandler = withSelfOrAdmin(func(w http.ResponseWriter, r *http.Request, d *data) (int, error) {
u, err := d.store.Users.Get(d.server.Root, d.raw.(uint))
if err == errors.ErrNotExist {
if errors.Is(err, fbErrors.ErrNotExist) {
return http.StatusNotFound, err
}
@ -101,7 +102,7 @@ var userGetHandler = withSelfOrAdmin(func(w http.ResponseWriter, r *http.Request
return renderJSON(w, r, u)
})
var userDeleteHandler = withSelfOrAdmin(func(w http.ResponseWriter, r *http.Request, d *data) (int, error) {
var userDeleteHandler = withSelfOrAdmin(func(_ http.ResponseWriter, _ *http.Request, d *data) (int, error) {
err := d.store.Users.Delete(d.raw.(uint))
if err != nil {
return errToStatus(err), err
@ -121,7 +122,7 @@ var userPostHandler = withAdmin(func(w http.ResponseWriter, r *http.Request, d *
}
if req.Data.Password == "" {
return http.StatusBadRequest, errors.ErrEmptyPassword
return http.StatusBadRequest, fbErrors.ErrEmptyPassword
}
req.Data.Password, err = users.HashPwd(req.Data.Password)