summaryrefslogtreecommitdiff
path: root/lib/gitlab_access.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/gitlab_access.rb')
-rw-r--r--lib/gitlab_access.rb34
1 files changed, 34 insertions, 0 deletions
diff --git a/lib/gitlab_access.rb b/lib/gitlab_access.rb
new file mode 100644
index 0000000..1f328b7
--- /dev/null
+++ b/lib/gitlab_access.rb
@@ -0,0 +1,34 @@
+require_relative 'gitlab_init'
+require_relative 'gitlab_net'
+require_relative 'names_helper'
+require 'json'
+
+class GitlabAccess
+ include NamesHelper
+
+ attr_reader :config, :repo_path, :repo_name, :changes
+
+ def initialize(repo_path, actor, changes)
+ @config = GitlabConfig.new
+ @repo_path, @actor = repo_path.strip, actor
+ @repo_name = extract_repo_name(@repo_path.dup, config.repos_path.to_s)
+ @changes = changes.lines
+ end
+
+ def exec
+ if api.allowed?('git-receive-pack', @repo_name, @actor, @changes)
+ exit 0
+ else
+ # reset GL_ID env since we stop git push here
+ ENV['GL_ID'] = nil
+ puts "GitLab: You are not allowed to access #{@ref_name}!"
+ exit 1
+ end
+ end
+
+ protected
+
+ def api
+ GitlabNet.new
+ end
+end