diff --git a/.golangci.yml b/.golangci.yml index 11a419de0..3a6a29ef5 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -47,6 +47,12 @@ linters-settings: severity: default-severity: error +skip-dirs: + - protogen/gen + - docs + - deployments + - changelog + issues: exclude-use-default: true exclude-rules: diff --git a/services/graph/pkg/service/v0/drives.go b/services/graph/pkg/service/v0/drives.go index 8bed0119e..b03242c1f 100644 --- a/services/graph/pkg/service/v0/drives.go +++ b/services/graph/pkg/service/v0/drives.go @@ -33,6 +33,13 @@ import ( merrors "go-micro.dev/v4/errors" ) +const ( + _spaceTypePersonal = "personal" + _spaceTypeProject = "project" + + _sortDescending = "desc" +) + var ( _invalidSpaceNameCharacters = []string{`/`, `\`, `.`, `:`, `?`, `*`, `"`, `>`, `<`, `|`} _maxSpaceNameLength = 255 @@ -253,8 +260,8 @@ func (g Graph) CreateDrive(w http.ResponseWriter, r *http.Request) { driveType = *drive.DriveType } switch driveType { - case "", "project": - driveType = "project" + case "", _spaceTypeProject: + driveType = _spaceTypeProject default: logger.Debug().Str("type", driveType).Msg("could not create drive: drives of this type cannot be created via this api") errorcode.InvalidRequest.Render(w, r, http.StatusBadRequest, "drives of this type cannot be created via this api") @@ -275,7 +282,7 @@ func (g Graph) CreateDrive(w http.ResponseWriter, r *http.Request) { csr.Opaque = utils.AppendPlainToOpaque(csr.Opaque, "spaceAlias", *drive.DriveAlias) } - if driveType == "personal" { + if driveType == _spaceTypePersonal { csr.Owner = us } @@ -911,7 +918,7 @@ func sortSpaces(req *godata.GoDataRequest, spaces []*libregraph.Drive) ([]*libre return nil, errors.Errorf("we do not support <%s> as a order parameter", req.Query.OrderBy.OrderByItems[0].Field.Value) } - if req.Query.OrderBy.OrderByItems[0].Order == "desc" { + if req.Query.OrderBy.OrderByItems[0].Order == _sortDescending { sorter = sort.Reverse(sorter) } sort.Sort(sorter) diff --git a/services/graph/pkg/service/v0/drives_test.go b/services/graph/pkg/service/v0/drives_test.go index 2c13866e3..7cd084036 100644 --- a/services/graph/pkg/service/v0/drives_test.go +++ b/services/graph/pkg/service/v0/drives_test.go @@ -56,7 +56,7 @@ var sortTests = []sortTest{ Query: &godata.GoDataQuery{ OrderBy: &godata.GoDataOrderByQuery{ OrderByItems: []*godata.OrderByItem{ - {Field: &godata.Token{Value: "name"}, Order: "desc"}, + {Field: &godata.Token{Value: "name"}, Order: _sortDescending}, }, }, }, @@ -94,7 +94,7 @@ var sortTests = []sortTest{ Query: &godata.GoDataQuery{ OrderBy: &godata.GoDataOrderByQuery{ OrderByItems: []*godata.OrderByItem{ - {Field: &godata.Token{Value: "lastModifiedDateTime"}, Order: "desc"}, + {Field: &godata.Token{Value: "lastModifiedDateTime"}, Order: _sortDescending}, }, }, }, diff --git a/services/graph/pkg/service/v0/groups.go b/services/graph/pkg/service/v0/groups.go index 3dd8abbe8..ce610496c 100644 --- a/services/graph/pkg/service/v0/groups.go +++ b/services/graph/pkg/service/v0/groups.go @@ -427,7 +427,7 @@ func sortGroups(req *godata.GoDataRequest, groups []*libregraph.Group) ([]*libre return nil, fmt.Errorf("we do not support <%s> as a order parameter", req.Query.OrderBy.OrderByItems[0].Field.Value) } - if req.Query.OrderBy.OrderByItems[0].Order == "desc" { + if req.Query.OrderBy.OrderByItems[0].Order == _sortDescending { sorter = sort.Reverse(sorter) } sort.Sort(sorter) diff --git a/services/graph/pkg/service/v0/users.go b/services/graph/pkg/service/v0/users.go index dc9253ffa..fcfa882de 100644 --- a/services/graph/pkg/service/v0/users.go +++ b/services/graph/pkg/service/v0/users.go @@ -499,7 +499,7 @@ func sortUsers(req *godata.GoDataRequest, users []*libregraph.User) ([]*libregra return nil, fmt.Errorf("we do not support <%s> as a order parameter", req.Query.OrderBy.OrderByItems[0].Field.Value) } - if req.Query.OrderBy.OrderByItems[0].Order == "desc" { + if req.Query.OrderBy.OrderByItems[0].Order == _sortDescending { sorter = sort.Reverse(sorter) } sort.Sort(sorter) diff --git a/services/idp/pkg/command/server.go b/services/idp/pkg/command/server.go index a17d0c42d..b8d299f3f 100644 --- a/services/idp/pkg/command/server.go +++ b/services/idp/pkg/command/server.go @@ -139,7 +139,7 @@ func ensureEncryptionSecretExists(path string) error { f, err := os.OpenFile(path, os.O_CREATE|os.O_WRONLY, 0600) if err != nil { - return nil + return err } defer f.Close() @@ -175,7 +175,7 @@ func ensureSigningPrivateKeyExists(paths []string) error { f, err := os.OpenFile(path, os.O_CREATE|os.O_WRONLY, 0600) if err != nil { - return nil + return err } defer f.Close() diff --git a/services/ocs/pkg/service/v0/groups.go b/services/ocs/pkg/service/v0/groups.go index be933718e..0f1364226 100644 --- a/services/ocs/pkg/service/v0/groups.go +++ b/services/ocs/pkg/service/v0/groups.go @@ -2,35 +2,32 @@ package svc import ( "net/http" - "net/url" - "github.com/go-chi/chi/v5" "github.com/owncloud/ocis/v2/services/ocs/pkg/service/v0/data" "github.com/owncloud/ocis/v2/services/ocs/pkg/service/v0/response" ) +const ( + _backendCS3 = "cs3" +) + // ListUserGroups lists a users groups func (o Ocs) ListUserGroups(w http.ResponseWriter, r *http.Request) { - userid := chi.URLParam(r, "userid") - userid, _ = url.PathUnescape(userid) switch o.config.AccountBackend { - case "cs3": + case _backendCS3: // TODO o.mustRender(w, r, response.DataRender(&data.Groups{})) - return default: o.logger.Fatal().Msgf("Invalid accounts backend type '%s'", o.config.AccountBackend) } - return } // AddToGroup adds a user to a group func (o Ocs) AddToGroup(w http.ResponseWriter, r *http.Request) { switch o.config.AccountBackend { - case "cs3": + case _backendCS3: // TODO o.cs3WriteNotSupported(w, r) - return default: o.logger.Fatal().Msgf("Invalid accounts backend type '%s'", o.config.AccountBackend) } @@ -39,10 +36,9 @@ func (o Ocs) AddToGroup(w http.ResponseWriter, r *http.Request) { // RemoveFromGroup removes a user from a group func (o Ocs) RemoveFromGroup(w http.ResponseWriter, r *http.Request) { switch o.config.AccountBackend { - case "cs3": + case _backendCS3: // TODO o.cs3WriteNotSupported(w, r) - return default: o.logger.Fatal().Msgf("Invalid accounts backend type '%s'", o.config.AccountBackend) } @@ -51,23 +47,20 @@ func (o Ocs) RemoveFromGroup(w http.ResponseWriter, r *http.Request) { // ListGroups lists all groups func (o Ocs) ListGroups(w http.ResponseWriter, r *http.Request) { switch o.config.AccountBackend { - case "cs3": + case _backendCS3: // TODO o.mustRender(w, r, response.DataRender(&data.Groups{})) - return default: o.logger.Fatal().Msgf("Invalid accounts backend type '%s'", o.config.AccountBackend) } - return } // AddGroup adds a group // oC10 implementation: https://github.com/owncloud/core/blob/762780a23c9eadda4fb5fa8db99eba66a5100b6e/apps/provisioning_api/lib/Groups.php#L126-L154 func (o Ocs) AddGroup(w http.ResponseWriter, r *http.Request) { switch o.config.AccountBackend { - case "cs3": + case _backendCS3: o.cs3WriteNotSupported(w, r) - return default: o.logger.Fatal().Msgf("Invalid accounts backend type '%s'", o.config.AccountBackend) } @@ -76,9 +69,8 @@ func (o Ocs) AddGroup(w http.ResponseWriter, r *http.Request) { // DeleteGroup deletes a group func (o Ocs) DeleteGroup(w http.ResponseWriter, r *http.Request) { switch o.config.AccountBackend { - case "cs3": + case _backendCS3: o.cs3WriteNotSupported(w, r) - return default: o.logger.Fatal().Msgf("Invalid accounts backend type '%s'", o.config.AccountBackend) } @@ -87,12 +79,10 @@ func (o Ocs) DeleteGroup(w http.ResponseWriter, r *http.Request) { // GetGroupMembers lists all members of a group func (o Ocs) GetGroupMembers(w http.ResponseWriter, r *http.Request) { switch o.config.AccountBackend { - case "cs3": + case _backendCS3: // TODO o.mustRender(w, r, response.DataRender(&data.Users{})) - return default: o.logger.Fatal().Msgf("Invalid accounts backend type '%s'", o.config.AccountBackend) } - return } diff --git a/services/ocs/pkg/service/v0/users.go b/services/ocs/pkg/service/v0/users.go index 84f7ab52f..df788d910 100644 --- a/services/ocs/pkg/service/v0/users.go +++ b/services/ocs/pkg/service/v0/users.go @@ -6,7 +6,6 @@ import ( "encoding/hex" "net/http" "net/url" - "strings" storemsg "github.com/owncloud/ocis/v2/protogen/gen/ocis/messages/store/v0" storesvc "github.com/owncloud/ocis/v2/protogen/gen/ocis/services/store/v0" @@ -37,7 +36,6 @@ func (o Ocs) GetSelf(w http.ResponseWriter, r *http.Request) { GIDNumber: u.GidNumber, } o.mustRender(w, r, response.DataRender(d)) - return } // GetUser returns the user with the given userid @@ -237,11 +235,6 @@ func (o Ocs) ListUsers(w http.ResponseWriter, r *http.Request) { } } -// escapeValue escapes all special characters in the value -func escapeValue(value string) string { - return strings.ReplaceAll(value, "'", "''") -} - func (o Ocs) fetchAccountFromCS3Backend(ctx context.Context, name string) (*cs3.User, error) { backend := o.getCS3Backend() u, _, err := backend.GetUserByClaims(ctx, "username", name, false) @@ -254,5 +247,4 @@ func (o Ocs) fetchAccountFromCS3Backend(ctx context.Context, name string) (*cs3. func (o Ocs) cs3WriteNotSupported(w http.ResponseWriter, r *http.Request) { o.logger.Warn().Msg("the CS3 backend does not support adding or updating users") o.NotImplementedStub(w, r) - return } diff --git a/services/settings/pkg/store/filesystem/assignments.go b/services/settings/pkg/store/filesystem/assignments.go index 350a04cb1..7e997c9d8 100644 --- a/services/settings/pkg/store/filesystem/assignments.go +++ b/services/settings/pkg/store/filesystem/assignments.go @@ -15,7 +15,7 @@ func (s Store) ListRoleAssignments(accountUUID string) ([]*settingsmsg.UserRoleA assignmentsFolder := s.buildFolderPathForRoleAssignments(false) assignmentFiles, err := os.ReadDir(assignmentsFolder) if err != nil { - return records, nil + return nil, nil } for _, assignmentFile := range assignmentFiles { diff --git a/services/settings/pkg/store/filesystem/bundles.go b/services/settings/pkg/store/filesystem/bundles.go index 17bce7bc9..513bff747 100644 --- a/services/settings/pkg/store/filesystem/bundles.go +++ b/services/settings/pkg/store/filesystem/bundles.go @@ -23,7 +23,7 @@ func (s Store) ListBundles(bundleType settingsmsg.Bundle_Type, bundleIDs []strin bundlesFolder := s.buildFolderPathForBundles(false) bundleFiles, err := os.ReadDir(bundlesFolder) if err != nil { - return []*settingsmsg.Bundle{}, nil + return nil, err } records := make([]*settingsmsg.Bundle, 0, len(bundleFiles)) @@ -133,7 +133,7 @@ func (s Store) AddSettingToBundle(bundleID string, setting *settingsmsg.Setting) func (s Store) RemoveSettingFromBundle(bundleID string, settingID string) error { bundle, err := s.ReadBundle(bundleID) if err != nil { - return nil + return err } if ok := removeSetting(bundle, settingID); ok { if _, err := s.WriteBundle(bundle); err != nil { diff --git a/services/settings/pkg/store/filesystem/values.go b/services/settings/pkg/store/filesystem/values.go index b0a26ebff..230a05055 100644 --- a/services/settings/pkg/store/filesystem/values.go +++ b/services/settings/pkg/store/filesystem/values.go @@ -18,7 +18,7 @@ func (s Store) ListValues(bundleID, accountUUID string) ([]*settingsmsg.Value, e valuesFolder := s.buildFolderPathForValues(false) valueFiles, err := os.ReadDir(valuesFolder) if err != nil { - return []*settingsmsg.Value{}, nil + return nil, err } records := make([]*settingsmsg.Value, 0, len(valueFiles)) @@ -71,7 +71,7 @@ func (s Store) ReadValueByUniqueIdentifiers(accountUUID, settingID string) (*set s.Logger.Debug().Msgf("reading contents from file: %v", filepath.Join(valuesFolder, files[i].Name())) if err := s.parseRecordFromFile(&r, filepath.Join(valuesFolder, files[i].Name())); err != nil { s.Logger.Debug().Msgf("match found: %v", filepath.Join(valuesFolder, files[i].Name())) - return &settingsmsg.Value{}, nil + return nil, err } // if value saved without accountUUID, then it's a global value diff --git a/services/sharing/pkg/config/parser/parse.go b/services/sharing/pkg/config/parser/parse.go index 32cc5624c..c22fb4c0a 100644 --- a/services/sharing/pkg/config/parser/parse.go +++ b/services/sharing/pkg/config/parser/parse.go @@ -11,6 +11,10 @@ import ( "github.com/owncloud/ocis/v2/ocis-pkg/config/envdecode" ) +const ( + _backendCS3 = "cs3" +) + // ParseConfig loads configuration from known paths. func ParseConfig(cfg *config.Config) error { _, err := ociscfg.BindSourcesToStructs(cfg.Service.Name, cfg) @@ -38,19 +42,19 @@ func Validate(cfg *config.Config) error { return shared.MissingJWTTokenError(cfg.Service.Name) } - if cfg.PublicSharingDriver == "cs3" && cfg.PublicSharingDrivers.CS3.SystemUserAPIKey == "" { + if cfg.PublicSharingDriver == _backendCS3 && cfg.PublicSharingDrivers.CS3.SystemUserAPIKey == "" { return shared.MissingSystemUserApiKeyError(cfg.Service.Name) } - if cfg.PublicSharingDriver == "cs3" && cfg.PublicSharingDrivers.CS3.SystemUserID == "" { + if cfg.PublicSharingDriver == _backendCS3 && cfg.PublicSharingDrivers.CS3.SystemUserID == "" { return shared.MissingSystemUserID(cfg.Service.Name) } - if cfg.UserSharingDriver == "cs3" && cfg.UserSharingDrivers.CS3.SystemUserAPIKey == "" { + if cfg.UserSharingDriver == _backendCS3 && cfg.UserSharingDrivers.CS3.SystemUserAPIKey == "" { return shared.MissingSystemUserApiKeyError(cfg.Service.Name) } - if cfg.UserSharingDriver == "cs3" && cfg.UserSharingDrivers.CS3.SystemUserID == "" { + if cfg.UserSharingDriver == _backendCS3 && cfg.UserSharingDrivers.CS3.SystemUserID == "" { return shared.MissingSystemUserID(cfg.Service.Name) } diff --git a/services/thumbnails/pkg/service/grpc/v0/service.go b/services/thumbnails/pkg/service/grpc/v0/service.go index e6cc0cac5..4420258ad 100644 --- a/services/thumbnails/pkg/service/grpc/v0/service.go +++ b/services/thumbnails/pkg/service/grpc/v0/service.go @@ -82,13 +82,11 @@ func (g Thumbnail) GetThumbnail(ctx context.Context, req *thumbnailssvc.GetThumb } generator, err := thumbnail.GeneratorForType(tType) if err != nil { - g.logger.Debug().Str("thumbnail_type", tType).Msg("unsupported thumbnail type") - return nil + return merrors.BadRequest(g.serviceID, "unsupported thumbnail type") } encoder, err := thumbnail.EncoderForType(tType) if err != nil { - g.logger.Debug().Str("thumbnail_type", tType).Msg("unsupported thumbnail type") - return nil + return merrors.BadRequest(g.serviceID, "unsupported thumbnail type") } var key string diff --git a/services/webdav/pkg/propfind/propfind.go b/services/webdav/pkg/propfind/propfind.go index 3bc8e4f9c..5a488eec2 100644 --- a/services/webdav/pkg/propfind/propfind.go +++ b/services/webdav/pkg/propfind/propfind.go @@ -10,10 +10,6 @@ import ( "github.com/owncloud/ocis/v2/services/webdav/pkg/prop" ) -const ( - _spaceTypeProject = "project" -) - type countingReader struct { n int r io.Reader