Commit Graph

55 Commits

Author SHA1 Message Date
f1d20905d0 refactor(forwarder): remove CreateForwardedTCPIPPayload method
SonarQube Scan / SonarQube Trigger (push) Successful in 2m32s
- OpenForwardedChannel now privately calls CreateForwardedTCPIPPayload
- Removed an unused function
2026-01-25 20:49:12 +07:00
21b551a66d feat(http): add http header size limit for initial request
SonarQube Scan / SonarQube Trigger (push) Successful in 2m18s
2026-01-25 18:47:54 +07:00
05bf9d6045 refactor(header): NewRequest to accept only []byte
SonarQube Scan / SonarQube Trigger (push) Failing after 54s
2026-01-25 18:45:08 +07:00
5cd3c201f2 test(config): add test for keyloc and header size
SonarQube Scan / SonarQube Trigger (push) Failing after 56s
2026-01-25 18:17:37 +07:00
9cdce24030 test(stream): migrate mocking to testify
SonarQube Scan / SonarQube Trigger (push) Successful in 2m21s
2026-01-25 18:14:29 +07:00
8b44e4db4e refactor: remove duplicate channel management helpers from HTTP handler
SonarQube Scan / SonarQube Trigger (push) Successful in 2m12s
2026-01-25 13:47:57 +07:00
2b488a5ab5 refactor: remove custom parsing functions and use ssh.Marshal/ssh.Unmarshal for serialization
SonarQube Scan / SonarQube Trigger (push) Successful in 2m14s
2026-01-25 12:21:25 +07:00
d5f7ebf597 test(lifecycle): add unit tests for lifecycle behavior
SonarQube Scan / SonarQube Trigger (push) Successful in 2m15s
2026-01-24 20:28:30 +07:00
f0ab62a753 fix: properly initialize tlsStoragePath in config load
SonarQube Scan / SonarQube Trigger (push) Successful in 2m31s
2026-01-24 17:59:11 +07:00
9c857f6148 refactor(transport): reduce cognitive complexity and clean up public API
SonarQube Scan / SonarQube Trigger (push) Successful in 2m29s
2026-01-24 17:41:41 +07:00
42c428c83d test(bootstrap): add unit tests for initial bootstrap behavior
SonarQube Scan / SonarQube Trigger (push) Successful in 2m30s
2026-01-24 16:15:30 +07:00
1171b18340 refactor: decouple application startup logic from main
SonarQube Scan / SonarQube Trigger (push) Successful in 2m18s
2026-01-24 00:21:40 +07:00
b7d6f2bae2 fix: handle error return values for privateKeyFile.Close and pubKeyFile.Close
SonarQube Scan / SonarQube Trigger (push) Has been cancelled
2026-01-23 20:27:20 +07:00
8e8d9eaf39 chore: remove unused headerBuf variable
SonarQube Scan / SonarQube Trigger (push) Successful in 2m13s
2026-01-23 20:05:40 +07:00
e522ffa44f test(version): add unit tests for version behavior
SonarQube Scan / SonarQube Trigger (push) Successful in 1m45s
2026-01-23 15:41:00 +07:00
6e6b251a7b test(client): add unit tests for grpc client behavior
SonarQube Scan / SonarQube Trigger (push) Successful in 1m54s
2026-01-23 15:27:20 +07:00
24ea464c7a fix(client): reduce cognitive complexity and fix typo (go:S3776)
SonarQube Scan / SonarQube Trigger (push) Successful in 1m51s
2026-01-23 14:57:06 +07:00
4334dfe9b4 test(key): add unit tests for key behavior
SonarQube Scan / SonarQube Trigger (push) Successful in 2m1s
2026-01-23 14:17:18 +07:00
6d57dfa34c test(config): add unit tests for config behavior
SonarQube Scan / SonarQube Trigger (push) Successful in 1m35s
2026-01-22 21:24:58 +07:00
7159300fa2 test(stream): add unit tests for stream behavior
SonarQube Scan / SonarQube Trigger (push) Successful in 1m39s
- Fix duplicating EOF error when closing SSH connection
- Add new SessionStatusCLOSED type
2026-01-22 21:04:05 +07:00
d7e1f3fa63 test(header): add unit tests for header behavior
SonarQube Scan / SonarQube Trigger (push) Successful in 1m39s
2026-01-22 19:47:31 +07:00
b0249c45ae test(transport): add unit tests for transport behavior using Testify
SonarQube Scan / SonarQube Trigger (push) Successful in 1m51s
2026-01-22 19:22:35 +07:00
9d03f5507f test(random): add unit tests for random behavior
SonarQube Scan / SonarQube Trigger (push) Successful in 1m37s
- 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-22 13:28:10 +07:00
ae31e573b5 test(port): add unit tests for port behavior
SonarQube Scan / SonarQube Trigger (push) Successful in 1m35s
2026-01-22 12:39:46 +07:00
a350692e81 test(middleware): add unit tests for middleware behavior
SonarQube Scan / SonarQube Trigger (push) Successful in 1m30s
- 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-22 12:34:24 +07:00
ed11a0b801 test(registry): add unit tests for registry behavior
SonarQube Scan / SonarQube Trigger (push) Successful in 47s
2026-01-22 00:47:53 +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
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
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
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
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
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
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
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
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
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