diff options
Diffstat (limited to 'lib/api/internal.rb')
-rw-r--r-- | lib/api/internal.rb | 52 |
1 files changed, 36 insertions, 16 deletions
diff --git a/lib/api/internal.rb b/lib/api/internal.rb index 9ac659f50fd..753d0fcbd98 100644 --- a/lib/api/internal.rb +++ b/lib/api/internal.rb @@ -1,6 +1,8 @@ module API # Internal access API class Internal < Grape::API + before { authenticate_by_gitlab_shell_token! } + namespace 'internal' do # Check if git command is allowed to project # @@ -14,6 +16,17 @@ module API # post "/allowed" do status 200 + + actor = if params[:key_id] + Key.find_by(id: params[:key_id]) + elsif params[:user_id] + User.find_by(id: params[:user_id]) + end + + unless actor + return Gitlab::GitAccessStatus.new(false, 'No such user or key') + end + project_path = params[:project] # Check for *.wiki repositories. @@ -21,30 +34,29 @@ module API # project. This applies the correct project permissions to # the wiki repository as well. access = - if project_path =~ /\.wiki\Z/ - project_path.sub!(/\.wiki\Z/, '') + if project_path.end_with?('.wiki') + project_path.chomp!('.wiki') Gitlab::GitAccessWiki.new else Gitlab::GitAccess.new end project = Project.find_with_namespace(project_path) - return false unless project - actor = if params[:key_id] - Key.find(params[:key_id]) - elsif params[:user_id] - User.find(params[:user_id]) - end + if project + status = access.check( + actor, + params[:action], + project, + params[:changes] + ) + end - return false unless actor - - access.allowed?( - actor, - params[:action], - project, - params[:changes] - ) + if project && status && status.allowed? + status + else + Gitlab::GitAccessStatus.new(false, 'No such project') + end end # @@ -62,6 +74,14 @@ module API gitlab_rev: Gitlab::REVISION, } end + + get "/broadcast_message" do + if message = BroadcastMessage.current + present message, with: Entities::BroadcastMessage + else + {} + end + end end end end |