summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAsh McKenzie <amckenzie@gitlab.com>2018-08-01 00:00:38 +1000
committerAsh McKenzie <amckenzie@gitlab.com>2018-08-01 10:12:09 +1000
commita686b9a0ee4c180b272b26e45c9a2c6cb84c742c (patch)
treed4a8166e4c873dcbc369ce352c6c2b1ef078de34
parentfeda260c55390ee401c0b84bab41461148db7116 (diff)
downloadgitlab-shell-a686b9a0ee4c180b272b26e45c9a2c6cb84c742c.tar.gz
Use Struct::ParsedCommand to keep vars close
-rw-r--r--lib/gitlab_shell.rb34
1 files changed, 21 insertions, 13 deletions
diff --git a/lib/gitlab_shell.rb b/lib/gitlab_shell.rb
index 6fde88a..68d39bc 100644
--- a/lib/gitlab_shell.rb
+++ b/lib/gitlab_shell.rb
@@ -16,6 +16,8 @@ class GitlabShell
GIT_COMMANDS = [GIT_UPLOAD_PACK_COMMAND, GIT_RECEIVE_PACK_COMMAND,
GIT_UPLOAD_ARCHIVE_COMMAND, GIT_LFS_AUTHENTICATE_COMMAND].freeze
+ Struct.new('ParsedCommand', :command, :git_access_command, :repo_name, :args)
+
def initialize(key_str)
@key_str = key_str
@config = GitlabConfig.new
@@ -30,10 +32,9 @@ class GitlabShell
return true
end
- command, git_access_command, repo_name, args = parse_cmd(origin_cmd)
- action = determine_action(command, git_access_command, repo_name)
-
- action.execute(command, args)
+ parsed_command = parse_cmd(origin_cmd)
+ action = determine_action(parsed_command)
+ action.execute(parsed_command.command, parsed_command.args)
rescue GitlabNet::ApiUnreachableError
$stderr.puts "GitLab: Failed to authorize your Git request: internal API unreachable"
false
@@ -71,7 +72,9 @@ class GitlabShell
git_access_command = command
- return [command, git_access_command, nil, args] if command == API_2FA_RECOVERY_CODES_COMMAND
+ if command == API_2FA_RECOVERY_CODES_COMMAND
+ return Struct::ParsedCommand.new(command, git_access_command, nil, args)
+ end
raise DisallowedCommandError unless GIT_COMMANDS.include?(command)
@@ -92,20 +95,25 @@ class GitlabShell
repo_name = args.last
end
- [command, git_access_command, repo_name, args]
+ Struct::ParsedCommand.new(command, git_access_command, repo_name, args)
end
- def determine_action(command, git_access_command, repo_name)
- return Action::API2FARecovery.new(key) if command == API_2FA_RECOVERY_CODES_COMMAND
+ def determine_action(parsed_command)
+ return Action::API2FARecovery.new(key) if parsed_command.command == API_2FA_RECOVERY_CODES_COMMAND
GitlabMetrics.measure('verify-access') do
# GitlatNet#check_access will raise exception in the event of a problem
- initial_action = api.check_access(git_access_command, nil,
- repo_name, key, '_any')
-
- case command
+ initial_action = api.check_access(
+ parsed_command.git_access_command,
+ nil,
+ parsed_command.repo_name,
+ key,
+ '_any'
+ )
+
+ case parsed_command.command
when GIT_LFS_AUTHENTICATE_COMMAND
- Action::GitLFSAuthenticate.new(key, repo_name)
+ Action::GitLFSAuthenticate.new(key, parsed_command.repo_name)
else
initial_action
end