mirror of
https://github.com/absmach/supermq.git
synced 2026-06-23 06:50:18 +00:00
eb881690c7
Signed-off-by: 1998-felix <felix.gateru@gmail.com> Signed-off-by: Dusan Borovcanin <borovcanindusan1@gmail.com> Signed-off-by: Felix Gateru <felix.gateru@gmail.com> Signed-off-by: Arvindh <arvindh91@gmail.com> Co-authored-by: Felix Gateru <felix.gateru@gmail.com> Co-authored-by: Arvindh <arvindh91@gmail.com> Co-authored-by: Arvindh <30824765+arvindh123@users.noreply.github.com>
73 lines
2.5 KiB
Go
73 lines
2.5 KiB
Go
// Copyright (c) Abstract Machines
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package grpc
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/absmach/magistrala/auth"
|
|
"github.com/absmach/magistrala/pkg/apiutil"
|
|
"github.com/absmach/magistrala/pkg/errors"
|
|
svcerr "github.com/absmach/magistrala/pkg/errors/service"
|
|
"google.golang.org/grpc/codes"
|
|
"google.golang.org/grpc/status"
|
|
)
|
|
|
|
func EncodeError(err error) error {
|
|
switch {
|
|
case errors.Contains(err, nil):
|
|
return nil
|
|
case errors.Contains(err, errors.ErrMalformedEntity),
|
|
errors.Contains(err, svcerr.ErrInvalidPolicy),
|
|
err == apiutil.ErrInvalidAuthKey,
|
|
err == apiutil.ErrMissingID,
|
|
err == apiutil.ErrMissingMemberType,
|
|
err == apiutil.ErrMissingPolicySub,
|
|
err == apiutil.ErrMissingPolicyObj,
|
|
err == apiutil.ErrMalformedPolicyAct:
|
|
return status.Error(codes.InvalidArgument, err.Error())
|
|
case errors.Contains(err, svcerr.ErrAuthentication),
|
|
errors.Contains(err, auth.ErrKeyExpired),
|
|
err == apiutil.ErrMissingEmail,
|
|
err == apiutil.ErrBearerToken:
|
|
return status.Error(codes.Unauthenticated, err.Error())
|
|
case errors.Contains(err, svcerr.ErrAuthorization),
|
|
errors.Contains(err, svcerr.ErrDomainAuthorization):
|
|
return status.Error(codes.PermissionDenied, err.Error())
|
|
case errors.Contains(err, svcerr.ErrNotFound):
|
|
return status.Error(codes.NotFound, err.Error())
|
|
case errors.Contains(err, svcerr.ErrConflict):
|
|
return status.Error(codes.AlreadyExists, err.Error())
|
|
default:
|
|
return status.Error(codes.Internal, err.Error())
|
|
}
|
|
}
|
|
|
|
func DecodeError(err error) error {
|
|
if st, ok := status.FromError(err); ok {
|
|
switch st.Code() {
|
|
case codes.NotFound:
|
|
return errors.Wrap(svcerr.ErrNotFound, errors.New(st.Message()))
|
|
case codes.InvalidArgument:
|
|
return errors.Wrap(errors.ErrMalformedEntity, errors.New(st.Message()))
|
|
case codes.AlreadyExists:
|
|
return errors.Wrap(svcerr.ErrConflict, errors.New(st.Message()))
|
|
case codes.Unauthenticated:
|
|
return errors.Wrap(svcerr.ErrAuthentication, errors.New(st.Message()))
|
|
case codes.OK:
|
|
if msg := st.Message(); msg != "" {
|
|
return errors.Wrap(errors.ErrUnidentified, errors.New(msg))
|
|
}
|
|
return nil
|
|
case codes.FailedPrecondition:
|
|
return errors.Wrap(errors.ErrMalformedEntity, errors.New(st.Message()))
|
|
case codes.PermissionDenied:
|
|
return errors.Wrap(svcerr.ErrAuthorization, errors.New(st.Message()))
|
|
default:
|
|
return errors.Wrap(fmt.Errorf("unexpected gRPC status: %s (status code:%v)", st.Code().String(), st.Code()), errors.New(st.Message()))
|
|
}
|
|
}
|
|
return err
|
|
}
|