From 3f0d25f935c3df9e0748fcbcd6dfb89f8b3e7d04 Mon Sep 17 00:00:00 2001 From: Max Richter Date: Wed, 24 Sep 2025 22:39:14 +0200 Subject: [PATCH] wrip --- server-new/go.mod | 3 - {server-new => server}/.air.toml | 0 {server-new => server}/.gitignore | 0 .../cmd/marka-server/main.go | 0 server/go.mod | 17 +----- {server-new => server}/go.sum | 0 {server-new => server}/http/.env | 0 {server-new => server}/http/post-recipe.http | 0 .../internal/adapters/errors.go | 0 .../internal/adapters/fs.go | 0 .../internal/adapters/fs_utils.go | 0 .../internal/adapters/interface.go | 0 server/internal/fsx/contenttype.go | 33 ----------- server/internal/fsx/path.go | 56 ------------------- .../internal/handler/error.go | 0 .../internal/handler/handler.go | 0 .../internal/handler/utils.go | 0 server/internal/handlers/file.go | 38 ------------- 18 files changed, 2 insertions(+), 145 deletions(-) delete mode 100644 server-new/go.mod rename {server-new => server}/.air.toml (100%) rename {server-new => server}/.gitignore (100%) rename {server-new => server}/cmd/marka-server/main.go (100%) rename {server-new => server}/go.sum (100%) rename {server-new => server}/http/.env (100%) rename {server-new => server}/http/post-recipe.http (100%) rename {server-new => server}/internal/adapters/errors.go (100%) rename {server-new => server}/internal/adapters/fs.go (100%) rename {server-new => server}/internal/adapters/fs_utils.go (100%) rename {server-new => server}/internal/adapters/interface.go (100%) delete mode 100644 server/internal/fsx/contenttype.go delete mode 100644 server/internal/fsx/path.go rename {server-new => server}/internal/handler/error.go (100%) rename {server-new => server}/internal/handler/handler.go (100%) rename {server-new => server}/internal/handler/utils.go (100%) delete mode 100644 server/internal/handlers/file.go diff --git a/server-new/go.mod b/server-new/go.mod deleted file mode 100644 index 341a24f..0000000 --- a/server-new/go.mod +++ /dev/null @@ -1,3 +0,0 @@ -module git.max-richter.dev/max/marka/server-new - -go 1.25.1 diff --git a/server-new/.air.toml b/server/.air.toml similarity index 100% rename from server-new/.air.toml rename to server/.air.toml diff --git a/server-new/.gitignore b/server/.gitignore similarity index 100% rename from server-new/.gitignore rename to server/.gitignore diff --git a/server-new/cmd/marka-server/main.go b/server/cmd/marka-server/main.go similarity index 100% rename from server-new/cmd/marka-server/main.go rename to server/cmd/marka-server/main.go diff --git a/server/go.mod b/server/go.mod index 250391c..341a24f 100644 --- a/server/go.mod +++ b/server/go.mod @@ -1,16 +1,3 @@ -module git.max-richter.dev/max/marka/server +module git.max-richter.dev/max/marka/server-new -go 1.24.5 - -require git.max-richter.dev/max/marka/parser v0.0.0-20250819170608-69c2550f448e - -require ( - git.max-richter.dev/max/marka/registry v0.0.0-20250817132016-6db87db32567 // indirect - git.max-richter.dev/max/marka/renderer v0.0.0-20250819170608-69c2550f448e // indirect - git.max-richter.dev/max/marka/template v0.0.0-20250817132016-6db87db32567 // indirect - git.max-richter.dev/max/marka/testdata v0.0.0-20250819195334-b3c01bb43d9a // indirect - github.com/agext/levenshtein v1.2.3 // indirect - github.com/santhosh-tekuri/jsonschema/v6 v6.0.2 // indirect - go.yaml.in/yaml/v4 v4.0.0-rc.1 // indirect - golang.org/x/text v0.14.0 // indirect -) +go 1.25.1 diff --git a/server-new/go.sum b/server/go.sum similarity index 100% rename from server-new/go.sum rename to server/go.sum diff --git a/server-new/http/.env b/server/http/.env similarity index 100% rename from server-new/http/.env rename to server/http/.env diff --git a/server-new/http/post-recipe.http b/server/http/post-recipe.http similarity index 100% rename from server-new/http/post-recipe.http rename to server/http/post-recipe.http diff --git a/server-new/internal/adapters/errors.go b/server/internal/adapters/errors.go similarity index 100% rename from server-new/internal/adapters/errors.go rename to server/internal/adapters/errors.go diff --git a/server-new/internal/adapters/fs.go b/server/internal/adapters/fs.go similarity index 100% rename from server-new/internal/adapters/fs.go rename to server/internal/adapters/fs.go diff --git a/server-new/internal/adapters/fs_utils.go b/server/internal/adapters/fs_utils.go similarity index 100% rename from server-new/internal/adapters/fs_utils.go rename to server/internal/adapters/fs_utils.go diff --git a/server-new/internal/adapters/interface.go b/server/internal/adapters/interface.go similarity index 100% rename from server-new/internal/adapters/interface.go rename to server/internal/adapters/interface.go diff --git a/server/internal/fsx/contenttype.go b/server/internal/fsx/contenttype.go deleted file mode 100644 index 2288c93..0000000 --- a/server/internal/fsx/contenttype.go +++ /dev/null @@ -1,33 +0,0 @@ -package fsx - -import ( - "mime" - "path/filepath" - "strings" -) - -var textPlainExtensions = map[string]bool{ - ".txt": true, - ".log": true, - ".json": true, - ".yaml": true, - ".yml": true, - ".toml": true, - ".xml": true, - ".csv": true, -} - -func ContentTypeFor(name string) string { - ext := strings.ToLower(filepath.Ext(name)) - switch ext { - case ".md", ".markdown", ".mdown": - return "application/markdown" - } - if ct := mime.TypeByExtension(ext); ct != "" { - return ct - } - if textPlainExtensions[ext] { - return "text/plain; charset=utf-8" - } - return "application/octet-stream" -} diff --git a/server/internal/fsx/path.go b/server/internal/fsx/path.go deleted file mode 100644 index 6916a16..0000000 --- a/server/internal/fsx/path.go +++ /dev/null @@ -1,56 +0,0 @@ -package fsx - -import ( - "errors" - "path/filepath" - "strings" -) - -func CleanURLLike(p string) string { - p = strings.TrimSpace(p) - if p == "" || p == "/" { - return "/" - } - parts := []string{} - for seg := range strings.SplitSeq(strings.ReplaceAll(p, "/", "/"), "/") { - switch seg { - case "", ".": - continue - case "..": - if len(parts) > 0 { - parts = parts[:len(parts)-1] - } - default: - parts = append(parts, seg) - } - } - return "/" + strings.Join(parts, "/") -} - -func SafeRel(root, requested string) (string, error) { - s := CleanURLLike(requested) - if after, ok := strings.CutPrefix(s, "/"); ok { - s = after - } - full := filepath.Join(root, filepath.FromSlash(s)) - rel, err := filepath.Rel(root, full) - if err != nil { - return "", err - } - if rel == "." { - return "/", nil - } - sep := string(filepath.Separator) - if strings.HasPrefix(rel, "..") || strings.Contains(rel, ".."+sep) { - return "", errors.New("path escapes root") - } - return "/" + filepath.ToSlash(rel), nil -} - -func ResponsePath(root, full string) string { - rel, err := filepath.Rel(root, full) - if err != nil || rel == "." { - return "/" - } - return "/" + filepath.ToSlash(rel) -} diff --git a/server-new/internal/handler/error.go b/server/internal/handler/error.go similarity index 100% rename from server-new/internal/handler/error.go rename to server/internal/handler/error.go diff --git a/server-new/internal/handler/handler.go b/server/internal/handler/handler.go similarity index 100% rename from server-new/internal/handler/handler.go rename to server/internal/handler/handler.go diff --git a/server-new/internal/handler/utils.go b/server/internal/handler/utils.go similarity index 100% rename from server-new/internal/handler/utils.go rename to server/internal/handler/utils.go diff --git a/server/internal/handlers/file.go b/server/internal/handlers/file.go deleted file mode 100644 index dac05bb..0000000 --- a/server/internal/handlers/file.go +++ /dev/null @@ -1,38 +0,0 @@ -// Package handlers provides HTTP handlers for the file system. -package handlers - -import ( - "errors" - "net/http" - "path/filepath" - - "git.max-richter.dev/max/marka/server/internal/fsx" - "git.max-richter.dev/max/marka/server/internal/httpx" -) - -type File struct{ root string } - -func NewFile(root string) http.Handler { return &File{root: root} } - -func (h *File) ServeHTTP(w http.ResponseWriter, r *http.Request) { - reqPath := r.URL.Path - if reqPath == "" { - reqPath = "/" - } - cleanRel, err := fsx.SafeRel(h.root, reqPath) - if err != nil { - httpx.WriteError(w, http.StatusBadRequest, err) - return - } - target := filepath.Join(h.root, filepath.FromSlash(cleanRel)) - - switch r.Method { - case http.MethodGet: - h.get(w, r, target) - case http.MethodPost: - h.post(w, r, target) - default: - httpx.WriteError(w, http.StatusMethodNotAllowed, errors.New("method not allowed")) - } -} -