package services import ( "fmt" "log" "time" "github.com/gofiber/fiber/v2" "github.com/sujit-baniya/fiber-boilerplate/app" "github.com/sujit-baniya/fiber-boilerplate/utils" ) func SendPasswordResetEmail(email string, baseURL string) { // Generar un identificador único para el correo de restablecimiento resetEmail := fmt.Sprintf("%s-reset-%d", email, time.Now().Unix()) // Generar la URL de restablecimiento resetLink := GeneratePasswordResetURL(resetEmail, baseURL) // Preparar el cuerpo HTML del correo utilizando la plantilla htmlBody := app.Http.Mail.PrepareHtml("emails/password-reset", fiber.Map{ "reset_link": resetLink, }) // Canal para recibir errores de la goroutine errChan := make(chan error) // Ejecutar la goroutine para enviar el correo de manera asíncrona go func() { err := app.Http.Mail.Send(email, "Solicitud de restablecimiento de contraseña - U-site", htmlBody, "") errChan <- err // Enviar el error (o nil si no hay error) al canal }() // Esperar el resultado de la goroutine err := <-errChan if err != nil { log.Printf("Error enviando el correo de restablecimiento: %s", err) } else { log.Println("Correo de restablecimiento enviado con éxito") } } func SendConfirmationEmail(email string, baseURL string, nombreUsuario string) { // Generar el enlace de confirmación confirmLink := GenerateConfirmURL(nombreUsuario, baseURL) // Preparar el cuerpo HTML del correo utilizando la plantilla htmlBody := app.Http.Mail.PrepareHtml("emails/confirm", fiber.Map{ "confirm_link": confirmLink, }) // Canal para recibir errores de la goroutine errChan := make(chan error) // Ejecutar la goroutine para enviar el correo de manera asíncrona go func() { err := app.Http.Mail.Send(email, "✅ ¡Confirma tu registro en la Oficina Virtual de U-site!", htmlBody, "") errChan <- err // Enviar el error (o nil si no hay error) al canal }() // Esperar el resultado de la goroutine err := <-errChan if err != nil { // Manejar el error si ocurrió log.Printf("Error enviando el correo de confirmación: %s", err) } else { // Imprimir en consola si el correo se envió con éxito log.Println("Correo electrónico de confirmación enviado a:", email) } } func GenerateConfirmURL(nombreUsuario string, baseURL string) string { token := utils.Encrypt(nombreUsuario, app.Http.Server.Key) uri := fmt.Sprintf("%s/do/verify-email?t=%s", baseURL, token) return uri } func GeneratePasswordResetURL(email string, baseURL string) string { token := utils.Encrypt(email, app.Http.Server.Key) uri := fmt.Sprintf("%s/reset-password?t=%s", baseURL, token) return uri }