Path: blob/main/components/public-api-server/pkg/proxy/errors.go
2500 views
// Copyright (c) 2022 Gitpod GmbH. All rights reserved.1// Licensed under the GNU Affero General Public License (AGPL).2// See License.AGPL.txt in the project root for license information.34package proxy56import (7"context"8"errors"9"fmt"1011"github.com/bufbuild/connect-go"12protocol "github.com/gitpod-io/gitpod/gitpod-protocol"13"github.com/sourcegraph/jsonrpc2"14)1516func ConvertError(err error) error {17if err == nil {18return nil19}2021return categorizeRPCError(err)22}2324func categorizeRPCError(err error) *connect.Error {25if err == nil {26return nil27}2829if rpcErr := new(jsonrpc2.Error); errors.As(err, &rpcErr) {30switch rpcErr.Code {31case 400:32return connect.NewError(connect.CodeInvalidArgument, fmt.Errorf("%s", rpcErr.Message))33// components/gitpod-protocol/src/messaging/error.ts34case 401:35return connect.NewError(connect.CodeUnauthenticated, fmt.Errorf("%s", rpcErr.Message))36// components/gitpod-protocol/src/messaging/error.ts37case 403:38return connect.NewError(connect.CodePermissionDenied, fmt.Errorf("%s", rpcErr.Message))39// components/gitpod-protocol/src/messaging/error.ts40case 404:41return connect.NewError(connect.CodeNotFound, fmt.Errorf("%s", rpcErr.Message))42// components/gitpod-protocol/src/messaging/error.ts43case 409:44return connect.NewError(connect.CodeAlreadyExists, fmt.Errorf("%s", rpcErr.Message))45case 412:46return connect.NewError(connect.CodeFailedPrecondition, fmt.Errorf("%s", rpcErr.Message))47case 429:48return connect.NewError(connect.CodeResourceExhausted, fmt.Errorf("%s", rpcErr.Message))49case 470:50return connect.NewError(connect.CodePermissionDenied, fmt.Errorf("%s", rpcErr.Message))51case -32603:52return connect.NewError(connect.CodeInternal, fmt.Errorf("%s", rpcErr.Message))53}54// components/gitpod-protocol/src/messaging/error.ts - user errors55if rpcErr.Code >= 400 && rpcErr.Code < 500 {56return connect.NewError(connect.CodeInvalidArgument, fmt.Errorf("%s", rpcErr.Message))57}58return connect.NewError(connect.CodeInternal, fmt.Errorf("%s", rpcErr.Message))59}6061if errors.Is(err, context.Canceled) {62return connect.NewError(connect.CodeDeadlineExceeded, fmt.Errorf("%s", "Request timed out"))63}6465if handshakeErr := new(protocol.ErrBadHandshake); errors.As(err, &handshakeErr) {66return connect.NewError(connect.CodeUnauthenticated, fmt.Errorf("%s", "Failed to establish caller identity"))67}6869return connect.NewError(connect.CodeInternal, err)70}717273