From 850b6c693b24b482c4497805313ce2902d6d33a7 Mon Sep 17 00:00:00 2001 From: efim Date: Mon, 30 Oct 2023 05:19:43 +0000 Subject: [PATCH] feat: create room endpoint not really sets the cookie, but returns the rendered index on success --- rooms/rooms_manager.go | 2 +- routes/login_page.go | 50 +++++++++++++++++++++++++++++++++++++----- 2 files changed, 46 insertions(+), 6 deletions(-) diff --git a/rooms/rooms_manager.go b/rooms/rooms_manager.go index 49228df..fb428a1 100644 --- a/rooms/rooms_manager.go +++ b/rooms/rooms_manager.go @@ -68,6 +68,6 @@ func (redisRM RedisRM) Get(roomName string) (Room, bool, error) { } func (redisRM RedisRM) Save(room Room) error { - err := redisRM.Rdb.Set(ctx, roomNameToRedisId(room.Name), room, 0).Err() // maybe even set expiration? + err := redisRM.Rdb.Set(ctx, roomNameToRedisId(room.Name), &room, 0).Err() // maybe even set expiration? return err } diff --git a/routes/login_page.go b/routes/login_page.go index dc67c33..c6ff7f1 100644 --- a/routes/login_page.go +++ b/routes/login_page.go @@ -14,7 +14,7 @@ import ( func registerLoginRoutes( templateFs *embed.FS, sessionSM sessions.SessionManagement, - rooms rooms.RoomManager, + roomsM rooms.RoomManager, ) { // login page http.HandleFunc("/login", func(w http.ResponseWriter, r *http.Request) { @@ -38,7 +38,7 @@ func registerLoginRoutes( pn := r.PostFormValue("personalName") pp := r.PostFormValue("personalPassword") - room, _, err := rooms.Get(rn) + room, _, err := roomsM.Get(rn) if err != nil { log.Printf("/login/submit error getting room %s", rn) // return i guess @@ -60,16 +60,56 @@ func registerLoginRoutes( // b) get room data // c) check if such person exists, // either create one, or check password - // d) how should i monitor sessions? + // 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() if err != nil { + // TODO return error notice somehow w.WriteHeader(http.StatusBadRequest) } - fmt.Fprintf(w, "got submitted form %+v", r.PostForm) + roomName := r.PostFormValue("roomName") + _, exists, _ := roomsM.Get(roomName) + if exists { + // TODO return anouther error notice + log.Printf("error, room name occupied", roomName) + return + } + newRoom := rooms.Room{ + Name: roomName, + PasswordHash: r.PostFormValue("roomPassword"), // TODO hash the password, not to store + AdminIds: []int64{1}, + Paricipants: []rooms.Person{ + { + PersonId: 1, + Name: r.PostFormValue("personalName"), + PasswordHash: r.PostFormValue("personalPassword"), + }, + }, + } + err = roomsM.Save(newRoom) + http.SetCookie(w, &http.Cookie{ + Name: "auth", + Value: "session-id", + Secure: true, + HttpOnly: true, + Path: "/", + }) + if err != nil { + log.Printf("what am i to do? error saving room %s", err) + // todo return error notice somehow + } + var templFile = "templates/index.gohtml" + tmpl := template.Must(template.ParseFS(templateFs, templFile)) + w.Header().Add("HX-Retarget", "body") + w.Header().Add("HX-Push-Url", "/") + err = tmpl.Execute(w, nil) + if err != nil { + log.Printf("my error in executing template, huh\n %s", err) + } }) // checking whether the room name already exists @@ -80,7 +120,7 @@ func registerLoginRoutes( w.WriteHeader(http.StatusBadRequest) } roomName := r.PostFormValue("roomName") - _, isFound, err := rooms.Get(roomName) + _, isFound, err := roomsM.Get(roomName) if err != nil { log.Printf("/login/room-name-check error finding room %s\n", err) }