41 lines
1,002 B
Go
41 lines
1,002 B
Go
package response
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
|
|
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client"
|
|
sdkstatus "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client/status"
|
|
"github.com/valyala/fasthttp"
|
|
"go.uber.org/zap"
|
|
)
|
|
|
|
func Error(r *fasthttp.RequestCtx, msg string, code int) {
|
|
r.Error(msg+"\n", code)
|
|
}
|
|
|
|
func FormErrorResponse(message string, err error) (int, string, []zap.Field) {
|
|
var (
|
|
msg string
|
|
statusCode int
|
|
logFields []zap.Field
|
|
)
|
|
|
|
st := new(sdkstatus.ObjectAccessDenied)
|
|
|
|
switch {
|
|
case errors.As(err, &st):
|
|
statusCode = fasthttp.StatusForbidden
|
|
reason := st.Reason()
|
|
msg = fmt.Sprintf("%s: %v: %s", message, err, reason)
|
|
logFields = append(logFields, zap.String("error_detail", reason))
|
|
case client.IsErrObjectNotFound(err) || client.IsErrContainerNotFound(err):
|
|
statusCode = fasthttp.StatusNotFound
|
|
msg = "NotFound"
|
|
default:
|
|
statusCode = fasthttp.StatusBadRequest
|
|
msg = fmt.Sprintf("%s: %v", message, err)
|
|
}
|
|
|
|
return statusCode, msg, logFields
|
|
}
|