From d9ad32f75f3c16469ec3fa9f2a0ec1200cb0c95d Mon Sep 17 00:00:00 2001 From: David Christofas Date: Wed, 21 Dec 2022 13:42:02 +0100 Subject: [PATCH 1/5] exclude directories from linting --- .golangci.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.golangci.yml b/.golangci.yml index 11a419de01..3a6a29ef52 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: From efe1fc52e01b6da21df88f8579b1d76600e4e252 Mon Sep 17 00:00:00 2001 From: David Christofas Date: Wed, 21 Dec 2022 13:59:59 +0100 Subject: [PATCH 2/5] fix nilerr bugs --- services/idp/pkg/command/server.go | 4 ++-- services/settings/pkg/store/filesystem/assignments.go | 2 +- services/settings/pkg/store/filesystem/bundles.go | 4 ++-- services/settings/pkg/store/filesystem/values.go | 4 ++-- services/thumbnails/pkg/service/grpc/v0/service.go | 6 ++---- 5 files changed, 9 insertions(+), 11 deletions(-) diff --git a/services/idp/pkg/command/server.go b/services/idp/pkg/command/server.go index a17d0c42d4..b8d299f3f0 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/settings/pkg/store/filesystem/assignments.go b/services/settings/pkg/store/filesystem/assignments.go index 350a04cb1d..7e997c9d86 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 17bce7bc9f..513bff747f 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 b0a26ebff8..230a050559 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/thumbnails/pkg/service/grpc/v0/service.go b/services/thumbnails/pkg/service/grpc/v0/service.go index e6cc0cac59..4420258ad8 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 From 39917330f6216e73fdd645390109619c286bc161 Mon Sep 17 00:00:00 2001 From: David Christofas Date: Wed, 21 Dec 2022 14:21:22 +0100 Subject: [PATCH 3/5] fix goconst bugs --- services/graph/pkg/service/v0/drives.go | 15 +++++++++++---- services/graph/pkg/service/v0/drives_test.go | 4 ++-- services/graph/pkg/service/v0/groups.go | 2 +- services/graph/pkg/service/v0/users.go | 2 +- services/ocs/pkg/service/v0/groups.go | 20 +++++++++++--------- services/sharing/pkg/config/parser/parse.go | 12 ++++++++---- 6 files changed, 34 insertions(+), 21 deletions(-) diff --git a/services/graph/pkg/service/v0/drives.go b/services/graph/pkg/service/v0/drives.go index 8bed0119e7..b03242c1fe 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 2c13866e30..7cd084036e 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 3dd8abbe86..ce610496c4 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 dc9253ffaa..fcfa882de6 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/ocs/pkg/service/v0/groups.go b/services/ocs/pkg/service/v0/groups.go index be933718ef..b01153fdd1 100644 --- a/services/ocs/pkg/service/v0/groups.go +++ b/services/ocs/pkg/service/v0/groups.go @@ -9,12 +9,16 @@ import ( "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 @@ -27,7 +31,7 @@ func (o Ocs) ListUserGroups(w http.ResponseWriter, r *http.Request) { // 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 @@ -39,7 +43,7 @@ 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 @@ -51,21 +55,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: @@ -76,7 +79,7 @@ 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: @@ -87,12 +90,11 @@ 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/sharing/pkg/config/parser/parse.go b/services/sharing/pkg/config/parser/parse.go index 32cc5624c7..c22fb4c0a3 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) } From cf290502fb2533822f60c92892812113b715c5f8 Mon Sep 17 00:00:00 2001 From: David Christofas Date: Wed, 21 Dec 2022 14:26:00 +0100 Subject: [PATCH 4/5] fix gosimple bugs --- services/ocs/pkg/service/v0/groups.go | 12 ------------ services/ocs/pkg/service/v0/users.go | 1 - 2 files changed, 13 deletions(-) diff --git a/services/ocs/pkg/service/v0/groups.go b/services/ocs/pkg/service/v0/groups.go index b01153fdd1..0f13642261 100644 --- a/services/ocs/pkg/service/v0/groups.go +++ b/services/ocs/pkg/service/v0/groups.go @@ -2,9 +2,7 @@ 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" ) @@ -15,17 +13,13 @@ const ( // 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 _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 @@ -34,7 +28,6 @@ func (o Ocs) AddToGroup(w http.ResponseWriter, r *http.Request) { case _backendCS3: // TODO o.cs3WriteNotSupported(w, r) - return default: o.logger.Fatal().Msgf("Invalid accounts backend type '%s'", o.config.AccountBackend) } @@ -46,7 +39,6 @@ func (o Ocs) RemoveFromGroup(w http.ResponseWriter, r *http.Request) { case _backendCS3: // TODO o.cs3WriteNotSupported(w, r) - return default: o.logger.Fatal().Msgf("Invalid accounts backend type '%s'", o.config.AccountBackend) } @@ -58,7 +50,6 @@ func (o Ocs) ListGroups(w http.ResponseWriter, r *http.Request) { 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) } @@ -70,7 +61,6 @@ func (o Ocs) AddGroup(w http.ResponseWriter, r *http.Request) { switch o.config.AccountBackend { case _backendCS3: o.cs3WriteNotSupported(w, r) - return default: o.logger.Fatal().Msgf("Invalid accounts backend type '%s'", o.config.AccountBackend) } @@ -81,7 +71,6 @@ func (o Ocs) DeleteGroup(w http.ResponseWriter, r *http.Request) { switch o.config.AccountBackend { case _backendCS3: o.cs3WriteNotSupported(w, r) - return default: o.logger.Fatal().Msgf("Invalid accounts backend type '%s'", o.config.AccountBackend) } @@ -93,7 +82,6 @@ func (o Ocs) GetGroupMembers(w http.ResponseWriter, r *http.Request) { 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) } diff --git a/services/ocs/pkg/service/v0/users.go b/services/ocs/pkg/service/v0/users.go index 84f7ab52f2..f629534147 100644 --- a/services/ocs/pkg/service/v0/users.go +++ b/services/ocs/pkg/service/v0/users.go @@ -37,7 +37,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 From bd2682ac0e50e9b076d239cbab94941dc5ee6b36 Mon Sep 17 00:00:00 2001 From: David Christofas Date: Wed, 21 Dec 2022 14:29:00 +0100 Subject: [PATCH 5/5] remove dead code --- services/ocs/pkg/service/v0/users.go | 7 ------- services/webdav/pkg/propfind/propfind.go | 4 ---- 2 files changed, 11 deletions(-) diff --git a/services/ocs/pkg/service/v0/users.go b/services/ocs/pkg/service/v0/users.go index f629534147..df788d9103 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" @@ -236,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) @@ -253,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/webdav/pkg/propfind/propfind.go b/services/webdav/pkg/propfind/propfind.go index 3bc8e4f9c6..5a488eec28 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