143 lines
3.9 KiB
Go
143 lines
3.9 KiB
Go
|
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, "<h1>file deleted!</h1>")
|
||
|
}
|