Added auth

This commit is contained in:
Pijus Kamandulis
2025-07-04 21:05:28 +03:00
parent b3c89a01d0
commit ef247fc843
13 changed files with 297 additions and 80 deletions

View File

@@ -3,20 +3,24 @@ package web
import (
"html/template"
"net/http"
"path/filepath"
"pool-stats/helpers"
"fmt"
"github.com/gofrs/uuid/v5"
"github.com/ostafen/clover/v2"
)
type WebServer struct {
db *clover.DB
port int
templates *template.Template
db *clover.DB
port int
templates *template.Template
sessions map[string]string
adminPassword string
}
func NewWebServer(db *clover.DB, port int) *WebServer {
func NewWebServer(db *clover.DB, port int, adminPassword string) *WebServer {
templates := template.New("base").Funcs(template.FuncMap{
"add": func(a, b int) int { return a + b },
"sub": func(a, b int) int { return a - b },
@@ -30,14 +34,18 @@ func NewWebServer(db *clover.DB, port int) *WebServer {
))
return &WebServer{
db: db,
port: port,
templates: templates,
db: db,
port: port,
templates: templates,
sessions: make(map[string]string),
adminPassword: adminPassword,
}
}
func (ws *WebServer) Start() error {
http.HandleFunc("/", ws.IndexHandler)
http.HandleFunc("/login", ws.LoginHandler)
http.HandleFunc("/logout", ws.LogoutHandler)
http.HandleFunc("/shares", ws.SharesHandler)
http.HandleFunc("/top-shares", ws.TopSharesHandler)
http.HandleFunc("/daily-stats", ws.DailyStatsHandler)
@@ -46,3 +54,48 @@ func (ws *WebServer) Start() error {
println("Listening on", address)
return http.ListenAndServe(address, nil)
}
func generateSessionID() string {
uuid, err := uuid.NewV4()
if err != nil {
fmt.Println("Error generating session ID:", err)
return ""
}
return uuid.String()
}
func (ws *WebServer) getUser(r *http.Request) string {
cookie, err := r.Cookie("session_id")
if err != nil {
return ""
}
if user, ok := ws.sessions[cookie.Value]; ok {
return user
}
return ""
}
func (ws *WebServer) renderTemplate(
w http.ResponseWriter,
r *http.Request,
templateFile string,
data IPageDataBase) {
data.SetUserName(ws.getUser(r))
tmpl, err := template.Must(ws.templates.Clone()).ParseFiles(templateFile)
if err != nil {
http.Error(w, "Failed to parse template", 500)
println("Error parsing template:", err.Error())
return
}
templateName := filepath.Base(templateFile)
if err := tmpl.ExecuteTemplate(w, templateName, data); err != nil {
http.Error(w, "Failed to render template", 500)
println("Error rendering template:", err.Error())
return
}
}