summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--main.go61
1 files changed, 61 insertions, 0 deletions
diff --git a/main.go b/main.go
index 7f32504..d8614ae 100644
--- a/main.go
+++ b/main.go
@@ -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
+}