From ef1183b35e16cdca25f157071ac505f20c083c4d Mon Sep 17 00:00:00 2001 From: Antonio De Lucreziis Date: Tue, 14 Dec 2021 23:37:16 +0100 Subject: [PATCH] Vari fix e riorganizzazione del codice --- auth.go | 2 -- config/config.go | 12 +++++++++++- main.go | 19 +++++++++---------- ...mplate_renderer.go => template_renderer.go | 13 ++++++++----- util/objects.go | 13 +++++++++++++ 5 files changed, 41 insertions(+), 18 deletions(-) rename utils/template_renderer.go => template_renderer.go (83%) create mode 100644 util/objects.go diff --git a/auth.go b/auth.go index 5da3de5..7d66df8 100644 --- a/auth.go +++ b/auth.go @@ -1,7 +1,5 @@ package main -// "github.com/phc-dm/auth-poisson/user" - // AuthService rappresenta un servizio di autenticazione // type AuthService interface { // GetUsers() []User diff --git a/config/config.go b/config/config.go index ed0ce24..e304a76 100644 --- a/config/config.go +++ b/config/config.go @@ -6,6 +6,7 @@ import ( "strings" "github.com/joho/godotenv" + "github.com/phc-dm/server-poisson/util" ) var Mode string @@ -22,7 +23,7 @@ func stringOrDefault(value, defaultValue string) string { return value } -func LoadConfig() { +func Load() { godotenv.Load() log.SetFlags(log.Ldate | log.Ltime | log.Lshortfile) @@ -39,3 +40,12 @@ func LoadConfig() { ForumUrl = stringOrDefault(os.Getenv("FORUM_URL"), "forum.phc.dm.unipi.it") log.Printf("FORUM_URL = %v", ForumUrl) } + +func Object() util.H { + return util.H{ + "Mode": Mode, + "Host": Host, + "GitUrl": GitUrl, + "ForumUrl": ForumUrl, + } +} diff --git a/main.go b/main.go index 68a7402..fc6f313 100644 --- a/main.go +++ b/main.go @@ -6,13 +6,12 @@ import ( "github.com/go-chi/chi/v5" "github.com/go-chi/chi/v5/middleware" - "github.com/phc-dm/server-poisson/utils" + "github.com/phc-dm/server-poisson/config" + "github.com/phc-dm/server-poisson/util" ) -type object map[string]interface{} - func main() { - config.LoadConfig() + config.Load() r := chi.NewRouter() @@ -25,11 +24,11 @@ func main() { r.Handle("/blog/*", http.StripPrefix("/blog", http.FileServer(http.Dir("./blog/public")))) // Templates & Renderer - renderer := utils.NewTemplateRenderer("base.html") + renderer := NewTemplateRenderer("base.html") // Routes r.Get("/", func(w http.ResponseWriter, r *http.Request) { - err := renderer.Render(w, "home.html", object{}) + err := renderer.Render(w, "home.html", util.H{}) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return @@ -37,7 +36,7 @@ func main() { }) r.Get("/utenti", func(w http.ResponseWriter, r *http.Request) { - err := renderer.Render(w, "utenti.html", object{}) + err := renderer.Render(w, "utenti.html", util.H{}) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return @@ -45,13 +44,13 @@ func main() { }) r.Get("/login", func(w http.ResponseWriter, r *http.Request) { - err := renderer.Render(w, "login.html", object{}) + err := renderer.Render(w, "login.html", util.H{}) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } }) - log.Printf(`Starting server...`) - http.ListenAndServe(Config.Host, r) + log.Printf(`Starting server on %v...`, config.Host) + http.ListenAndServe(config.Host, r) } diff --git a/utils/template_renderer.go b/template_renderer.go similarity index 83% rename from utils/template_renderer.go rename to template_renderer.go index 44cdfce..de38e67 100644 --- a/utils/template_renderer.go +++ b/template_renderer.go @@ -1,10 +1,11 @@ -package utils +package main import ( "io" "text/template" "github.com/phc-dm/server-poisson/config" + "github.com/phc-dm/server-poisson/util" ) // TemplateRenderer holds cached templates for rendering @@ -24,12 +25,10 @@ func NewTemplateRenderer(baseFile string) *TemplateRenderer { } // Render the template -func (t *TemplateRenderer) Render(w io.Writer, name string, data interface{}) error { +func (t *TemplateRenderer) Render(w io.Writer, name string, data util.H) error { tmpl := t.templateMap[name] if config.Mode == "development" || tmpl == nil { - tmpl = template.Must(t.baseTemplate.Clone()) - if config.Mode == "development" { tmpl = template.Must(template.ParseFiles("./views/" + t.baseFile)) } else { @@ -40,5 +39,9 @@ func (t *TemplateRenderer) Render(w io.Writer, name string, data interface{}) er t.templateMap[name] = tmpl } - return tmpl.ExecuteTemplate(w, "base", data) + newData := util.H{} + newData.Apply(data) + newData["Config"] = config.Object() + + return tmpl.ExecuteTemplate(w, "base", newData) } diff --git a/util/objects.go b/util/objects.go new file mode 100644 index 0000000..1b9e290 --- /dev/null +++ b/util/objects.go @@ -0,0 +1,13 @@ +package util + +type H map[string]interface{} + +func (target H) Apply(sources ...H) H { + for _, source := range sources { + for k, v := range source { + target[k] = v + } + } + + return target +}