This repository has been archived on 2025-05-14. You can view files and clone it, but cannot push or open issues or pull requests.
Files
shop/app/controllers/user_controller.go
Damian Wessels 7c3d3e03bc controller added
Registrierung hinzugefügt
2023-11-12 20:28:09 +01:00

116 lines
3.0 KiB
Go

package controllers
import (
"github.com/google/uuid"
"github.com/unrolled/render"
"moretcgshop/app/models"
"net/http"
)
func (server *Server) Login(w http.ResponseWriter, r *http.Request) {
renderer := render.New(render.Options{
Layout: "layout",
Extensions: []string{".html", ".tmpl"},
})
_ = renderer.HTML(w, http.StatusOK, "login", map[string]interface{}{
"error": GetFlash(w, r, "error"),
})
}
func (server *Server) DoLogin(w http.ResponseWriter, r *http.Request) {
email := r.FormValue("email")
password := r.FormValue("password")
userModel := models.User{}
user, err := userModel.FindByEmail(server.DB, email)
if err != nil {
SetFlash(w, r, "error", "Email oder Password sind nicht korrekt")
http.Redirect(w, r, "/login", http.StatusSeeOther)
return
}
if !ComparePassword(password, user.Password) {
SetFlash(w, r, "error", "Email oder Password sind nicht korrekt")
http.Redirect(w, r, "/login", http.StatusSeeOther)
return
}
session, _ := store.Get(r, sessionUser)
session.Values["id"] = user.ID
session.Save(r, w)
http.Redirect(w, r, "/", http.StatusSeeOther)
}
func (server *Server) Register(w http.ResponseWriter, r *http.Request) {
renderer := render.New(render.Options{
Layout: "layout",
Extensions: []string{".html", ",tmpl"},
})
_ = renderer.HTML(w, http.StatusOK, "register", map[string]interface{}{
"error": GetFlash(w, r, "error"),
})
}
func (server *Server) DoRegister(w http.ResponseWriter, r *http.Request) {
firstName := r.FormValue("first_name")
lastName := r.FormValue("last_name")
email := r.FormValue("email")
password := r.FormValue("password")
password2 := r.FormValue("password_repeat")
if firstName == "" || lastName == "" || email == "" || password == "" || password2 == "" {
SetFlash(w, r, "error", "First name, last name, email and password are required!")
http.Redirect(w, r, "/register", http.StatusSeeOther)
return
}
userModel := models.User{}
existUser, _ := userModel.FindByEmail(server.DB, email)
if existUser != nil {
SetFlash(w, r, "error", "Sorry, diese E-Mail wurde bereits registriert")
http.Redirect(w, r, "/register", http.StatusSeeOther)
return
}
if password != password2 {
SetFlash(w, r, "error", "Passwörter stimmen nicht überein")
http.Redirect(w, r, "/register", http.StatusSeeOther)
return
}
hashedPassword, _ := MakePassword(password)
params := &models.User{
ID: uuid.New().String(),
FirstName: firstName,
LastName: lastName,
Email: email,
Password: hashedPassword,
}
user, err := userModel.CreateUser(server.DB, params)
if err != nil {
SetFlash(w, r, "error", "Sorry Registrierung war nicht erfolgreich")
http.Redirect(w, r, "/register", http.StatusSeeOther)
return
}
session, _ := store.Get(r, sessionUser)
session.Values["id"] = user.ID
session.Save(r, w)
http.Redirect(w, r, "/", http.StatusSeeOther)
}
func (server *Server) Logout(w http.ResponseWriter, r *http.Request) {
session, _ := store.Get(r, sessionUser)
session.Values["id"] = nil
session.Save(r, w)
http.Redirect(w, r, "/", http.StatusSeeOther)
}