mirror of
https://github.com/oauth2-proxy/oauth2-proxy.git
synced 2024-11-24 08:52:25 +02:00
43 lines
1.1 KiB
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)
|
|
}
|