fes

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

commit 0c95cb772b834ea800658ce5bb25eca32cdd5bca
parent 3a5fea9de8ffd74bef1b5a51fdfb60df696269e8
Author: vx-clutch <[email protected]>
Date:   Mon,  1 Dec 2025 21:59:55 -0500

alpha p5

Diffstat:
MTODO | 2+-
Aexamples/bus/Fes.toml | 6++++++
Aexamples/bus/www/index.lua | 9+++++++++
Msrc/server/server.go | 28++++++++++++++++++++++++----
4 files changed, 40 insertions(+), 5 deletions(-)

diff --git a/TODO b/TODO @@ -1,3 +1,3 @@ Add an interval element -Add a way to pass data to sites on load via fes.bus: pass a table of { url, IP, request, headers, body } +Add a way to pass data to sites on load via fes.bus: pass a table of { url, IP, request, headers, body } :: fix current impl Serve site/static at /static diff --git a/examples/bus/Fes.toml b/examples/bus/Fes.toml @@ -0,0 +1,5 @@ +[app] + +name = "bus" +version = "0.0.1" +authors = ["vx-clutch"] +\ No newline at end of file diff --git a/examples/bus/www/index.lua b/examples/bus/www/index.lua @@ -0,0 +1,9 @@ +local fes = require("fes") +local site = fes.fes() + +site.title = "bus" +site.copyright = fes.util.copyright("https://git.vxserver.dev/fSD/", "fSD") + +site:h1("URL: " .. fes.bus.url) + +return site diff --git a/src/server/server.go b/src/server/server.go @@ -19,6 +19,12 @@ import ( "fes/src/config" ) +type reqData struct { + url string + ip string + req int +} + func handleDir(entries []os.DirEntry, wwwDir string, routes map[string]string, base string) error { for _, entry := range entries { if entry.IsDir() { @@ -27,7 +33,12 @@ func handleDir(entries []os.DirEntry, wwwDir string, routes map[string]string, b if err != nil { return fmt.Errorf("failed to read %s: %w", sub, err) } - next := base + "/" + entry.Name() + var next string + if base == "" { + next = "/" + entry.Name() + } else { + next = base + "/" + entry.Name() + } if err := handleDir(subs, sub, routes, next); err != nil { return err } @@ -109,7 +120,7 @@ func loadIncludeModules(L *lua.LState, includeDir string) *lua.LTable { return app } -func loadLua(luaDir string, entry string, cfg *config.MyConfig) (string, error) { +func loadLua(luaDir string, entry string, cfg *config.MyConfig, data reqData) (string, error) { L := lua.NewState() defer L.Close() @@ -224,6 +235,12 @@ func loadLua(luaDir string, entry string, cfg *config.MyConfig) (string, error) mod.RawSetString("site", siteTable) } + reqTable := L.NewTable() + reqTable.RawSetString("url", lua.LString(data.url)) + reqTable.RawSetString("ip", lua.LString(data.ip)) + reqTable.RawSetString("request", lua.LNumber(data.req)) + mod.RawSetString("bus", reqTable) + mod.RawSetString("markdown_to_html", L.NewFunction(func(L *lua.LState) int { mdText := L.ToString(1) html := markdownToHTML(mdText) @@ -286,7 +303,7 @@ func Start(dir string) error { </html> ` if _, err := os.Stat(filepath.Join(wwwDir, "404.lua")); err == nil { - notFoundData, err = loadLua(dir, filepath.Join(wwwDir, "404.lua"), &cfg) + notFoundData, err = loadLua(dir, filepath.Join(wwwDir, "404.lua"), &cfg, reqData{}) if err != nil { panic(err) } @@ -312,7 +329,10 @@ func Start(dir string) error { return } fmt.Printf("> %s ", filepath.Base(lp)) - data, err := loadLua(dir, lp, &cfg) + data, err := loadLua(dir, lp, &cfg, reqData{ + url: r.URL.Host, + ip: r.RemoteAddr, + }) if err != nil { http.Error(w, fmt.Sprintf("Error loading page: %v", err), http.StatusInternalServerError) color.Red("bad")