rewrite server module
This commit is contained in:
80
modules/server/dirs.go
Normal file
80
modules/server/dirs.go
Normal file
@@ -0,0 +1,80 @@
|
||||
package server
|
||||
|
||||
import (
|
||||
"fes/modules/ui"
|
||||
"fmt"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
)
|
||||
|
||||
/* performs relavent handling based on the directory passaed
|
||||
*
|
||||
* Special directories
|
||||
* - www/ <= contains lua routes.
|
||||
* - static/ <= static content accessable at /static/path or /static/dir/path.
|
||||
* - include/ <= globally accessable lua functions, cannot directly access "fes" right now.
|
||||
* - archive/ <= contains user facing files such as archives or dists.
|
||||
*
|
||||
*/
|
||||
func handleDir(entries []os.DirEntry, dir string, routes map[string]string, base string, isStatic bool) error {
|
||||
for _, entry := range entries {
|
||||
path := filepath.Join(dir, entry.Name())
|
||||
if entry.IsDir() {
|
||||
nextBase := joinBase(base, entry.Name())
|
||||
subEntries, err := os.ReadDir(path)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to read directory %s: %w", path, err)
|
||||
}
|
||||
if err := handleDir(subEntries, path, routes, nextBase, isStatic); err != nil {
|
||||
return err
|
||||
}
|
||||
continue
|
||||
}
|
||||
route := joinBase(base, entry.Name())
|
||||
if !isStatic && strings.HasSuffix(entry.Name(), ".lua") {
|
||||
name := strings.TrimSuffix(entry.Name(), ".lua")
|
||||
if name == "index" {
|
||||
routes[basePath(base)] = path
|
||||
routes[route] = path
|
||||
continue
|
||||
}
|
||||
route = joinBase(base, name)
|
||||
} else if !isStatic && strings.HasSuffix(entry.Name(), ".md") {
|
||||
name := strings.TrimSuffix(entry.Name(), ".md")
|
||||
if name == "index" {
|
||||
routes[basePath(base)] = path
|
||||
routes[route] = path
|
||||
continue
|
||||
}
|
||||
route = joinBase(base, name)
|
||||
}
|
||||
routes[route] = path
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
/* helper to load all special directories */
|
||||
func loadDirs() map[string]string {
|
||||
routes := make(map[string]string)
|
||||
|
||||
if entries, err := os.ReadDir("www"); err == nil {
|
||||
if err := handleDir(entries, "www", routes, "", false); err != nil {
|
||||
ui.Warning("failed to handle www directory", err)
|
||||
}
|
||||
}
|
||||
|
||||
if entries, err := os.ReadDir("static"); err == nil {
|
||||
if err := handleDir(entries, "static", routes, "/static", true); err != nil {
|
||||
ui.Warning("failed to handle static directory", err)
|
||||
}
|
||||
}
|
||||
|
||||
if entries, err := os.ReadDir("archive"); err == nil {
|
||||
if err := handleDir(entries, "archive", routes, "/archive", true); err != nil {
|
||||
ui.Warning("failed to handle archive directory", err)
|
||||
}
|
||||
}
|
||||
|
||||
return routes
|
||||
}
|
||||
Reference in New Issue
Block a user