// SetClusters sets clusters data in context based on logged in user ID. func SetClusters(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { cookieStore := context.Get(r, "cookieStore").(*sessions.CookieStore) session, _ := cookieStore.Get(r, "resourcedmaster-session") userRowInterface := session.Values["user"] if userRowInterface == nil { http.Redirect(w, r, "/login", 301) return } userRow := userRowInterface.(*dal.UserRow) db := context.Get(r, "db").(*sqlx.DB) clusterRows, err := dal.NewCluster(db).AllClustersByUserID(nil, userRow.ID) if err != nil { libhttp.HandleErrorJson(w, err) return } context.Set(r, "clusters", clusterRows) // Set currentCluster if not previously set. if len(clusterRows) > 0 { currentClusterInterface := session.Values["currentCluster"] if currentClusterInterface == nil { session.Values["currentCluster"] = clusterRows[0] err := session.Save(r, w) if err != nil { libhttp.HandleErrorJson(w, err) return } } } // Set currentClusterJson currentClusterInterface := session.Values["currentCluster"] if currentClusterInterface != nil { currentClusterRow := currentClusterInterface.(*dal.ClusterRow) currentClusterJson, err := json.Marshal(currentClusterRow) if err != nil { libhttp.HandleErrorJson(w, err) return } context.Set(r, "currentClusterJson", currentClusterJson) } else { context.Set(r, "currentClusterJson", []byte("{}")) } next.ServeHTTP(w, r) }) }
func PostClusters(w http.ResponseWriter, r *http.Request) { db := context.Get(r, "db").(*sqlx.DB) cookieStore := context.Get(r, "cookieStore").(*sessions.CookieStore) session, _ := cookieStore.Get(r, "resourcedmaster-session") currentUser := session.Values["user"].(*dal.UserRow) _, err := dal.NewCluster(db).Create(nil, currentUser.ID, r.FormValue("Name")) if err != nil { libhttp.HandleErrorHTML(w, err, 500) return } http.Redirect(w, r, "/clusters", 301) }