prompt 6
This commit is contained in:
196
internal/controllers/auth_controller.go
Normal file
196
internal/controllers/auth_controller.go
Normal file
@@ -0,0 +1,196 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"strings"
|
||||
|
||||
httpmw "trustcontact/internal/http/middleware"
|
||||
"trustcontact/internal/services"
|
||||
|
||||
"github.com/gofiber/fiber/v2"
|
||||
)
|
||||
|
||||
type AuthController struct {
|
||||
authService *services.AuthService
|
||||
}
|
||||
|
||||
func NewAuthController(authService *services.AuthService) *AuthController {
|
||||
return &AuthController{authService: authService}
|
||||
}
|
||||
|
||||
func (ac *AuthController) ShowHome(c *fiber.Ctx) error {
|
||||
return renderPublic(c, "home.html", map[string]any{
|
||||
"Title": "Home",
|
||||
"NavSection": "public",
|
||||
})
|
||||
}
|
||||
|
||||
func (ac *AuthController) ShowSignup(c *fiber.Ctx) error {
|
||||
return renderPublic(c, "signup.html", map[string]any{
|
||||
"Title": "Sign up",
|
||||
"NavSection": "public",
|
||||
})
|
||||
}
|
||||
|
||||
func (ac *AuthController) Signup(c *fiber.Ctx) error {
|
||||
email := strings.TrimSpace(c.FormValue("email"))
|
||||
password := c.FormValue("password")
|
||||
|
||||
if err := ac.authService.Signup(c.UserContext(), email, password); err != nil {
|
||||
if errors.Is(err, services.ErrEmailAlreadyExists) {
|
||||
httpmw.SetTemplateData(c, "FlashError", "Email gia registrata")
|
||||
} else {
|
||||
httpmw.SetTemplateData(c, "FlashError", "Impossibile completare la registrazione")
|
||||
}
|
||||
return renderPublic(c, "signup.html", map[string]any{
|
||||
"Title": "Sign up",
|
||||
"NavSection": "public",
|
||||
"Email": email,
|
||||
})
|
||||
}
|
||||
|
||||
if err := httpmw.SetFlashSuccess(c, "Registrazione completata. Controlla la tua email per verificare l'account."); err != nil {
|
||||
return err
|
||||
}
|
||||
return c.Redirect("/verify-notice")
|
||||
}
|
||||
|
||||
func (ac *AuthController) ShowLogin(c *fiber.Ctx) error {
|
||||
return renderPublic(c, "login.html", map[string]any{
|
||||
"Title": "Login",
|
||||
"NavSection": "public",
|
||||
})
|
||||
}
|
||||
|
||||
func (ac *AuthController) Login(c *fiber.Ctx) error {
|
||||
email := strings.TrimSpace(c.FormValue("email"))
|
||||
password := c.FormValue("password")
|
||||
|
||||
user, err := ac.authService.Login(email, password)
|
||||
if err != nil {
|
||||
switch {
|
||||
case errors.Is(err, services.ErrEmailNotVerified):
|
||||
httpmw.SetTemplateData(c, "FlashError", "Email non verificata. Controlla la posta.")
|
||||
case errors.Is(err, services.ErrInvalidCredentials):
|
||||
httpmw.SetTemplateData(c, "FlashError", "Credenziali non valide")
|
||||
default:
|
||||
httpmw.SetTemplateData(c, "FlashError", "Errore durante il login")
|
||||
}
|
||||
|
||||
return renderPublic(c, "login.html", map[string]any{
|
||||
"Title": "Login",
|
||||
"NavSection": "public",
|
||||
"Email": email,
|
||||
})
|
||||
}
|
||||
|
||||
if err := httpmw.SetSessionUserID(c, user.ID); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := httpmw.SetFlashSuccess(c, "Login effettuato"); err != nil {
|
||||
return err
|
||||
}
|
||||
return c.Redirect("/private")
|
||||
}
|
||||
|
||||
func (ac *AuthController) Logout(c *fiber.Ctx) error {
|
||||
if err := httpmw.ClearSessionUser(c); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := httpmw.SetFlashSuccess(c, "Logout effettuato"); err != nil {
|
||||
return err
|
||||
}
|
||||
return c.Redirect("/login")
|
||||
}
|
||||
|
||||
func (ac *AuthController) VerifyEmail(c *fiber.Ctx) error {
|
||||
token := strings.TrimSpace(c.Query("token"))
|
||||
if token == "" {
|
||||
httpmw.SetTemplateData(c, "FlashError", "Token non valido")
|
||||
return renderPublic(c, "verify_notice.html", map[string]any{
|
||||
"Title": "Verifica email",
|
||||
"NavSection": "public",
|
||||
})
|
||||
}
|
||||
|
||||
if err := ac.authService.VerifyEmail(token); err != nil {
|
||||
httpmw.SetTemplateData(c, "FlashError", "Token non valido o scaduto")
|
||||
return renderPublic(c, "verify_notice.html", map[string]any{
|
||||
"Title": "Verifica email",
|
||||
"NavSection": "public",
|
||||
})
|
||||
}
|
||||
|
||||
if err := httpmw.SetFlashSuccess(c, "Email verificata. Ora puoi accedere."); err != nil {
|
||||
return err
|
||||
}
|
||||
return c.Redirect("/login")
|
||||
}
|
||||
|
||||
func (ac *AuthController) ShowVerifyNotice(c *fiber.Ctx) error {
|
||||
return renderPublic(c, "verify_notice.html", map[string]any{
|
||||
"Title": "Verifica email",
|
||||
"NavSection": "public",
|
||||
})
|
||||
}
|
||||
|
||||
func (ac *AuthController) ShowForgotPassword(c *fiber.Ctx) error {
|
||||
return renderPublic(c, "forgot_password.html", map[string]any{
|
||||
"Title": "Forgot password",
|
||||
"NavSection": "public",
|
||||
})
|
||||
}
|
||||
|
||||
func (ac *AuthController) ForgotPassword(c *fiber.Ctx) error {
|
||||
email := strings.TrimSpace(c.FormValue("email"))
|
||||
if err := ac.authService.ForgotPassword(c.UserContext(), email); err != nil {
|
||||
httpmw.SetTemplateData(c, "FlashError", "Impossibile elaborare la richiesta")
|
||||
return renderPublic(c, "forgot_password.html", map[string]any{
|
||||
"Title": "Forgot password",
|
||||
"NavSection": "public",
|
||||
"Email": email,
|
||||
})
|
||||
}
|
||||
|
||||
httpmw.SetTemplateData(c, "FlashSuccess", "Se l'account esiste, riceverai una email con le istruzioni.")
|
||||
return renderPublic(c, "forgot_password.html", map[string]any{
|
||||
"Title": "Forgot password",
|
||||
"NavSection": "public",
|
||||
})
|
||||
}
|
||||
|
||||
func (ac *AuthController) ShowResetPassword(c *fiber.Ctx) error {
|
||||
token := strings.TrimSpace(c.Query("token"))
|
||||
return renderPublic(c, "reset_password.html", map[string]any{
|
||||
"Title": "Reset password",
|
||||
"NavSection": "public",
|
||||
"Token": token,
|
||||
})
|
||||
}
|
||||
|
||||
func (ac *AuthController) ResetPassword(c *fiber.Ctx) error {
|
||||
token := strings.TrimSpace(c.Query("token"))
|
||||
password := c.FormValue("password")
|
||||
|
||||
if token == "" {
|
||||
httpmw.SetTemplateData(c, "FlashError", "Token non valido")
|
||||
return renderPublic(c, "reset_password.html", map[string]any{
|
||||
"Title": "Reset password",
|
||||
"NavSection": "public",
|
||||
})
|
||||
}
|
||||
|
||||
if err := ac.authService.ResetPassword(token, password); err != nil {
|
||||
httpmw.SetTemplateData(c, "FlashError", "Token non valido o scaduto")
|
||||
return renderPublic(c, "reset_password.html", map[string]any{
|
||||
"Title": "Reset password",
|
||||
"NavSection": "public",
|
||||
"Token": token,
|
||||
})
|
||||
}
|
||||
|
||||
if err := httpmw.SetFlashSuccess(c, "Password aggiornata. Effettua il login."); err != nil {
|
||||
return err
|
||||
}
|
||||
return c.Redirect("/login")
|
||||
}
|
||||
Reference in New Issue
Block a user