package routing import ( "log" "net/http" lishwist "lishwist/core" "lishwist/http/api" "lishwist/http/response" "github.com/Teajey/rsvp" ) func Login(s *response.Session, h http.Header, r *http.Request) rsvp.Response { props := api.NewLoginProps("", "") flash := s.FlashGet() flashProps, ok := flash.(*api.LoginProps) if ok { props.Username.Value = flashProps.Username.Value props.GeneralError = flashProps.GeneralError props.Username.Error = flashProps.Username.Error props.Password.Error = flashProps.Password.Error } flash = s.FlashGet() successfulReg, _ := flash.(bool) if successfulReg { props.SuccessfulRegistration = true } return rsvp.Response{TemplateName: "login.gotmpl", Body: props} } func LoginPost(session *response.Session, h http.Header, r *http.Request) rsvp.Response { err := r.ParseForm() if err != nil { return response.Error(http.StatusBadRequest, "Failed to parse form") } username := r.Form.Get("username") password := r.Form.Get("password") props := api.NewLoginProps(username, password) valid := props.Validate() props.Password.Value = "" if !valid { session.FlashSet(&props) log.Printf("Invalid props: %#v\n", props) return rsvp.SeeOther("/") } app, err := lishwist.Login(username, password) if err != nil { switch err.(type) { case lishwist.ErrorInvalidCredentials: props.GeneralError = "Username or password invalid" session.FlashSet(&props) log.Printf("Invalid credentials: %s: %#v\n", err, props) return rsvp.SeeOther("/") default: props.GeneralError = "Something went wrong." session.FlashSet(&props) log.Printf("Login error: %s\n", err) return rsvp.SeeOther("/") } } session.SetID("") session.SetValue("authorized", true) session.SetValue("username", app.User.Name) return rsvp.SeeOther(r.URL.Path) }