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", w) return } page.SubTitle = "dashboard" page.show("user_dashboard.html", w) } func handleUserLoginForm(page *pageData) { page.SubTitle = "ribbit login" page.show("login.html", page.session.w) } 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 { fmt.Println("Doing Login", uid, password) if strings.TrimSpace(uid) != "" && strings.TrimSpace(password) != "" { return m.checkCredentials(uid, password) } return errors.New("Invalid Credentials") }