package main import ( "fmt" "net/http" "github.com/alecthomas/chroma/lexers" "github.com/labstack/echo/v4" "github.com/sirupsen/logrus" "gorm.io/gorm" ) func indexHandler(c echo.Context) error { id := c.Param("id") logrus.Infof("id is '%s'", id) return RenderComponent(c, http.StatusOK, indexFull()) } // ░█▀█░█▀▀░█░█░░░░░█░░░█▀▀░█░█░█▀▄░█▄█░▀█▀░▀█▀░░░█▀█░█▀█░█▀▀░█▀▀ // ░█░█░█▀▀░█▄█░░░▄▀░░░░▀▀█░█░█░█▀▄░█░█░░█░░░█░░░░█▀▀░█▀█░█░█░█▀▀ // ░▀░▀░▀▀▀░▀░▀░░░▀░░░░░▀▀▀░▀▀▀░▀▀░░▀░▀░▀▀▀░░▀░░░░▀░░░▀░▀░▀▀▀░▀▀▀ func getNewHandler(c echo.Context) error { values := c.QueryParams() wantsText := values.Has("text") return RenderComponent(c, http.StatusOK, newFull(wantsText)) } func postNewHandler(c echo.Context) error { file, err := c.FormFile("file") text := c.FormValue("text") wantsText := c.FormValue("wantsText") == "true" name := c.FormValue("name") description := c.FormValue("description") lang := c.FormValue("lang") if (file == nil || err != nil) && text == "" { /* return RenderComponent(c, http.StatusOK, CombineTempls( newPartial(wantsText), ErrorMessage("file or text must be provided", "error-span"), ), ) */ return RenderErrorToast(c, "File or text must be provided.") } code, adminCode, err := generateCodes() if err != nil { return RenderComponent(c, http.StatusOK, CombineTempls( newPartial(wantsText), ErrorMessage("server-side error occurred", "error-span"), ), ) } if file != nil { text, err = getTextFromFile(file) if name == "" { name = file.Filename } if err != nil { return RenderComponent(c, http.StatusOK, CombineTempls( newPartial(wantsText), ErrorMessage("server-side error occurred", "error-span"), ), ) } } // Determine language from file extension if not set. if lang == "" { lexer := lexers.Match(name) if lexer != nil { lang = lexer.Config().Name } } createdFile, err := createNewBin(text, name, description, lang, code, adminCode) if err != nil { return RenderComponent(c, http.StatusOK, CombineTempls( newPartial(wantsText), ErrorMessage("server-side error occurred", "error-span"), ), ) } c.Response().Header().Add("HX-Push", fmt.Sprintf("/b/%s", code)) return RenderComponent(c, http.StatusOK, binPartial(createdFile), ) } // ░█▀▄░▀█▀░█▀█░░░░░█░░░█▀▀░▀█▀░█░░░█▀▀░█▀▀ // ░█▀▄░░█░░█░█░░░▄▀░░░░█▀▀░░█░░█░░░█▀▀░▀▀█ // ░▀▀░░▀▀▀░▀░▀░░░▀░░░░░▀░░░▀▀▀░▀▀▀░▀▀▀░▀▀▀ // Individual pages of uploaded files. func getBinHandler(c echo.Context) error { file := File{} result := db.Where("page_key = ?", c.Param("id")).First(&file) if result.Error == gorm.ErrRecordNotFound { logrus.WithError(result.Error).Errorln("no file") } if result.Error != nil { logrus.WithError(result.Error).Errorln("server error") } file.AdminKey = c.QueryParam("delcode") return RenderComponent(c, http.StatusOK, binFull(file), ) } func deleteBinHandler(c echo.Context) error { code := c.Param("id") adminCode := c.FormValue("adminKey") if adminCode == "" { return RenderErrorToast(c, "deletion key cannot be empty") } file := File{} result := db.Where("page_key = ?", code).First(&file) if result.Error != nil { return RenderErrorToast(c, "file not found") } if adminCode != file.AdminKey { return RenderErrorToast(c, "invalid deletion key") } db.Delete(&file) return c.HTML(http.StatusOK, "

file deleted!

") }