summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfeistel <6742251-feistel@users.noreply.gitlab.com>2021-09-08 09:54:44 +0000
committerfeistel <6742251-feistel@users.noreply.gitlab.com>2021-09-08 09:54:44 +0000
commit8b4621aa6cba1674192ffb6e3c3e801a567f2516 (patch)
tree734e8bd67a8a14d4c9d87c049638f0a8d38171b3
parent4f5b7512c3c1ad7b67b044976b5ac3aae413beb2 (diff)
downloadgitlab-shell-8b4621aa6cba1674192ffb6e3c3e801a567f2516.tar.gz
refactor: add acceptargs field to executable
parse logic will only run if the executable accept args. healthcheck is the only one not accepting arguments.
-rw-r--r--cmd/check/main.go2
-rw-r--r--cmd/gitlab-shell-authorized-keys-check/main.go2
-rw-r--r--cmd/gitlab-shell-authorized-principals-check/main.go2
-rw-r--r--cmd/gitlab-shell/main.go2
-rw-r--r--internal/command/command.go10
-rw-r--r--internal/command/command_test.go8
-rw-r--r--internal/command/commandargs/command_args.go2
-rw-r--r--internal/executable/executable.go12
-rw-r--r--internal/executable/executable_test.go4
9 files changed, 24 insertions, 20 deletions
diff --git a/cmd/check/main.go b/cmd/check/main.go
index a6a8fa3..44d8175 100644
--- a/cmd/check/main.go
+++ b/cmd/check/main.go
@@ -19,7 +19,7 @@ func main() {
ErrOut: os.Stderr,
}
- executable, err := executable.New(executable.Healthcheck)
+ executable, err := executable.New(executable.Healthcheck, false)
if err != nil {
fmt.Fprintln(readWriter.ErrOut, "Failed to determine executable, exiting")
os.Exit(1)
diff --git a/cmd/gitlab-shell-authorized-keys-check/main.go b/cmd/gitlab-shell-authorized-keys-check/main.go
index 81937a7..cda3e0b 100644
--- a/cmd/gitlab-shell-authorized-keys-check/main.go
+++ b/cmd/gitlab-shell-authorized-keys-check/main.go
@@ -20,7 +20,7 @@ func main() {
ErrOut: os.Stderr,
}
- executable, err := executable.New(executable.AuthorizedKeysCheck)
+ executable, err := executable.New(executable.AuthorizedKeysCheck, true)
if err != nil {
fmt.Fprintln(readWriter.ErrOut, "Failed to determine executable, exiting")
os.Exit(1)
diff --git a/cmd/gitlab-shell-authorized-principals-check/main.go b/cmd/gitlab-shell-authorized-principals-check/main.go
index 8d0aba8..87f7fa3 100644
--- a/cmd/gitlab-shell-authorized-principals-check/main.go
+++ b/cmd/gitlab-shell-authorized-principals-check/main.go
@@ -20,7 +20,7 @@ func main() {
ErrOut: os.Stderr,
}
- executable, err := executable.New(executable.AuthorizedPrincipalsCheck)
+ executable, err := executable.New(executable.AuthorizedPrincipalsCheck, true)
if err != nil {
fmt.Fprintln(readWriter.ErrOut, "Failed to determine executable, exiting")
os.Exit(1)
diff --git a/cmd/gitlab-shell/main.go b/cmd/gitlab-shell/main.go
index e139ab7..fe52bfc 100644
--- a/cmd/gitlab-shell/main.go
+++ b/cmd/gitlab-shell/main.go
@@ -34,7 +34,7 @@ func main() {
ErrOut: os.Stderr,
}
- executable, err := executable.New(executable.GitlabShell)
+ executable, err := executable.New(executable.GitlabShell, true)
if err != nil {
fmt.Fprintln(readWriter.ErrOut, "Failed to determine executable, exiting")
os.Exit(1)
diff --git a/internal/command/command.go b/internal/command/command.go
index 6696f0f..dadf41a 100644
--- a/internal/command/command.go
+++ b/internal/command/command.go
@@ -29,9 +29,13 @@ type Command interface {
}
func New(e *executable.Executable, arguments []string, env sshenv.Env, config *config.Config, readWriter *readwriter.ReadWriter) (Command, error) {
- args, err := commandargs.Parse(e, arguments, env)
- if err != nil {
- return nil, err
+ var args commandargs.CommandArgs
+ if e.AcceptArgs {
+ var err error
+ args, err = commandargs.Parse(e, arguments, env)
+ if err != nil {
+ return nil, err
+ }
}
if cmd := buildCommand(e, args, config, readWriter); cmd != nil {
diff --git a/internal/command/command_test.go b/internal/command/command_test.go
index 3617d39..a538745 100644
--- a/internal/command/command_test.go
+++ b/internal/command/command_test.go
@@ -26,10 +26,10 @@ import (
)
var (
- authorizedKeysExec = &executable.Executable{Name: executable.AuthorizedKeysCheck}
- authorizedPrincipalsExec = &executable.Executable{Name: executable.AuthorizedPrincipalsCheck}
- checkExec = &executable.Executable{Name: executable.Healthcheck}
- gitlabShellExec = &executable.Executable{Name: executable.GitlabShell}
+ authorizedKeysExec = &executable.Executable{Name: executable.AuthorizedKeysCheck, AcceptArgs: true}
+ authorizedPrincipalsExec = &executable.Executable{Name: executable.AuthorizedPrincipalsCheck, AcceptArgs: true}
+ checkExec = &executable.Executable{Name: executable.Healthcheck, AcceptArgs: false}
+ gitlabShellExec = &executable.Executable{Name: executable.GitlabShell, AcceptArgs: true}
basicConfig = &config.Config{GitlabUrl: "http+unix://gitlab.socket"}
advancedConfig = &config.Config{GitlabUrl: "http+unix://gitlab.socket", SslCertDir: "/tmp/certs"}
diff --git a/internal/command/commandargs/command_args.go b/internal/command/commandargs/command_args.go
index c82732f..a01b8b2 100644
--- a/internal/command/commandargs/command_args.go
+++ b/internal/command/commandargs/command_args.go
@@ -25,8 +25,6 @@ func Parse(e *executable.Executable, arguments []string, env sshenv.Env) (Comman
args = &AuthorizedKeys{Arguments: arguments}
case executable.AuthorizedPrincipalsCheck:
args = &AuthorizedPrincipals{Arguments: arguments}
- case executable.Healthcheck:
- return args, nil
default:
return nil, errors.New(fmt.Sprintf("unknown executable: %s", e.Name))
}
diff --git a/internal/executable/executable.go b/internal/executable/executable.go
index c6355b9..8b6b586 100644
--- a/internal/executable/executable.go
+++ b/internal/executable/executable.go
@@ -14,8 +14,9 @@ const (
)
type Executable struct {
- Name string
- RootDir string
+ Name string
+ RootDir string
+ AcceptArgs bool
}
var (
@@ -23,7 +24,7 @@ var (
osExecutable = os.Executable
)
-func New(name string) (*Executable, error) {
+func New(name string, acceptArgs bool) (*Executable, error) {
path, err := osExecutable()
if err != nil {
return nil, err
@@ -35,8 +36,9 @@ func New(name string) (*Executable, error) {
}
executable := &Executable{
- Name: name,
- RootDir: rootDir,
+ Name: name,
+ RootDir: rootDir,
+ AcceptArgs: acceptArgs,
}
return executable, nil
diff --git a/internal/executable/executable_test.go b/internal/executable/executable_test.go
index 3915f1a..71984c3 100644
--- a/internal/executable/executable_test.go
+++ b/internal/executable/executable_test.go
@@ -59,7 +59,7 @@ func TestNewSuccess(t *testing.T) {
fake.Setup()
defer fake.Cleanup()
- result, err := New("gitlab-shell")
+ result, err := New("gitlab-shell", true)
require.NoError(t, err)
require.Equal(t, result.Name, "gitlab-shell")
@@ -96,7 +96,7 @@ func TestNewFailure(t *testing.T) {
fake.Setup()
defer fake.Cleanup()
- _, err := New("gitlab-shell")
+ _, err := New("gitlab-shell", true)
require.Error(t, err)
})