Commit Graph

1065 Commits

Author SHA1 Message Date
yusing
1a20a2cda7 fix(stream): properly handle remote stream scheme IPv4/6 2026-01-09 22:35:59 +08:00
yusing
19d6f3757b fix(monitor): remove unnecssary return type 2026-01-09 22:35:59 +08:00
yusing
7e7e885c57 fix(health/http): potential panic when error is tlsErr 2026-01-09 22:35:58 +08:00
yusing
1ca5fc5ac6 fix(health): remove unnecessary containerId parameter 2026-01-09 22:35:58 +08:00
yusing
fc88d588a0 docs: update README for autocert package to reflect changes in renewal scheduling and primary consumers 2026-01-09 22:35:57 +08:00
yusing
86b655be3c docs: add per package README for implementation details (AI generated with human review) 2026-01-09 22:35:27 +08:00
yusing
2f2828ec48 docs(idlewatcher): update README to include loading page and SSE endpoint details
- Added information about the loading page (HTML + JS + CSS) and the SSE endpoint for wake events.
- Clarified the health monitor implementation and readiness tracking in the architecture overview.
- Correct state machine syntax.
2026-01-09 22:34:59 +08:00
yusing
a5c74d6773 feat(docs): add health check and monitor packages README; mermaid styling fix 2026-01-09 22:34:33 +08:00
yusing
dbd210b665 fix(health): correct context handling, move NewMonitor, and improve docker health check errors
- Correct BaseContext nil check in Context() method
- Move NewMonitor from monitor.go to new.go
- Export ErrDockerHealthCheckFailedTooManyTimes and add ErrDockerHealthCheckNotAvailable
- Return ErrDockerHealthCheckNotAvailable when container has no health check configured
- Only log first docker health check failure and skip logging for ErrDockerHealthCheckNotAvailable
- Use mon.Context() instead of mon.task.Context() to avoid nil panic
2026-01-09 22:34:15 +08:00
yusing
02e6e6f86c refactor: move internal/watcher/health to internal/health 2026-01-09 22:34:15 +08:00
yusing
6d9a193fd5 refactor(health): restructure health check implementations into dedicated check package
- Move health check implementations from monitor/ to new check/ package
- Add h2c, tcp4/6, udp4/6 scheme support to agent health check API
- Add timeout URL parameter to agent health check endpoint
- Remove unused agent dependencies (dnsproviders, lego, various cloud SDKs)
- Use net.JoinHostPort instead of fmt.Sprintf for port joining
2026-01-09 22:34:12 +08:00
yusing
5aa58e003d refactor(agent): extract agent pool and HTTP utilities to dedicated package
Moved non-agent-specific logic from agent/pkg/agent/ to internal/agentpool/:
- pool.go: Agent pool management (Get, Add, Remove, List, Iter, etc.)
- http_requests.go: HTTP utilities (health checks, forwarding, websockets, reverse proxy)
- agent.go: Agent struct with HTTP client management

This separates general-purpose pool management from agent-specific configuration,
improving code organization and making the agent package focused on agent config only.
2026-01-09 22:33:07 +08:00
yusing
19f38a6cfc refactor: remove NoCopy struct; move RefCounter struct to goutils and update usage; remove internal/utils entirely 2026-01-09 22:32:34 +08:00
yusing
f3331515ea fix(docker): add TLS check; correct dial handling and reconnection for custom docker provider; modernize pointer arithemetic with unsafe.Add 2026-01-09 22:32:33 +08:00
yusing
95202fd21d fix(stream): nil panic for excluded routes 2026-01-09 22:32:33 +08:00
yusing
c44636f95a feat(route): add bind address support for TCP/UDP routes
- Introduced a new `Bind` field in the route configuration to specify the address to listen on for TCP and UDP routes.
- Defaulted the bind address to "0.0.0.0" if not provided.
- Enhanced validation to ensure the bind address is a valid IP.
- Updated stream initialization to use the correct network type (tcp4/tcp6 or udp4/udp6) based on the bind address.
- Refactored stream creation functions to accept the network type as a parameter.
2026-01-09 22:32:32 +08:00
yusing
17bfc96e3d feat(api/cert): enhance certificate info retrieval
- Introduced a new method `GetCertInfos` to fetch details of all available certificates.
- Updated the `Info` handler to return an array of `CertInfo` instead of a single certificate.
- Improved error handling for cases with no available certificates.
- Refactored related error messages for clarity.
2026-01-09 22:32:32 +08:00
yusing
1d1b01efd7 refactor(docker): simplify flow of isLocal check 2026-01-09 22:32:31 +08:00
yusing
90948f7443 refactor: replace gperr.Builder with gperr.Group for concurrent error handling
- Updated various files to utilize gperr.Group for cleaner concurrency error handling.
- Removed sync.WaitGroup usage, simplifying the code structure.
- Ensured consistent error reporting across different components.
2026-01-09 22:32:30 +08:00
yusing
91317ff319 feat(autocert): add back inwx provider 2026-01-09 22:32:11 +08:00
yusing
73deb682bd fix(autocert): forceRenewalDoneCh was never closed 2026-01-04 22:02:43 +08:00
yusing
08ce58f031 fix(test): update test expectations 2026-01-04 22:02:43 +08:00
yusing
bf6d7b55f1 fix(autocert): ensure extra certificate registration and renewal scheduling
Extra providers were not being properly initialized during NewProvider(),
causing certificate registration and renewal scheduling to be skipped.

