Commit Graph
100 Commits
Author SHA1 Message Date
bagas 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
bagas 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
bagas 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
bagas 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
bagas 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
bagas 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
bagas 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
bagas 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
bagas 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
bagas 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
bagas 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
bagas 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
bagas 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
bagas 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
bagas 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
bagas 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
bagas 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
bagas f0804d6946 ci: remove renovate 2026-01-14 16:51:50 +07:00
bagas 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
bagas 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
bagas bef7a49f88 feat: implement forwarder session termination 2026-01-14 16:51:50 +07:00
bagas 17633b4e3c refactor: inject SessionRegistry interface instead of individual functions 2026-01-14 16:51:50 +07:00
bagas f25d61d1d1 update: proto file to v1.3.0 2026-01-14 16:51:50 +07:00
bagas 8782b77b74 feat(session): use session key for registry 2026-01-14 16:51:50 +07:00
bagas fc3cd886db fix: use correct environment variable key 2026-01-14 16:51:50 +07:00
bagas b0da57db0d fix: startup order 2026-01-14 16:51:50 +07:00
bagas 0bd6eeadf3 feat: implement sessions request from grpc server 2026-01-14 16:51:50 +07:00
bagas 449f546e04 feat: implement sessions request from grpc server 2026-01-14 16:51:50 +07:00
bagas 4644420eee feat: implement get sessions by user 2026-01-14 16:51:50 +07:00
bagas c9bf9e62bd feat(grpc): integrate slug edit handling 2026-01-14 16:51:50 +07:00
bagas 57d2136377 WIP: gRPC integration, initial implementation 2026-01-14 16:51:47 +07:00
bagas 8a34aaba80 WIP: gRPC integration, initial implementation 2026-01-14 16:51:35 +07:00
bagas 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
bagas 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
bagas 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
bagas 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
bagas 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
bagas 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
bagas 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
bagas 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
bagas 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
bagas 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
bagas 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
bagas 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
bagas d8330c684f feat: make SSH interaction UI fully responsive 2025-12-30 00:09:18 +07:00
bagas 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
bagas 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
bagas 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
bagas 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
bagas a7d9b2ab8a update: renovate target pr to staging branch
renovate / renovate (push) Successful in 20s
2025-12-29 17:15:42 +07:00
bagas 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
bagas 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
bagas b0b00764cf Update .gitea/workflows/renovate.yml
renovate / renovate (push) Successful in 23s
2025-12-29 10:02:56 +00:00
bagas 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
bagas 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
bagas ac283626d3 docs: add Docker deployment section 2025-12-29 15:57:31 +07:00
bagas ad7c5985b1 feat: add docker compose deployment configurations 2025-12-29 15:57:16 +07:00
bagas 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
bagas 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
bagas 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
bagas 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
bagas 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
bagas 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
bagas 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
bagas 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
bagas 83657d3206 refactor: remove unnecessary caching of environment data 2025-12-28 18:45:22 +07:00
bagas 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
bagas 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
bagas 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
bagas 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
bagas 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
bagas 9a2a373eb3 feat: add renovate
Docker Build and Push / build-and-push (push) Successful in 6m3s
2025-12-28 14:51:00 +07:00
bagas 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
bagas 7348bdafb7 Delete test 2025-12-28 06:24:40 +00:00
bagas cb8529f13e Update test 2025-12-28 06:20:21 +00:00
bagas fa6b097d66 Add test file 2025-12-28 13:19:45 +07:00
bagas e3c4f59a77 Add GitHub to Gitea sync workflow 2025-12-28 13:15:05 +07:00
bagas 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
bagas 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
bagas 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
bagas 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
bagas 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
bagas 6451304ed7 fix: potential resource leak
Docker Build and Push / build-and-push (push) Successful in 4m17s
2025-12-17 21:38:00 +07:00
bagas 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
bagas 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
bagas 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
bagas 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
bagas ad034ef681 fix: resolve random SSH disconnections caused by 'unexpected bytes remain' errors 2025-12-09 23:39:22 +07:00
bagas 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
bagas a2a688fc4e Update LICENSE.md
Docker Build and Push / build-and-push (push) Successful in 3m51s
2025-12-08 16:02:51 +00:00
bagas 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
bagas 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
bagas 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
bagas cb08bb7673 update: readme
Docker Build and Push / build-and-push (push) Successful in 6m24s
2025-12-08 21:13:16 +07:00
bagas 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
bagas 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
bagas 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
bagas 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
bagas 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
bagas 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