From 5d3f082d6219323b5cc987a6e18965f6626ed557 Mon Sep 17 00:00:00 2001 From: Antonio De Lucreziis Date: Fri, 3 Jun 2022 13:40:58 +0200 Subject: [PATCH] Refactor da go-chi a go-fiber --- go.mod | 6 ++-- go.sum | 34 +++++++++++++++--- main.go | 106 ++++++++++++++++++++++---------------------------------- 3 files changed, 76 insertions(+), 70 deletions(-) diff --git a/go.mod b/go.mod index fd064ec..375b3eb 100644 --- a/go.mod +++ b/go.mod @@ -4,11 +4,13 @@ go 1.13 require ( github.com/alecthomas/chroma v0.9.4 - github.com/alecthomas/repr v0.1.0 // indirect - github.com/go-chi/chi/v5 v5.0.7 + github.com/gofiber/fiber/v2 v2.34.0 + github.com/gofiber/redirect/v2 v2.1.23 github.com/joho/godotenv v1.4.0 + github.com/klauspost/compress v1.15.6 // indirect github.com/litao91/goldmark-mathjax v0.0.0-20210217064022-a43cf739a50f github.com/yuin/goldmark v1.4.4 github.com/yuin/goldmark-highlighting v0.0.0-20210516132338-9216f9c5aa01 + golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a // indirect gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b ) diff --git a/go.sum b/go.sum index 2391490..4ffcd98 100644 --- a/go.sum +++ b/go.sum @@ -5,8 +5,8 @@ github.com/alecthomas/chroma v0.9.4/go.mod h1:jtJATyUxlIORhUOFNA9NZDWGAQ8wpxQQqN github.com/alecthomas/colour v0.0.0-20160524082231-60882d9e2721/go.mod h1:QO9JBoKquHd+jz9nshCh40fOfO+JzsoXy8qTHF68zU0= github.com/alecthomas/kong v0.2.1-0.20190708041108-0548c6b1afae/go.mod h1:+inYUSluD+p4L8KdviBSgzcqEjUQOfC5fQDRFuc36lI= github.com/alecthomas/repr v0.0.0-20180818092828-117648cd9897/go.mod h1:xTS7Pm1pD1mvyM075QCDSRqH6qRLXylzS24ZTpRiSzQ= -github.com/alecthomas/repr v0.1.0 h1:ENn2e1+J3k09gyj2shc0dHr/yjaWSHRlrJ4DPMevDqE= -github.com/alecthomas/repr v0.1.0/go.mod h1:2kn6fqh/zIyPLmm3ugklbEi5hg5wS435eygvNfaDQL8= +github.com/andybalholm/brotli v1.0.4 h1:V7DdXeJtZscaqfNuAdSRuRFzuiKlHSC/Zh3zl9qY3JY= +github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= github.com/danwakefield/fnmatch v0.0.0-20160403171240-cbb64ac3d964/go.mod h1:Xd9hchkHSWYkEqJwUGisez3G1QY8Ryz0sdWrLPMGjLk= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= @@ -15,10 +15,15 @@ github.com/dlclark/regexp2 v1.1.6/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55k github.com/dlclark/regexp2 v1.2.0/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= github.com/dlclark/regexp2 v1.4.0 h1:F1rxgk7p4uKjwIQxBs9oAXe5CqrXlCduYEJvrF4u93E= github.com/dlclark/regexp2 v1.4.0/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= -github.com/go-chi/chi/v5 v5.0.7 h1:rDTPXLDHGATaeHvVlLcR4Qe0zftYethFucbjVQ1PxU8= -github.com/go-chi/chi/v5 v5.0.7/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8= +github.com/gofiber/fiber/v2 v2.34.0 h1:96BJMw6uaxQhJsHY54SFGOtGgp9pgombK5Hbi4JSEQA= +github.com/gofiber/fiber/v2 v2.34.0/go.mod h1:ozRQfS+D7EL1+hMH+gutku0kfx1wLX4hAxDCtDzpj4U= +github.com/gofiber/redirect/v2 v2.1.23 h1:MqRyyeKyGqkF4GIFgTB4SuqIeeXviUglgRL2HCOFofM= +github.com/gofiber/redirect/v2 v2.1.23/go.mod h1:IYF5pPLDLYrrHMcxajDyWV+nHMbyPd6agCXkCnfLxS0= github.com/joho/godotenv v1.4.0 h1:3l4+N6zfMWnkbPEXKng2o2/MR5mSwTrBih4ZEkkz1lg= github.com/joho/godotenv v1.4.0/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= +github.com/klauspost/compress v1.15.0/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= +github.com/klauspost/compress v1.15.6 h1:6D9PcO8QWu0JyaQ2zUMmu16T1T+zjjEpP91guRsvDfY= +github.com/klauspost/compress v1.15.6/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= github.com/litao91/goldmark-mathjax v0.0.0-20210217064022-a43cf739a50f h1:plCPYXRXDCO57qjqegCzaVf1t6aSbgCMD+zfz18POfs= github.com/litao91/goldmark-mathjax v0.0.0-20210217064022-a43cf739a50f/go.mod h1:leg+HM7jUS84JYuY120zmU68R6+UeU6uZ/KAW7cViKE= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= @@ -34,13 +39,34 @@ github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UV github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= +github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= +github.com/valyala/fasthttp v1.37.0 h1:7WHCyI7EAkQMVmrfBhWTCOaeROb1aCBiTopx63LkMbE= +github.com/valyala/fasthttp v1.37.0/go.mod h1:t/G+3rLek+CyY9bnIE+YlMRddxVAAGjhxndDB4i4C0I= +github.com/valyala/tcplisten v1.0.0 h1:rBHj/Xf+E1tRGZyWIWwJDiRY0zc1Js+CV5DqwacVSA8= +github.com/valyala/tcplisten v1.0.0/go.mod h1:T0xQ8SeCZGxckz9qRXTfG43PvQ/mcWh7FwZEA7Ioqkc= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.6/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.4 h1:zNWRjYUW32G9KirMXYHQHVNFkXvMI7LpgNW2AgYAoIs= github.com/yuin/goldmark v1.4.4/go.mod h1:rmuwmfZ0+bvzB24eSC//bk1R1Zp3hM0OXYv/G2LIilg= github.com/yuin/goldmark-highlighting v0.0.0-20210516132338-9216f9c5aa01 h1:0SJnXjE4jDClMW6grE0xpNhwpqbPwkBTn8zpVw5C0SI= github.com/yuin/goldmark-highlighting v0.0.0-20210516132338-9216f9c5aa01/go.mod h1:TwKQPa5XkCCRC2GRZ5wtfNUTQ2+9/i19mGRijFeJ4BE= +golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/sys v0.0.0-20181128092732-4ed8d59d0b35/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a h1:dGzPydgVsqGcTRVwiLJ1jVbufYwmzD3LfVPLKsKg+0k= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/main.go b/main.go index e6faeed..76db371 100644 --- a/main.go +++ b/main.go @@ -3,29 +3,32 @@ package main import ( "encoding/json" "html/template" - "log" - "net/http" "git.phc.dm.unipi.it/phc/website/articles" "git.phc.dm.unipi.it/phc/website/config" "git.phc.dm.unipi.it/phc/website/templates" "git.phc.dm.unipi.it/phc/website/util" - "github.com/go-chi/chi/v5" - "github.com/go-chi/chi/v5/middleware" + "github.com/gofiber/fiber/v2" + "github.com/gofiber/fiber/v2/middleware/logger" + "github.com/gofiber/fiber/v2/middleware/recover" + "github.com/gofiber/redirect/v2" ) func main() { config.Load() - r := chi.NewRouter() + app := fiber.New() - // Middleware - r.Use(middleware.Logger) - r.Use(middleware.Recoverer) - r.Use(middleware.RedirectSlashes) + app.Use(logger.New()) + app.Use(recover.New()) + app.Use(redirect.New(redirect.Config{ + Rules: map[string]string{ + "/*/": "/$1", + }, + })) // Static content - r.Handle("/public/*", http.StripPrefix("/public", http.FileServer(http.Dir("./public")))) + app.Static("/public/", "./public") // Templates & Renderer renderer := templates.NewRenderer( @@ -47,99 +50,74 @@ func main() { for route, view := range actuallyStaticRoutes { localView := view - r.Get(route, func(w http.ResponseWriter, r *http.Request) { - err := renderer.Render(w, localView, util.H{}) - if err != nil { - http.Error(w, err.Error(), http.StatusInternalServerError) - return - } + app.Get(route, func(c *fiber.Ctx) error { + c.Type("html") + return renderer.Render(c, localView, util.H{}) }) } - r.Get("/api/utenti", func(w http.ResponseWriter, r *http.Request) { + app.Get("/api/utenti", func(c *fiber.Ctx) error { utenti, err := GetUtenti() if err != nil { - http.Error(w, err.Error(), http.StatusInternalServerError) - return + return err } - if err := json.NewEncoder(w).Encode(utenti); err != nil { - http.Error(w, err.Error(), http.StatusInternalServerError) - return - } + c.Type("json") + return json.NewEncoder(c).Encode(utenti) }) - r.Get("/utenti", func(w http.ResponseWriter, r *http.Request) { + app.Get("/utenti", func(c *fiber.Ctx) error { utenti, err := GetUtenti() if err != nil { - http.Error(w, err.Error(), http.StatusInternalServerError) - return + return err } - if err := renderer.Render(w, "utenti.html", util.H{ + c.Type("html") + return renderer.Render(c, "utenti.html", util.H{ "Utenti": utenti, - }); err != nil { - http.Error(w, err.Error(), http.StatusInternalServerError) - return - } + }) }) - r.Get("/appunti", func(w http.ResponseWriter, r *http.Request) { - searchQuery := "" + app.Get("/appunti", func(c *fiber.Ctx) error { + searchQuery := c.Query("q", "") - keys, present := r.URL.Query()["q"] - if present { - searchQuery = keys[0] - } - - err := renderer.Render(w, "appunti.html", util.H{ + c.Type("html") + return renderer.Render(c, "appunti.html", util.H{ "Query": searchQuery, }) - if err != nil { - http.Error(w, err.Error(), http.StatusInternalServerError) - return - } }) - r.Get("/news", func(w http.ResponseWriter, r *http.Request) { + app.Get("/news", func(c *fiber.Ctx) error { articles, err := newsArticlesRegistry.GetArticles() if err != nil { - http.Error(w, err.Error(), http.StatusInternalServerError) - return + return err } - if err := renderer.Render(w, "news.html", util.H{ + c.Type("html") + return renderer.Render(c, "news.html", util.H{ "Articles": articles, - }); err != nil { - http.Error(w, err.Error(), http.StatusInternalServerError) - return - } + }) }) - r.Get("/news/{article}", func(w http.ResponseWriter, r *http.Request) { - articleID := chi.URLParam(r, "article") + app.Get("/news/:article", func(c *fiber.Ctx) error { + articleID := c.Params("article") article, err := newsArticlesRegistry.GetArticle(articleID) if err != nil { - http.Error(w, err.Error(), http.StatusInternalServerError) - return + return err } html, err := article.Render() if err != nil { - http.Error(w, err.Error(), http.StatusInternalServerError) - return + return err } - if err := renderer.Render(w, "news-base.html", util.H{ + c.Type("html") + return renderer.Render(c, "news-base.html", util.H{ "Article": article, "ContentHTML": template.HTML(html), - }); err != nil { - http.Error(w, err.Error(), http.StatusInternalServerError) - return - } + }) }) - log.Printf(`Starting server on %v...`, config.Host) - http.ListenAndServe(config.Host, r) + app.Listen(config.Host) }