70 lines
1.7 KiB
Go
70 lines
1.7 KiB
Go
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: %s: %#v\n", err, 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)
|
|
}
|