fix: 校验端默认延迟不超过调度上限

This commit is contained in:
Nixevol
2026-09-30 16:22:48 +08:00
parent 43f847483b
commit b3787a0471
4 changed files with 93 additions and 7 deletions
+22 -6
View File
@@ -233,7 +233,7 @@ func (h *Handler) handleEndpointCreate(w http.ResponseWriter, r *http.Request) {
if req.DefaultDelaySeconds != nil {
delaySec = *req.DefaultDelaySeconds
}
if errMsg := validateEndpointFields(req.ID, req.Name, req.Remark, req.LoginPassword, req.TalkPassword, delaySec); errMsg != "" {
if errMsg := validateEndpointFields(req.ID, req.Name, req.Remark, req.LoginPassword, req.TalkPassword, delaySec, h.maxScheduleSeconds()); errMsg != "" {
h.audit(actorString(p), "endpoint_create", req.ID, "bad_request", ip)
httpx.WriteError(w, http.StatusBadRequest, "bad_request", errMsg)
return
@@ -341,10 +341,12 @@ func (h *Handler) handleEndpointPatch(w http.ResponseWriter, r *http.Request) {
httpx.WriteError(w, http.StatusBadRequest, "bad_request", "备注过长")
return
}
if req.DefaultDelaySeconds != nil && *req.DefaultDelaySeconds < 0 {
h.audit(actorString(p), "endpoint_patch", id, "bad_request", ip)
httpx.WriteError(w, http.StatusBadRequest, "bad_request", "默认延迟无效")
return
if req.DefaultDelaySeconds != nil {
if msg := validateDelaySeconds(*req.DefaultDelaySeconds, h.maxScheduleSeconds()); msg != "" {
h.audit(actorString(p), "endpoint_patch", id, "bad_request", ip)
httpx.WriteError(w, http.StatusBadRequest, "bad_request", msg)
return
}
}
hasMeta := req.Name != nil || req.Remark != nil || req.DefaultDelaySeconds != nil
@@ -614,7 +616,7 @@ func (h *Handler) handleEndpointUnlock(w http.ResponseWriter, r *http.Request) {
httpx.WriteOK(w, map[string]any{})
}
func validateEndpointFields(id, name, remark, loginPW, talkPW string, delaySec int64) string {
func validateEndpointFields(id, name, remark, loginPW, talkPW string, delaySec, maxDelaySec int64) string {
if id != "" && !protocol.ValidEndpointID(id) {
return "编号不合法"
}
@@ -633,12 +635,26 @@ func validateEndpointFields(id, name, remark, loginPW, talkPW string, delaySec i
if !protocol.ValidTalkPassword(talkPW) {
return "对话密码不合法"
}
if msg := validateDelaySeconds(delaySec, maxDelaySec); msg != "" {
return msg
}
return ""
}
func validateDelaySeconds(delaySec, maxDelaySec int64) string {
if delaySec < 0 {
return "默认延迟无效"
}
if maxDelaySec > 0 && delaySec > maxDelaySec {
return "默认延迟无效"
}
return ""
}
func (h *Handler) maxScheduleSeconds() int64 {
return int64(h.cfg.Limits.MaxScheduleSeconds)
}
func writeCSVValidationError(w http.ResponseWriter, errs []csvLineError) {
httpx.WriteJSON(w, http.StatusBadRequest, httpx.Envelope{
OK: false,