[#233] get/head: Middleware refactor
Add: * search index.html * fallback by leading slash Signed-off-by: Denis Kirillov <d.kirillov@yadro.com>
This commit is contained in:
parent
ee628617a3
commit
9cb9d14146
11 changed files with 311 additions and 121 deletions
|
@ -5,6 +5,7 @@ import (
|
|||
"errors"
|
||||
"io"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
|
@ -128,6 +129,12 @@ func (h *Handler) HeadByAddressOrBucketName(req *fasthttp.RequestCtx) {
|
|||
zap.String("oid", oidParam),
|
||||
))
|
||||
|
||||
path, err := url.QueryUnescape(oidParam)
|
||||
if err != nil {
|
||||
h.logAndSendError(ctx, req, logs.FailedToUnescapePath, err)
|
||||
return
|
||||
}
|
||||
|
||||
bktInfo, err := h.getBucketInfo(ctx, cidParam)
|
||||
if err != nil {
|
||||
h.logAndSendError(ctx, req, logs.FailedToGetBucketInfo, err)
|
||||
|
@ -140,9 +147,38 @@ func (h *Handler) HeadByAddressOrBucketName(req *fasthttp.RequestCtx) {
|
|||
return
|
||||
}
|
||||
|
||||
prm := MiddlewareParam{
|
||||
Context: ctx,
|
||||
Request: req,
|
||||
BktInfo: bktInfo,
|
||||
Path: path,
|
||||
}
|
||||
|
||||
indexPageEnabled := h.config.IndexPageEnabled()
|
||||
|
||||
if checkS3Err == nil {
|
||||
run(prm, h.errorMiddleware(logs.ObjectNotFound, layer.ErrNodeNotFound),
|
||||
Middleware{Func: h.byS3PathMiddleware(h.headObject, noopFormer), Enabled: true},
|
||||
Middleware{Func: h.byS3PathMiddleware(h.headObject, indexFormer), Enabled: indexPageEnabled},
|
||||
)
|
||||
} else {
|
||||
slashFallbackEnabled := h.config.EnableFilepathSlashFallback()
|
||||
fileNameFallbackEnabled := h.config.EnableFilepathFallback()
|
||||
|
||||
run(prm, h.errorMiddleware(logs.ObjectNotFound, ErrObjectNotFound),
|
||||
Middleware{Func: h.byAddressMiddleware(h.headObject), Enabled: true},
|
||||
Middleware{Func: h.byAttributeSearchMiddleware(h.headObject, object.AttributeFilePath, noopFormer), Enabled: true},
|
||||
Middleware{Func: h.byAttributeSearchMiddleware(h.headObject, object.AttributeFilePath, reverseLeadingSlash), Enabled: slashFallbackEnabled},
|
||||
Middleware{Func: h.byAttributeSearchMiddleware(h.headObject, object.AttributeFileName, noopFormer), Enabled: fileNameFallbackEnabled},
|
||||
Middleware{Func: h.byAttributeSearchMiddleware(h.headObject, object.AttributeFileName, reverseLeadingSlash), Enabled: fileNameFallbackEnabled && slashFallbackEnabled},
|
||||
Middleware{Func: h.byAttributeSearchMiddleware(h.headObject, object.AttributeFilePath, indexFormer), Enabled: indexPageEnabled},
|
||||
Middleware{Func: h.byAttributeSearchMiddleware(h.headObject, object.AttributeFileName, indexFormer), Enabled: fileNameFallbackEnabled && indexPageEnabled},
|
||||
)
|
||||
}
|
||||
|
||||
var objID oid.ID
|
||||
if checkS3Err == nil {
|
||||
h.byS3Path(ctx, req, bktInfo.CID, oidParam, h.headObject)
|
||||
h.byS3Path(ctx, req, bktInfo, oidParam, h.headObject)
|
||||
} else if err = objID.DecodeString(oidParam); err == nil {
|
||||
h.byNativeAddress(ctx, req, bktInfo.CID, objID, h.headObject)
|
||||
} else {
|
||||
|
@ -157,3 +193,10 @@ func (h *Handler) HeadByAttribute(req *fasthttp.RequestCtx) {
|
|||
|
||||
h.byAttribute(ctx, req, h.headObject)
|
||||
}
|
||||
|
||||
func (h *Handler) errorMiddleware(msg string, err error) MiddlewareFunc {
|
||||
return func(prm MiddlewareParam) bool {
|
||||
h.logAndSendError(prm.Context, prm.Request, msg, err)
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue