mirror of
https://github.com/Rain-kl/OpenFlare.git
synced 2026-09-29 22:06:38 +08:00
2f60329886
代码质量全量清理,零行为变化:golangci 扩展集 13 类 linter(gosec/modernize/perfsprint/canonicalheader/usestdlibvars/wastedassign/intrange/errorlint/forcetypeassert/recvcheck/exhaustive/unparam)全量修复,测试代码质量(testifylint/thelper/usetesting)25→0,frpc 进程生命周期真 bug(进程组击杀)、全仓 go test -race 6 类数据竞争(含 1 个生产竞争)、SPDX license 头补齐 131 文件、前端测试套件 next-intl 迁移后 44 失败→全绿、过期 swagger 文档重新生成、pnpm-workspace 构建审批。 Experiments: #2-#17, #18, #20, #21, #23 Metric: total_issues 108 → 8 (-92.6%)
72 lines
1.8 KiB
Go
72 lines
1.8 KiB
Go
// Copyright 2026 Arctel.net
|
||
// SPDX-License-Identifier: Apache-2.0
|
||
|
||
package openresty
|
||
|
||
import (
|
||
"errors"
|
||
"fmt"
|
||
"sort"
|
||
"strconv"
|
||
"strings"
|
||
)
|
||
|
||
const (
|
||
// StatusCodeMin is the lowest HTTP status code accepted for origin error pages.
|
||
StatusCodeMin = 400
|
||
// StatusCodeMax is the highest HTTP status code accepted for origin error pages.
|
||
StatusCodeMax = 599
|
||
)
|
||
|
||
// ParseStatusCodeTag parses a single tag such as "502" or "500-599".
|
||
// Bounds must fall within StatusCodeMin–StatusCodeMax inclusive.
|
||
func ParseStatusCodeTag(tag string) (lo, hi int, err error) {
|
||
tag = strings.TrimSpace(tag)
|
||
if tag == "" {
|
||
return 0, 0, errors.New("状态码标签不能为空")
|
||
}
|
||
if before, after, ok := strings.Cut(tag, "-"); ok {
|
||
lo, err = strconv.Atoi(before)
|
||
if err != nil {
|
||
return 0, 0, fmt.Errorf("无效状态码区间: %s", tag)
|
||
}
|
||
hi, err = strconv.Atoi(after)
|
||
if err != nil {
|
||
return 0, 0, fmt.Errorf("无效状态码区间: %s", tag)
|
||
}
|
||
} else {
|
||
lo, err = strconv.Atoi(tag)
|
||
if err != nil {
|
||
return 0, 0, fmt.Errorf("无效状态码: %s", tag)
|
||
}
|
||
hi = lo
|
||
}
|
||
if lo > hi {
|
||
return 0, 0, fmt.Errorf("状态码区间左右端点反序: %s", tag)
|
||
}
|
||
if lo < StatusCodeMin || hi > StatusCodeMax {
|
||
return 0, 0, fmt.Errorf("状态码须在 %d–%d: %s", StatusCodeMin, StatusCodeMax, tag)
|
||
}
|
||
return lo, hi, nil
|
||
}
|
||
|
||
// ExpandStatusCodeTags expands status code tags into a sorted unique list of integers.
|
||
func ExpandStatusCodeTags(tags []string) ([]int, error) {
|
||
set := map[int]struct{}{}
|
||
for _, tag := range tags {
|
||
lo, hi, err := ParseStatusCodeTag(tag)
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
for c := lo; c <= hi; c++ {
|
||
set[c] = struct{}{}
|
||
}
|
||
}
|
||
out := make([]int, 0, len(set))
|
||
for c := range set {
|
||
out = append(out, c)
|
||
}
|
||
sort.Ints(out)
|
||
return out, nil
|
||
}
|