diff options
Diffstat (limited to 'main.go')
| -rw-r--r-- | main.go | 61 |
1 files changed, 61 insertions, 0 deletions
@@ -427,6 +427,57 @@ func main() { cut := runes[start-1:start-1+length] return luaOk(l, string(cut)) } + + fsModule := make(map[string]any) + fsModule["files"] = func (l *Lua) int { + var dir string + err := l.Scan(&dir) + if err != nil { + return luaErr(l, err) + } + files, err := os.ReadDir(dir) + if err != nil { + return luaErr(l, err) + } + var res []any + for _, file := range files { + entry := make(map[string]any) + entry["name"] = file.Name() + entry["dir"] = file.IsDir() + res = append(res, entry) + } + return luaOk(l, res) + } + fsModule["size"] = func (l *Lua) int { + var path string + err := l.Scan(&path) + if err != nil { + return luaErr(l, err) + } + stat, err := os.Stat(path) + if err != nil { + return luaErr(l, err) + } + return luaOk(l, stat.Size()) + } + fsModule["mimetype"] = func (l *Lua) int { + var path string + err := l.Scan(&path) + if err != nil { + return luaErr(l, err) + } + file, err := os.Open(path) + if err != nil { + return luaErr(l, err) + } + defer file.Close() + res, err := mimetype(file) + if err != nil { + return luaErr(l, err) + } + return luaOk(l, res) + } + cryptoModule := make(map[string]any) cryptoModule["sha1"] = func (l *Lua) int { var str string @@ -444,6 +495,7 @@ func main() { module["http"] = httpModule module["db"] = dbModule module["utf8"] = utf8Module + module["fs"] = fsModule module["crypto"] = cryptoModule module["on-eval"] = func (l *Lua) int { var evalFn LuaRef @@ -535,3 +587,12 @@ func luaOk(l *Lua, res any) int { } return 2 } + +func mimetype(f *os.File) (string, error) { + firstBytes := make([]byte, 512) + _, err := f.ReadAt(firstBytes, 0) + if err != nil && err != io.EOF { + return "", err + } + return http.DetectContentType(firstBytes), nil +} |
