diff options
| author | Jeff Carr <[email protected]> | 2025-09-08 12:53:25 -0500 | 
|---|---|---|
| committer | Jeff Carr <[email protected]> | 2025-09-08 12:53:25 -0500 | 
| commit | 192fd065ddf9cf4fffc04ca834b230280b2f5468 (patch) | |
| tree | 6615a9fef2e00a39ab68eabc4d11c4bf3bdc0486 | |
| parent | 3a1ba210bac3aeb7410c325014ff59f47c6d12ea (diff) | |
moved this to httppbv0.0.27
| -rw-r--r-- | middleware.go | 71 | 
1 files changed, 0 insertions, 71 deletions
diff --git a/middleware.go b/middleware.go deleted file mode 100644 index 10048cd..0000000 --- a/middleware.go +++ /dev/null @@ -1,71 +0,0 @@ -package main - -// a middleware example. probably not interesting since we only pass protobufs - -/* -// Define a key type to avoid context key collisions. -type contextKey string - -const bufferedBodyKey = contextKey("bufferedBody") - -// bufferBodyMiddleware reads the request body and replaces it with a new reader, -// allowing it to be read multiple times. The original body is stored in the request context. -func bufferBodyMiddleware(next http.Handler) http.Handler { -	return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { -		// Only buffer if there's a body to read. -		if r.Body == nil || r.ContentLength == 0 { -			next.ServeHTTP(w, r) -			return -		} - -		bodyBytes, err := ioutil.ReadAll(r.Body) -		if err != nil { -			log.Printf("Error reading body in middleware: %v\n", err) -			return -		} -		defer r.Body.Close() - -		// Store the buffered body in the context for downstream handlers. -		ctx := context.WithValue(r.Context(), bufferedBodyKey, bodyBytes) - -		// Replace the original body with a new reader on the buffered bytes. -		// This allows subsequent handlers to read the body again. -		r.Body = ioutil.NopCloser(bytes.NewReader(bodyBytes)) - -		// Call the next handler in the chain with the modified request. -		next.ServeHTTP(w, r.WithContext(ctx)) -	}) -} - -// okHandler is the final handler. It can now safely access the body from the context, -// knowing that other middleware might have also read it. -func okHandler(w http.ResponseWriter, r *http.Request) { -	// For demonstration, we can try reading the body directly here too. -	// The middleware ensures this is a fresh stream of the buffered data. -	bodyFromStream, err := ioutil.ReadAll(r.Body) -	if err != nil { -		log.Printf("Error reading body in handler: %v", err) -		http.Error(w, "Internal Server Error", http.StatusInternalServerError) -		return -	} - -	log.Printf("Handler read %d bytes from the request body stream.", len(bodyFromStream)) - -	// We can also retrieve the body from the context if needed. -	bodyFromContext, ok := r.Context().Value(bufferedBodyKey).([]byte) -	if !ok { -		log.Println("Could not retrieve buffered body from context.") -		http.Error(w, "Internal Server Error", http.StatusInternalServerError) -		return -	} - -	log.Printf("Handler retrieved %d bytes from context.", len(bodyFromContext)) - -	// Prove they are the same. -	if !bytes.Equal(bodyFromStream, bodyFromContext) { -		log.Println("FATAL: Body from stream and context do not match!") -	} - -	fmt.Fprintf(w, "Successfully read body of %d bytes.\n", len(bodyFromContext)) -} -*/  | 
