package main import ( "arbeitszeitmessung/endpoints" "arbeitszeitmessung/helper" "arbeitszeitmessung/models" "context" "log/slog" "net/http" "os" "time" "github.com/joho/godotenv" _ "github.com/lib/pq" ) func main() { var err error var logLevel slog.LevelVar logLevel.Set(slog.LevelWarn) logger := slog.New(slog.NewJSONHandler(os.Stdout, &slog.HandlerOptions{Level: &logLevel})) slog.SetDefault(logger) err = godotenv.Load(".env") if err != nil { slog.Info("No .env file found in directory!") } if helper.GetEnv("GO_ENV", "production") == "debug" { logLevel.Set(slog.LevelDebug) envs := os.Environ() slog.Debug("Debug mode enabled", "Environment Variables", envs) } models.DB, err = OpenDatabase() if err != nil { slog.Error("Error while opening the database", "Error", err) } fs := http.FileServer(http.Dir("./static")) endpoints.CreateSessionManager(24 * time.Hour) server := http.NewServeMux() // handles the different http routes server.HandleFunc("/time/new", endpoints.TimeCreateHandler) server.Handle("/absence", ParamsMiddleware(endpoints.AbsencHandler)) server.Handle("/time", ParamsMiddleware(endpoints.TimeHandler)) server.HandleFunc("/logout", endpoints.LogoutHandler) server.HandleFunc("/user/{action}", endpoints.UserHandler) // server.HandleFunc("/user/login", endpoints.LoginHandler) // server.HandleFunc("/user/settings", endpoints.UserSettingsHandler) server.HandleFunc("/team", endpoints.TeamHandler) server.HandleFunc("/team/presence", endpoints.TeamPresenceHandler) server.HandleFunc("/pdf", endpoints.PDFHandler) server.Handle("/", http.RedirectHandler("/time", http.StatusPermanentRedirect)) server.Handle("/static/", http.StripPrefix("/static/", fs)) serverSessionMiddleware := endpoints.Session.LoadAndSave(server) // starting the http server slog.Info("Server is running at http://localhost:8080") slog.Error("Error starting Server", "Error", http.ListenAndServe(":8080", serverSessionMiddleware)) } func ParamsMiddleware(next http.HandlerFunc) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { queryParams := r.URL.Query() ctx := context.WithValue(r.Context(), "urlParams", queryParams) slog.Debug("ParamsMiddleware added urlParams", slog.Any("urlParams", queryParams)) next.ServeHTTP(w, r.WithContext(ctx)) }) }