mirror of
https://github.com/versity/versitygw.git
synced 2026-01-07 12:15:18 +00:00
This builds on the previous work that sets up the body streaming for the put object and put part requests. This adds the auth and checksum readers to postpone the v4auth checks and the content checksum until the end of the body stream. This means that the backend with start reading the data from the body stream before the request is fully validated and signatures checked. So the backend must check the error returned from the body reader for the final auth and content checks. The backend is expected to discard the data upon error. This should increase performance and reduce memory utilization to no longer require caching the entire request body in memory for put object and put part.
32 lines
884 B
Go
32 lines
884 B
Go
// Copyright 2023 Versity Software
|
|
// This file is licensed under the Apache License, Version 2.0
|
|
// (the "License"); you may not use this file except in compliance
|
|
// with the License. You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing,
|
|
// software distributed under the License is distributed on an
|
|
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
// KIND, either express or implied. See the License for the
|
|
// specific language governing permissions and limitations
|
|
// under the License.
|
|
|
|
package middlewares
|
|
|
|
import (
|
|
"io"
|
|
|
|
"github.com/gofiber/fiber/v2"
|
|
)
|
|
|
|
func wrapBodyReader(ctx *fiber.Ctx, wr func(io.Reader) io.Reader) {
|
|
r, ok := ctx.Locals("body-reader").(io.Reader)
|
|
if !ok {
|
|
r = ctx.Request().BodyStream()
|
|
}
|
|
|
|
r = wr(r)
|
|
ctx.Locals("body-reader", r)
|
|
}
|