package routing import ( lishwist "lishwist/core" "lishwist/http/api" "lishwist/http/rsvp" "net/http" ) func Login(h http.Header, r *rsvp.Request) rsvp.Response { session := r.GetSession() props := api.NewLoginProps("", "") flash := session.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 = session.FlashGet() successfulReg, _ := flash.(bool) if successfulReg { props.SuccessfulRegistration = true } return rsvp.Data("login.gotmpl", props).SaveSession(session) } func LoginPost(h http.Header, r *rsvp.Request) rsvp.Response { form := r.ParseForm() session := r.GetSession() username := form.Get("username") password := form.Get("password") props := api.NewLoginProps(username, password) valid := props.Validate() props.Password.Value = "" if !valid { session.FlashSet(&props) return rsvp.SeeOther("/").SaveSession(session).Log("Invalid props: %#v\n", props) } app, err := lishwist.Login(username, password) if err != nil { switch err.(type) { case lishwist.ErrorInvalidCredentials: props.GeneralError = "Username or password invalid" session.FlashSet(&props) return rsvp.SeeOther("/").SaveSession(session).Log("Invalid credentials: %#v\n", props) default: props.GeneralError = "Something went wrong." session.FlashSet(&props) return rsvp.SeeOther("/").SaveSession(session).Log("Login error: %s\n", err) } } session.SetID("") session.SetValue("authorized", true) session.SetValue("username", app.User.Name) return rsvp.SeeOther(r.URL().Path).SaveSession(session) }