8229879db8
Merge pull request 'chore(deps): update golang docker tag to v1.25.7' ( #82 ) from renovate/golang-1.x into main
SonarQube Scan / SonarQube Trigger (push) Successful in 2m13s
2026-02-05 02:03:49 +07:00
7015e7f4de
chore(deps): update golang docker tag to v1.25.7
Tests / Run Tests (pull_request) Successful in 1m11s
2026-02-04 19:03:47 +00:00
03c6b44fa2
Merge pull request 'fix(deps): update module github.com/charmbracelet/bubbles to v0.21.1' ( #81 ) from renovate/github.com-charmbracelet-bubbles-0.x into main
SonarQube Scan / SonarQube Trigger (push) Successful in 3m15s
2026-02-03 15:05:34 +07:00
3af3fdbc9c
fix(deps): update module github.com/charmbracelet/bubbles to v0.21.1
Tests / Run Tests (pull_request) Successful in 1m18s
2026-02-03 08:05:29 +00:00
6dc4bb58ea
Merge pull request 'chore(deps): update actions/checkout action to v6' ( #80 ) from renovate/actions-checkout-6.x into main
...
SonarQube Scan / SonarQube Trigger (push) Successful in 4m25s
Reviewed-on: #80
2026-01-28 01:16:08 +07:00
bd2b843e5d
chore(deps): update actions/checkout action to v6
Tests / Run Tests (pull_request) Successful in 1m9s
2026-01-27 18:11:54 +00:00
5b05723e93
ci: refactor workflows for SonarQube, tag-only Docker builds, and global testing
...
SonarQube Scan / SonarQube Trigger (push) Successful in 4m41s
Docker Build and Push / Run Tests (push) Successful in 1m59s
Docker Build and Push / Build and Push Docker Image (push) Successful in 8m22s
- Run SonarQube scans only on main, staging, and feat/* branches
- Build and push Docker images only on semantic version tags
- Add test job that runs on all events
2026-01-28 01:06:29 +07:00
22ad935299
Merge pull request 'chore(deps): update actions/checkout action to v6' ( #75 ) from renovate/actions-checkout-6.x into main
...
SonarQube Scan / SonarQube Trigger (push) Successful in 6m25s
Reviewed-on: #75
2026-01-27 18:36:31 +07:00
ebd915e18e
chore(deps): update actions/checkout action to v6
SonarQube Scan / SonarQube Trigger (pull_request) Has been cancelled
SonarQube Scan / SonarQube Trigger (push) Has been cancelled
2026-01-27 11:35:15 +00:00
728691d119
Update .gitea/workflows/sonarqube.yml
SonarQube Scan / SonarQube Trigger (push) Has been cancelled
2026-01-27 18:31:10 +07:00
1344afd1b2
Merge pull request 'fix(deps): update module github.com/stretchr/testify to v1.11.1' ( #79 ) from renovate/github.com-stretchr-testify-1.x into main
Docker Build and Push / build-and-push-tags (push) Has been skipped
SonarQube Scan / SonarQube Trigger (push) Has been cancelled
Docker Build and Push / build-and-push-branches (push) Has been cancelled
2026-01-27 18:19:53 +07:00
4cbee5079c
fix(deps): update module github.com/stretchr/testify to v1.11.1
SonarQube Scan / SonarQube Trigger (pull_request) Has been cancelled
SonarQube Scan / SonarQube Trigger (push) Has been cancelled
2026-01-27 11:19:47 +00:00
0b071dfde7
Merge pull request 'chore(deps): update dependency go to v1.25.6' ( #78 ) from renovate/go-1.x into main
SonarQube Scan / SonarQube Trigger (push) Has been cancelled
2026-01-27 18:19:40 +07:00
6062c2e11d
chore(deps): update dependency go to v1.25.6
SonarQube Scan / SonarQube Trigger (pull_request) Has been cancelled
SonarQube Scan / SonarQube Trigger (push) Has been cancelled
2026-01-27 11:19:34 +00:00
2a2d484e91
Merge pull request 'staging' ( #77 ) from staging into main
...
SonarQube Scan / SonarQube Trigger (push) Successful in 6m4s
Docker Build and Push / build-and-push-tags (push) Has been skipped
Docker Build and Push / build-and-push-branches (push) Successful in 23m12s
Reviewed-on: #77
2026-01-27 18:08:36 +07:00
9377233515
feat(testing): comprehensive test coverage and quality improvements ( #76 )
...
SonarQube Scan / SonarQube Trigger (push) Successful in 3m32s
Docker Build and Push / build-and-push-branches (push) Successful in 48m34s
Docker Build and Push / build-and-push-tags (push) Has been skipped
SonarQube Scan / SonarQube Trigger (pull_request) Successful in 6m12s
- Added unit tests for all core components (interaction, forwarder, stream, lifecycle, session, config, transport, middleware, etc.)
- Migrated to Testify framework for testing
- Integrated SonarQube for code quality monitoring
- Reduced cognitive complexity across multiple modules
- Fixed buffer handling, serialization, and error handling issues
- Set up automated CI/CD pipeline with coverage reporting
Reviewed-on: #76
2026-01-27 16:36:40 +07:00
fab625e13a
docs: show CI/CD status badge and mascot in README
SonarQube Scan / SonarQube Trigger (push) Successful in 3m32s
SonarQube Scan / SonarQube Trigger (pull_request) Successful in 3m26s
2026-01-27 16:28:20 +07:00
1ed845bf2d
test(interaction): add unit tests for interaction behavior
2026-01-27 16:28:20 +07:00
67378aabda
refactor(dockerfile): split long ldflags line
2026-01-27 16:28:20 +07:00
a26d1672d9
refactor(interaction): reduce cognitive complexity and centralize color constants
2026-01-27 16:28:20 +07:00
7f44cc7bc0
fix: ensure proper buffer reuse with pointer handling in sync.Pool
2026-01-27 16:28:20 +07:00
a3f6baa6ae
test: check and handle error for testing
2026-01-27 16:28:20 +07:00
6def82a095
ci: add project source and test path for sonarqube
2026-01-27 16:28:20 +07:00
354da27424
test(forwarder): add unit tests for forwarder behavior
2026-01-27 16:28:20 +07:00
ee1dc3c3cd
chore(tests): migrate to Testify for mocking and assertions
2026-01-27 16:28:20 +07:00
65df01fee5
refactor(forwarder): remove CreateForwardedTCPIPPayload method
...
- OpenForwardedChannel now privately calls CreateForwardedTCPIPPayload
- Removed an unused function
2026-01-27 16:28:20 +07:00
79fd292a77
feat(http): add http header size limit for initial request
2026-01-27 16:28:20 +07:00
4041681be6
refactor(header): NewRequest to accept only []byte
2026-01-27 16:28:20 +07:00
2ee24c8d51
test(config): add test for keyloc and header size
2026-01-27 16:28:20 +07:00
384bb98f48
test(stream): migrate mocking to testify
2026-01-27 16:28:20 +07:00
9785a97973
refactor: remove duplicate channel management helpers from HTTP handler
2026-01-27 16:28:20 +07:00
b8c6359820
refactor: remove custom parsing functions and use ssh.Marshal/ssh.Unmarshal for serialization
2026-01-27 16:28:20 +07:00
8fee8bf92e
test(server): add unit test for handleConnection
2026-01-27 16:28:20 +07:00
04c9ddbc13
test(lifecycle): add unit tests for lifecycle behavior
2026-01-27 16:28:20 +07:00
211745dc26
test(slug): add unit tests for slug behavior
2026-01-27 16:28:20 +07:00
09aa92a0ae
fix: properly initialize tlsStoragePath in config load
2026-01-27 16:28:20 +07:00
1ed9f3631f
fix: correct buffer pool usage to avoid type assertion error
2026-01-27 16:28:20 +07:00
bd826d6d06
refactor(transport): reduce cognitive complexity and clean up public API
2026-01-27 16:28:20 +07:00
2f5c44ff01
test(bootstrap): add unit tests for initial bootstrap behavior
2026-01-27 16:28:20 +07:00
d0e052524c
refactor: decouple application startup logic from main
2026-01-27 16:28:20 +07:00
24b9872aa4
fix: corrected defer usage to pass buffer pointer
2026-01-27 16:28:20 +07:00
8b84373036
fix: remove unnecessary use of fmt.Sprintf
2026-01-27 16:28:20 +07:00
e796ab5328
fix: handle error return values for privateKeyFile.Close and pubKeyFile.Close
2026-01-27 16:28:20 +07:00
efdfc4ce95
chore: remove unused headerBuf variable
2026-01-27 16:28:20 +07:00
1dc929cc25
ci: sonarqube add linting
2026-01-27 16:28:20 +07:00
14abac6579
test(session): add unit tests for session behavior
2026-01-27 16:28:20 +07:00
21179da4b5
refactor(session): reduce function parameters
2026-01-27 16:28:20 +07:00
32f8be2891
test(version): add unit tests for version behavior
2026-01-27 16:28:20 +07:00
5af7af3139
test(client): add unit tests for grpc client behavior
2026-01-27 16:28:20 +07:00
f4848e9754
fix(client): reduce cognitive complexity and fix typo (go:S3776)
2026-01-27 16:28:20 +07:00
d2e508c8ef
test(key): add unit tests for key behavior
2026-01-27 16:28:20 +07:00
5499b7d08a
ci: update SonarQube action configuration
2026-01-27 16:28:20 +07:00
58f1fdabe1
test(server): add unit tests for server startup behavior
2026-01-27 16:28:20 +07:00
c1fb588cf4
test(config): add unit tests for config behavior
2026-01-27 16:28:20 +07:00
3029996773
test(stream): add unit tests for stream behavior
...
- Fix duplicating EOF error when closing SSH connection
- Add new SessionStatusCLOSED type
2026-01-27 16:28:20 +07:00
3fd179d32b
test(header): add unit tests for header behavior
2026-01-27 16:28:20 +07:00
a598a10e94
update: exclude local test coverage
2026-01-27 16:28:20 +07:00
29cabe42d3
test(transport): add unit tests for transport behavior using Testify
2026-01-27 16:28:20 +07:00
e534972abc
test(random): add unit tests for random behavior
...
- Added unit tests to cover random string generation and error handling.
- Introduced Random interface and random struct for better abstraction.
- Updated server, session, and interaction packages to require Random interface for dependency injection.
2026-01-27 16:28:20 +07:00
a55ff5f6ab
test(port): add unit tests for port behavior
2026-01-27 16:28:20 +07:00
50b4127cb3
test(middleware): add unit tests for middleware behavior
...
- remove redundant check on registry.Update and check if slug exist before locking the mutex
- Update SonarQube action to not use Go cache when setting up Go
2026-01-27 16:28:20 +07:00
7e635721fb
ci: automate Go tests and Sonar coverage reporting
2026-01-27 16:28:20 +07:00
016df9caee
test(registry): add unit tests for registry behavior
2026-01-27 16:28:20 +07:00
d91eecb2a0
chore: Refactor and optimize project architecture
...
Docker Build and Push / build-and-push-tags (push) Has been skipped
SonarQube Scan / SonarQube Trigger (push) Successful in 54s
Docker Build and Push / build-and-push-branches (push) Successful in 12m17s
- Fix: Resolve goroutine deadlock on early connection close
- Refactor: Simplify Start() method, unify forwarding logic, and enhance HTTP handler modularity
- Improve: Connection handling, header parsing, and resource management
- Refactor: Centralize environment loading, enforce typed access, and cleanup config structure
- Enhance: SonarQube scan integration for CI
- Chore: Reorganize project layout and simplify lifecycle management
- Define reusable constants for registry errors
Reviewed-on: #74
2026-01-22 22:16:33 +07:00
961a905542
chore(restructure): refactor architecture, config, and lifecycle management
...
Docker Build and Push / build-and-push-tags (push) Has been skipped
SonarQube Scan / SonarQube Trigger (push) Successful in 44s
Docker Build and Push / build-and-push-branches (push) Successful in 11m16s
SonarQube Scan / SonarQube Trigger (pull_request) Successful in 46s
- Reorganized internal packages and overall project structure
- Moved HTTP/HTTPS/TCP servers into the transport layer
- Decoupled server initialization from HTTP/HTTPS/TCP startup logic
- Separated HTTP parsing, streaming, middleware, and session registry concerns
- Refactored session and forwarder responsibilities for clearer ownership
- Centralized environment loading with validated, typed config access
- Made config immutable after initialization and normalized enum naming
- Improved resource lifecycle handling and error aggregation on shutdown
- Introduced reusable, package-level registry errors
- Added SonarQube scanning to CI pipeline
Reviewed-on: #73
2026-01-22 00:48:40 +07:00
634c8321ef
refactor(registry): define reusable constant errors
...
SonarQube Scan / SonarQube Trigger (push) Successful in 52s
SonarQube Scan / SonarQube Trigger (pull_request) Successful in 46s
- Introduced package-level error variables in registry to replace repeated fmt.Errorf calls
- Added errors like ErrSessionNotFound, ErrSlugInUse, ErrInvalidSlug, ErrForbiddenSlug, ErrSlugChangeNotAllowed, and ErrSlugUnchanged
2026-01-22 00:39:28 +07:00
9f4c24a3f3
refactor(lifecycle): reorder resource closing and simplify Close()
...
SonarQube Scan / SonarQube Trigger (push) Successful in 53s
- Close channel and connection first, then remove session
- Close forwarded port and forwarder at the end for TCP tunnels
- Aggregate all errors using errors.Join instead of failing early
2026-01-21 21:59:59 +07:00
1408b80917
ci: add sonarqube scan
SonarQube Scan / SonarQube Trigger (push) Successful in 48s
2026-01-21 21:24:57 +07:00
2bc20dd991
refactor(config): centralize env loading and enforce typed access
...
- Centralize environment variable loading in config.MustLoad
- Parse and validate all env vars once at initialization
- Make config fields private and read-only
- Remove public Getenv usage in favor of typed accessors
- Improve validation and initialization order
- Normalize enum naming to be idiomatic and avoid constant collisions
2026-01-21 19:43:19 +07:00
1e12373359
chore(restructure): reorganize project layout
...
Docker Build and Push / build-and-push-branches (push) Has been skipped
Docker Build and Push / build-and-push-tags (push) Successful in 13m1s
- Reorganize internal packages and overall project structure
- Update imports and wiring to match the new layout
- Separate HTTP parsing and streaming from the server package
- Separate middleware from the server package
- Separate session registry from the session package
- Move HTTP, HTTPS, and TCP servers to the transport package
- Session package no longer starts the TCP server directly
- Server package no longer starts HTTP/HTTPS servers on initialization
- Forwarder no longer handles accepting TCP requests
- Move session details to the types package
- HTTP/HTTPS initialization is now the responsibility of main
2026-01-21 14:06:46 +07:00
9a4539cc02
refactor(httpheader): extract header parsing into dedicated package
...
Docker Build and Push / build-and-push-tags (push) Has been skipped
Docker Build and Push / build-and-push-branches (push) Successful in 11m19s
Moved HTTP header parsing and building logic from server package to internal/httpheader
2026-01-20 21:15:34 +07:00
e3ead4d52f
refactor: optimize header parsing and remove factory naming
...
Docker Build and Push / build-and-push-tags (push) Has been skipped
Docker Build and Push / build-and-push-branches (push) Successful in 11m20s
- Remove factory naming
- Use direct byte indexing instead of bytes.TrimRight
- Extract parseStartLine and setRemainingHeaders helpers
2026-01-20 20:56:08 +07:00
aa1a465178
refactor(forwarder): improve connection handling and cleanup
...
Docker Build and Push / build-and-push-tags (push) Has been skipped
Docker Build and Push / build-and-push-branches (push) Has been cancelled
- Extract copyAndClose method for bidirectional data transfe
- Add closeWriter helper for graceful connection shutdown
- Add handleIncomingConnection helper
- Add openForwardedChannel helper
2026-01-20 19:01:15 +07:00
27f49879af
refactor(server): enhance HTTP handler modularity and fix resource leak
...
Docker Build and Push / build-and-push-tags (push) Has been skipped
Docker Build and Push / build-and-push-branches (push) Successful in 11m43s
- Rename customWriter struct to httpWriter for clarity
- Add closeWriter field to properly close write side of connections
- Update all cw variable references to hw
- Merge handlerTLS into handler function to reduce code duplication
- Extract handler into smaller, focused methods
- Split Read/Write/forwardRequest into composable functions
Fixes resource leak where connections weren't properly closed on the
write side, matching the forwarder's CloseWrite() pattern.
2026-01-19 22:41:04 +07:00
adb0264bb5
refactor(session): simplify Start() and unify forwarding logic
...
- Extract helper functions from Start() for better code organization
- Eliminate duplication with finalizeForwarding() method
- Consolidate denial logic into denyForwardingRequest()
- Update all handler methods to return errors instead of logging internally
- Improve error handling consistency across all operations
2026-01-19 15:53:16 +07:00
8fb19af5a6
fix: resolve copy goroutine deadlock on early connection close
...
- Add proper CloseWrite handling to signal EOF to other goroutine
- Ensure both copy goroutines terminate when either side closes
- Prevent goroutine leaks for SSH forwarded-tcpip channels:
- Use select with default when sending result to resultChan
- Close unused SSH channels and discard requests if main goroutine has already timed out
2026-01-19 00:20:28 +07:00
41fdb5639c
Merge pull request 'refactor: explicit initialization and dependency injection' ( #70 ) from staging into main
...
Docker Build and Push / build-and-push-tags (push) Has been skipped
Docker Build and Push / build-and-push-branches (push) Successful in 9m49s
Reviewed-on: #70
2026-01-18 21:46:59 +07:00
44d224f491
refactor: explicit initialization and dependency injection
...
Docker Build and Push / build-and-push-branches (push) Has been skipped
Docker Build and Push / build-and-push-tags (push) Successful in 10m10s
- Replace init() with config.Load() function when loading env variables
- Inject portRegistry into session, server, and lifecycle structs
- Inject sessionRegistry directly into interaction and lifecycle
- Remove SetSessionRegistry function and global port variables
- Pass ssh.Conn directly to forwarder constructor instead of lifecycle interface
- Pass user and closeFunc callback to interaction constructor instead of lifecycle interface
- Eliminate circular dependencies between lifecycle, forwarder, and interaction
- Remove setter methods (SetLifecycle) from forwarder and interaction interfaces
2026-01-18 21:20:05 +07:00
9be0328e24
Merge pull request 'staging' ( #69 ) from staging into main
...
Docker Build and Push / build-and-push-tags (push) Has been skipped
Docker Build and Push / build-and-push-branches (push) Successful in 9m30s
Reviewed-on: #69
2026-01-17 19:15:40 +07:00
2b9bca65d5
refactor(interaction): separate view and update logic into modular files
...
Docker Build and Push / build-and-push-branches (push) Has been skipped
Docker Build and Push / build-and-push-tags (push) Successful in 11m44s
- Extract slug editing logic to slug.go (slugView/slugUpdate)
- Extract commands menu logic to commands.go (commandsView/commandsUpdate)
- Extract coming soon modal to coming_soon.go (comingSoonView/comingSoonUpdate)
- Extract main dashboard logic to dashboard.go (dashboardView/dashboardUpdate)
- Create model.go for shared model struct and helper functions
- Replace math/rand with crypto/rand for random subdomain generation
- Remove legacy TLS cipher suite configuration
2026-01-17 17:33:10 +07:00
6587dc0f39
refactor(interaction): separate view and update logic into modular files
...
- Extract slug editing logic to slug.go (slugView/slugUpdate)
- Extract commands menu logic to commands.go (commandsView/commandsUpdate)
- Extract coming soon modal to coming_soon.go (comingSoonView/comingSoonUpdate)
- Extract main dashboard logic to dashboard.go (dashboardView/dashboardUpdate)
- Create model.go for shared model struct and helper functions
- Replace math/rand with crypto/rand for random subdomain generation
- Remove legacy TLS cipher suite configuration
2026-01-17 17:30:21 +07:00
f421781f44
Merge pull request 'refactor: convert structs to interfaces and rename accessors' ( #68 ) from staging into main
...
Docker Build and Push / build-and-push-tags (push) Has been skipped
Docker Build and Push / build-and-push-branches (push) Successful in 10m34s
Reviewed-on: #68
2026-01-16 16:41:22 +07:00
6969d6823a
Merge branch 'main' into staging
Docker Build and Push / build-and-push-branches (push) Has been skipped
Docker Build and Push / build-and-push-tags (push) Successful in 11m38s
2026-01-16 16:35:36 +07:00
1a04af8873
Merge branch 'main' into staging
Docker Build and Push / build-and-push-branches (push) Successful in 11m35s
Docker Build and Push / build-and-push-tags (push) Has been skipped
2026-01-16 16:28:39 +07:00
19135ceb42
refactor: convert structs to interfaces and rename accessors
...
Docker Build and Push / build-and-push-branches (push) Has been skipped
Docker Build and Push / build-and-push-tags (push) Has been cancelled
- Convert struct types to interfaces
- Rename getter and setter methods
- Add Close method to server interface
- Merge handler functionality into session file
- Handle lifecycle.Connection().Wait()
- fix panic on nil connection in SSH server
2026-01-16 15:25:31 +07:00
edb11dbc51
Merge pull request 'chore(deps): update golang docker tag to v1.25.6' ( #67 ) from renovate/golang-1.x into main
Docker Build and Push / build-and-push-tags (push) Has been skipped
Docker Build and Push / build-and-push-branches (push) Successful in 11m34s
2026-01-16 05:01:06 +07:00
819f044275
chore(deps): update golang docker tag to v1.25.6
2026-01-15 22:01:02 +00:00
a7ebf2c5db
Merge pull request 'fix(deps): update module golang.org/x/crypto to v0.47.0' ( #66 ) from renovate/golang.org-x-crypto-0.x into main
...
Docker Build and Push / build-and-push-tags (push) Has been skipped
Docker Build and Push / build-and-push-branches (push) Successful in 10m34s
Reviewed-on: #66
2026-01-14 10:42:52 +00:00
64c1038f4b
fix(deps): update module golang.org/x/crypto to v0.47.0
2026-01-14 10:41:47 +00:00
aafea49975
feat: integrate gRPC, session refactor, SSH headless support, and bug fixes
...
Docker Build and Push / build-and-push-tags (push) Successful in 11m34s
Docker Build and Push / build-and-push-branches (push) Has been skipped
- gRPC integration: slug edit handling, get sessions by user, and session requests from gRPC server
- Refactor gRPC client: simplify processEventStream and handle authenticated user info
- Session management improvements: use session key for registry, forwarder session termination, inject SessionRegistry interface
- SSH enhancements: add headless mode support for SSH -N connections
- Bug fixes:
- prevent subdomain changes to already-in-use subdomains
- fix startup order and environment variable keys
- atomic ClaimPort() to prevent race conditions
- Refactors:
- consolidate error handling
- replace Get/Set patterns with idiomatic Go interfaces
- change enums from string to int
- CI cleanup: remove renovate bot
Reviewed-on: #65
2026-01-14 10:16:43 +00:00
dbdf8094fa
refactor: replace Get/Set patterns with idiomatic Go interfaces
...
Docker Build and Push / build-and-push-branches (push) Has been skipped
Docker Build and Push / build-and-push-tags (push) Successful in 13m4s
- rename constructors to New
- remove Get/Set-style accessors
- replace string-based enums with iota-backed types
2026-01-14 16:54:10 +07:00
ae3ed52d16
fix(port): add atomic ClaimPort() to prevent race condition
...
- Replace GetPortStatus/SetPortStatus calls with atomic ClaimPort() operation.
- Fixed a logic error when handling headless tunneling.
2026-01-14 16:51:50 +07:00
fb638636bf
refactor: consolidate error handling with fail() function in session handlers
...
- Replace repetitive error handling code with fail() function in HandleGlobalRequest
- Standardize error response pattern across all handler methods
- Improve code maintainability and reduce duplication
2026-01-14 16:51:50 +07:00
da29df85b7
feat: add headless mode support for SSH -N connections
...
- use s.lifecycle.GetConnection().Wait() to block until SSH connection closes
- Prevent premature session closure in headless mode
In headless mode (ssh -N), there's no channel interaction to block on,
so the session would immediately return and close. Now blocking on
conn.Wait() keeps the session alive until the client disconnects.
2026-01-14 16:51:50 +07:00
8b0e08c629
fix(deps): update module github.com/caddyserver/certmagic to v0.25.1
2026-01-14 16:51:50 +07:00
f0804d6946
ci: remove renovate
2026-01-14 16:51:50 +07:00
09e526cd1e
feat: add authenticated user info and restructure handleConnection
...
- Display authenticated username in welcome page information box
- Refactor handleConnection function for better structure and clarity
2026-01-14 16:51:50 +07:00
887ebf78b1
refactor(grpc/client): simplify processEventStream with per-event handlers
...
- Extract eventHandlers dispatch table
- Add per-event handlers: handleSlugChange, handleGetSessions, handleTerminateSession
- Introduce sendNode helper to centralize send/error handling and preserve connection-error propagation
- Add protoToTunnelType for tunnel-type validation
- Map unknown proto.TunnelType to types.UNKNOWN in protoToTunnelType and return a descriptive error
- Reduce boilerplate and improve readability of processEventStream
2026-01-14 16:51:50 +07:00
bef7a49f88
feat: implement forwarder session termination
2026-01-14 16:51:50 +07:00
17633b4e3c
refactor: inject SessionRegistry interface instead of individual functions
2026-01-14 16:51:50 +07:00
f25d61d1d1
update: proto file to v1.3.0
2026-01-14 16:51:50 +07:00
8782b77b74
feat(session): use session key for registry
2026-01-14 16:51:50 +07:00
fc3cd886db
fix: use correct environment variable key
2026-01-14 16:51:50 +07:00
b0da57db0d
fix: startup order
2026-01-14 16:51:50 +07:00
0bd6eeadf3
feat: implement sessions request from grpc server
2026-01-14 16:51:50 +07:00
449f546e04
feat: implement sessions request from grpc server
2026-01-14 16:51:50 +07:00
4644420eee
feat: implement get sessions by user
2026-01-14 16:51:50 +07:00
c9bf9e62bd
feat(grpc): integrate slug edit handling
2026-01-14 16:51:50 +07:00
57d2136377
WIP: gRPC integration, initial implementation
2026-01-14 16:51:47 +07:00
8a34aaba80
WIP: gRPC integration, initial implementation
2026-01-14 16:51:35 +07:00
ff995a929e
revert 01ddc76f7e
...
revert Merge pull request 'fix(deps): update module github.com/caddyserver/certmagic to v0.25.1' (#58 ) from renovate/github.com-caddyserver-certmagic-0.x into main
2026-01-14 16:51:35 +07:00
32ac9c1749
fix(deps): update module github.com/caddyserver/certmagic to v0.25.1
...
# Conflicts:
# go.mod
2026-01-14 16:51:30 +07:00
e051a5b742
Merge pull request 'fix(deps): update module golang.org/x/crypto to v0.47.0' ( #64 ) from renovate/golang.org-x-crypto-0.x into main
Docker Build and Push / build-and-push-tags (push) Has been skipped
Docker Build and Push / build-and-push-branches (push) Successful in 9m51s
renovate / renovate (push) Successful in 55s
2026-01-12 18:20:57 +00:00
d35228759c
fix(deps): update module golang.org/x/crypto to v0.47.0
2026-01-12 18:20:53 +00:00
2e8767f17a
chore: upgrade TLS configuration to TLS 1.3
renovate / renovate (push) Successful in 1m34s
Docker Build and Push / build-and-push-tags (push) Has been skipped
Docker Build and Push / build-and-push-branches (push) Successful in 2m49s
2026-01-01 00:57:48 +07:00
7716eb7f29
perf: optimize header parsing with zero-copy ReadSlice
...
renovate / renovate (push) Successful in 35s
Docker Build and Push / build-and-push-branches (push) Successful in 4m39s
Docker Build and Push / build-and-push-tags (push) Successful in 4m52s
- Replace ReadString with ReadSlice to eliminate allocations
- Use bytes operations instead of strings
- Add FromBytes variant for in-memory parsing
2025-12-31 23:18:53 +07:00
b115369913
fix: wait for both goroutines before cleanup in HandleConnection
...
renovate / renovate (push) Successful in 1m42s
Docker Build and Push / build-and-push-branches (push) Successful in 4m46s
Docker Build and Push / build-and-push-tags (push) Successful in 4m51s
Only waited for one of two copy goroutines, leaking the second. Now waits
for both to complete before closing connections.
Fixes file descriptor leak causing 'too many open files' under load.
Fixes : #56
2025-12-31 22:22:51 +07:00
9276430fae
refactor(session): add registry to manage SSH sessions
...
renovate / renovate (push) Successful in 36s
Docker Build and Push / build-and-push-branches (push) Successful in 4m41s
Docker Build and Push / build-and-push-tags (push) Successful in 4m38s
- Implement thread-safe session registry with sync.RWMutex
- Add Registry interface for session management operations
- Support Get, Register, Update, and Remove session operations
- Enable dynamic slug updates for existing sessions
- Fix Connection closed by remote because HandleTCPIPForward run on a goroutine
2025-12-31 18:33:47 +07:00
f8a6f0bafe
refactor(session): add registry to manage SSH sessions
...
renovate / renovate (push) Successful in 39s
Docker Build and Push / build-and-push-branches (push) Successful in 4m27s
Docker Build and Push / build-and-push-tags (push) Successful in 4m22s
- Implement thread-safe session registry with sync.RWMutex
- Add Registry interface for session management operations
- Support Get, Register, Update, and Remove session operations
- Enable dynamic slug updates for existing sessions
2025-12-31 17:47:35 +07:00
acd02aadd3
refactor: restructure project architecture
renovate / renovate (push) Successful in 45s
Docker Build and Push / build-and-push-branches (push) Successful in 5m54s
Docker Build and Push / build-and-push-tags (push) Successful in 6m21s
2025-12-31 15:49:37 +07:00
878664e0ac
update: multi version build
renovate / renovate (push) Successful in 35s
Docker Build and Push / build-and-push-branches (push) Successful in 6m7s
Docker Build and Push / build-and-push-tags (push) Successful in 6m6s
2025-12-31 13:48:36 +07:00
20a88df330
update: multi version build
Docker Build and Push / build-and-push-tags (push) Has been skipped
renovate / renovate (push) Successful in 38s
Docker Build and Push / build-and-push-branches (push) Successful in 4m45s
2025-12-31 13:32:16 +07:00
075dd7ecad
feat: add versioning system
renovate / renovate (push) Successful in 38s
Docker Build and Push / build-and-push-branches (push) Has been skipped
Docker Build and Push / build-and-push-tags (push) Has been cancelled
2025-12-31 12:31:31 +07:00
ab34b34765
fix: prevent subdomain change to already-in-use subdomains
renovate / renovate (push) Successful in 35s
Docker Build and Push / build-and-push (push) Successful in 5m42s
2025-12-30 19:41:33 +07:00
514c4f9de1
Merge branch 'staging' of https://git.fossy.my.id/bagas/tunnel-please into staging
renovate / renovate (push) Successful in 20s
Docker Build and Push / build-and-push (push) Successful in 3m35s
2025-12-30 00:09:36 +07:00
d8330c684f
feat: make SSH interaction UI fully responsive
2025-12-30 00:09:18 +07:00
fbf182025b
Merge pull request 'main' ( #52 ) from main into staging
...
renovate / renovate (push) Successful in 21s
Reviewed-on: #52
2025-12-29 14:58:10 +00:00
1038c0861e
Merge pull request 'chore(config): migrate Renovate config' ( #51 ) from renovate/migrate-config into main
...
Reviewed-on: #51
2025-12-29 14:57:45 +00:00
64e0d5805e
chore(config): migrate config renovate.json
2025-12-29 14:57:09 +00:00
85f21e7698
feat(tui): update interaction layer to Bubble Tea TUI
renovate / renovate (push) Successful in 27s
Docker Build and Push / build-and-push (push) Successful in 3m49s
2025-12-29 21:55:39 +07:00
08565d845f
Merge pull request 'staging' ( #50 ) from staging into main
...
Docker Build and Push / build-and-push (push) Successful in 3m26s
Reviewed-on: #50
2025-12-29 10:17:00 +00:00
a7d9b2ab8a
update: renovate target pr to staging branch
renovate / renovate (push) Successful in 20s
2025-12-29 17:15:42 +07:00
bc8c5127a6
Merge pull request 'main' ( #49 ) from main into staging
...
renovate / renovate (push) Successful in 23s
Docker Build and Push / build-and-push (push) Successful in 3m26s
Reviewed-on: #49
2025-12-29 10:14:30 +00:00
a49b53e56f
Merge pull request 'chore(deps): update actions/checkout action to v6' ( #48 ) from renovate/actions-checkout-6.x into main
...
Docker Build and Push / build-and-push (push) Successful in 1m23s
Reviewed-on: #48
2025-12-29 10:04:10 +00:00
e5b5cc3ae5
chore(deps): update actions/checkout action to v6
2025-12-29 10:03:19 +00:00
b0b00764cf
Update .gitea/workflows/renovate.yml
renovate / renovate (push) Successful in 23s
2025-12-29 10:02:56 +00:00
8b6cdef2e9
Merge pull request 'chore(config): migrate Renovate config' ( #47 ) from renovate/migrate-config into main
...
Docker Build and Push / build-and-push (push) Successful in 1m25s
Reviewed-on: #47
2025-12-29 09:49:10 +00:00
653517f5be
chore(config): migrate config renovate.json
2025-12-29 09:48:12 +00:00
f11a92fb3b
ci: configure workflow to ignore non-Go file changes
Docker Build and Push / build-and-push (push) Successful in 3m30s
renovate / renovate (push) Successful in 22s
2025-12-29 15:58:24 +07:00
ac283626d3
docs: add Docker deployment section
2025-12-29 15:57:31 +07:00
ad7c5985b1
feat: add docker compose deployment configurations
2025-12-29 15:57:16 +07:00
2644b4521c
refactor: improve encapsulation
renovate / renovate (push) Successful in 20s
Docker Build and Push / build-and-push (push) Successful in 3m25s
2025-12-29 12:37:03 +07:00
d23ed27a4a
Merge pull request 'staging' ( #46 ) from staging into main
...
Docker Build and Push / build-and-push (push) Successful in 1m21s
renovate / renovate (push) Successful in 21s
Reviewed-on: #46
2025-12-28 13:19:25 +00:00
b5862bd7a0
feat: add configurable HTTP port
renovate / renovate (push) Successful in 20s
Docker Build and Push / build-and-push (push) Successful in 1m45s
2025-12-28 20:09:31 +07:00
bf7f7bd8da
feat: add configurable HTTPS port
renovate / renovate (push) Successful in 19s
Docker Build and Push / build-and-push (push) Successful in 1m24s
2025-12-28 20:03:49 +07:00
c3a469be64
refactor: use relative paths for certificates instead of absolute paths
renovate / renovate (push) Successful in 19s
Docker Build and Push / build-and-push (push) Successful in 1m32s
2025-12-28 19:53:03 +07:00
eee04daf80
feat: optimize Docker build for production
renovate / renovate (push) Successful in 19s
Docker Build and Push / build-and-push (push) Successful in 1m30s
2025-12-28 19:29:32 +07:00
1d918ef2aa
feat(port): disable TCP forwarding by default and refactor port manager
renovate / renovate (push) Successful in 28s
Docker Build and Push / build-and-push (push) Successful in 5m27s
2025-12-28 19:03:26 +07:00
a2676a4f30
Merge branch 'staging' of https://git.fossy.my.id/bagas/tunnel-please into staging
Docker Build and Push / build-and-push (push) Successful in 3m36s
renovate / renovate (push) Successful in 20s
2025-12-28 18:45:46 +07:00
83657d3206
refactor: remove unnecessary caching of environment data
2025-12-28 18:45:22 +07:00
6710aec4bf
Merge pull request 'main' ( #45 ) from main into staging
...
Docker Build and Push / build-and-push (push) Successful in 3m33s
renovate / renovate (push) Successful in 19s
Reviewed-on: #45
2025-12-28 08:08:58 +00:00
0ca6285ef5
Update .gitea/workflows/renovate.yml
Docker Build and Push / build-and-push (push) Successful in 3m32s
2025-12-28 08:08:10 +00:00
28cc069fdb
Merge pull request 'chore(deps): update golang docker tag to v1.25.5' ( #42 ) from renovate/golang-1.x into main
...
Docker Build and Push / build-and-push (push) Has been cancelled
renovate / renovate (push) Successful in 21s
Reviewed-on: #42
2025-12-28 08:07:44 +00:00
fe58e35e91
Merge pull request 'fix(deps): update module golang.org/x/crypto to v0.46.0' ( #43 ) from renovate/golang.org-x-crypto-0.x into main
...
renovate / renovate (push) Has been cancelled
Docker Build and Push / build-and-push (push) Has been cancelled
Reviewed-on: #43
2025-12-28 08:07:31 +00:00
6cac64412c
fix(deps): update module golang.org/x/crypto to v0.46.0
2025-12-28 08:01:56 +00:00
318003ac9f
chore(deps): update golang docker tag to v1.25.5
2025-12-28 08:01:36 +00:00
14fa237027
Merge pull request 'staging' ( #41 ) from staging into main
...
Docker Build and Push / build-and-push (push) Successful in 3m32s
renovate / renovate (push) Successful in 45s
Reviewed-on: #41
2025-12-28 07:55:00 +00:00
9a2a373eb3
feat: add renovate
Docker Build and Push / build-and-push (push) Successful in 6m3s
2025-12-28 14:51:00 +07:00
1b248a2957
Merge pull request 'feat/sync' ( #39 ) from feat/sync into staging
...
Docker Build and Push / build-and-push (push) Successful in 3m30s
Reviewed-on: #39
2025-12-28 06:28:02 +00:00
7348bdafb7
Delete test
2025-12-28 06:24:40 +00:00
cb8529f13e
Update test
2025-12-28 06:20:21 +00:00
fa6b097d66
Add test file
2025-12-28 13:19:45 +07:00
e3c4f59a77
Add GitHub to Gitea sync workflow
2025-12-28 13:15:05 +07:00
c69cd68820
feat: add certmagic for automatic TLS certificate management
Docker Build and Push / build-and-push (push) Successful in 3m28s
2025-12-26 23:44:50 +07:00
76d1202b8e
fix: correct logic when checking tcpip-forward request
Docker Build and Push / build-and-push (push) Successful in 5m34s
2025-12-26 23:17:13 +07:00
6dff735216
fix: prevent OOM by bounding io.Copy buffer usage
Docker Build and Push / build-and-push (push) Successful in 3m47s
2025-12-18 21:09:12 +07:00
7bc5a01ba7
feat: add pprof for debuging
Docker Build and Push / build-and-push (push) Successful in 3m51s
2025-12-18 18:30:49 +07:00
2a43f1441c
Merge pull request 'fix: potential resource leak' ( #38 ) from staging into main
...
Docker Build and Push / build-and-push (push) Successful in 4m27s
Reviewed-on: #38
2025-12-17 14:38:40 +00:00
6451304ed7
fix: potential resource leak
Docker Build and Push / build-and-push (push) Successful in 4m17s
2025-12-17 21:38:00 +07:00
5c6826fe89
Merge pull request 'fix: add nil check in Forwarder.Close to avoid panic (issue #36 )' ( #37 ) from staging into main
...
Docker Build and Push / build-and-push (push) Successful in 4m9s
Reviewed-on: #37
2025-12-12 08:36:51 +00:00
2725975d82
fix: add nil check in Forwarder.Close to avoid panic (issue #36 )
Docker Build and Push / build-and-push (push) Successful in 4m8s
2025-12-12 15:36:07 +07:00
b484981017
Merge pull request 'staging' ( #35 ) from staging into main
...
Docker Build and Push / build-and-push (push) Successful in 4m22s
Reviewed-on: #35
2025-12-09 16:40:44 +00:00
102c975388
Merge branch 'staging' of https://git.fossy.my.id/bagas/tunnel-please into staging
Docker Build and Push / build-and-push (push) Successful in 4m17s
2025-12-09 23:40:06 +07:00
ad034ef681
fix: resolve random SSH disconnections caused by 'unexpected bytes remain' errors
2025-12-09 23:39:22 +07:00
aceecfd14c
Merge pull request 'Update LICENSE.md' ( #34 ) from staging into main
...
Docker Build and Push / build-and-push (push) Successful in 6m44s
Reviewed-on: #34
2025-12-08 16:03:33 +00:00
a2a688fc4e
Update LICENSE.md
Docker Build and Push / build-and-push (push) Successful in 3m51s
2025-12-08 16:02:51 +00:00
1de7155771
Merge pull request 'fix: prevent race condition when channel is used before being set' ( #33 ) from staging into main
...
Docker Build and Push / build-and-push (push) Successful in 3m46s
Reviewed-on: #33
2025-12-08 15:47:01 +00:00
c951c41a9b
fix: prevent race condition when channel is used before being set
Docker Build and Push / build-and-push (push) Successful in 6m24s
2025-12-08 22:46:10 +07:00
79d77497a0
Merge pull request 'update: readme' ( #32 ) from staging into main
...
Docker Build and Push / build-and-push (push) Successful in 6m22s
Reviewed-on: #32
2025-12-08 14:13:23 +00:00
cb08bb7673
update: readme
Docker Build and Push / build-and-push (push) Successful in 6m24s
2025-12-08 21:13:16 +07:00
20b90c1727
Merge pull request 'Update .gitea/workflows/build.yml' ( #31 ) from staging into main
...
Docker Build and Push / build-and-push (push) Successful in 5m9s
Reviewed-on: #31
2025-12-08 13:37:07 +00:00
5d9f7aee92
Update .gitea/workflows/build.yml
Docker Build and Push / build-and-push (push) Successful in 5m26s
2025-12-08 13:35:46 +00:00
a1e920f6b5
Merge pull request 'refactor: remove magic numbers and replace with named constants' ( #30 ) from staging into main
...
Docker Build and Push / build-and-push (push) Successful in 6m10s
Reviewed-on: bagas/tunnl_please#30
2025-12-08 12:46:56 +00:00
dd96c8fe75
refactor: remove magic numbers and replace with named constants
Docker Build and Push / build-and-push (push) Successful in 6m20s
2025-12-08 19:46:04 +07:00
b5045409cb
Merge pull request 'feat: add droping conn command' ( #29 ) from staging into main
...
Docker Build and Push / build-and-push (push) Successful in 4m30s
Reviewed-on: bagas/tunnl_please#29
2025-12-07 09:30:47 +00:00
ba5f702e36
feat: add droping conn command
Docker Build and Push / build-and-push (push) Successful in 4m38s
2025-12-07 15:26:37 +07:00
33e6ad08d7
Merge pull request 'staging' ( #28 ) from staging into main
...
Docker Build and Push / build-and-push (push) Successful in 6m0s
Reviewed-on: bagas/tunnl_please#28
2025-12-06 16:47:20 +00:00
8c8fdf251d
refactor: remove error shadowing
Docker Build and Push / build-and-push (push) Successful in 6m13s
2025-12-06 23:47:02 +07:00
03d3c8e4fb
feat: make interaction more interactive
2025-12-06 23:46:09 +07:00
fd513d7bc9
Merge pull request 'refactor: instantiate new session object once forwarding is approved' ( #27 ) from staging into main
...
Docker Build and Push / build-and-push (push) Successful in 6m2s
Reviewed-on: bagas/tunnl_please#27
2025-12-06 16:14:22 +00:00
9bd2bead9e
refactor: instantiate new session object once forwarding is approved
Docker Build and Push / build-and-push (push) Successful in 6m6s
2025-12-06 23:14:13 +07:00
73e7df6a3b
Merge pull request 'fix: correct read/write handling in CustomWriter' ( #26 ) from staging into main
...
Docker Build and Push / build-and-push (push) Successful in 5m14s
Reviewed-on: bagas/tunnl_please#26
2025-12-06 15:20:11 +00:00
69c3e78728
fix: correct read/write handling in CustomWriter
Docker Build and Push / build-and-push (push) Successful in 5m7s
2025-12-06 22:18:43 +07:00
d2c5b2a4db
Merge pull request 'staging' ( #25 ) from staging into main
...
Docker Build and Push / build-and-push (push) Successful in 4m21s
Reviewed-on: bagas/tunnl_please#25
2025-12-05 17:09:59 +00:00
0b8bc1dbba
Merge pull request 'refactor' ( #24 ) from refactor into staging
...
Docker Build and Push / build-and-push (push) Successful in 4m25s
Reviewed-on: bagas/tunnl_please#24
2025-12-05 17:03:36 +00:00
43178d51b5
refactor: remove docker compose
2025-12-06 00:03:19 +07:00
368cc0b3e3
fix: resolve nil pointer dereference in interaction on TLS request
2025-12-06 00:01:25 +07:00
7819dcc430
Merge pull request 'refactor' ( #23 ) from refactor into staging
...
Docker Build and Push / build-and-push (push) Successful in 4m23s
Reviewed-on: bagas/tunnl_please#23
2025-12-05 15:28:49 +00:00
af951b8fa7
fix: discard unused buffers in the ssh channel before disconnecting
2025-12-05 22:26:38 +07:00
990bccbff7
update: handle message deletion properly
2025-12-05 22:24:46 +07:00
659f6c3ee7
refactor: move CreateForwardedTCPIPPayload to forwarder interface
2025-12-05 13:49:33 +07:00
36790cab44
Merge pull request 'refactor' ( #22 ) from refactor into staging
...
Docker Build and Push / build-and-push (push) Successful in 4m33s
Reviewed-on: bagas/tunnl_please#22
2025-12-04 15:50:57 +00:00
7a31047bb9
refactor: restructure session initialization to avoid circular references
2025-12-04 22:48:15 +07:00
039e979142
refactor: restructure session initialization to avoid circular references
2025-12-04 19:32:00 +07:00
cad22cd25a
Merge pull request 'refactor: change to gitea action' ( #21 ) from staging into main
...
Docker Build and Push / build-and-push (push) Successful in 4m19s
Reviewed-on: bagas/tunnl_please#21
2025-12-03 14:21:50 +00:00
82050a738f
refactor: change to gitea action
Docker Build and Push / build-and-push (push) Successful in 6m46s
2025-12-03 21:21:40 +07:00
0cb02f5220
Merge pull request 'refactor: remove profiling' ( #20 ) from staging into main
...
Docker Build and Push / build-and-push (push) Has been cancelled
Reviewed-on: bagas/tunnl_please#20
2025-12-03 14:20:52 +00:00
5efa83633f
refactor: remove profiling
Docker Build and Push / build-and-push (push) Has been cancelled
2025-12-03 21:20:40 +07:00
7bee2f2c9b
Merge pull request 'staging' ( #19 ) from staging into main
...
Docker Build and Push / build-and-push (push) Failing after 2s
Reviewed-on: bagas/tunnl_please#19
2025-12-03 14:18:20 +00:00
515bc30559
fix: conn reader stuck when header have body
Docker Build and Push / build-and-push (push) Has been cancelled
2025-12-03 21:14:42 +07:00
a3eb08e7ae
fix: try writing to a close network
Docker Build and Push / build-and-push (push) Has been cancelled
2025-12-02 22:17:14 +07:00
f59de03a50
fix: panic due to nil pointer when disconnecting a session
Docker Build and Push / build-and-push (push) Has been cancelled
2025-12-02 21:52:23 +07:00
626b6b5feb
fix: unexpected byte size
Docker Build and Push / build-and-push (push) Has been cancelled
2025-12-02 20:15:51 +07:00
b967619a3a
fix: chunk request not sent properly
Docker Build and Push / build-and-push (push) Has been cancelled
2025-12-02 19:17:20 +07:00
ecd6ab2618
feat: head ping
Docker Build and Push / build-and-push (push) Has been cancelled
2025-12-02 18:44:30 +07:00
52a7adc4f7
feat: head ping
Docker Build and Push / build-and-push (push) Has been cancelled
2025-12-02 18:21:33 +07:00
d7d6e24a42
feat: add header factory
Docker Build and Push / build-and-push (push) Has been cancelled
2025-12-02 17:14:17 +07:00