summaryrefslogtreecommitdiff
path: root/go/internal/command/commandargs
diff options
context:
space:
mode:
Diffstat (limited to 'go/internal/command/commandargs')
-rw-r--r--go/internal/command/commandargs/authorized_keys.go51
-rw-r--r--go/internal/command/commandargs/command_args.go2
-rw-r--r--go/internal/command/commandargs/command_args_test.go33
3 files changed, 84 insertions, 2 deletions
diff --git a/go/internal/command/commandargs/authorized_keys.go b/go/internal/command/commandargs/authorized_keys.go
new file mode 100644
index 0000000..2733954
--- /dev/null
+++ b/go/internal/command/commandargs/authorized_keys.go
@@ -0,0 +1,51 @@
+package commandargs
+
+import (
+ "errors"
+ "fmt"
+)
+
+type AuthorizedKeys struct {
+ Arguments []string
+ ExpectedUser string
+ ActualUser string
+ Key string
+}
+
+func (ak *AuthorizedKeys) Parse() error {
+ if err := ak.validate(); err != nil {
+ return err
+ }
+
+ ak.ExpectedUser = ak.Arguments[0]
+ ak.ActualUser = ak.Arguments[1]
+ ak.Key = ak.Arguments[2]
+
+ return nil
+}
+
+func (ak *AuthorizedKeys) GetArguments() []string {
+ return ak.Arguments
+}
+
+func (ak *AuthorizedKeys) validate() error {
+ argsSize := len(ak.Arguments)
+
+ if argsSize != 3 {
+ return errors.New(fmt.Sprintf("# Insufficient arguments. %d. Usage\n#\tgitlab-shell-authorized-keys-check <expected-username> <actual-username> <key>", argsSize))
+ }
+
+ expectedUsername := ak.Arguments[0]
+ actualUsername := ak.Arguments[1]
+ key := ak.Arguments[2]
+
+ if expectedUsername == "" || actualUsername == "" {
+ return errors.New("# No username provided")
+ }
+
+ if key == "" {
+ return errors.New("# No key provided")
+ }
+
+ return nil
+}
diff --git a/go/internal/command/commandargs/command_args.go b/go/internal/command/commandargs/command_args.go
index 5338d6b..dfdf8e5 100644
--- a/go/internal/command/commandargs/command_args.go
+++ b/go/internal/command/commandargs/command_args.go
@@ -17,6 +17,8 @@ func Parse(e *executable.Executable, arguments []string) (CommandArgs, error) {
switch e.Name {
case executable.GitlabShell:
args = &Shell{Arguments: arguments}
+ case executable.AuthorizedKeysCheck:
+ args = &AuthorizedKeys{Arguments: arguments}
}
if err := args.Parse(); err != nil {
diff --git a/go/internal/command/commandargs/command_args_test.go b/go/internal/command/commandargs/command_args_test.go
index 148c987..e981c22 100644
--- a/go/internal/command/commandargs/command_args_test.go
+++ b/go/internal/command/commandargs/command_args_test.go
@@ -120,6 +120,11 @@ func TestParseSuccess(t *testing.T) {
arguments: []string{},
expectedArgs: &Shell{Arguments: []string{}, SshArgs: []string{"git-lfs-authenticate", "group/repo", "download"}, CommandType: LfsAuthenticate},
}, {
+ desc: "It parses authorized-keys command",
+ executable: &executable.Executable{Name: executable.AuthorizedKeysCheck},
+ arguments: []string{"git", "git", "key"},
+ expectedArgs: &AuthorizedKeys{Arguments: []string{"git", "git", "key"}, ExpectedUser: "git", ActualUser: "git", Key: "key"},
+ }, {
desc: "Unknown executable",
executable: &executable.Executable{Name: "unknown"},
arguments: []string{},
@@ -162,7 +167,31 @@ func TestParseFailure(t *testing.T) {
"SSH_ORIGINAL_COMMAND": `git receive-pack "`,
},
arguments: []string{},
- expectedError: "Invalid SSH allowed",
+ expectedError: "Invalid SSH command",
+ },
+ {
+ desc: "With not enough arguments for the AuthorizedKeysCheck",
+ executable: &executable.Executable{Name: executable.AuthorizedKeysCheck},
+ arguments: []string{"user"},
+ expectedError: "# Insufficient arguments. 1. Usage\n#\tgitlab-shell-authorized-keys-check <expected-username> <actual-username> <key>",
+ },
+ {
+ desc: "With too many arguments for the AuthorizedKeysCheck",
+ executable: &executable.Executable{Name: executable.AuthorizedKeysCheck},
+ arguments: []string{"user", "user", "key", "something-else"},
+ expectedError: "# Insufficient arguments. 4. Usage\n#\tgitlab-shell-authorized-keys-check <expected-username> <actual-username> <key>",
+ },
+ {
+ desc: "With missing username for the AuthorizedKeysCheck",
+ executable: &executable.Executable{Name: executable.AuthorizedKeysCheck},
+ arguments: []string{"user", "", "key"},
+ expectedError: "# No username provided",
+ },
+ {
+ desc: "With missing key for the AuthorizedKeysCheck",
+ executable: &executable.Executable{Name: executable.AuthorizedKeysCheck},
+ arguments: []string{"user", "user", ""},
+ expectedError: "# No key provided",
},
}
@@ -173,7 +202,7 @@ func TestParseFailure(t *testing.T) {
_, err := Parse(tc.executable, tc.arguments)
- require.Error(t, err, tc.expectedError)
+ require.EqualError(t, err, tc.expectedError)
})
}
}