diff options
Diffstat (limited to 'contrib/cgi/spartan.go')
-rw-r--r-- | contrib/cgi/spartan.go | 54 |
1 files changed, 0 insertions, 54 deletions
diff --git a/contrib/cgi/spartan.go b/contrib/cgi/spartan.go deleted file mode 100644 index 272bd92..0000000 --- a/contrib/cgi/spartan.go +++ /dev/null @@ -1,54 +0,0 @@ -package cgi - -import ( - "bytes" - "context" - "fmt" - "strings" - - sr "tildegit.org/tjp/sliderule" - "tildegit.org/tjp/sliderule/logging" - "tildegit.org/tjp/sliderule/spartan" -) - -// SpartanCGIDirectory runs executable files relative to a root directory in the file system. -// -// It will also find any run any executable _part way_ through the path, so for example a -// request for /foo/bar/baz can also run an executable found at /foo or /foo/bar. In such -// a case the PATH_INFO environment variable will include the remaining portion of the URI. -func SpartanCGIDirectory(pathRoot, fsRoot string) sr.Handler { - fsRoot = strings.TrimRight(fsRoot, "/") - return sr.HandlerFunc(func(ctx context.Context, request *sr.Request) *sr.Response { - if !strings.HasPrefix(request.Path, pathRoot) { - return nil - } - - filepath, pathinfo, err := ResolveCGI(request.Path[len(pathRoot):], fsRoot) - if err != nil { - return spartan.ServerError(err) - } - if filepath == "" { - return nil - } - - stderr := &bytes.Buffer{} - stdout, exitCode, err := RunCGI(ctx, request, filepath, pathinfo, stderr) - if err != nil { - return spartan.ServerError(err) - } - if exitCode != 0 { - ctx.Value("warnlog").(logging.Logger).Log( - "msg", "cgi exited with non-zero exit code", - "code", exitCode, - "stderr", stderr.String(), - ) - return spartan.ServerError(fmt.Errorf("CGI process exited with status %d", exitCode)) - } - - response, err := spartan.ParseResponse(stdout) - if err != nil { - return spartan.ServerError(err) - } - return response - }) -} |