1
0
mirror of https://github.com/oauth2-proxy/oauth2-proxy.git synced 2024-11-24 08:52:25 +02:00
oauth2-proxy/pkg/upstream/file.go

43 lines
1.1 KiB
Go

package upstream
import (
"net/http"
"runtime"
"strings"
)
const fileScheme = "file"
// newFileServer creates a new fileServer that can serve requests
// to a file system location.
func newFileServer(id, path, fileSystemPath string) http.Handler {
return &fileServer{
upstream: id,
handler: newFileServerForPath(path, fileSystemPath),
}
}
// newFileServerForPath creates a http.Handler to serve files from the filesystem
func newFileServerForPath(path string, filesystemPath string) http.Handler {
// Windows fileSSystemPath will be be prefixed with `/`, eg`/C:/...,
// if they were parsed by url.Parse`
if runtime.GOOS == "windows" {
filesystemPath = strings.TrimPrefix(filesystemPath, "/")
}
return http.StripPrefix(path, http.FileServer(http.Dir(filesystemPath)))
}
// fileServer represents a single filesystem upstream proxy
type fileServer struct {
upstream string
handler http.Handler
}
// ServeHTTP proxies requests to the upstream provider while signing the
// request headers
func (u *fileServer) ServeHTTP(rw http.ResponseWriter, req *http.Request) {
rw.Header().Set("GAP-Upstream-Address", u.upstream)
u.handler.ServeHTTP(rw, req)
}