diff options
| author | mihna123 <mihailonvojinovic@gmail.com> | 2026-08-21 20:09:08 +0200 |
|---|---|---|
| committer | mihna123 <mihailonvojinovic@gmail.com> | 2026-08-21 20:09:08 +0200 |
| commit | 9db000f9ccfd08b12fd2ed859b71c33e6ca165c5 (patch) | |
| tree | 21bf85bc63c6fe1a3f16b06e45dc73ffa64e81d6 | |
| parent | dd4244db9abaa69cdcacbeccc8b3770f3142e91c (diff) | |
| download | openstore-9db000f9ccfd08b12fd2ed859b71c33e6ca165c5.tar.gz openstore-9db000f9ccfd08b12fd2ed859b71c33e6ca165c5.zip | |
server: serve html template from embedded fs
| -rw-r--r-- | cmd/openstore/main.go | 13 | ||||
| -rw-r--r-- | internal/server/server.go | 41 | ||||
| -rw-r--r-- | internal/web/templates/index.html | 13 | ||||
| -rw-r--r-- | internal/web/web.go | 6 |
4 files changed, 58 insertions, 15 deletions
diff --git a/cmd/openstore/main.go b/cmd/openstore/main.go index 99821ad..90028ff 100644 --- a/cmd/openstore/main.go +++ b/cmd/openstore/main.go @@ -1,9 +1,14 @@ package main -import srv "codeberg.org/mihna123/openstore/internal/server" +import ( + "log" + + "codeberg.org/mihna123/openstore/internal/server" +) func main() { - conf := &srv.ServerConfig{Name: "OpenStore"} - server := srv.NewServer(conf) - server.Serve(":3000") + conf := &server.Config{Name: "OpenStore"} + s := server.New(conf) + err := s.Serve(":3000") + log.Fatal(err) } diff --git a/internal/server/server.go b/internal/server/server.go index 5b6cb8e..c391ab3 100644 --- a/internal/server/server.go +++ b/internal/server/server.go @@ -1,30 +1,49 @@ package server import ( - "io" "log" + "time" + "html/template" "net/http" + + "codeberg.org/mihna123/openstore/internal/web" ) -type ServerConfig struct { +type Config struct { Name string } type Server struct { - config *ServerConfig + config *Config + tmpl *template.Template + mux *http.ServeMux } -func NewServer(config *ServerConfig) Server { - return Server{config: config} +func New(config *Config) *Server { + tmpl := template.Must(template.ParseFS(web.Files, "templates/*.html")) + mux := http.NewServeMux() + return &Server{config, tmpl, mux} } -func (server *Server) Serve(addr string) { - http.HandleFunc("GET /", func(w http.ResponseWriter, r *http.Request) { - io.WriteString(w, "Hello World!\n") +func (s *Server) Serve(addr string) error { + s.mux.HandleFunc("GET /", func(w http.ResponseWriter, r *http.Request) { + log.Printf("[%s] %s - %s", r.Method, r.RequestURI, r.RemoteAddr) + err := s.tmpl.ExecuteTemplate(w, "index.html", nil) + + if err != nil { + log.Printf("Error with template: %s", err.Error()) + return + } }) - log.Default().Printf("Server \"%s\" listening at %s", server.config.Name, addr) - err := http.ListenAndServe(addr, nil) - log.Fatal(err) + httpSrv := http.Server{ + Addr: addr, + Handler: s.mux, + ReadHeaderTimeout: 5 * time.Second, + WriteTimeout: 10 * time.Second, + } + + log.Printf("Server \"%s\" listening at %s", s.config.Name, addr) + return httpSrv.ListenAndServe() } diff --git a/internal/web/templates/index.html b/internal/web/templates/index.html new file mode 100644 index 0000000..24d8c5e --- /dev/null +++ b/internal/web/templates/index.html @@ -0,0 +1,13 @@ +<!doctype html> +<html lang="en"> + <head> + <meta charset="UTF-8" /> + <meta name="viewport" content="width=device-width, initial-scale=1" /> + <title>OpenStore</title> + <link href="css/style.css" rel="stylesheet" /> + </head> + <body> + <h1>Welcome to openstore!</h1> + <p>Work in progress...</p> + </body> +</html> diff --git a/internal/web/web.go b/internal/web/web.go new file mode 100644 index 0000000..391aa2a --- /dev/null +++ b/internal/web/web.go @@ -0,0 +1,6 @@ +package web + +import "embed" + +//go:embed templates +var Files embed.FS |
