package main import ( "net/http" "strings" "time" ) func proxyHandler(w http.ResponseWriter, r *http.Request) { key := r.URL.Query().Get("key") if key == "" { http.Error(w, "Missing key param", http.StatusBadRequest) return } if !strings.HasPrefix(key, s3Prefix+"/") && !strings.HasPrefix(key, "docs/") { http.Error(w, "Forbidden", http.StatusForbidden) return } presigned, err := s3Client.PresignedGetObject(r.Context(), bucketName, key, 15*time.Minute, nil) if err != nil { http.Error(w, "Failed to sign object", http.StatusInternalServerError) return } http.Redirect(w, r, presigned.String(), http.StatusFound) }