summaryrefslogtreecommitdiff
path: root/internal/sshenv/sshenv.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/sshenv/sshenv.go')
-rw-r--r--internal/sshenv/sshenv.go35
1 files changed, 33 insertions, 2 deletions
diff --git a/internal/sshenv/sshenv.go b/internal/sshenv/sshenv.go
index 387feb2..1ec177c 100644
--- a/internal/sshenv/sshenv.go
+++ b/internal/sshenv/sshenv.go
@@ -5,8 +5,39 @@ import (
"strings"
)
-func LocalAddr() string {
- address := os.Getenv("SSH_CONNECTION")
+const (
+ // GitProtocolEnv defines the ENV name holding the git protocol used
+ GitProtocolEnv = "GIT_PROTOCOL"
+ // SSHConnectionEnv defines the ENV holding the SSH connection
+ SSHConnectionEnv = "SSH_CONNECTION"
+ // SSHOriginalCommandEnv defines the ENV containing the original SSH command
+ SSHOriginalCommandEnv = "SSH_ORIGINAL_COMMAND"
+)
+
+type Env struct {
+ GitProtocolVersion string
+ IsSSHConnection bool
+ OriginalCommand string
+ RemoteAddr string
+}
+
+func NewFromEnv() Env {
+ isSSHConnection := false
+ if ok := os.Getenv(SSHConnectionEnv); ok != "" {
+ isSSHConnection = true
+ }
+
+ return Env{
+ GitProtocolVersion: os.Getenv(GitProtocolEnv),
+ IsSSHConnection: isSSHConnection,
+ RemoteAddr: remoteAddrFromEnv(),
+ OriginalCommand: os.Getenv(SSHOriginalCommandEnv),
+ }
+}
+
+// remoteAddrFromEnv returns the connection address from ENV string
+func remoteAddrFromEnv() string {
+ address := os.Getenv(SSHConnectionEnv)
if address != "" {
return strings.Fields(address)[0]