Commit f65c6802 authored by Jacob Vosmaer's avatar Jacob Vosmaer

Fail early on invalid input (raise ... unless ...)

This intention of this change is to make the normal flow of execution
easier to read, and to prevent mistakes in deeply nested if-else trees.
parent 43b985d9
...@@ -18,20 +18,18 @@ class GitlabShell ...@@ -18,20 +18,18 @@ class GitlabShell
if @origin_cmd if @origin_cmd
parse_cmd parse_cmd
if git_cmds.include?(@git_cmd) raise DisallowedCommandError unless git_cmds.include?(@git_cmd)
ENV['GL_ID'] = @key_id
access = api.check_access(@git_cmd, @repo_name, @key_id, '_any') ENV['GL_ID'] = @key_id
if access.allowed? access = api.check_access(@git_cmd, @repo_name, @key_id, '_any')
process_cmd
else if access.allowed?
message = "gitlab-shell: Access denied for git command <#{@origin_cmd}> by #{log_username}." process_cmd
$logger.warn message
puts access.message
end
else else
raise DisallowedCommandError message = "gitlab-shell: Access denied for git command <#{@origin_cmd}> by #{log_username}."
$logger.warn message
puts access.message
end end
else else
puts "Welcome to GitLab, #{username}!" puts "Welcome to GitLab, #{username}!"
...@@ -51,14 +49,12 @@ class GitlabShell ...@@ -51,14 +49,12 @@ class GitlabShell
@git_cmd = args.first @git_cmd = args.first
if @git_cmd == 'git-annex-shell' if @git_cmd == 'git-annex-shell'
if @config.git_annex_enabled? raise DisallowedCommandError unless @config.git_annex_enabled?
@repo_name = escape_path(args[2].sub(/\A\/~\//, ''))
# Make sure repository has git-annex enabled @repo_name = escape_path(args[2].sub(/\A\/~\//, ''))
init_git_annex(@repo_name)
else # Make sure repository has git-annex enabled
raise DisallowedCommandError init_git_annex(@repo_name)
end
else else
raise DisallowedCommandError unless args.count == 2 raise DisallowedCommandError unless args.count == 2
@repo_name = escape_path(args.last) @repo_name = escape_path(args.last)
...@@ -73,24 +69,22 @@ class GitlabShell ...@@ -73,24 +69,22 @@ class GitlabShell
repo_full_path = File.join(repos_path, repo_name) repo_full_path = File.join(repos_path, repo_name)
if @git_cmd == 'git-annex-shell' if @git_cmd == 'git-annex-shell'
if @config.git_annex_enabled? raise DisallowedCommandError unless @config.git_annex_enabled?
args = Shellwords.shellwords(@origin_cmd)
parsed_args = args = Shellwords.shellwords(@origin_cmd)
args.map do |arg| parsed_args =
# Convert /~/group/project.git to group/project.git args.map do |arg|
# to make git annex path compatible with gitlab-shell # Convert /~/group/project.git to group/project.git
if arg =~ /\A\/~\/.*\.git\Z/ # to make git annex path compatible with gitlab-shell
repo_full_path if arg =~ /\A\/~\/.*\.git\Z/
else repo_full_path
arg else
end arg
end end
end
$logger.info "gitlab-shell: executing git-annex command <#{parsed_args.join(' ')}> for #{log_username}." $logger.info "gitlab-shell: executing git-annex command <#{parsed_args.join(' ')}> for #{log_username}."
exec_cmd(*parsed_args) exec_cmd(*parsed_args)
else
raise DisallowedCommandError
end
else else
$logger.info "gitlab-shell: executing git command <#{@git_cmd} #{repo_full_path}> for #{log_username}." $logger.info "gitlab-shell: executing git command <#{@git_cmd} #{repo_full_path}> for #{log_username}."
exec_cmd(@git_cmd, repo_full_path) exec_cmd(@git_cmd, repo_full_path)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment