87 lines
1.8 KiB
Go
87 lines
1.8 KiB
Go
package main
|
|
|
|
import (
|
|
"io"
|
|
"mime/multipart"
|
|
|
|
"github.com/glebarez/sqlite"
|
|
"github.com/labstack/echo/v4"
|
|
"github.com/labstack/echo/v4/middleware"
|
|
"github.com/sirupsen/logrus"
|
|
prefixed "github.com/x-cray/logrus-prefixed-formatter"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
type MenuItem struct {
|
|
label string
|
|
href string
|
|
}
|
|
|
|
var db *gorm.DB
|
|
|
|
func main() {
|
|
logrus.SetLevel(logrus.DebugLevel)
|
|
logrus.SetFormatter(&prefixed.TextFormatter{
|
|
FullTimestamp: true,
|
|
})
|
|
logrus.Infoln("Application started.")
|
|
|
|
db_string := "bin.db"
|
|
var err error
|
|
db, err = gorm.Open(sqlite.Open(db_string), &gorm.Config{})
|
|
if err != nil {
|
|
logrus.WithError(err).Fatalln("Could not open database connection.")
|
|
}
|
|
logrus.WithFields(logrus.Fields{
|
|
"db connection": db_string,
|
|
}).Infoln("Connected to database.")
|
|
|
|
databaseMigrations(db)
|
|
|
|
e := echo.New()
|
|
e.Debug = false
|
|
|
|
e.Use(middleware.RequestLoggerWithConfig(middleware.RequestLoggerConfig{
|
|
LogURI: true,
|
|
LogStatus: true,
|
|
LogRemoteIP: true,
|
|
LogValuesFunc: func(c echo.Context, values middleware.RequestLoggerValues) error {
|
|
logrus.WithFields(logrus.Fields{
|
|
"URI": values.URI,
|
|
"status": values.Status,
|
|
"remote": values.RemoteIP,
|
|
}).Info("request")
|
|
|
|
return nil
|
|
},
|
|
}))
|
|
|
|
e.Static("/static", "static")
|
|
|
|
e.GET("/", indexHandler)
|
|
e.GET("/new", getNewHandler)
|
|
e.POST("/new", postNewHandler)
|
|
e.GET("/b/:id", getBinHandler)
|
|
e.POST("/b/:id/delete", deleteBinHandler)
|
|
|
|
partial := e.Group("/partial")
|
|
new := partial.Group("/new")
|
|
new.GET("/upload", getPartialUploadHandler)
|
|
new.GET("/text", getPartialTextHandler)
|
|
e.Logger.Fatal(e.Start(":8080"))
|
|
}
|
|
|
|
func getTextFromFile(fileHeader *multipart.FileHeader) (text string, err error) {
|
|
f, err := fileHeader.Open()
|
|
if err != nil {
|
|
return
|
|
}
|
|
b, err := io.ReadAll(f)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
text = string(b)
|
|
return
|
|
}
|