initial commit
This commit is contained in:
commit
3053f89410
39 changed files with 4567 additions and 0 deletions
76
pkg/srv/interceptor.go
Normal file
76
pkg/srv/interceptor.go
Normal file
|
|
@ -0,0 +1,76 @@
|
|||
// Copyright (C) 2022 Marius Schellenberger
|
||||
|
||||
package srv
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/xml"
|
||||
"net/http"
|
||||
"sort"
|
||||
)
|
||||
|
||||
type dirContents struct {
|
||||
AllPaths []string `xml:"a"`
|
||||
Dirs []string `xml:"-"`
|
||||
Files []string `xml:"-"`
|
||||
}
|
||||
|
||||
type statusInterceptor struct {
|
||||
w http.ResponseWriter
|
||||
status int
|
||||
}
|
||||
|
||||
func (s *statusInterceptor) Header() http.Header {
|
||||
return s.w.Header()
|
||||
}
|
||||
func (s *statusInterceptor) Write(p []byte) (int, error) {
|
||||
return s.w.Write(p)
|
||||
}
|
||||
func (s *statusInterceptor) WriteHeader(statusCode int) {
|
||||
s.w.WriteHeader(statusCode)
|
||||
s.status = statusCode
|
||||
}
|
||||
func (s *statusInterceptor) Status() int {
|
||||
if s.status == 0 {
|
||||
return http.StatusOK
|
||||
}
|
||||
return s.status
|
||||
}
|
||||
|
||||
type responseInterceptor struct {
|
||||
buf bytes.Buffer
|
||||
w http.ResponseWriter
|
||||
status int
|
||||
}
|
||||
|
||||
func (r *responseInterceptor) Header() http.Header {
|
||||
return r.w.Header()
|
||||
}
|
||||
func (r *responseInterceptor) Write(p []byte) (int, error) {
|
||||
return r.buf.Write(p)
|
||||
}
|
||||
func (r *responseInterceptor) WriteHeader(statusCode int) {
|
||||
r.status = statusCode
|
||||
}
|
||||
func (r *responseInterceptor) Status() int {
|
||||
if r.status == 0 {
|
||||
return http.StatusOK
|
||||
}
|
||||
return r.status
|
||||
}
|
||||
func (r *responseInterceptor) GetPaths() (dir dirContents, err error) {
|
||||
err = xml.Unmarshal(r.buf.Bytes(), &dir)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
for _, p := range dir.AllPaths {
|
||||
if p[len(p)-1] == '/' {
|
||||
dir.Dirs = append(dir.Dirs, p)
|
||||
} else {
|
||||
dir.Files = append(dir.Files, p)
|
||||
}
|
||||
}
|
||||
sort.Strings(dir.Dirs)
|
||||
sort.Strings(dir.Files)
|
||||
return
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue