// Handles the users loggin and gives them a cookie for doing so func loginHandler(w http.ResponseWriter, r *http.Request) { usr := new(user.User) usr.Email = r.FormValue("email") pass := r.FormValue("pwd") userProfile := user.FindUser(usr.Email) if len(pass) > 0 { usr.Password = codify.SHA(pass) ok := user.CheckCredentials(usr.Email, usr.Password) if ok { usr = userProfile user.CreateUserFile(usr.Email) // TODO: Createuserfile? cookie := cookies.LoginCookie(usr.Email) http.SetCookie(w, &cookie) usr.SessionID = cookie.Value _ = user.UpdateUser(usr) http.Redirect(w, r, "/login-succeeded", http.StatusFound) } else { http.Redirect(w, r, "/login-failed", http.StatusFound) } } else { viewHandler(w, r) } }
// Logs out the user, removes their cookie from the database // TODO: clean up this function func logoutHandler(w http.ResponseWriter, r *http.Request) { cookie, err := r.Cookie("SessionID") if err != nil { fmt.Println(err) return } result := new(user.User) sessionID := cookie.Value session, err := mgo.Dial("127.0.0.1:27017/") if err != nil { return } c := session.DB("test").C("users") c.Find(bson.M{"sessionid": sessionID}).One(&result) result.SessionID = result.Email + ":" + codify.SHA(result.SessionID+strconv.Itoa(rand.Intn(100000000))) err = c.Update(bson.M{"email": result.Email}, result) if err != nil { fmt.Println(err) } http.Redirect(w, r, "/home", http.StatusFound) }
// Registers the new user func registerHandler(w http.ResponseWriter, r *http.Request) { usr := new(user.User) usr.Email = r.FormValue("email") pass := r.FormValue("pwd") if len(pass) > 0 { usr.Password = codify.SHA(pass) if user.DoesAccountExist(usr.Email) { http.Redirect(w, r, "/account-exists", http.StatusFound) } else { ok := user.CreateAccount(usr) if ok { http.Redirect(w, r, "/success", http.StatusFound) } else { http.Redirect(w, r, "/failed", http.StatusFound) } } } else { viewHandler(w, r) } }