diff options
Diffstat (limited to 'internal/sshenv/sshenv.go')
-rw-r--r-- | internal/sshenv/sshenv.go | 35 |
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] |