diff --git a/changelog/unreleased/fdeprecate-errors-new-fmt-errorf.md b/changelog/unreleased/fdeprecate-errors-new-fmt-errorf.md new file mode 100644 index 0000000000..232e498a33 --- /dev/null +++ b/changelog/unreleased/fdeprecate-errors-new-fmt-errorf.md @@ -0,0 +1,6 @@ +Enhancement: Deprecate using errors.New and fmt.Errorf + +Previously we were using errors.New and fmt.Errorf to create errors. +Now we use the errors defined in the errtypes package. + +https://github.com/cs3org/reva/issues/1673 \ No newline at end of file diff --git a/internal/grpc/interceptors/auth/auth.go b/internal/grpc/interceptors/auth/auth.go index 9b3599871a..849b458e83 100644 --- a/internal/grpc/interceptors/auth/auth.go +++ b/internal/grpc/interceptors/auth/auth.go @@ -20,10 +20,10 @@ package auth import ( "context" - "fmt" userpb "github.com/cs3org/go-cs3apis/cs3/identity/user/v1beta1" "github.com/cs3org/reva/pkg/appctx" + "github.com/cs3org/reva/pkg/errtypes" "github.com/cs3org/reva/pkg/token" tokenmgr "github.com/cs3org/reva/pkg/token/manager/registry" "github.com/cs3org/reva/pkg/user" @@ -67,7 +67,7 @@ func NewUnary(m map[string]interface{}, unprotected []string) (grpc.UnaryServerI h, ok := tokenmgr.NewFuncs[conf.TokenManager] if !ok { - return nil, errors.New("auth: token manager does not exist: " + conf.TokenManager) + return nil, errtypes.NotFound("auth: token manager does not exist: " + conf.TokenManager) } tokenManager, err := h(conf.TokenManagers[conf.TokenManager]) @@ -140,12 +140,12 @@ func NewStream(m map[string]interface{}, unprotected []string) (grpc.StreamServe h, ok := tokenmgr.NewFuncs[conf.TokenManager] if !ok { - return nil, fmt.Errorf("auth: token manager not found: %s", conf.TokenManager) + return nil, errtypes.NotFound("auth: token manager not found: " + conf.TokenManager) } tokenManager, err := h(conf.TokenManagers[conf.TokenManager]) if err != nil { - return nil, errors.New("auth: token manager not found: " + conf.TokenManager) + return nil, errtypes.NotFound("auth: token manager not found: " + conf.TokenManager) } interceptor := func(srv interface{}, ss grpc.ServerStream, info *grpc.StreamServerInfo, handler grpc.StreamHandler) error { diff --git a/internal/grpc/services/appprovider/appprovider.go b/internal/grpc/services/appprovider/appprovider.go index 90dd2c4a91..2fbe2426cc 100644 --- a/internal/grpc/services/appprovider/appprovider.go +++ b/internal/grpc/services/appprovider/appprovider.go @@ -35,6 +35,7 @@ import ( "github.com/cs3org/reva/pkg/app" "github.com/cs3org/reva/pkg/app/provider/demo" "github.com/cs3org/reva/pkg/appctx" + "github.com/cs3org/reva/pkg/errtypes" "github.com/cs3org/reva/pkg/rgrpc" "github.com/cs3org/reva/pkg/rgrpc/status" "github.com/cs3org/reva/pkg/rhttp" @@ -109,7 +110,7 @@ func getProvider(c *config) (app.Provider, error) { case "demo": return demo.New(c.Demo) default: - return nil, fmt.Errorf("driver not found: %s", c.Driver) + return nil, errtypes.NotFound("driver not found: " + c.Driver) } } @@ -131,7 +132,7 @@ func (s *service) getWopiAppEndpoints(ctx context.Context) (map[string]interface } defer appsRes.Body.Close() if appsRes.StatusCode != http.StatusOK { - return nil, fmt.Errorf("Request to WOPI server returned %d", appsRes.StatusCode) + return nil, errtypes.InternalError(fmt.Sprintf("Request to WOPI server returned %d", appsRes.StatusCode)) } appsBody, err := ioutil.ReadAll(appsRes.Body) if err != nil { @@ -263,7 +264,7 @@ func (s *service) OpenFileInAppProvider(ctx context.Context, req *providerpb.Ope } defer bridgeRes.Body.Close() if bridgeRes.StatusCode != http.StatusFound { - return nil, fmt.Errorf("Request to WOPI bridge returned %d", bridgeRes.StatusCode) + return nil, errtypes.InternalError(fmt.Sprintf("Request to WOPI bridge returned %d", bridgeRes.StatusCode)) } appProviderURL = bridgeRes.Header.Get("Location") } diff --git a/internal/grpc/services/appregistry/appregistry.go b/internal/grpc/services/appregistry/appregistry.go index 13806e2490..3f2f99db6c 100644 --- a/internal/grpc/services/appregistry/appregistry.go +++ b/internal/grpc/services/appregistry/appregistry.go @@ -20,13 +20,13 @@ package appregistry import ( "context" - "fmt" "google.golang.org/grpc" registrypb "github.com/cs3org/go-cs3apis/cs3/app/registry/v1beta1" "github.com/cs3org/reva/pkg/app" "github.com/cs3org/reva/pkg/app/registry/static" + "github.com/cs3org/reva/pkg/errtypes" "github.com/cs3org/reva/pkg/rgrpc" "github.com/cs3org/reva/pkg/rgrpc/status" "github.com/mitchellh/mapstructure" @@ -90,7 +90,7 @@ func getRegistry(c *config) (app.Registry, error) { case "static": return static.New(c.Static) default: - return nil, fmt.Errorf("driver not found: %s", c.Driver) + return nil, errtypes.NotFound("driver not found: " + c.Driver) } } diff --git a/internal/grpc/services/appregistry/appregistry_test.go b/internal/grpc/services/appregistry/appregistry_test.go index 3fd817247f..b2c7cb4e9c 100644 --- a/internal/grpc/services/appregistry/appregistry_test.go +++ b/internal/grpc/services/appregistry/appregistry_test.go @@ -274,12 +274,12 @@ func TestNew(t *testing.T) { { name: "not existing driver", m: map[string]interface{}{"Driver": "doesnotexist"}, - wantErr: "driver not found: doesnotexist", + wantErr: "error: not found: driver not found: doesnotexist", }, { name: "empty", m: map[string]interface{}{}, - wantErr: "driver not found: ", + wantErr: "error: not found: driver not found: ", }, { name: "extra not existing field in setting", diff --git a/internal/grpc/services/authprovider/authprovider.go b/internal/grpc/services/authprovider/authprovider.go index abf88f43be..7dcf75f915 100644 --- a/internal/grpc/services/authprovider/authprovider.go +++ b/internal/grpc/services/authprovider/authprovider.go @@ -66,12 +66,12 @@ func parseConfig(m map[string]interface{}) (*config, error) { func getAuthManager(manager string, m map[string]map[string]interface{}) (auth.Manager, error) { if manager == "" { - return nil, errors.New("authsvc: driver not configured for auth manager") + return nil, errtypes.InternalError("authsvc: driver not configured for auth manager") } if f, ok := registry.NewFuncs[manager]; ok { return f(m[manager]) } - return nil, fmt.Errorf("authsvc: driver %s not found for auth manager", manager) + return nil, errtypes.NotFound(fmt.Sprintf("authsvc: driver %s not found for auth manager", manager)) } // New returns a new AuthProviderServiceServer. diff --git a/internal/grpc/services/authregistry/authregistry.go b/internal/grpc/services/authregistry/authregistry.go index ca1071b437..f3b3ab2262 100644 --- a/internal/grpc/services/authregistry/authregistry.go +++ b/internal/grpc/services/authregistry/authregistry.go @@ -20,11 +20,11 @@ package authregistry import ( "context" - "fmt" registrypb "github.com/cs3org/go-cs3apis/cs3/auth/registry/v1beta1" "github.com/cs3org/reva/pkg/auth" "github.com/cs3org/reva/pkg/auth/registry/registry" + "github.com/cs3org/reva/pkg/errtypes" "github.com/cs3org/reva/pkg/rgrpc" "github.com/cs3org/reva/pkg/rgrpc/status" "github.com/mitchellh/mapstructure" @@ -98,7 +98,7 @@ func getRegistry(c *config) (auth.Registry, error) { if f, ok := registry.NewFuncs[c.Driver]; ok { return f(c.Drivers[c.Driver]) } - return nil, fmt.Errorf("authregistrysvc: driver not found: %s", c.Driver) + return nil, errtypes.NotFound("authregistrysvc: driver not found: " + c.Driver) } func (s *service) ListAuthProviders(ctx context.Context, req *registrypb.ListAuthProvidersRequest) (*registrypb.ListAuthProvidersResponse, error) { diff --git a/internal/grpc/services/datatx/datatx.go b/internal/grpc/services/datatx/datatx.go index dbda7518f3..33e9f73d56 100644 --- a/internal/grpc/services/datatx/datatx.go +++ b/internal/grpc/services/datatx/datatx.go @@ -22,6 +22,7 @@ import ( "context" datatx "github.com/cs3org/go-cs3apis/cs3/tx/v1beta1" + "github.com/cs3org/reva/pkg/errtypes" "github.com/cs3org/reva/pkg/rgrpc" "github.com/cs3org/reva/pkg/rgrpc/status" "github.com/mitchellh/mapstructure" @@ -82,18 +83,18 @@ func (s *service) UnprotectedEndpoints() []string { func (s *service) CreateTransfer(ctx context.Context, req *datatx.CreateTransferRequest) (*datatx.CreateTransferResponse, error) { return &datatx.CreateTransferResponse{ - Status: status.NewUnimplemented(ctx, errors.New("CreateTransfer not implemented"), "CreateTransfer not implemented"), + Status: status.NewUnimplemented(ctx, errtypes.NotSupported("CreateTransfer not implemented"), "CreateTransfer not implemented"), }, nil } func (s *service) GetTransferStatus(ctx context.Context, in *datatx.GetTransferStatusRequest) (*datatx.GetTransferStatusResponse, error) { return &datatx.GetTransferStatusResponse{ - Status: status.NewUnimplemented(ctx, errors.New("GetTransferStatus not implemented"), "GetTransferStatus not implemented"), + Status: status.NewUnimplemented(ctx, errtypes.NotSupported("GetTransferStatus not implemented"), "GetTransferStatus not implemented"), }, nil } func (s *service) CancelTransfer(ctx context.Context, in *datatx.CancelTransferRequest) (*datatx.CancelTransferResponse, error) { return &datatx.CancelTransferResponse{ - Status: status.NewUnimplemented(ctx, errors.New("CancelTransfer not implemented"), "CancelTransfer not implemented"), + Status: status.NewUnimplemented(ctx, errtypes.NotSupported("CancelTransfer not implemented"), "CancelTransfer not implemented"), }, nil } diff --git a/internal/grpc/services/gateway/appprovider.go b/internal/grpc/services/gateway/appprovider.go index 8e3c3872a6..b66c42dfe2 100644 --- a/internal/grpc/services/gateway/appprovider.go +++ b/internal/grpc/services/gateway/appprovider.go @@ -181,7 +181,7 @@ func (s *svc) openLocalResources(ctx context.Context, ri *storageprovider.Resour accessToken, ok := token.ContextGetToken(ctx) if !ok || accessToken == "" { return &providerpb.OpenFileInAppProviderResponse{ - Status: status.NewUnauthenticated(ctx, errors.New("Access token is invalid or empty"), ""), + Status: status.NewUnauthenticated(ctx, errtypes.InvalidCredentials("Access token is invalid or empty"), ""), }, nil } @@ -246,7 +246,7 @@ func (s *svc) findAppProvider(ctx context.Context, ri *storageprovider.ResourceI return nil, errtypes.NotFound("gateway: app provider not found for resource: " + ri.String()) } - return nil, errors.New("gateway: error finding a storage provider") + return nil, errtypes.InternalError("gateway: error finding a storage provider") } func getGRPCConfig(opaque *typespb.Opaque) (bool, bool) { diff --git a/internal/grpc/services/gateway/authprovider.go b/internal/grpc/services/gateway/authprovider.go index 487094fa6a..45db876824 100644 --- a/internal/grpc/services/gateway/authprovider.go +++ b/internal/grpc/services/gateway/authprovider.go @@ -43,7 +43,7 @@ func (s *svc) Authenticate(ctx context.Context, req *gateway.AuthenticateRequest // find auth provider c, err := s.findAuthProvider(ctx, req.Type) if err != nil { - err = errors.New("gateway: error finding auth provider for type: " + req.Type) + err = errtypes.NotFound("gateway: error finding auth provider for type: " + req.Type) return &gateway.AuthenticateResponse{ Status: status.NewInternal(ctx, err, "error getting auth provider client"), }, nil @@ -77,7 +77,7 @@ func (s *svc) Authenticate(ctx context.Context, req *gateway.AuthenticateRequest // validate valid userId if res.User == nil { - err := errors.New("gateway: user after Authenticate is nil") + err := errtypes.NotFound("gateway: user after Authenticate is nil") log.Err(err).Msg("user is nil") return &gateway.AuthenticateResponse{ Status: status.NewInternal(ctx, err, "user is nil"), @@ -86,7 +86,7 @@ func (s *svc) Authenticate(ctx context.Context, req *gateway.AuthenticateRequest uid := res.User.Id if uid == nil { - err := errors.New("gateway: uid after Authenticate is nil") + err := errtypes.NotFound("gateway: uid after Authenticate is nil") log.Err(err).Msg("user id is nil") return &gateway.AuthenticateResponse{ Status: status.NewInternal(ctx, err, "user id is nil"), @@ -191,5 +191,5 @@ func (s *svc) findAuthProvider(ctx context.Context, authType string) (provider.P return nil, errtypes.NotFound("gateway: auth provider not found for type:" + authType) } - return nil, errors.New("gateway: error finding an auth provider for type: " + authType) + return nil, errtypes.InternalError("gateway: error finding an auth provider for type: " + authType) } diff --git a/internal/grpc/services/gateway/gateway.go b/internal/grpc/services/gateway/gateway.go index 0388c441d1..f91678f6bd 100644 --- a/internal/grpc/services/gateway/gateway.go +++ b/internal/grpc/services/gateway/gateway.go @@ -27,6 +27,7 @@ import ( gateway "github.com/cs3org/go-cs3apis/cs3/gateway/v1beta1" "github.com/ReneKroon/ttlcache/v2" + "github.com/cs3org/reva/pkg/errtypes" "github.com/cs3org/reva/pkg/rgrpc" "github.com/cs3org/reva/pkg/sharedconf" "github.com/cs3org/reva/pkg/token" @@ -177,5 +178,5 @@ func getTokenManager(manager string, m map[string]map[string]interface{}) (token return f(m[manager]) } - return nil, fmt.Errorf("driver %s not found for token manager", manager) + return nil, errtypes.NotFound(fmt.Sprintf("driver %s not found for token manager", manager)) } diff --git a/internal/grpc/services/gateway/ocmshareprovider.go b/internal/grpc/services/gateway/ocmshareprovider.go index 1a8cb6f8c3..8ee4935f3b 100644 --- a/internal/grpc/services/gateway/ocmshareprovider.go +++ b/internal/grpc/services/gateway/ocmshareprovider.go @@ -268,7 +268,7 @@ func (s *svc) UpdateReceivedOCMShare(ctx context.Context, req *ocm.UpdateReceive } // TODO(labkode): implementing updating display name - err = errors.New("gateway: update of display name is not yet implemented") + err = errtypes.NotSupported("gateway: update of display name is not yet implemented") return &ocm.UpdateReceivedOCMShareResponse{ Status: status.NewUnimplemented(ctx, err, "error updating received share"), }, nil @@ -304,7 +304,7 @@ func (s *svc) createWebdavReference(ctx context.Context, share *ocm.Share) (*rpc case "plain": token = string(tokenOpaque.Value) default: - err := errors.New("opaque entry decoder not recognized: " + tokenOpaque.Decoder) + err := errtypes.NotSupported("opaque entry decoder not recognized: " + tokenOpaque.Decoder) return status.NewInternal(ctx, err, "invalid opaque entry decoder"), nil } diff --git a/internal/grpc/services/gateway/publicshareprovider.go b/internal/grpc/services/gateway/publicshareprovider.go index 203ef19df9..88bb41b1c9 100644 --- a/internal/grpc/services/gateway/publicshareprovider.go +++ b/internal/grpc/services/gateway/publicshareprovider.go @@ -24,13 +24,14 @@ import ( rpc "github.com/cs3org/go-cs3apis/cs3/rpc/v1beta1" link "github.com/cs3org/go-cs3apis/cs3/sharing/link/v1beta1" "github.com/cs3org/reva/pkg/appctx" + "github.com/cs3org/reva/pkg/errtypes" "github.com/cs3org/reva/pkg/rgrpc/todo/pool" "github.com/pkg/errors" ) func (s *svc) CreatePublicShare(ctx context.Context, req *link.CreatePublicShareRequest) (*link.CreatePublicShareResponse, error) { if s.isSharedFolder(ctx, req.ResourceInfo.GetPath()) { - return nil, errors.New("gateway: can't create a public share of the share folder itself") + return nil, errtypes.AlreadyExists("gateway: can't create a public share of the share folder itself") } log := appctx.GetLogger(ctx) diff --git a/internal/grpc/services/gateway/storageprovider.go b/internal/grpc/services/gateway/storageprovider.go index 77b4a5adbb..90a5a04272 100644 --- a/internal/grpc/services/gateway/storageprovider.go +++ b/internal/grpc/services/gateway/storageprovider.go @@ -244,7 +244,7 @@ func (s *svc) InitiateFileDownload(ctx context.Context, req *provider.InitiateFi } if statRes.Info.Type != provider.ResourceType_RESOURCE_TYPE_REFERENCE { - err := errors.New(fmt.Sprintf("gateway: expected reference: got:%+v", statRes.Info)) + err := errtypes.BadRequest(fmt.Sprintf("gateway: expected reference: got:%+v", statRes.Info)) log.Err(err).Msg("gateway: error stating share name") return &gateway.InitiateFileDownloadResponse{ Status: status.NewInternal(ctx, err, "gateway: error initiating download"), @@ -456,7 +456,7 @@ func (s *svc) InitiateFileUpload(ctx context.Context, req *provider.InitiateFile } if statRes.Info.Type != provider.ResourceType_RESOURCE_TYPE_REFERENCE { - err := errors.New(fmt.Sprintf("gateway: expected reference: got:%+v", statRes.Info)) + err := errtypes.BadRequest(fmt.Sprintf("gateway: expected reference: got:%+v", statRes.Info)) log.Err(err).Msg("gateway: error stating share name") return &gateway.InitiateFileUploadResponse{ Status: status.NewInternal(ctx, err, "gateway: error initiating upload"), @@ -1387,7 +1387,7 @@ func (s *svc) checkRef(ctx context.Context, ri *provider.ResourceInfo) (*provide case "webdav": return nil, "webdav", nil default: - err := errors.New("gateway: no reference handler for scheme: " + uri.Scheme) + err := errtypes.BadRequest("gateway: no reference handler for scheme: " + uri.Scheme) return nil, "", err } } @@ -1429,12 +1429,12 @@ func (s *svc) handleCS3Ref(ctx context.Context, opaque string) (*provider.Resour case rpc.Code_CODE_UNIMPLEMENTED: return nil, errtypes.NotSupported(req.Ref.String()) default: - return nil, errors.New("gateway: error stating target reference") + return nil, errtypes.InternalError("gateway: error stating target reference") } } if res.Info.Type == provider.ResourceType_RESOURCE_TYPE_REFERENCE { - err := errors.New("gateway: error the target of a reference cannot be another reference") + err := errtypes.BadRequest("gateway: error the target of a reference cannot be another reference") return nil, err } @@ -1903,7 +1903,7 @@ func (s *svc) getSharedFolder(ctx context.Context) string { func (s *svc) CreateSymlink(ctx context.Context, req *provider.CreateSymlinkRequest) (*provider.CreateSymlinkResponse, error) { return &provider.CreateSymlinkResponse{ - Status: status.NewUnimplemented(ctx, errors.New("CreateSymlink not implemented"), "CreateSymlink not implemented"), + Status: status.NewUnimplemented(ctx, errtypes.NotSupported("CreateSymlink not implemented"), "CreateSymlink not implemented"), }, nil } @@ -1940,7 +1940,7 @@ func (s *svc) RestoreFileVersion(ctx context.Context, req *provider.RestoreFileV } func (s *svc) ListRecycleStream(_ *gateway.ListRecycleStreamRequest, _ gateway.GatewayAPI_ListRecycleStreamServer) error { - return errors.New("Unimplemented") + return errtypes.NotSupported("ListRecycleStream unimplemented") } // TODO use the ListRecycleRequest.Ref to only list the trash of a specific storage @@ -2083,7 +2083,7 @@ func (s *svc) findProviders(ctx context.Context, ref *provider.Reference) ([]*re } if res.Providers == nil { - return nil, errors.New("gateway: provider is nil") + return nil, errtypes.NotFound("gateway: provider is nil") } return res.Providers, nil diff --git a/internal/grpc/services/gateway/usershareprovider.go b/internal/grpc/services/gateway/usershareprovider.go index f1541e267c..12cfe3df55 100644 --- a/internal/grpc/services/gateway/usershareprovider.go +++ b/internal/grpc/services/gateway/usershareprovider.go @@ -37,7 +37,7 @@ import ( func (s *svc) CreateShare(ctx context.Context, req *collaboration.CreateShareRequest) (*collaboration.CreateShareResponse, error) { if s.isSharedFolder(ctx, req.ResourceInfo.GetPath()) { - return nil, errors.New("gateway: can't share the share folder itself") + return nil, errtypes.AlreadyExists("gateway: can't share the share folder itself") } c, err := pool.GetUserShareProviderClient(s.c.UserShareProviderEndpoint) @@ -344,7 +344,7 @@ func (s *svc) UpdateReceivedShare(ctx context.Context, req *collaboration.Update } // TODO(labkode): implementing updating display name - err = errors.New("gateway: update of display name is not yet implemented") + err = errtypes.NotSupported("gateway: update of display name is not yet implemented") return &collaboration.UpdateReceivedShareResponse{ Status: status.NewUnimplemented(ctx, err, "error updating received share"), }, nil diff --git a/internal/grpc/services/gateway/webdavstorageprovider.go b/internal/grpc/services/gateway/webdavstorageprovider.go index 34b49a7461..b49fd91b8a 100644 --- a/internal/grpc/services/gateway/webdavstorageprovider.go +++ b/internal/grpc/services/gateway/webdavstorageprovider.go @@ -214,7 +214,7 @@ func (s *svc) webdavRefTransferEndpoint(ctx context.Context, targetURL string, n func (s *svc) extractEndpointInfo(ctx context.Context, targetURL string) (*webdavEndpoint, error) { if targetURL == "" { - return nil, errors.New("gateway: ref target is an empty uri") + return nil, errtypes.BadRequest("gateway: ref target is an empty uri") } uri, err := url.Parse(targetURL) diff --git a/internal/grpc/services/groupprovider/groupprovider.go b/internal/grpc/services/groupprovider/groupprovider.go index 20e6f386fd..951395825a 100644 --- a/internal/grpc/services/groupprovider/groupprovider.go +++ b/internal/grpc/services/groupprovider/groupprovider.go @@ -23,6 +23,7 @@ import ( "fmt" grouppb "github.com/cs3org/go-cs3apis/cs3/identity/group/v1beta1" + "github.com/cs3org/reva/pkg/errtypes" "github.com/cs3org/reva/pkg/group" "github.com/cs3org/reva/pkg/group/manager/registry" "github.com/cs3org/reva/pkg/rgrpc" @@ -62,7 +63,7 @@ func getDriver(c *config) (group.Manager, error) { return f(c.Drivers[c.Driver]) } - return nil, fmt.Errorf("driver %s not found for group manager", c.Driver) + return nil, errtypes.NotFound(fmt.Sprintf("driver %s not found for group manager", c.Driver)) } // New returns a new GroupProviderServiceServer. diff --git a/internal/grpc/services/ocmcore/ocmcore.go b/internal/grpc/services/ocmcore/ocmcore.go index c6b814b8f0..f6bbbf6725 100644 --- a/internal/grpc/services/ocmcore/ocmcore.go +++ b/internal/grpc/services/ocmcore/ocmcore.go @@ -27,6 +27,7 @@ import ( ocmcore "github.com/cs3org/go-cs3apis/cs3/ocm/core/v1beta1" ocm "github.com/cs3org/go-cs3apis/cs3/sharing/ocm/v1beta1" provider "github.com/cs3org/go-cs3apis/cs3/storage/provider/v1beta1" + "github.com/cs3org/reva/pkg/errtypes" "github.com/cs3org/reva/pkg/ocm/share" "github.com/cs3org/reva/pkg/ocm/share/manager/registry" "github.com/cs3org/reva/pkg/rgrpc" @@ -64,7 +65,7 @@ func getShareManager(c *config) (share.Manager, error) { if f, ok := registry.NewFuncs[c.Driver]; ok { return f(c.Drivers[c.Driver]) } - return nil, fmt.Errorf("driver not found: %s", c.Driver) + return nil, errtypes.NotFound(fmt.Sprintf("driver not found: %s", c.Driver)) } func parseConfig(m map[string]interface{}) (*config, error) { @@ -109,7 +110,7 @@ func (s *service) UnprotectedEndpoints() []string { func (s *service) CreateOCMCoreShare(ctx context.Context, req *ocmcore.CreateOCMCoreShareRequest) (*ocmcore.CreateOCMCoreShareResponse, error) { parts := strings.Split(req.ProviderId, ":") if len(parts) < 2 { - err := errors.New("resource ID does not follow the layout storageid:opaqueid " + req.ProviderId) + err := errtypes.BadRequest("resource ID does not follow the layout storageid:opaqueid " + req.ProviderId) return &ocmcore.CreateOCMCoreShareResponse{ Status: status.NewInternal(ctx, err, "error decoding resource ID"), }, nil @@ -124,7 +125,7 @@ func (s *service) CreateOCMCoreShare(ctx context.Context, req *ocmcore.CreateOCM permOpaque, ok := req.Protocol.Opaque.Map["permissions"] if !ok { return &ocmcore.CreateOCMCoreShareResponse{ - Status: status.NewInternal(ctx, errors.New("resource permissions not set"), ""), + Status: status.NewInternal(ctx, errtypes.BadRequest("resource permissions not set"), ""), }, nil } switch permOpaque.Decoder { @@ -136,7 +137,7 @@ func (s *service) CreateOCMCoreShare(ctx context.Context, req *ocmcore.CreateOCM }, nil } default: - err := errors.New("opaque entry decoder not recognized") + err := errtypes.NotSupported("opaque entry decoder not recognized") return &ocmcore.CreateOCMCoreShareResponse{ Status: status.NewInternal(ctx, err, "invalid opaque entry decoder"), }, nil @@ -146,14 +147,14 @@ func (s *service) CreateOCMCoreShare(ctx context.Context, req *ocmcore.CreateOCM tokenOpaque, ok := req.Protocol.Opaque.Map["token"] if !ok { return &ocmcore.CreateOCMCoreShareResponse{ - Status: status.NewInternal(ctx, errors.New("token not set"), ""), + Status: status.NewInternal(ctx, errtypes.PermissionDenied("token not set"), ""), }, nil } switch tokenOpaque.Decoder { case "plain": token = string(tokenOpaque.Value) default: - err := errors.New("opaque entry decoder not recognized: " + tokenOpaque.Decoder) + err := errtypes.NotSupported("opaque entry decoder not recognized: " + tokenOpaque.Decoder) return &ocmcore.CreateOCMCoreShareResponse{ Status: status.NewInternal(ctx, err, "invalid opaque entry decoder"), }, nil diff --git a/internal/grpc/services/ocminvitemanager/ocminvitemanager.go b/internal/grpc/services/ocminvitemanager/ocminvitemanager.go index d4ed5acd60..6821f7d29e 100644 --- a/internal/grpc/services/ocminvitemanager/ocminvitemanager.go +++ b/internal/grpc/services/ocminvitemanager/ocminvitemanager.go @@ -20,9 +20,9 @@ package ocminvitemanager import ( "context" - "fmt" invitepb "github.com/cs3org/go-cs3apis/cs3/ocm/invite/v1beta1" + "github.com/cs3org/reva/pkg/errtypes" "github.com/cs3org/reva/pkg/ocm/invite" "github.com/cs3org/reva/pkg/ocm/invite/manager/registry" "github.com/cs3org/reva/pkg/rgrpc" @@ -60,7 +60,7 @@ func getInviteManager(c *config) (invite.Manager, error) { if f, ok := registry.NewFuncs[c.Driver]; ok { return f(c.Drivers[c.Driver]) } - return nil, fmt.Errorf("driver not found: %s", c.Driver) + return nil, errtypes.NotFound("driver not found: " + c.Driver) } func parseConfig(m map[string]interface{}) (*config, error) { diff --git a/internal/grpc/services/ocmproviderauthorizer/ocmproviderauthorizer.go b/internal/grpc/services/ocmproviderauthorizer/ocmproviderauthorizer.go index b11c347d5a..8d89fccdd1 100644 --- a/internal/grpc/services/ocmproviderauthorizer/ocmproviderauthorizer.go +++ b/internal/grpc/services/ocmproviderauthorizer/ocmproviderauthorizer.go @@ -20,9 +20,9 @@ package ocmproviderauthorizer import ( "context" - "fmt" ocmprovider "github.com/cs3org/go-cs3apis/cs3/ocm/provider/v1beta1" + "github.com/cs3org/reva/pkg/errtypes" "github.com/cs3org/reva/pkg/ocm/provider" "github.com/cs3org/reva/pkg/ocm/provider/authorizer/registry" "github.com/cs3org/reva/pkg/rgrpc" @@ -60,7 +60,7 @@ func getProviderAuthorizer(c *config) (provider.Authorizer, error) { if f, ok := registry.NewFuncs[c.Driver]; ok { return f(c.Drivers[c.Driver]) } - return nil, fmt.Errorf("driver not found: %s", c.Driver) + return nil, errtypes.NotFound("driver not found: " + c.Driver) } func parseConfig(m map[string]interface{}) (*config, error) { diff --git a/internal/grpc/services/ocmshareprovider/ocmshareprovider.go b/internal/grpc/services/ocmshareprovider/ocmshareprovider.go index 6512c4acd1..676da090cc 100644 --- a/internal/grpc/services/ocmshareprovider/ocmshareprovider.go +++ b/internal/grpc/services/ocmshareprovider/ocmshareprovider.go @@ -20,9 +20,9 @@ package ocmshareprovider import ( "context" - "fmt" ocm "github.com/cs3org/go-cs3apis/cs3/sharing/ocm/v1beta1" + "github.com/cs3org/reva/pkg/errtypes" "github.com/cs3org/reva/pkg/ocm/share" "github.com/cs3org/reva/pkg/ocm/share/manager/registry" "github.com/cs3org/reva/pkg/rgrpc" @@ -60,7 +60,7 @@ func getShareManager(c *config) (share.Manager, error) { if f, ok := registry.NewFuncs[c.Driver]; ok { return f(c.Drivers[c.Driver]) } - return nil, fmt.Errorf("driver not found: %s", c.Driver) + return nil, errtypes.NotFound("driver not found: " + c.Driver) } func parseConfig(m map[string]interface{}) (*config, error) { @@ -106,7 +106,7 @@ func (s *service) CreateOCMShare(ctx context.Context, req *ocm.CreateOCMShareReq if req.Opaque == nil { return &ocm.CreateOCMShareResponse{ - Status: status.NewInternal(ctx, errors.New("can't find resource permissions"), ""), + Status: status.NewInternal(ctx, errtypes.BadRequest("can't find resource permissions"), ""), }, nil } @@ -114,14 +114,14 @@ func (s *service) CreateOCMShare(ctx context.Context, req *ocm.CreateOCMShareReq permOpaque, ok := req.Opaque.Map["permissions"] if !ok { return &ocm.CreateOCMShareResponse{ - Status: status.NewInternal(ctx, errors.New("resource permissions not set"), ""), + Status: status.NewInternal(ctx, errtypes.BadRequest("resource permissions not set"), ""), }, nil } switch permOpaque.Decoder { case "plain": permissions = string(permOpaque.Value) default: - err := errors.New("opaque entry decoder not recognized: " + permOpaque.Decoder) + err := errtypes.NotSupported("opaque entry decoder not recognized: " + permOpaque.Decoder) return &ocm.CreateOCMShareResponse{ Status: status.NewInternal(ctx, err, "invalid opaque entry decoder"), }, nil @@ -131,14 +131,14 @@ func (s *service) CreateOCMShare(ctx context.Context, req *ocm.CreateOCMShareReq nameOpaque, ok := req.Opaque.Map["name"] if !ok { return &ocm.CreateOCMShareResponse{ - Status: status.NewInternal(ctx, errors.New("resource name not set"), ""), + Status: status.NewInternal(ctx, errtypes.BadRequest("resource name not set"), ""), }, nil } switch nameOpaque.Decoder { case "plain": name = string(nameOpaque.Value) default: - err := errors.New("opaque entry decoder not recognized: " + nameOpaque.Decoder) + err := errtypes.NotSupported("opaque entry decoder not recognized: " + nameOpaque.Decoder) return &ocm.CreateOCMShareResponse{ Status: status.NewInternal(ctx, err, "invalid opaque entry decoder"), }, nil diff --git a/internal/grpc/services/publicshareprovider/publicshareprovider.go b/internal/grpc/services/publicshareprovider/publicshareprovider.go index 65709e82a1..f1d0ee9bb9 100644 --- a/internal/grpc/services/publicshareprovider/publicshareprovider.go +++ b/internal/grpc/services/publicshareprovider/publicshareprovider.go @@ -20,7 +20,6 @@ package publicshareprovider import ( "context" - "fmt" link "github.com/cs3org/go-cs3apis/cs3/sharing/link/v1beta1" provider "github.com/cs3org/go-cs3apis/cs3/storage/provider/v1beta1" @@ -60,7 +59,7 @@ func getShareManager(c *config) (publicshare.Manager, error) { if f, ok := registry.NewFuncs[c.Driver]; ok { return f(c.Drivers[c.Driver]) } - return nil, fmt.Errorf("driver not found: %s", c.Driver) + return nil, errtypes.NotFound("driver not found: " + c.Driver) } // TODO(labkode): add ctx to Close. diff --git a/internal/grpc/services/publicstorageprovider/publicstorageprovider.go b/internal/grpc/services/publicstorageprovider/publicstorageprovider.go index b2a1e45b02..b941b9b110 100644 --- a/internal/grpc/services/publicstorageprovider/publicstorageprovider.go +++ b/internal/grpc/services/publicstorageprovider/publicstorageprovider.go @@ -30,6 +30,7 @@ import ( provider "github.com/cs3org/go-cs3apis/cs3/storage/provider/v1beta1" typesv1beta1 "github.com/cs3org/go-cs3apis/cs3/types/v1beta1" "github.com/cs3org/reva/pkg/appctx" + "github.com/cs3org/reva/pkg/errtypes" "github.com/cs3org/reva/pkg/rgrpc" "github.com/cs3org/reva/pkg/rgrpc/status" "github.com/cs3org/reva/pkg/rgrpc/todo/pool" @@ -587,12 +588,12 @@ func filterPermissions(l *provider.ResourcePermissions, r *provider.ResourcePerm func (s *service) unwrap(ctx context.Context, ref *provider.Reference) (token string, relativePath string, err error) { if ref.GetId() != nil { - return "", "", errors.New("need path based ref: got " + ref.String()) + return "", "", errtypes.BadRequest("need path based ref: got " + ref.String()) } if ref.GetPath() == "" { // abort, no valid id nor path - return "", "", errors.New("invalid ref: " + ref.String()) + return "", "", errtypes.BadRequest("invalid ref: " + ref.String()) } // i.e path: /public/{token}/path/to/subfolders diff --git a/internal/grpc/services/storageprovider/storageprovider.go b/internal/grpc/services/storageprovider/storageprovider.go index 44d64416c2..bede723ced 100644 --- a/internal/grpc/services/storageprovider/storageprovider.go +++ b/internal/grpc/services/storageprovider/storageprovider.go @@ -116,7 +116,7 @@ func parseXSTypes(xsTypes map[string]uint32) ([]*provider.ResourceChecksumPriori for xs, prio := range xsTypes { t := PKG2GRPCXS(xs) if t == provider.ResourceChecksumType_RESOURCE_CHECKSUM_TYPE_INVALID { - return nil, fmt.Errorf("checksum type is invalid: %s", xs) + return nil, errtypes.BadRequest("checksum type is invalid: " + xs) } xsPrio := &provider.ResourceChecksumPriority{ Priority: prio, @@ -171,7 +171,7 @@ func New(m map[string]interface{}, ss *grpc.Server) (rgrpc.Service, error) { } if len(xsTypes) == 0 { - return nil, fmt.Errorf("no available checksum, please set in config") + return nil, errtypes.NotFound("no available checksum, please set in config") } registerMimeTypes(c.MimeTypes) @@ -299,7 +299,7 @@ func (s *service) InitiateFileUpload(ctx context.Context, req *provider.Initiate } if newRef.GetPath() == "/" { return &provider.InitiateFileUploadResponse{ - Status: status.NewInternal(ctx, errors.New("can't upload to mount path"), "can't upload to mount path"), + Status: status.NewInternal(ctx, errtypes.BadRequest("can't upload to mount path"), "can't upload to mount path"), }, nil } @@ -424,25 +424,25 @@ func (s *service) CreateHome(ctx context.Context, req *provider.CreateHomeReques func (s *service) CreateStorageSpace(ctx context.Context, req *provider.CreateStorageSpaceRequest) (*provider.CreateStorageSpaceResponse, error) { return &provider.CreateStorageSpaceResponse{ - Status: status.NewUnimplemented(ctx, errors.New("CreateStorageSpace not implemented"), "CreateStorageSpace not implemented"), + Status: status.NewUnimplemented(ctx, errtypes.NotSupported("CreateStorageSpace not implemented"), "CreateStorageSpace not implemented"), }, nil } func (s *service) ListStorageSpaces(ctx context.Context, req *provider.ListStorageSpacesRequest) (*provider.ListStorageSpacesResponse, error) { return &provider.ListStorageSpacesResponse{ - Status: status.NewUnimplemented(ctx, errors.New("ListStorageSpaces not implemented"), "ListStorageSpaces not implemented"), + Status: status.NewUnimplemented(ctx, errtypes.NotSupported("ListStorageSpaces not implemented"), "ListStorageSpaces not implemented"), }, nil } func (s *service) UpdateStorageSpace(ctx context.Context, req *provider.UpdateStorageSpaceRequest) (*provider.UpdateStorageSpaceResponse, error) { return &provider.UpdateStorageSpaceResponse{ - Status: status.NewUnimplemented(ctx, errors.New("UpdateStorageSpace not implemented"), "UpdateStorageSpace not implemented"), + Status: status.NewUnimplemented(ctx, errtypes.NotSupported("UpdateStorageSpace not implemented"), "UpdateStorageSpace not implemented"), }, nil } func (s *service) DeleteStorageSpace(ctx context.Context, req *provider.DeleteStorageSpaceRequest) (*provider.DeleteStorageSpaceResponse, error) { return &provider.DeleteStorageSpaceResponse{ - Status: status.NewUnimplemented(ctx, errors.New("DeleteStorageSpace not implemented"), "DeleteStorageSpace not implemented"), + Status: status.NewUnimplemented(ctx, errtypes.NotSupported("DeleteStorageSpace not implemented"), "DeleteStorageSpace not implemented"), }, nil } @@ -486,7 +486,7 @@ func (s *service) Delete(ctx context.Context, req *provider.DeleteRequest) (*pro } if newRef.GetPath() == "/" { return &provider.DeleteResponse{ - Status: status.NewInternal(ctx, errors.New("can't delete mount path"), "can't delete mount path"), + Status: status.NewInternal(ctx, errtypes.BadRequest("can't delete mount path"), "can't delete mount path"), }, nil } @@ -1064,7 +1064,7 @@ func (s *service) CreateReference(ctx context.Context, req *provider.CreateRefer func (s *service) CreateSymlink(ctx context.Context, req *provider.CreateSymlinkRequest) (*provider.CreateSymlinkResponse, error) { return &provider.CreateSymlinkResponse{ - Status: status.NewUnimplemented(ctx, errors.New("CreateSymlink not implemented"), "CreateSymlink not implemented"), + Status: status.NewUnimplemented(ctx, errtypes.NotSupported("CreateSymlink not implemented"), "CreateSymlink not implemented"), }, nil } @@ -1097,7 +1097,7 @@ func getFS(c *config) (storage.FS, error) { if f, ok := registry.NewFuncs[c.Driver]; ok { return f(c.Drivers[c.Driver]) } - return nil, fmt.Errorf("driver not found: %s", c.Driver) + return nil, errtypes.NotFound("driver not found: " + c.Driver) } func (s *service) unwrap(ctx context.Context, ref *provider.Reference) (*provider.Reference, error) { @@ -1116,7 +1116,7 @@ func (s *service) unwrap(ctx context.Context, ref *provider.Reference) (*provide if ref.GetPath() == "" { // abort, no valid id nor path - return nil, errors.New("ref is invalid: " + ref.String()) + return nil, errtypes.BadRequest("ref is invalid: " + ref.String()) } fn := ref.GetPath() @@ -1138,7 +1138,7 @@ func (s *service) trimMountPrefix(fn string) (string, error) { if strings.HasPrefix(fn, s.mountPath) { return path.Join("/", strings.TrimPrefix(fn, s.mountPath)), nil } - return "", errors.New(fmt.Sprintf("path=%q does not belong to this storage provider mount path=%q"+fn, s.mountPath)) + return "", errtypes.BadRequest(fmt.Sprintf("path=%q does not belong to this storage provider mount path=%q", fn, s.mountPath)) } func (s *service) wrap(ctx context.Context, ri *provider.ResourceInfo) error { diff --git a/internal/grpc/services/storageregistry/storageregistry.go b/internal/grpc/services/storageregistry/storageregistry.go index 02b6dbb5d8..4f59ae5649 100644 --- a/internal/grpc/services/storageregistry/storageregistry.go +++ b/internal/grpc/services/storageregistry/storageregistry.go @@ -20,7 +20,6 @@ package storageregistry import ( "context" - "fmt" registrypb "github.com/cs3org/go-cs3apis/cs3/storage/registry/v1beta1" "github.com/cs3org/reva/pkg/appctx" @@ -97,7 +96,7 @@ func getRegistry(c *config) (storage.Registry, error) { if f, ok := registry.NewFuncs[c.Driver]; ok { return f(c.Drivers[c.Driver]) } - return nil, fmt.Errorf("driver not found: %s", c.Driver) + return nil, errtypes.NotFound("driver not found: " + c.Driver) } func (s *service) ListStorageProviders(ctx context.Context, req *registrypb.ListStorageProvidersRequest) (*registrypb.ListStorageProvidersResponse, error) { diff --git a/internal/grpc/services/userprovider/userprovider.go b/internal/grpc/services/userprovider/userprovider.go index 7d78fba697..fb244990de 100644 --- a/internal/grpc/services/userprovider/userprovider.go +++ b/internal/grpc/services/userprovider/userprovider.go @@ -23,6 +23,7 @@ import ( "fmt" userpb "github.com/cs3org/go-cs3apis/cs3/identity/user/v1beta1" + "github.com/cs3org/reva/pkg/errtypes" "github.com/cs3org/reva/pkg/rgrpc" "github.com/cs3org/reva/pkg/rgrpc/status" "github.com/cs3org/reva/pkg/user" @@ -62,7 +63,7 @@ func getDriver(c *config) (user.Manager, error) { return f(c.Drivers[c.Driver]) } - return nil, fmt.Errorf("driver %s not found for user manager", c.Driver) + return nil, errtypes.NotFound(fmt.Sprintf("driver %s not found for user manager", c.Driver)) } // New returns a new UserProviderServiceServer. diff --git a/internal/grpc/services/usershareprovider/usershareprovider.go b/internal/grpc/services/usershareprovider/usershareprovider.go index 58e9782c9d..0e8521d900 100644 --- a/internal/grpc/services/usershareprovider/usershareprovider.go +++ b/internal/grpc/services/usershareprovider/usershareprovider.go @@ -20,12 +20,12 @@ package usershareprovider import ( "context" - "fmt" userpb "github.com/cs3org/go-cs3apis/cs3/identity/user/v1beta1" collaboration "github.com/cs3org/go-cs3apis/cs3/sharing/collaboration/v1beta1" provider "github.com/cs3org/go-cs3apis/cs3/storage/provider/v1beta1" "github.com/cs3org/reva/pkg/appctx" + "github.com/cs3org/reva/pkg/errtypes" "github.com/cs3org/reva/pkg/rgrpc" "github.com/cs3org/reva/pkg/rgrpc/status" "github.com/cs3org/reva/pkg/share" @@ -60,7 +60,7 @@ func getShareManager(c *config) (share.Manager, error) { if f, ok := registry.NewFuncs[c.Driver]; ok { return f(c.Drivers[c.Driver]) } - return nil, fmt.Errorf("driver not found: %s", c.Driver) + return nil, errtypes.NotFound("driver not found: " + c.Driver) } // TODO(labkode): add ctx to Close.