mirror of
https://github.com/paralus/paralus.git
synced 2026-03-05 10:30:25 +00:00
* restructure rcloud-base as a single base controller * updated master.rest * moved sentry from internal to pkg as it is used by relay * removing unused rpc and it's dependencies * Fix usermgmt tests * Don't redefine variables in rest file Co-authored-by: Abin Simon <abin.simon@rafay.co>
30 lines
750 B
Go
30 lines
750 B
Go
package gateway
|
|
|
|
import (
|
|
"context"
|
|
"net/http"
|
|
|
|
"github.com/grpc-ecosystem/grpc-gateway/runtime"
|
|
"github.com/segmentio/encoding/json"
|
|
"google.golang.org/grpc"
|
|
)
|
|
|
|
type errorBody struct {
|
|
Err string `json:"error,omitempty"`
|
|
}
|
|
|
|
// customErrorHandler implements custom grpc error handler
|
|
func customErrorHandler(ctx context.Context, _ *runtime.ServeMux, marshaler runtime.Marshaler, w http.ResponseWriter, _ *http.Request, err error) {
|
|
const fallback = `{"error": "failed to marshal error message"}`
|
|
|
|
w.Header().Set("Content-type", marshaler.ContentType())
|
|
w.WriteHeader(runtime.HTTPStatusFromCode(grpc.Code(err)))
|
|
jErr := json.NewEncoder(w).Encode(errorBody{
|
|
Err: grpc.ErrorDesc(err),
|
|
})
|
|
|
|
if jErr != nil {
|
|
w.Write([]byte(fallback))
|
|
}
|
|
}
|