mirror of
https://github.com/gitpod-io/gitpod.git
synced 2025-12-08 17:36:30 +00:00
62 lines
1.9 KiB
Go
62 lines
1.9 KiB
Go
// Copyright (c) 2022 Gitpod GmbH. All rights reserved.
|
|
// Licensed under the GNU Affero General Public License (AGPL).
|
|
// See License.AGPL.txt in the project root for license information.
|
|
|
|
package proxy
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
|
|
"github.com/bufbuild/connect-go"
|
|
protocol "github.com/gitpod-io/gitpod/gitpod-protocol"
|
|
"github.com/sourcegraph/jsonrpc2"
|
|
)
|
|
|
|
func ConvertError(err error) error {
|
|
if err == nil {
|
|
return nil
|
|
}
|
|
|
|
return categorizeRPCError(err)
|
|
}
|
|
|
|
func categorizeRPCError(err error) *connect.Error {
|
|
if err == nil {
|
|
return nil
|
|
}
|
|
|
|
if rpcErr := new(jsonrpc2.Error); errors.As(err, &rpcErr) {
|
|
switch rpcErr.Code {
|
|
case 400:
|
|
return connect.NewError(connect.CodeInvalidArgument, fmt.Errorf(rpcErr.Message))
|
|
// components/gitpod-protocol/src/messaging/error.ts
|
|
case 401:
|
|
return connect.NewError(connect.CodePermissionDenied, fmt.Errorf(rpcErr.Message))
|
|
// components/gitpod-protocol/src/messaging/error.ts
|
|
case 403:
|
|
return connect.NewError(connect.CodePermissionDenied, fmt.Errorf(rpcErr.Message))
|
|
// components/gitpod-protocol/src/messaging/error.ts
|
|
case 404:
|
|
return connect.NewError(connect.CodeNotFound, fmt.Errorf(rpcErr.Message))
|
|
// components/gitpod-protocol/src/messaging/error.ts
|
|
case 409:
|
|
return connect.NewError(connect.CodeAlreadyExists, fmt.Errorf(rpcErr.Message))
|
|
// components/gitpod-messagebus/src/jsonrpc-server.ts#47
|
|
case -32603:
|
|
return connect.NewError(connect.CodeInternal, fmt.Errorf(rpcErr.Message))
|
|
case 470:
|
|
return connect.NewError(connect.CodePermissionDenied, fmt.Errorf(rpcErr.Message))
|
|
|
|
default:
|
|
return connect.NewError(connect.CodeInternal, fmt.Errorf(rpcErr.Message))
|
|
}
|
|
}
|
|
|
|
if handshakeErr := new(protocol.ErrBadHandshake); errors.As(err, &handshakeErr) {
|
|
return connect.NewError(connect.CodeUnauthenticated, fmt.Errorf("Failed to establish caller identity"))
|
|
}
|
|
|
|
return connect.NewError(connect.CodeInternal, err)
|
|
}
|