stash/internal/api/routes_downloads.go
WithoutPants f69bd8a94f
Restructure go project (#2356)
* Move main to cmd
* Move api to internal
* Move logger and manager to internal
* Move shell hiding code to separate package
* Decouple job from desktop and utils
* Decouple session from config
* Move static into internal
* Decouple config from dlna
* Move desktop to internal
* Move dlna to internal
* Decouple remaining packages from config
* Move config into internal
* Move jsonschema and paths to models
* Make ffmpeg functions private
* Move file utility methods into fsutil package
* Move symwalk into fsutil
* Move single-use util functions into client package
* Move slice functions to separate packages
* Add env var to suppress windowsgui arg
* Move hash functions into separate package
* Move identify to internal
* Move autotag to internal
* Touch UI when generating backend
2022-03-17 11:33:59 +11:00

41 lines
882 B
Go

package api
import (
"context"
"net/http"
"github.com/go-chi/chi"
"github.com/stashapp/stash/internal/manager"
)
type downloadsRoutes struct{}
func (rs downloadsRoutes) Routes() chi.Router {
r := chi.NewRouter()
r.Route("/{downloadHash}", func(r chi.Router) {
r.Use(downloadCtx)
r.Get("/{filename}", rs.file)
})
return r
}
func (rs downloadsRoutes) file(w http.ResponseWriter, r *http.Request) {
hash := r.Context().Value(downloadKey).(string)
if hash == "" {
http.Error(w, http.StatusText(404), 404)
return
}
manager.GetInstance().DownloadStore.Serve(hash, w, r)
}
func downloadCtx(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
downloadHash := chi.URLParam(r, "downloadHash")
ctx := context.WithValue(r.Context(), downloadKey, downloadHash)
next.ServeHTTP(w, r.WithContext(ctx))
})
}