kuma-archive/internal/routes/mod.go
2025-03-13 14:43:37 +09:00

67 lines
1.4 KiB
Go

package routes
import (
"fmt"
"os"
"path/filepath"
"strings"
"git.wh64.net/devproje/kuma-archive/config"
"git.wh64.net/devproje/kuma-archive/internal/service"
"github.com/gin-contrib/static"
"github.com/gin-gonic/gin"
)
func New(app *gin.Engine) {
app.Use(static.Serve("/", static.LocalFile("./public", true)))
app.Use(static.Serve("/assets", static.LocalFile("./assets", false)))
app.NoRoute(func(ctx *gin.Context) {
ctx.HTML(200, "index.html", nil)
})
app.GET("favicon.ico", func(ctx *gin.Context) {
ctx.File("/assets/favicon.ico")
})
api := app.Group("/api")
{
api.GET("/path/*path", func(ctx *gin.Context) {
worker := service.NewWorkerService()
path := ctx.Param("path")
info, err := worker.Read(path)
if err != nil {
fmt.Fprintf(os.Stderr, "%v\n", err)
ctx.Status(404)
return
}
if !info.IsDir() {
var split = strings.Split(path, "/")
ctx.FileAttachment(filepath.Join(config.INDEX_DIR, path), split[len(split)-1])
return
}
entry, err := os.ReadDir(filepath.Join(config.INDEX_DIR, path))
if err != nil {
ctx.Status(500)
return
}
entries := make([]service.DirEntry, 0)
for _, fd := range entry {
entries = append(entries, service.DirEntry{
Name: fd.Name(),
})
}
ctx.JSON(200, gin.H{
"ok": 1,
"path": path,
"entries": entries,
})
})
}
}