63 lines
1.9 KiB
Go
63 lines
1.9 KiB
Go
package handler
|
|
|
|
import (
|
|
"cloudnest/internal/application/captcha"
|
|
"cloudnest/internal/application/email"
|
|
"cloudnest/internal/pkg/response"
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
// EmailHandler handles HTTP requests for email verification code operations.
|
|
// EmailHandler 处理邮箱验证码操作的 HTTP 请求。
|
|
type EmailHandler struct {
|
|
emailService *email.EmailService
|
|
captchaService *captcha.CaptchaService
|
|
}
|
|
|
|
// NewEmailHandler creates a new EmailHandler.
|
|
// NewEmailHandler 创建一个新的 EmailHandler。
|
|
func NewEmailHandler(emailService *email.EmailService, captchaService *captcha.CaptchaService) *EmailHandler {
|
|
return &EmailHandler{
|
|
emailService: emailService,
|
|
captchaService: captchaService,
|
|
}
|
|
}
|
|
|
|
// SendEmailCodeRequest represents the request body for sending email verification code.
|
|
// SendEmailCodeRequest 表示发送邮箱验证码的请求体。
|
|
type SendEmailCodeRequest struct {
|
|
Email string `json:"email" binding:"required,email"`
|
|
CaptchaID string `json:"captcha_id" binding:"required"`
|
|
CaptchaAnswer string `json:"captcha_answer" binding:"required"`
|
|
}
|
|
|
|
// SendEmailCode handles POST /api/v1/auth/email-code.
|
|
// SendEmailCode 处理 POST /api/v1/auth/email-code。
|
|
//
|
|
// It first verifies the captcha, then sends the email verification code.
|
|
// 先验证图形验证码,通过后才发送邮箱验证码。
|
|
func (h *EmailHandler) SendEmailCode(c *gin.Context) {
|
|
var req SendEmailCodeRequest
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|
response.BadRequest(c, "参数错误")
|
|
return
|
|
}
|
|
|
|
if !h.captchaService.Verify(req.CaptchaID, req.CaptchaAnswer) {
|
|
response.Error(c, 400, "图形验证码错误")
|
|
return
|
|
}
|
|
|
|
_, err := h.emailService.SendVerifyCode(req.Email)
|
|
if err != nil {
|
|
if err.Error() == "邮件服务未配置" {
|
|
response.Error(c, 503, "邮件服务未配置")
|
|
return
|
|
}
|
|
response.InternalError(c, "邮件发送失败")
|
|
return
|
|
}
|
|
|
|
response.SuccessMsg(c, "验证码已发送")
|
|
}
|