diff options
author | Jacob Vosmaer <contact@jacobvosmaer.nl> | 2015-02-20 13:36:22 +0100 |
---|---|---|
committer | Jacob Vosmaer <contact@jacobvosmaer.nl> | 2015-02-20 13:45:39 +0100 |
commit | f65c68025e7c86618f70e49b89ef44989c05a83d (patch) | |
tree | 995c9f1b32d82c145707a3bad2aa1055b68b1f64 | |
parent | 43b985d93b31315dc2f30eaa5f4e022f9aeaa9e1 (diff) | |
download | gitlab-shell-f65c68025e7c86618f70e49b89ef44989c05a83d.tar.gz |
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.
-rw-r--r-- | lib/gitlab_shell.rb | 62 |
1 files changed, 28 insertions, 34 deletions
diff --git a/lib/gitlab_shell.rb b/lib/gitlab_shell.rb index a0fc65c..806e016 100644 --- a/lib/gitlab_shell.rb +++ b/lib/gitlab_shell.rb @@ -18,20 +18,18 @@ class GitlabShell if @origin_cmd parse_cmd - if git_cmds.include?(@git_cmd) - ENV['GL_ID'] = @key_id + raise DisallowedCommandError unless git_cmds.include?(@git_cmd) - access = api.check_access(@git_cmd, @repo_name, @key_id, '_any') + ENV['GL_ID'] = @key_id - if access.allowed? - process_cmd - else - message = "gitlab-shell: Access denied for git command <#{@origin_cmd}> by #{log_username}." - $logger.warn message - puts access.message - end + access = api.check_access(@git_cmd, @repo_name, @key_id, '_any') + + if access.allowed? + process_cmd else - raise DisallowedCommandError + message = "gitlab-shell: Access denied for git command <#{@origin_cmd}> by #{log_username}." + $logger.warn message + puts access.message end else puts "Welcome to GitLab, #{username}!" @@ -51,14 +49,12 @@ class GitlabShell @git_cmd = args.first if @git_cmd == 'git-annex-shell' - if @config.git_annex_enabled? - @repo_name = escape_path(args[2].sub(/\A\/~\//, '')) + raise DisallowedCommandError unless @config.git_annex_enabled? - # Make sure repository has git-annex enabled - init_git_annex(@repo_name) - else - raise DisallowedCommandError - end + @repo_name = escape_path(args[2].sub(/\A\/~\//, '')) + + # Make sure repository has git-annex enabled + init_git_annex(@repo_name) else raise DisallowedCommandError unless args.count == 2 @repo_name = escape_path(args.last) @@ -73,24 +69,22 @@ class GitlabShell repo_full_path = File.join(repos_path, repo_name) if @git_cmd == 'git-annex-shell' - if @config.git_annex_enabled? - args = Shellwords.shellwords(@origin_cmd) - parsed_args = - args.map do |arg| - # Convert /~/group/project.git to group/project.git - # to make git annex path compatible with gitlab-shell - if arg =~ /\A\/~\/.*\.git\Z/ - repo_full_path - else - arg - end + raise DisallowedCommandError unless @config.git_annex_enabled? + + args = Shellwords.shellwords(@origin_cmd) + parsed_args = + args.map do |arg| + # Convert /~/group/project.git to group/project.git + # to make git annex path compatible with gitlab-shell + if arg =~ /\A\/~\/.*\.git\Z/ + repo_full_path + else + arg end + end - $logger.info "gitlab-shell: executing git-annex command <#{parsed_args.join(' ')}> for #{log_username}." - exec_cmd(*parsed_args) - else - raise DisallowedCommandError - end + $logger.info "gitlab-shell: executing git-annex command <#{parsed_args.join(' ')}> for #{log_username}." + exec_cmd(*parsed_args) else $logger.info "gitlab-shell: executing git command <#{@git_cmd} #{repo_full_path}> for #{log_username}." exec_cmd(@git_cmd, repo_full_path) |