initial commit

This commit is contained in:
ston1th 2022-03-13 18:49:27 +01:00
commit 3053f89410
39 changed files with 4567 additions and 0 deletions

76
pkg/srv/interceptor.go Normal file
View 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
}