package handlers import ( "fmt" "os" "path/filepath" "github.com/gofiber/fiber/v3" "lmika.dev/lmika/weiro/models" "lmika.dev/lmika/weiro/services/obsimport" ) type ObsImportHandler struct { ObsImportService *obsimport.Service ScratchDir string } func (h ObsImportHandler) Form(c fiber.Ctx) error { return c.Render("obsimport/form", fiber.Map{}) } func (h ObsImportHandler) Upload(c fiber.Ctx) error { site := c.Locals("site").(models.Site) fileHeader, err := c.FormFile("zipfile") if err != nil { return fiber.NewError(fiber.StatusBadRequest, "no file provided") } // Save uploaded file to scratch dir if err := os.MkdirAll(h.ScratchDir, 0755); err != nil { return err } dstPath := filepath.Join(h.ScratchDir, models.NewNanoID()+".zip") if err := c.SaveFile(fileHeader, dstPath); err != nil { return err } defer os.Remove(dstPath) result, err := h.ObsImportService.ImportZip(c.Context(), dstPath) if err != nil { return err } return c.Render("obsimport/result", fiber.Map{ "result": result, "siteURL": fmt.Sprintf("/sites/%v/posts", site.ID), }) }