Commit graph

218 commits

Author SHA1 Message Date
wjqserver
6e33bc48aa fix: simplify error handling in Buf methods
Consolidate error wrapping to avoid redundant fmt.Errorf calls.
Follows PR #73 review feedback.
2026-03-29 18:45:08 +08:00
wjqserver
7e15181c0b feat(render): add Buf variants for JSON/GOB/WANF/HTML
Add buffered rendering methods that encode to a buffer first, then
write the response. This allows returning a proper 500 status code
if encoding fails, unlike the streaming variants which must write
the status code before encoding (an inherent HTTP constraint).

New methods:
- JSONBuf(code int, obj any)
- GOBBuf(code int, obj any)
- WANFBuf(code int, obj any)
- HTMLBuf(code int, name string, obj any)

Trade-off: one extra memory allocation per call in exchange for
correct error status codes on encoding failure.
2026-03-29 17:03:57 +08:00
wjqserver
559aefeb85 fix(SSE): capture Writer before goroutine, use select for channel send
Address PR review feedback:
- Capture w := c.Writer before goroutine start, use w (not c.Writer)
  inside the goroutine to avoid holding *Context reference
- Move channel send into select alongside context cancellation in all
  examples and tests, preventing goroutine leak when client disconnects
  while blocked on unbuffered send
2026-03-29 16:50:37 +08:00
wjqserver
2f94763c65 fix(SSE)!: redesign EventStreamChan to prevent context pool recycling
BREAKING CHANGE: EventStreamChan signature changed from
  (chan<- Event, <-chan error)
to
  (eventChan <-chan Event)
The caller now creates and passes the channel instead of receiving it.
The errChan return value is removed.

The old non-blocking design allowed the handler to return before the SSE
stream ended, causing ServeHTTP to return the Context to the pool while
the internal goroutine was still writing to the pooled writer — a data
race across requests. The new blocking design keeps the handler inside
EventStreamChan until the event channel is closed or the client
disconnects, ensuring the Context remains bound throughout the stream.

- Caller creates channel, producer goroutine sends events
- EventStreamChan blocks handler until stream ends
- Internal goroutine captures stable references (Flusher, context.Context)
  instead of holding *Context pointer
