80 lines
2.2 KiB
Go
80 lines
2.2 KiB
Go
package infrastructure
|
|
|
|
import (
|
|
"git.markbailey.dev/cervers/ptpp/lib/database"
|
|
"net/http"
|
|
"sync"
|
|
|
|
"git.markbailey.dev/cervers/ptpp/handlers"
|
|
"git.markbailey.dev/cervers/ptpp/handlers/admin"
|
|
"git.markbailey.dev/cervers/ptpp/lib/logger"
|
|
mw "git.markbailey.dev/cervers/ptpp/lib/middleware"
|
|
"git.markbailey.dev/cervers/ptpp/lib/session"
|
|
)
|
|
|
|
var (
|
|
globalSessions *session.Manager
|
|
commonRouter *http.ServeMux
|
|
adminStack mw.Func
|
|
commonStack mw.Func
|
|
lock = &sync.Mutex{}
|
|
il logger.ILogger
|
|
)
|
|
|
|
func GetRouter() http.Handler {
|
|
commonStack = mw.Compose(
|
|
mw.WithLogger,
|
|
mw.WithUsername,
|
|
)
|
|
|
|
if commonRouter == nil {
|
|
lock.Lock()
|
|
defer lock.Unlock()
|
|
|
|
adminStack = mw.Compose(
|
|
mw.WithAuth,
|
|
)
|
|
|
|
commonRouter = http.NewServeMux()
|
|
adminRouter := http.NewServeMux()
|
|
|
|
// Serve static files
|
|
fs := http.FileServer(http.Dir("./public/"))
|
|
commonRouter.Handle("GET /public/", http.StripPrefix("/public", fs))
|
|
commonRouter.HandleFunc("/favicon.ico", func(w http.ResponseWriter, r *http.Request) {
|
|
http.ServeFile(w, r, "./public/assets/favicon/favicon.ico")
|
|
})
|
|
|
|
// Homepage routes
|
|
homepageHandler := handlers.NewHomePageHandler(il)
|
|
commonRouter.Handle("/", mw.ErrHandler(homepageHandler.Homepage))
|
|
|
|
if env == "production" {
|
|
return commonStack(commonRouter)
|
|
}
|
|
|
|
// User routes
|
|
userHandler := handlers.NewUserHandler(il, globalSessions, database.ChooseDB())
|
|
commonRouter.Handle("GET /signup", mw.ErrHandler(userHandler.SignUp))
|
|
commonRouter.Handle("POST /signup", mw.ErrHandler(userHandler.SignUp))
|
|
commonRouter.Handle("GET /signin", mw.ErrHandler(userHandler.SignIn))
|
|
commonRouter.Handle("POST /signin", mw.ErrHandler(userHandler.SignIn))
|
|
commonRouter.Handle("GET /signout", mw.ErrHandler(userHandler.SignOut))
|
|
commonRouter.Handle("GET /populate", mw.ErrHandler(userHandler.Populate))
|
|
|
|
// Admin routes
|
|
adminIndexHandler := admin.NewAdminIndexHandler(il, globalSessions)
|
|
adminRouter.Handle("GET /", mw.ErrHandler(adminIndexHandler.Index))
|
|
commonRouter.Handle("/admin/", http.StripPrefix("/admin", adminStack(adminRouter)))
|
|
}
|
|
|
|
return commonStack(commonRouter)
|
|
}
|
|
|
|
func init() {
|
|
globalSessions, _ = session.NewManager("memory", "ptpp", 3600)
|
|
go globalSessions.GC()
|
|
|
|
il = logger.NewCompositeLogger()
|
|
}
|