package main import ( "errors" "fmt" "net/http" "strings" "github.com/gorilla/mux" ) func handleUserRequest(w http.ResponseWriter, req *http.Request) { page := initPageData(w, req) vars := mux.Vars(req) f, fOk := vars["function"] if fOk && f == "login" { handleUserLogin(page) return } if !page.LoggedIn { page.SubTitle = "ribbit login" page.show("login.html") return } switch f { case "feeds": handleUserFeeds(page) case "updatesubscriptions": handleUpdateUserSubs(page) default: handleUserDashboard(page) } } func handleUserLoginForm(page *pageData) { page.SubTitle = "ribbit login" page.show("login.html") } func handleUserLogin(page *pageData) { var err error var u *User if page.LoggedIn { redirect("/", page.session.w, page.session.req) } email := page.session.req.FormValue("email") if u, err = m.GetUserByEmail(email); err != nil { page.session.setFlashMessage("Invalid Login", "error") redirect("/", page.session.w, page.session.req) return } password := page.session.req.FormValue("password") fmt.Println("Hitting func") if err := doLogin(u.Uuid, password); err != nil { fmt.Println("Login Failure: ", err.Error()) page.session.setFlashMessage("Invalid Login", "error") } else { page.session.setStringValue("id", u.Uuid) } redirect("/", page.session.w, page.session.req) } // doLogin attempts to log in with the given email/password // If it can't, it returns an error func doLogin(uid, password string) error { if strings.TrimSpace(uid) != "" && strings.TrimSpace(password) != "" { return m.checkCredentials(uid, password) } return errors.New("Invalid Credentials") } func handleUserDashboard(page *pageData) { page.SubTitle = "dashboard" page.show("user_dashboard.html") } func handleUserFeeds(page *pageData) { page.SubTitle = "feeds" type feedsPageData struct { User *User FeedSources []FeedSource } fpd := new(feedsPageData) fpd.FeedSources = m.FeedSources id, err := page.session.getStringValue("id") if err != nil { userError(page.session.w) return } fpd.User, err = m.GetUser(id) if err != nil { userError(page.session.w) return } page.TemplateData = fpd page.show("user_feeds.html") } func handleUpdateUserSubs(page *pageData) { subs := page.session.req.FormValue("user_feeds") fmt.Println(subs) subPts := strings.Split(subs, ",") var userSubs []string for i := range subPts { subPts[i] = strings.TrimSpace(subPts[i]) if subPts[i] != "" { userSubs = append(userSubs, subPts[i]) } } id, err := page.session.getStringValue("id") if err != nil { userError(page.session.w) return } var u *User u, err = m.GetUser(id) u.SubSlugs = userSubs m.SaveUser(u) redirect("/user/dashboard", page.session.w, page.session.req) }