Skip to content

Commit

Permalink
refactor(server/config): 删除 traceStyle
Browse files Browse the repository at this point in the history
  • Loading branch information
caixw committed May 27, 2024
1 parent 601dba8 commit 9ddaaf2
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 53 deletions.
12 changes: 9 additions & 3 deletions server/config/CONFIG.html
Original file line number Diff line number Diff line change
Expand Up @@ -174,8 +174,14 @@ <h2 id="httpConfig">httpConfig</h2>
<p>NOTE: 报头内容可能会被后续的中间件修改。
</td></tr><tr><td>cors,omitempty</td><td>cors,omitempty</td><td>cors,omitempty</td><td><a href="#corsConfig">corsConfig</a></td><td><p>自定义<a href="https://developer.mozilla.org/zh-CN/docs/Web/HTTP/cors">跨域请求</a>设置项
<p>NOTE: 这些设置对所有路径均有效,但会被 [web.Routers.New] 的参数修改。
</td></tr><tr><td>trace,omitempty</td><td>trace,omitempty</td><td>trace,omitempty</td><td>bool</td><td><p>Trace 是否启用 TRACE 请求
<p>默认为 false。
</td></tr><tr><td>trace,omitempty</td><td>trace,omitempty</td><td>trace,omitempty</td><td>string</td><td><p>Trace 是否启用 TRACE 请求
<p>可以有以下几种值:
<ul>
<li>disable 禁用 TRACE 请求;
<li>body 启用 TRACE,且在返回内容中包含了请求端的 body 内容;
<li>nobody 启用 TRACE,但是在返回内容中不包含请求端的 body 内容;
</ul>
<p>默认为 disable。
<p>NOTE: 这些设置对所有路径均有效,但会被 [web.Routers.New] 的参数修改。
</td></tr>
</tbody>
Expand Down Expand Up @@ -206,7 +212,7 @@ <h2 id="duration">duration</h2><article><p>表示时间段,等同于 <a href="
<thead><tr><th>JSON</th><th>YAML</th><th>XML</th><th>类型</th><th>描述</th><tr></thead>
<tbody>
<tr><td>key</td><td>key</td><td>key,attr</td><td>string</td><td><p>报头名称
</td></tr><tr><td>val</td><td>val</td><td>,chardata</td><td>string</td><td><p>报头对应的值
</td></tr><tr><td>value</td><td>value</td><td>,chardata</td><td>string</td><td><p>报头对应的值
</td></tr>
</tbody>
</table>
Expand Down
69 changes: 19 additions & 50 deletions server/config/http.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import (
"io/fs"
"net/http"
"os"
"strings"
"time"

"github.com/issue9/logs/v7"
Expand All @@ -22,12 +23,6 @@ import (
"github.com/issue9/web/server"
)

const (
traceDisable traceStyle = iota // 禁用 TRACE 请求
traceBody // TRACE 请求中可以包含请求的内容
traceNobody // 仅返回 TRACE 的报头部分内容
)

type (
httpConfig struct {
// 端口
Expand Down Expand Up @@ -81,19 +76,20 @@ type (

// Trace 是否启用 TRACE 请求
//
// 默认为 false。
// 可以有以下几种值:
// - disable 禁用 TRACE 请求;
// - body 启用 TRACE,且在返回内容中包含了请求端的 body 内容;
// - nobody 启用 TRACE,但是在返回内容中不包含请求端的 body 内容;
// 默认为 disable。
//
// NOTE: 这些设置对所有路径均有效,但会被 [web.Routers.New] 的参数修改。
Trace traceStyle `yaml:"trace,omitempty" json:"trace,omitempty" xml:"trace,omitempty"`
Trace string `yaml:"trace,omitempty" json:"trace,omitempty" xml:"trace,omitempty"`
trace web.RouterOption // 由 Trace 字段转换而来

init func(*server.Options)
httpServer *http.Server
}

// TRACE 请求的类型
traceStyle int8

// 表示时间段,等同于 [time.Duration]
duration time.Duration // 封装 [time.Duration] 以实现对 JSON、XML 和 YAML 的解析

Expand Down Expand Up @@ -194,7 +190,18 @@ func (h *httpConfig) sanitize(l *logs.Logs) *web.FieldError {
*v = header.XRequestID
}
})),
filter.New("trace", &h.Trace, filter.S(func(t *traceStyle) { h.trace = t.toRouterOption() })),
filter.New("trace", &h.Trace, filter.V(func(t string) bool {
switch strings.ToLower(t) {
case "body":
h.trace = web.WithTrace(true)
case "nobody":
h.trace = web.WithTrace(false)
case "disable":
default:
return false
}
return true
}, locales.InvalidValue)),
)
if err != nil {
return err
Expand Down Expand Up @@ -311,41 +318,3 @@ func (d *duration) UnmarshalText(b []byte) error {
}
return err
}

func (s traceStyle) toRouterOption() web.RouterOption {
switch s {
case traceBody:
return web.WithTrace(true)
case traceNobody:
return web.WithTrace(false)
default:
return nil
}
}

func (s traceStyle) MarshalText() ([]byte, error) {
switch s {
case traceDisable:
return []byte("disable"), nil
case traceBody:
return []byte("body"), nil
case traceNobody:
return []byte("nobody"), nil
default:
panic("无效的值")
}
}

func (s *traceStyle) UnmarshalText(b []byte) error {
switch str := string(b); str {
case "disable":
*s = traceDisable
case "body":
*s = traceBody
case "nobody":
*s = traceNobody
default:
panic("无效的值")
}
return nil
}

0 comments on commit 9ddaaf2

Please sign in to comment.