From 38869b5faaf9c8124c3ecf0090d13de7310c0946 Mon Sep 17 00:00:00 2001 From: Erik Brakkee Date: Tue, 23 Jul 2024 19:36:35 +0200 Subject: [PATCH] moved fileserver to separate file. --- cmd/converge/fileserver.go | 59 ++++++++++++++++++++++++++++++++++++++ cmd/converge/server.go | 53 ---------------------------------- 2 files changed, 59 insertions(+), 53 deletions(-) create mode 100644 cmd/converge/fileserver.go diff --git a/cmd/converge/fileserver.go b/cmd/converge/fileserver.go new file mode 100644 index 0000000..5009e53 --- /dev/null +++ b/cmd/converge/fileserver.go @@ -0,0 +1,59 @@ +package main + +import ( + "bytes" + "io" + "net/http" + "strings" +) + +// filters to filter html content. +var filters map[string]string = make(map[string]string) + +type FilteredFileSystem struct { + fs http.FileSystem +} + +func (ffs FilteredFileSystem) Open(name string) (http.File, error) { + f, err := ffs.fs.Open(name) + if err != nil { + return nil, err + } + if !strings.HasSuffix(name, ".html") { + return f, nil + } + return NewFilteredFile(f, filters) +} + +type FilteredFile struct { + http.File + + // Read bytes 0..(index-1) already + index int + fullContents *bytes.Buffer +} + +func NewFilteredFile(f http.File, filter map[string]string) (FilteredFile, error) { + file := FilteredFile{ + index: 0, + fullContents: bytes.NewBuffer(make([]byte, 0)), + } + file.File = f + + _, err := io.Copy(file.fullContents, file.File) + if err != nil { + return FilteredFile{}, err + } + contents := file.fullContents.String() + for key, value := range filter { + key = "@" + key + "@" + contents = strings.ReplaceAll(contents, key, value) + } + file.fullContents = bytes.NewBufferString(contents) + + return file, nil +} + +func (ff FilteredFile) Read(p []byte) (n int, err error) { + return ff.fullContents.Read(p) +} diff --git a/cmd/converge/server.go b/cmd/converge/server.go index d23becf..9feac0f 100644 --- a/cmd/converge/server.go +++ b/cmd/converge/server.go @@ -1,11 +1,9 @@ package main import ( - "bytes" "converge/pkg/converge" "converge/pkg/websocketutil" "fmt" - "io" "log" "net" "net/http" @@ -29,9 +27,6 @@ func catchAllHandler(w http.ResponseWriter, r *http.Request) { return } -// filters to filter html content. -var filters map[string]string = make(map[string]string) - type FileHandlerFilter struct { http.Handler } @@ -64,54 +59,6 @@ func (handler FileHandlerFilter) ServeHTTP(w http.ResponseWriter, r *http.Reques handler.Handler.ServeHTTP(w, r) } -type FilteredFileSystem struct { - fs http.FileSystem -} - -func (ffs FilteredFileSystem) Open(name string) (http.File, error) { - f, err := ffs.fs.Open(name) - if err != nil { - return nil, err - } - if !strings.HasSuffix(name, ".html") { - return f, nil - } - return NewFilteredFile(f, filters) -} - -type FilteredFile struct { - http.File - - // Read bytes 0..(index-1) already - index int - fullContents *bytes.Buffer -} - -func NewFilteredFile(f http.File, filter map[string]string) (FilteredFile, error) { - file := FilteredFile{ - index: 0, - fullContents: bytes.NewBuffer(make([]byte, 0)), - } - file.File = f - - _, err := io.Copy(file.fullContents, file.File) - if err != nil { - return FilteredFile{}, err - } - contents := file.fullContents.String() - for key, value := range filter { - key = "@" + key + "@" - contents = strings.ReplaceAll(contents, key, value) - } - file.fullContents = bytes.NewBufferString(contents) - - return file, nil -} - -func (ff FilteredFile) Read(p []byte) (n int, err error) { - return ff.fullContents.Read(p) -} - func main() { downloadDir := "downloads"