package handlers import ( "net/http" "github.com/go-chi/chi" ) // HandleProfile returns a handler for the user profile page func (h *Handlers) HandleProfile() http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { // Get username from URL requestedUsername := chi.URLParam(r, "username") if requestedUsername == "" { http.NotFound(w, r) return } // Get session sess, err := h.session.Get(r) if err != nil || !h.session.IsAuthenticated(sess) { // Redirect to login if not authenticated http.Redirect(w, r, "/pages/login", http.StatusSeeOther) return } // Get user info from session sessionUsername, ok := h.session.GetUsername(sess) if !ok { h.log.Error("authenticated session missing username") http.Error(w, "Internal server error", http.StatusInternalServerError) return } sessionUserID, ok := h.session.GetUserID(sess) if !ok { h.log.Error("authenticated session missing user ID") http.Error(w, "Internal server error", http.StatusInternalServerError) return } // For now, only allow users to view their own profile if requestedUsername != sessionUsername { http.Error(w, "Forbidden", http.StatusForbidden) return } // Prepare data for template data := map[string]interface{}{ "User": &UserInfo{ ID: sessionUserID, Username: sessionUsername, }, } // Render the profile page h.renderTemplate(w, r, "profile.html", data) } }