ory-am/hydra

View on GitHub
x/error_enhancer.go

Summary

Maintainability
A
0 mins
Test Coverage
// Copyright © 2022 Ory Corp
// SPDX-License-Identifier: Apache-2.0

package x

import (
    "net/http"

    "github.com/pkg/errors"

    "github.com/ory/fosite"
    "github.com/ory/herodot"
)

type enhancedError struct {
    *fosite.RFC6749Error
    RequestID string `json:"request_id"`
}

func ErrorEnhancer(r *http.Request, err error) interface{} {
    if e := new(herodot.DefaultError); errors.As(err, &e) {
        return &enhancedError{
            RFC6749Error: (&fosite.RFC6749Error{
                ErrorField:       e.Error(),
                DescriptionField: e.Reason(),
                CodeField:        e.StatusCode(),
            }).WithTrace(err),
            RequestID: r.Header.Get("X-Request-Id"),
        }
    }

    return &enhancedError{
        RFC6749Error: fosite.ErrorToRFC6749Error(err),
        RequestID:    r.Header.Get("X-Request-Id"),
    }
}