81 lines
1.8 KiB
Go
81 lines
1.8 KiB
Go
|
package handlers
|
||
|
|
||
|
import (
|
||
|
"net/http"
|
||
|
|
||
|
"git.klink.asia/paul/certman/services"
|
||
|
|
||
|
"git.klink.asia/paul/certman/models"
|
||
|
)
|
||
|
|
||
|
func RegisterHandler(w http.ResponseWriter, req *http.Request) {
|
||
|
// Get parameters
|
||
|
email := req.Form.Get("email")
|
||
|
password := req.Form.Get("password")
|
||
|
|
||
|
user := models.User{}
|
||
|
user.Email = email
|
||
|
user.SetPassword(password)
|
||
|
|
||
|
err := services.Database.Create(&user).Error
|
||
|
if err != nil {
|
||
|
panic(err.Error)
|
||
|
}
|
||
|
|
||
|
services.SessionStore.Flash(w, req,
|
||
|
services.Flash{
|
||
|
Type: "success",
|
||
|
Message: "The user was created. Check your inbox for the confirmation email.",
|
||
|
},
|
||
|
)
|
||
|
|
||
|
http.Redirect(w, req, "/login", http.StatusFound)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
func LoginHandler(w http.ResponseWriter, req *http.Request) {
|
||
|
// Get parameters
|
||
|
email := req.Form.Get("email")
|
||
|
password := req.Form.Get("password")
|
||
|
|
||
|
user := models.User{}
|
||
|
|
||
|
err := services.Database.Where(&models.User{Email: email}).Find(&user).Error
|
||
|
if err != nil {
|
||
|
// could not find user
|
||
|
services.SessionStore.Flash(
|
||
|
w, req, services.Flash{
|
||
|
Type: "warning", Message: "Invalid Email or Password.",
|
||
|
},
|
||
|
)
|
||
|
http.Redirect(w, req, "/login", http.StatusFound)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
if !user.EmailValid {
|
||
|
services.SessionStore.Flash(
|
||
|
w, req, services.Flash{
|
||
|
Type: "warning", Message: "You need to confirm your email before logging in.",
|
||
|
},
|
||
|
)
|
||
|
http.Redirect(w, req, "/login", http.StatusFound)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
if err := user.CheckPassword(password); err != nil {
|
||
|
// wrong password
|
||
|
services.SessionStore.Flash(
|
||
|
w, req, services.Flash{
|
||
|
Type: "warning", Message: "Invalid Email or Password.",
|
||
|
},
|
||
|
)
|
||
|
http.Redirect(w, req, "/login", http.StatusFound)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
// user is logged in, set cookie
|
||
|
services.SessionStore.SetUserEmail(w, req, email)
|
||
|
|
||
|
http.Redirect(w, req, "/certs", http.StatusSeeOther)
|
||
|
}
|