mirror of
https://github.com/absmach/magistrala.git
synced 2026-06-23 04:10:28 +00:00
f0d014eba2
Signed-off-by: Dusan Borovcanin <borovcanindusan1@gmail.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"
|
|
|
|
apiutil "github.com/absmach/supermq/api/http/util"
|
|
"github.com/absmach/supermq/auth"
|
|
"github.com/absmach/supermq/pkg/errors"
|
|
svcerr "github.com/absmach/supermq/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
|
|
}
|