Refactor: Rimpiazzato il framework echo con go-chi

main-old
Antonio De Lucreziis 3 years ago
parent 95b7939960
commit f3c45b469c

@ -0,0 +1,3 @@
MODE=development
HOST=localhost:8000

5
.gitignore vendored

@ -0,0 +1,5 @@
# Environment files
.env

@ -1,13 +1,12 @@
# Nuovo Sito Poisson # Nuovo Sito Poisson
Documentazione principale è raccolta in [un altro repository](https://github.com/phc-dm/documentazione/blob/master/progetti/server-poisson/README.md). Repo del server del nuovo sito per il PHC.
## Development ## Development
Usare il comando `MODE=development go run main.go` per lanciare il server su `localhost:8000`. Copiare il file `.env.dev` in `.env` per dire al server di lavorare in modalità di development e su quale indirizzo servire il sito. Per avviare il server basta fare
## Materiale
```css
@import url('https://fonts.googleapis.com/css2?family=Share:wght@700&family=Ubuntu+Mono&family=Ubuntu:wght@300;700&display=swap');
``` ```
go run .
```

@ -0,0 +1,47 @@
package main
import (
"log"
"os"
"strings"
"github.com/joho/godotenv"
)
type Config struct {
Mode string
Host string
GitUrl string
ForumUrl string
}
func stringOrDefault(value, defaultValue string) string {
if len(strings.TrimSpace(value)) == 0 {
return defaultValue
}
return value
}
func LoadConfig() *Config {
godotenv.Load()
log.SetFlags(log.Ldate | log.Ltime | log.Lshortfile)
Mode := stringOrDefault(os.Getenv("MODE"), "production")
log.Printf("MODE = %v", Mode)
Host := stringOrDefault(os.Getenv("HOST"), "localhost:8080")
log.Printf("HOST = %v", Host)
GitUrl := stringOrDefault(os.Getenv("GIT_URL"), "git.phc.dm.unipi.it")
log.Printf("GIT_URL = %v", GitUrl)
ForumUrl := stringOrDefault(os.Getenv("FORUM_URL"), "forum.phc.dm.unipi.it")
log.Printf("FORUM_URL = %v", ForumUrl)
return &Config{
Mode, Host, GitUrl, ForumUrl,
}
}

@ -4,5 +4,7 @@ go 1.13
require ( require (
github.com/davecgh/go-spew v1.1.1 // indirect github.com/davecgh/go-spew v1.1.1 // indirect
github.com/go-chi/chi/v5 v5.0.7 // indirect
github.com/joho/godotenv v1.4.0 // indirect
github.com/labstack/echo/v4 v4.1.16 github.com/labstack/echo/v4 v4.1.16
) )

@ -3,6 +3,10 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM= github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM=
github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
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/joho/godotenv v1.4.0 h1:3l4+N6zfMWnkbPEXKng2o2/MR5mSwTrBih4ZEkkz1lg=
github.com/joho/godotenv v1.4.0/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4=
github.com/labstack/echo/v4 v4.1.16 h1:8swiwjE5Jkai3RPfZoahp8kjVCRNq+y7Q0hPji2Kz0o= github.com/labstack/echo/v4 v4.1.16 h1:8swiwjE5Jkai3RPfZoahp8kjVCRNq+y7Q0hPji2Kz0o=
github.com/labstack/echo/v4 v4.1.16/go.mod h1:awO+5TzAjvL8XpibdsfXxPgHr+orhtXZJZIQCVjogKI= github.com/labstack/echo/v4 v4.1.16/go.mod h1:awO+5TzAjvL8XpibdsfXxPgHr+orhtXZJZIQCVjogKI=
github.com/labstack/gommon v0.3.0 h1:JEeO0bvc78PKdyHxloTKiF8BD5iGrH8T6MSeGvSgob0= github.com/labstack/gommon v0.3.0 h1:JEeO0bvc78PKdyHxloTKiF8BD5iGrH8T6MSeGvSgob0=

@ -3,58 +3,55 @@ package main
import ( import (
"log" "log"
"net/http" "net/http"
"os"
"strconv"
"git.phc.dm.xxxxx.xx/server-poisson/utils" "git.phc.dm.xxxxx.xx/server-poisson/utils"
"github.com/labstack/echo/v4" "github.com/go-chi/chi/v5"
"github.com/labstack/echo/v4/middleware" "github.com/go-chi/chi/v5/middleware"
) )
type object map[string]interface{} type object map[string]interface{}
func init() {
log.SetFlags(log.Ldate | log.Ltime | log.Lshortfile)
log.Printf("MODE = %v (default: production)", os.Getenv("MODE"))
log.Printf("PORT = %v (default: 8000)", os.Getenv("PORT"))
}
func main() { func main() {
// Echo instance config := LoadConfig()
e := echo.New()
// Middleware r := chi.NewRouter()
e.Use(middleware.Logger())
e.Use(middleware.Recover())
// Templates & Renderer // Middleware
e.Renderer = utils.NewTemplateRenderer("base.html") r.Use(middleware.Logger)
r.Use(middleware.Recoverer)
// Static assets // Static assets
e.Static("/assets", "./assets") r.Handle("/assets/*", http.StripPrefix("/assets", http.FileServer(http.Dir("./assets"))))
e.Static("/blog", "./blog/public") r.Handle("/blog/*", http.StripPrefix("/blog", http.FileServer(http.Dir("./blog/public"))))
// Templates & Renderer
renderer := utils.NewTemplateRenderer("base.html")
// Routes // Routes
e.GET("/", func(c echo.Context) error { r.Get("/", func(w http.ResponseWriter, r *http.Request) {
return c.Render(http.StatusOK, "home.html", object{}) err := renderer.Render(w, "home.html", object{"Config": config})
}) if err != nil {
e.GET("/utenti", func(c echo.Context) error { http.Error(w, err.Error(), http.StatusInternalServerError)
return c.Render(http.StatusOK, "utenti.html", object{}) return
}) }
e.GET("/login", func(c echo.Context) error {
return c.Render(http.StatusOK, "login.html", object{})
}) })
port, ok := strconv.Atoi(os.Getenv("PORT")) r.Get("/utenti", func(w http.ResponseWriter, r *http.Request) {
if ok != nil { err := renderer.Render(w, "utenti.html", object{"Config": config})
port = 8000 if err != nil {
} http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
})
log.Print(port) r.Get("/login", func(w http.ResponseWriter, r *http.Request) {
err := renderer.Render(w, "login.html", object{"Config": config})
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
})
// Start server log.Printf(`Starting server...`)
e.Logger.Fatal(e.Start(":" + strconv.Itoa(port))) http.ListenAndServe(config.Host, r)
} }

@ -4,8 +4,6 @@ import (
"io" "io"
"os" "os"
"text/template" "text/template"
"github.com/labstack/echo/v4"
) )
// TemplateRenderer holds cached templates for rendering // TemplateRenderer holds cached templates for rendering
@ -23,18 +21,14 @@ func NewTemplateRenderer(baseFile string) *TemplateRenderer {
} }
// Render the template // Render the template
func (t *TemplateRenderer) Render(w io.Writer, name string, data interface{}, c echo.Context) error { func (t *TemplateRenderer) Render(w io.Writer, name string, data interface{}) error {
tmpl := t.templateMap[name] tmpl := t.templateMap[name]
if os.Getenv("MODE") == "development" || tmpl == nil { if os.Getenv("MODE") == "development" || tmpl == nil {
tmpl = template.Must(t.baseTemplate.Clone()) tmpl = template.Must(t.baseTemplate.Clone())
tmpl.ParseFiles("./views/" + name) tmpl.ParseFiles("./views/" + name)
t.templateMap[name] = tmpl t.templateMap[name] = tmpl
} }
// // Add global methods if data is a map
// if viewContext, isMap := data.(map[string]interface{}); isMap {
// viewContext["reverse"] = c.Echo().Reverse
// }
return tmpl.ExecuteTemplate(w, "base", data) return tmpl.ExecuteTemplate(w, "base", data)
} }

@ -26,10 +26,10 @@
<a href="/blog">Notizie</a> <a href="/blog">Notizie</a>
</div> </div>
<div class="nav-item"> <div class="nav-item">
<a href="https://git.phc.dm.unipi.it">Git</a> <a href="https://{{ .Config.GitUrl }}">Git</a>
</div> </div>
<div class="nav-item"> <div class="nav-item">
<a href="https://forum.phc.dm.unipi.it">Forum</a> <a href="https://{{ .Config.ForumUrl }}">Forum</a>
</div> </div>
<!-- Spacing --> <!-- Spacing -->
<div class="hfill"></div> <div class="hfill"></div>

Loading…
Cancel
Save