- Add ConfigExtra type with idx field for provider indexing
- Add MergeExtraConfig() for inheriting main provider settings
- Add setupExtraProviders() for recursive extra provider initialization
- Refactor NewProvider to return error and call setupExtraProviders()
- Add provider-scoped logger with "main" or "extra[N]" name
- Add batch operations: ObtainCertIfNotExistsAll(), ObtainCertAll()
- Add ForceExpiryAll() with completion tracking via WaitRenewalDone()
- Add RenewMode (force/ifNeeded) for controlling renewal behavior
- Add PrintCertExpiriesAll() for logging all provider certificate expiries

Summary of staged changes:
- config.go: Added ConfigExtra type, MergeExtraConfig(), recursive validation with path uniqueness checking
- provider.go: Added provider indexing, scoped logger, batch cert operations, force renewal with completion tracking, RenewMode control
- setup.go: New file with setupExtraProviders() for proper extra provider initialization
- setup_test.go: New tests for extra provider setup
- multi_cert_test.go: New tests for multi-certificate functionality
- renew.go: Updated to use new provider API with error handling
- state.go: Updated to handle NewProvider error return
2026-01-04 22:02:42 +08:00
yusing
da8e03258d refactor(state): replace Entrypoint method with ShortLinkMatcher interface
- Cleaned up agent go.mod by removing unused indirect dependencies.
2026-01-04 22:02:42 +08:00
Yuzerion
72e53773b0 feat(autocert): add multi-certificate support (#185)
Multi-certificate, SNI matching with exact map and suffix tree

Add support for multiple TLS certificates with SNI-based selection. The
root provider maintains a single centralized SNI matcher that uses an
exact match map for O(1) lookups, falling back to a suffix tree for
wildcard matching.

Key features:
- Add `Extra []Config` field to autocert.Config for additional certificates
- Each extra entry must specify unique `cert_path` and `key_path`
- Extra certs inherit main config (except `email` and `extra` fields)
- Extra certs participate in ACME obtain/renew cycles independently
- SNI selection precedence: exact match > wildcard match, main > extra
- Single centralized SNI matcher on root provider rebuilt after cert changes

The SNI matcher structure:
- Exact match map: O(1) lookup for exact domain matches
- Suffix tree: Efficient wildcard matching (e.g., *.example.com)

Implementation details:
- Provider.GetCert() now uses SNI from ClientHelloInfo for selection
- Main cert is returned as fallback when no SNI match is found
- Extra providers are created as child providers with merged configs
- SNI matcher is rebuilt after Setup() and after ObtainCert() completes
2026-01-04 22:02:41 +08:00
yusing
7e9e0c4511 refactor(docker): accept unix and ssh scheme for providers 2026-01-04 22:02:41 +08:00
yusing
ea030ebd19 refactor(route): modernize code with unsafe.Add 2026-01-04 22:02:39 +08:00
yusing
64ba519f03 refactor(http/transport): increase MaxIdleConnsPerHost to 1000 2026-01-04 22:02:39 +08:00
yusing
4001e94d5c refactor(http): performance improvement
- Introduced a sync.Pool for ResponseRecorder to optimize memory usage.
- Updated ServeHTTP method to utilize the new GetResponseRecorder and PutResponseRecorder functions.
- Adjusted NewResponseRecorder to leverage the pooling mechanism.
2026-01-04 22:02:37 +08:00
yusing
30eae68a91 fix(idlewatcher): pass context to ProxmoxProvider 2026-01-04 22:02:35 +08:00
yusing
7d404ba32f refactor(config): correct logic in InitFromFile 2026-01-04 22:02:35 +08:00
yusing
915c5958fd chore: remove unused utils/deep_equal.go 2026-01-04 22:02:34 +08:00
yusing
ad2bfac275 refactor(api/health): simplify health info type
- Updated health-related functions to return simplified health information.
- Introduced HealthStatusString type for correct swagger and schema generation.
- Refactored HealthJSON structure to utilize the new HealthStatusString type.
2026-01-04 22:02:33 +08:00
yusing
65383c7061 refactor: add context handling in various functions
- Modified functions to accept context.Context as a parameter for better context management.
- Updated Init methods in Proxmox and Config to use the provided context.
- Adjusted UpdatePorts and NewProxmoxProvider to utilize the context for operations.
2026-01-04 22:02:33 +08:00
yusing
23ceeda402 feat(entrypoint): implement short link #177
- Added ShortLinkMatcher to handle short link routing.
- Integrated short link handling in Entrypoint.
- Introduced tests for short link matching and dispatching.
- Configured default domain suffix for subdomain aliases.
2026-01-04 22:02:33 +08:00
yusing
53dc70d15b fix(docker): update scheme validation to include 'tcp' in DockerProviderConfigDetailed 2026-01-04 22:02:32 +08:00
yusing
0a5e8597dd refactor(monitor): include detail in service down notification log 2026-01-04 22:02:31 +08:00
yusing
0884be240c feat(healthcheck/http): implement h2c health check support and refactor request handling
- Added support for health checks using the h2c scheme.
- Refactored common header setting into a dedicated function.
- Updated CheckHealth method to differentiate between HTTP and h2c checks.
2026-01-04 22:02:30 +08:00
yusing
021c560ff7 chore: update swagger add h2c scheme type 2026-01-04 22:02:29 +08:00
yusing
b6ed9abbb3 feat(http/reverseproxy): h2c support with scheme: h2c 2026-01-04 22:02:29 +08:00
yusing
c3f33e7c7e chore: upgrade dependencies 2026-01-01 16:47:44 +08:00
yusing
79b18828d4 feat(metrics): add IsExcluded field to RouteUptimeAggregate for enhanced status tracking
- updated swagger
2026-01-01 16:45:58 +08:00
yusing
3346c91f96 fix(homepage): improve alphabetical sorting by normalizing item names (#181)
- Updated the sorting function to use Title case for item names to ensure consistent alphabetical ordering.
2026-01-01 16:45:58 +08:00
yusing
979f712fbb fix(route): enhance host parsing with port suffix support
- Added logic to strip the trailing :port from the host when searching for routes.
- Updated findRouteByDomains function to ensure consistent host formatting.
- Added related tests
2026-01-01 16:45:57 +08:00
yusing
92848305d9 fix(route): update health monitor initialization to use implementation instance 2026-01-01 16:45:57 +08:00
yusing
0e7223ef35 fix(tests/metrics): correct syntax error 2026-01-01 16:45:51 +08:00
yusing
bea75d49c1 feat(route): add CommandRoute for routing requests to specified routes
- Introduced CommandRoute to handle routing requests to other defined routes.
- Added validation to ensure a single argument is provided for the route.
- Implemented command handler to serve the specified route or return a 404 error if not found.
2026-01-01 16:45:50 +08:00
yusing
65b38c06dc refactor(routes): add excluded routes to health check and route list
- Updated route iteration to include all routes, including excluded ones.
- Renamed existing functions for clarity.
- Adjusted health info retrieval to reflect changes in route iteration.
- Improved route management by adding health monitoring capabilities for excluded routes.
2026-01-01 16:45:50 +08:00
yusing
526190d444 refactor(docker): simplify docker host parsing 2026-01-01 16:45:46 +08:00
yusing
f89573e718 fix(oidc): add trailing slash to OIDCAuthBasePath to work with paths like /authorize 2026-01-01 16:44:52 +08:00