summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormihna123 <mihailonvojinovic@gmail.com>2026-08-21 20:09:08 +0200
committermihna123 <mihailonvojinovic@gmail.com>2026-08-21 20:09:08 +0200
commit9db000f9ccfd08b12fd2ed859b71c33e6ca165c5 (patch)
tree21bf85bc63c6fe1a3f16b06e45dc73ffa64e81d6
parentdd4244db9abaa69cdcacbeccc8b3770f3142e91c (diff)
downloadopenstore-9db000f9ccfd08b12fd2ed859b71c33e6ca165c5.tar.gz
openstore-9db000f9ccfd08b12fd2ed859b71c33e6ca165c5.zip
server: serve html template from embedded fs
-rw-r--r--cmd/openstore/main.go13
-rw-r--r--internal/server/server.go41
-rw-r--r--internal/web/templates/index.html13
-rw-r--r--internal/web/web.go6
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