refactor: putting handler function higher

This commit is contained in:
efim 2023-11-04 07:36:07 +00:00
parent f8eb11c53e
commit b19dd2863b
1 changed files with 70 additions and 57 deletions

View File

@ -14,6 +14,21 @@ import (
"sunshine.industries/some-automoderation/sessions" "sunshine.industries/some-automoderation/sessions"
) )
// function to register all http routes for servicing auth pages and logic
func registerLoginRoutes(
templateFs *embed.FS,
sessionSM sessions.SessionManagement,
roomsM rooms.RoomManager,
) {
// login page
http.HandleFunc(loginPath, func(w http.ResponseWriter, r *http.Request) {
renderLoginPage(w)
})
http.HandleFunc("/login/join", joinRoomHandler(templateFs, sessionSM, roomsM))
http.HandleFunc("/login/create", createRoomHandler(templateFs, sessionSM, roomsM))
http.HandleFunc("/login/room-name-check", checkRoomName(templateFs, roomsM))
}
const authCookieName = "auth" const authCookieName = "auth"
const loginPath = "/login" const loginPath = "/login"
type contextKey string type contextKey string
@ -24,7 +39,6 @@ type contextKey string
func authedPageMiddleware( func authedPageMiddleware(
sessionsM sessions.SessionManagement, next http.Handler, sessionsM sessions.SessionManagement, next http.Handler,
) http.Handler { ) http.Handler {
returnNoAccess := func(w http.ResponseWriter, r *http.Request) { returnNoAccess := func(w http.ResponseWriter, r *http.Request) {
log.Printf("auth middle > restricting access to %s", r.URL.Path) log.Printf("auth middle > restricting access to %s", r.URL.Path)
w.Header().Add("HX-Replace-Url", loginPath) w.Header().Add("HX-Replace-Url", loginPath)
@ -35,7 +49,6 @@ func authedPageMiddleware(
log.Printf("auth middle > allowing access to %s for %+v", r.URL.Path, session) log.Printf("auth middle > allowing access to %s for %+v", r.URL.Path, session)
next.ServeHTTP(w, r.WithContext(ctx)) next.ServeHTTP(w, r.WithContext(ctx))
} }
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
sessionCookie, err := r.Cookie(authCookieName) sessionCookie, err := r.Cookie(authCookieName)
if err != nil { if err != nil {
@ -68,57 +81,11 @@ func renderLoginPage(w http.ResponseWriter) {
} }
} }
// function to register all http routes for servicing auth pages and logic func createRoomHandler( templateFs *embed.FS,
func registerLoginRoutes(
templateFs *embed.FS,
sessionSM sessions.SessionManagement, sessionSM sessions.SessionManagement,
roomsM rooms.RoomManager, roomsM rooms.RoomManager,
) { ) http.HandlerFunc {
// login page return func(w http.ResponseWriter, r *http.Request) {
http.HandleFunc(loginPath, func(w http.ResponseWriter, r *http.Request) {
renderLoginPage(w)
})
// when the room exists - attempt to join
http.HandleFunc("/login/join", func(w http.ResponseWriter, r *http.Request) {
err := r.ParseForm()
if err != nil {
w.WriteHeader(http.StatusBadRequest)
}
rn := r.PostFormValue("roomName")
rp := r.PostFormValue("roomPassword")
pn := r.PostFormValue("personalName")
pp := r.PostFormValue("personalPassword")
room, _, err := roomsM.Get(rn)
if err != nil {
log.Printf("/login/submit error getting room %s", rn)
// return i guess
} else {
log.Printf("/login/submit found room %+v", room)
}
roomId := "room-name-actually" // would be taken from rooms interface from redis
// would be either taken from room info on correct person pass or created
personId := 111
id, err := sessionSM.Save(roomId, personId)
if err != nil {
log.Printf("/login/submit > error saving session %s", err)
}
fmt.Fprintf(w, "is is %d. room things %s & %s, personal things %s and %s. \n found room %+v", id, rn, rp, pn, pp, room)
// i suppose here i'll need to
// a) check if room password OK
// b) get room data
// c) check if such person exists,
// either create one, or check password
// d) how should i monitor sessions? - space in redis
// so save session to redis and add cookie with sessionId
})
// when room does not exist
http.HandleFunc("/login/create", func(w http.ResponseWriter, r *http.Request) {
err := r.ParseForm() err := r.ParseForm()
if err != nil { if err != nil {
// TODO return error notice somehow // TODO return error notice somehow
@ -167,11 +134,15 @@ func registerLoginRoutes(
if err != nil { if err != nil {
log.Printf("my error in executing template, huh\n %s", err) log.Printf("my error in executing template, huh\n %s", err)
} }
}) }
}
// checking whether the room name already exists // checking whether the room name already exists
// toggle button between Join or Create // toggle button between Join or Create
http.HandleFunc("/login/room-name-check", func(w http.ResponseWriter, r *http.Request) { func checkRoomName( templateFs *embed.FS,
roomsM rooms.RoomManager,
) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
err := r.ParseForm() err := r.ParseForm()
if err != nil { if err != nil {
w.WriteHeader(http.StatusBadRequest) w.WriteHeader(http.StatusBadRequest)
@ -184,6 +155,48 @@ func registerLoginRoutes(
var templFile = "templates/login.gohtml" var templFile = "templates/login.gohtml"
tmpl := template.Must(template.ParseFS(templateFs, templFile)) tmpl := template.Must(template.ParseFS(templateFs, templFile))
err = tmpl.ExecuteTemplate(w, "formButton", isFound) err = tmpl.ExecuteTemplate(w, "formButton", isFound)
}) }
} }
func joinRoomHandler( templateFs *embed.FS,
sessionSM sessions.SessionManagement,
roomsM rooms.RoomManager,
) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
err := r.ParseForm()
if err != nil {
w.WriteHeader(http.StatusBadRequest)
}
rn := r.PostFormValue("roomName")
rp := r.PostFormValue("roomPassword")
pn := r.PostFormValue("personalName")
pp := r.PostFormValue("personalPassword")
room, _, err := roomsM.Get(rn)
if err != nil {
log.Printf("/login/submit error getting room %s", rn)
// return i guess
} else {
log.Printf("/login/submit found room %+v", room)
}
roomId := "room-name-actually" // would be taken from rooms interface from redis
// would be either taken from room info on correct person pass or created
personId := 111
id, err := sessionSM.Save(roomId, personId)
if err != nil {
log.Printf("/login/submit > error saving session %s", err)
}
fmt.Fprintf(w, "is is %d. room things %s & %s, personal things %s and %s. \n found room %+v", id, rn, rp, pn, pp, room)
// i suppose here i'll need to
// a) check if room password OK
// b) get room data
// c) check if such person exists,
// either create one, or check password
// d) how should i monitor sessions? - space in redis
// so save session to redis and add cookie with sessionId
}
}