- Nil guard on Flusher type assertion
- Add sse_test.go covering blocking, disconnect, and event format
- Update docs/sse.md for new API
2026-03-29 15:42:01 +08:00
wjqserver
8031e799d9 docs: explain reverse proxy query normalization
Some checks failed
Go Test / test (push) Has been cancelled
Clarify that outgoing proxy queries are normalized before forwarding, which may re-encode or drop non-standard fragments to keep parsing behavior consistent across proxy chains.
2026-03-29 01:48:50 +08:00
wjqserver
6d89b8674f fix: tighten reverse proxy safety handling
Avoid HTTP error writes after hijacking upgraded connections, document ModifyResponse constraints for 101 responses, and normalize forwarded query strings consistently to reduce parsing ambiguity across proxy chains.
2026-03-29 01:39:09 +08:00
wjqserver
1946216c0e fix: harden reverse proxy edge cases
Preserve final headers when forwarding 1xx responses, reject invalid 101 upgrade negotiations, and make the default Via token RFC-safe. Tighten the reverse proxy tests around goroutine synchronization and document the Via fallback behavior more clearly.
2026-03-29 01:15:57 +08:00
wjqserver
e4ca20e848 docs: clarify reverse proxy compatibility behavior
Document BufferPool usage and explain why trailer fallback and disconnect compatibility logic intentionally mirror the standard library reverse proxy. Add a regression test covering unannounced trailer forwarding so that proxy trailer behavior stays aligned with Go's semantics.
2026-03-29 00:51:06 +08:00
wjqserver
764a764720 feat: add built-in reverse proxy support
Provide an RFC-aware reverse proxy handler so Touka services can forward normal, streaming, and upgraded HTTP traffic without leaving the framework. Document the new API and proxy-chain behavior so deployments behind other gateways preserve forwarding metadata correctly.
2026-03-29 00:33:56 +08:00
WJQSERVER
e5400c2da7
Update test.yml
Some checks are pending
Go Test / test (push) Waiting to run
2026-03-28 01:34:45 +08:00
WJQSERVER
67a7e21d81
Merge pull request #70 from infinite-iroha/fix-protocols-propagation-4620108489799509698
fix: correctly propagate custom Protocols to http.Server
2026-03-28 01:32:33 +08:00
WJQSERVER
91a330f51b
Merge pull request #69 from infinite-iroha/dependabot/go_modules/github.com/WJQSERVER-STUDIO/httpc-0.9.0
Bump github.com/WJQSERVER-STUDIO/httpc from 0.8.3 to 0.9.0
2026-03-28 01:29:10 +08:00
WJQSERVER
a98fb27058 fix: correctly propagate custom Protocols to http.Server
- Implemented \`applyDefaultServerConfig\` in \`Engine\` to apply \`serverProtocols\` to \`http.Server\`.
- Uncommented all calls to \`applyDefaultServerConfig\` in \`serve.go\`.
- Refactored \`SetProtocols\` and added internal \`setProtocols\` to ensure user-defined protocols are not overwritten by framework defaults in \`RunTLS\`.
- Added exhaustive tests in \`protocols_test.go\` to verify protocol inheritance and persistence.
2026-03-27 17:27:22 +00:00
dependabot[bot]
3be2c05f0c
Bump github.com/WJQSERVER-STUDIO/httpc from 0.8.3 to 0.9.0
Bumps [github.com/WJQSERVER-STUDIO/httpc](https://github.com/WJQSERVER-STUDIO/httpc) from 0.8.3 to 0.9.0.
- [Release notes](https://github.com/WJQSERVER-STUDIO/httpc/releases)
- [Commits](https://github.com/WJQSERVER-STUDIO/httpc/compare/v0.8.3...v0.9.0)

---
updated-dependencies:
- dependency-name: github.com/WJQSERVER-STUDIO/httpc
  dependency-version: 0.9.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-23 00:35:07 +00:00
WJQSERVER
fcc23745b6
Merge pull request #68 from infinite-iroha/docs-update
Docs update
2026-03-22 10:34:18 +08:00
WJQSERVER
7b8c0d7dcb docs: 补充完善文档内容
- context.md: 添加Cookie操作、日志方法、HTTP客户端、IP获取、请求体操作、响应头操作、WANF/GOB绑定等完整API文档
- advanced.md: 添加协议配置、服务器配置器、IP解析配置、请求体大小限制、条件中间件等高级特性文档
- routing.md: 添加HandleFunc多方法注册、NoRoute自定义404、静态文件路由等内容
2026-03-22 10:13:05 +08:00
WJQSERVER
8af515059a docs: 修复文档中的API方法名和参数错误
- 更新quickstart.md中的Go版本要求为1.26
- 修复routing.md中使用setter方法而不是直接属性赋值
- 修复middleware.md中GetHeader为GetReqHeader
- 更新context.md移除未实现的binding标签
- 修复static-files.md中SetUnMatchFS的参数签名
- 修复advanced.md中SetMaxReader为SetGlobalMaxRequestBodySize
2026-03-22 09:27:20 +08:00
WJQSERVER
4f1acda553
Merge pull request #64 from infinite-iroha/dependabot/go_modules/github.com/fenthope/reco-0.0.5
Bump github.com/fenthope/reco from 0.0.4 to 0.0.5
2026-03-20 19:48:48 +08:00
dependabot[bot]
656dc44652
Bump github.com/fenthope/reco from 0.0.4 to 0.0.5
Bumps [github.com/fenthope/reco](https://github.com/fenthope/reco) from 0.0.4 to 0.0.5.
- [Release notes](https://github.com/fenthope/reco/releases)
- [Commits](https://github.com/fenthope/reco/compare/v0.0.4...v0.0.5)

---
updated-dependencies:
- dependency-name: github.com/fenthope/reco
  dependency-version: 0.0.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-20 11:48:32 +00:00
WJQSERVER
34cb6c0cdb
Merge pull request #67 from infinite-iroha/dependabot/go_modules/github.com/WJQSERVER/wanf-0.0.8
Bump github.com/WJQSERVER/wanf from 0.0.6 to 0.0.8
2026-03-20 19:47:36 +08:00
WJQSERVER
c4c0160b5f refactor: improve binding, performance, and type safety
- Implement ShouldBind with support for JSON, Form, WANF, and GOB formats
- Add ShouldBindForm, ShouldBindGOB, and helper functions for form binding
- Use fmt.Appendf instead of fmt.Sprintf for better performance
- Replace interface{} with any for modern Go style
- Use maps.Copy for cleaner header copying
- Update strings.SplitSeq to use range over strings.Seq
- Remove deprecated placeholder comments and add proper implementations
- Fix reflect.Pointer usage for Go 1.22+ compatibility
2026-03-17 12:02:49 +08:00
dependabot[bot]
530f5e5879
Bump github.com/WJQSERVER/wanf from 0.0.6 to 0.0.8
Bumps [github.com/WJQSERVER/wanf](https://github.com/WJQSERVER/wanf) from 0.0.6 to 0.0.8.
- [Release notes](https://github.com/WJQSERVER/wanf/releases)
- [Commits](https://github.com/WJQSERVER/wanf/compare/v0.0.6...v0.0.8)

---
updated-dependencies:
- dependency-name: github.com/WJQSERVER/wanf
  dependency-version: 0.0.8
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-25 00:34:45 +00:00
WJQSERVER
9e3e43bf88
Merge pull request #65 from infinite-iroha/dependabot/go_modules/github.com/WJQSERVER-STUDIO/httpc-0.8.3
Bump github.com/WJQSERVER-STUDIO/httpc from 0.8.2 to 0.8.3
2026-02-19 23:24:53 +08:00
dependabot[bot]
d72eb72506
Bump github.com/WJQSERVER-STUDIO/httpc from 0.8.2 to 0.8.3
Bumps [github.com/WJQSERVER-STUDIO/httpc](https://github.com/WJQSERVER-STUDIO/httpc) from 0.8.2 to 0.8.3.
- [Release notes](https://github.com/WJQSERVER-STUDIO/httpc/releases)
- [Commits](https://github.com/WJQSERVER-STUDIO/httpc/compare/v0.8.2...v0.8.3)

---
updated-dependencies:
- dependency-name: github.com/WJQSERVER-STUDIO/httpc
  dependency-version: 0.8.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-19 00:34:19 +00:00
WJQSERVER
8feb31a990
Merge pull request #63 from infinite-iroha/add-detailed-docs-13958049504187048410
Add detailed docs 13958049504187048410
2026-02-18 23:55:51 +08:00
WJQSERVER
2e55db4e2d docs: add comprehensive documentation and fix SSE graceful shutdown
- Created a detailed \`docs\` directory with Chinese documentation for all major features.
- Implemented \`BaseContext\` propagation in \`Engine\` to allow long-lived connections (like SSE) to receive shutdown signals.
- Added \`Engine.Context()\` to provide access to the shutdown context.
- Updated \`docs/sse.md\` with a guide on handling graceful shutdowns.
- Cleaned up temporary build/update scripts.

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
2026-02-18 15:52:42 +00:00
WJQSERVER
1066a9b1cf docs: add detailed Chinese documentation and SSE graceful shutdown example
Added a comprehensive \`docs\` folder and updated README.md.
Included a specific example in \`docs/sse.md\` demonstrating how to handle \`c.Request.Context().Done()\` for graceful SSE connection closure.

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
2026-02-18 15:34:00 +00:00
WJQSERVER
a5c3942659
Merge pull request #62 from infinite-iroha/add-detailed-docs-13958049504187048410
docs: add comprehensive documentation in Chinese
2026-02-18 22:31:15 +08:00
WJQSERVER
8a5acb0b04 docs: add comprehensive documentation in Chinese
Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
2026-02-18 14:28:03 +00:00
WJQSERVER
0f7f68fb89
Merge pull request #61 from infinite-iroha/dependabot/go_modules/github.com/WJQSERVER/wanf-0.0.6
Bump github.com/WJQSERVER/wanf from 0.0.3 to 0.0.6
2026-02-18 22:03:03 +08:00
dependabot[bot]
67a30acb08
Bump github.com/WJQSERVER/wanf from 0.0.3 to 0.0.6
Bumps [github.com/WJQSERVER/wanf](https://github.com/WJQSERVER/wanf) from 0.0.3 to 0.0.6.
- [Release notes](https://github.com/WJQSERVER/wanf/releases)
- [Commits](https://github.com/WJQSERVER/wanf/compare/v0.0.3...v0.0.6)

---
updated-dependencies:
- dependency-name: github.com/WJQSERVER/wanf
  dependency-version: 0.0.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-18 00:34:26 +00:00
WJQSERVER
a6e278d458 print errlog (jsonv2 marshal) 2026-01-26 08:08:01 +08:00
WJQSERVER
7b536ac137
Merge pull request #59 from infinite-iroha/fix-slice-panic
refactor: Improve engine's tree processing and context handling.
2025-12-15 00:05:02 +08:00
WJQSERVER
b348d7d41f update TempSkippedNodesPool 2025-12-14 23:42:50 +08:00
WJQSERVER
60b2936eff add TempSkippedNodesPool 2025-12-14 23:16:29 +08:00
WJQSERVER
9cfc82a347 chore: update go module dependencies. 2025-12-14 22:57:48 +08:00
WJQSERVER
904aea5df8 refactor: Improve engine's tree processing and context handling. 2025-12-14 22:56:37 +08:00
WJQSERVER
ee0ebc986c
Merge pull request #54 from infinite-iroha/dev
context added FileText method
2025-10-21 15:06:39 +08:00
wjqserver
e4aaaa1583 fix path to filepath 2025-10-21 15:06:26 +08:00
wjqserver
1361f6e237 update 2025-10-21 14:47:29 +08:00
WJQSERVER
a6458cca16
Merge pull request #53 from infinite-iroha/dev
update
2025-10-12 15:48:48 +08:00
wjqserver
76a89800a2 update 2025-10-12 15:47:02 +08:00
WJQSERVER
4955fb9d03
Merge pull request #52 from infinite-iroha/dev
fix StaticFS
2025-09-14 08:27:29 +08:00
wjqserver
5b98310de5 fix StaticFS 2025-09-14 08:24:01 +08:00
WJQSERVER
f1ac0dd6ff
Merge pull request #51 from infinite-iroha/dev
0.3.7
2025-09-10 02:40:51 +08:00
wjqserver
38ff5126e3 fix 2025-09-10 02:40:41 +08:00
WJQSERVER
b4e073ae2f
Update sse.go 2025-09-07 02:24:28 +08:00
WJQSERVER
af0a99acda add sse intn support 2025-09-06 17:55:45 +00:00
wjqserver
3ffde5742c add wanf 2025-08-20 16:50:26 +08:00
WJQSERVER
016df0efe4
Merge pull request #50 from infinite-iroha/dev
0.3.6
2025-08-01 10:27:01 +08:00