102 lines
3.2 KiB
Go
102 lines
3.2 KiB
Go
package main
|
|
|
|
import (
|
|
"embed"
|
|
"fmt"
|
|
"log"
|
|
"log/slog"
|
|
"net/http"
|
|
"os"
|
|
|
|
"git.duckylabs.xyz/duckbox/ducky-dash/db"
|
|
"git.duckylabs.xyz/duckbox/ducky-dash/handler"
|
|
"git.duckylabs.xyz/duckbox/ducky-dash/pkg/logger"
|
|
"git.duckylabs.xyz/duckbox/ducky-dash/pkg/sb"
|
|
"github.com/go-chi/chi/v5"
|
|
|
|
"github.com/joho/godotenv"
|
|
)
|
|
|
|
var FS embed.FS
|
|
|
|
func main() {
|
|
|
|
if err := initServer(); err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
router := chi.NewMux()
|
|
router.Use(handler.WithUser)
|
|
|
|
router.Handle("/*", http.StripPrefix("/", http.FileServer(http.FS(FS))))
|
|
|
|
// Render
|
|
router.Get("/", handler.MakeHandler(handler.HandleHomeIndex))
|
|
router.Get("/login", handler.MakeHandler(handler.HandleLoginIndex))
|
|
router.Get("/signup", handler.MakeHandler(handler.HandleSignupIndex))
|
|
router.Get("/reset-password", handler.MakeHandler(handler.HandleResetPasswordIndex))
|
|
// Handlers
|
|
router.Post("/login", handler.MakeHandler(handler.HandleLoginCreate))
|
|
router.Post("/logout", handler.MakeHandler(handler.HandleLogoutCreate))
|
|
router.Post("/signup", handler.MakeHandler(handler.HandleSignupCreate))
|
|
router.Post("/reset-password", handler.MakeHandler(handler.HandleResetPasswordCreate))
|
|
router.Get("/auth/callback", handler.MakeHandler(handler.HandleAuthCallback))
|
|
|
|
router.Group(func(auth chi.Router) {
|
|
auth.Use(handler.WithAuth)
|
|
auth.Get("/setup/account", handler.MakeHandler(handler.HandleAccountSetupIndex))
|
|
auth.Post("/setup/account", handler.MakeHandler(handler.HandleAccountCreate))
|
|
auth.Put("/update/account", handler.MakeHandler(handler.HandleAccountUpdate))
|
|
auth.Get("/accounts/all", handler.MakeHandler(handler.HandleAccountsQuery))
|
|
})
|
|
|
|
router.Group(func(auth chi.Router) {
|
|
auth.Use(handler.WithAuth, handler.WithAccountSetup)
|
|
// auth.Get("/", handler.MakeHandler(handler.HandleHomeIndex))
|
|
auth.Get("/tasks", handler.MakeHandler(handler.HandleTaskIndex))
|
|
auth.Get("/users", handler.MakeHandler(handler.HandleUsersIndex))
|
|
auth.Get("/users/profile/{uuid}", handler.MakeHandler(handler.HandleUserProfile))
|
|
auth.Get("/settings", handler.MakeHandler(handler.HandleSettingsIndex))
|
|
auth.Put("/reset-password", handler.MakeHandler(handler.HandleResetPasswordUpdate))
|
|
auth.Post("/tasks/create", handler.MakeHandler(handler.HandleTaskCreate))
|
|
auth.Get("/ui/tasks/create", handler.MakeHandler(handler.HandleTaskCreateModal))
|
|
})
|
|
|
|
// Serve static files from /public
|
|
router.Handle("/public/*", http.StripPrefix("/public/", http.FileServer(http.Dir("public/"))))
|
|
|
|
port := os.Getenv("HTTP_LISTEN_ADDR")
|
|
environment := os.Getenv("ENVIRONMENT")
|
|
|
|
slog.Info("application running",
|
|
"port", port,
|
|
"environment", environment,
|
|
)
|
|
// logger.Logger.Info("application running", "port", port, "environment", environment)
|
|
|
|
fmt.Println("application running on port", port)
|
|
log.Fatal(http.ListenAndServe(port, router))
|
|
|
|
}
|
|
|
|
func initServer() error {
|
|
if err := godotenv.Load(); err != nil {
|
|
slog.Error("error loading .env file", err)
|
|
return err
|
|
}
|
|
fmt.Println(".env loaded")
|
|
|
|
if err := logger.InitLogger(); err != nil {
|
|
slog.Error("error initializing logger", err)
|
|
return err
|
|
}
|
|
fmt.Println("logger loaded")
|
|
|
|
if err := db.Init(); err != nil {
|
|
slog.Error("error initializing database", err)
|
|
return err
|
|
}
|
|
|
|
return sb.Init()
|
|
}
|