Scert/backend/internal/httpapi/password_reset_guidance.go
xuans 6f702cdc36 完成公网密码重置安全阻断
关闭公开密码重置流程,统一显示运维协助提示,保留本机受保护重置方向,并更新前端回归测试与整改清单。
2026-10-04 13:01:52 +08:00

45 lines
1.3 KiB
Go

package httpapi
import (
"net/http"
"github.com/gin-gonic/gin"
"git.pcux.cn/xuans/Scert/backend/internal/auth"
)
type publicPasswordResetGuidance struct {
Title string `json:"title"`
Description string `json:"description"`
Action string `json:"action"`
}
// showPasswordResetGuidance 仅验证输入格式,不查询账户,也不创建重置会话。
// 公开路由必须使用此处理器,不能绑定历史的账户分类处理器。
func (s *Server) showPasswordResetGuidance(c *gin.Context) {
c.Header("Cache-Control", "no-store")
var request passwordResetResolveRequest
if err := bindJSON(c, &request, passwordResetResolveBodyLimit); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": "账户信息格式无效"})
return
}
if _, err := auth.NormalizeIdentifier(request.Identifier); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": "请输入有效的用户名或绑定邮箱"})
return
}
s.configMu.RLock()
ready := s.config.SetupReady
s.configMu.RUnlock()
if !ready {
c.JSON(http.StatusConflict, gin.H{"error": "Scert 尚未完成初始化,暂不能处理密码重置"})
return
}
c.JSON(http.StatusOK, publicPasswordResetGuidance{
Title: "密码重置",
Description: "当前方式无法使用,请联系运维人员辅助解决。",
Action: "contact_administrator",
})
}