commit 0c95cb772b834ea800658ce5bb25eca32cdd5bca
parent 3a5fea9de8ffd74bef1b5a51fdfb60df696269e8
Author: vx-clutch <[email protected]>
Date: Mon, 1 Dec 2025 21:59:55 -0500
alpha p5
Diffstat:
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")