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 }