Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/controllers/admin/hooks_controller.rb11
-rw-r--r--app/models/project.rb28
-rw-r--r--app/models/system_hook.rb10
-rw-r--r--app/models/user.rb19
-rw-r--r--app/models/users_project.rb30
-rw-r--r--app/models/web_hook.rb1
-rw-r--r--app/workers/system_hook_worker.rb7
-rwxr-xr-xresque.sh2
-rwxr-xr-xresque_dev.sh2
9 files changed, 100 insertions, 10 deletions
diff --git a/app/controllers/admin/hooks_controller.rb b/app/controllers/admin/hooks_controller.rb
index 2e47b6c2c4e..446d4ea90a6 100644
--- a/app/controllers/admin/hooks_controller.rb
+++ b/app/controllers/admin/hooks_controller.rb
@@ -11,12 +11,11 @@ class Admin::HooksController < ApplicationController
def create
@hook = SystemHook.new(params[:hook])
- respond_to do |format|
- if @hook.save
- format.html { redirect_to admin_hooks_path, notice: 'Hook was successfully created.' }
- else
- format.html { render :index }
- end
+ if @hook.save
+ redirect_to admin_hooks_path, notice: 'Hook was successfully created.'
+ else
+ @hooks = SystemHook.all
+ render :index
end
end
diff --git a/app/models/project.rb b/app/models/project.rb
index 4773cf373f3..d3dac34ae89 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -107,6 +107,32 @@ class Project < ActiveRecord::Base
validate :check_limit
validate :repo_name
+ after_create :create_hooks
+ after_destroy :destroy_hooks
+
+ def create_hooks
+ SystemHook.all_hooks_fire({
+ event_name: "project_create",
+ name: self.name,
+ path: self.path,
+ project_id: self.id,
+ owner_name: self.owner.name,
+ owner_email: self.owner.email,
+ created_at: self.created_at
+ })
+ end
+
+ def destroy_hooks
+ SystemHook.all_hooks_fire({
+ event_name: "project_destroy",
+ name: self.name,
+ path: self.path,
+ project_id: self.id,
+ owner_name: self.owner.name,
+ owner_email: self.owner.email,
+ })
+ end
+
def check_limit
unless owner.can_create_project?
errors[:base] << ("Your own projects limit is #{owner.projects_limit}! Please contact administrator to increase it")
@@ -120,7 +146,7 @@ class Project < ActiveRecord::Base
errors.add(:path, " like 'gitolite-admin' is not allowed")
end
end
-
+
def self.access_options
UsersProject.access_roles
end
diff --git a/app/models/system_hook.rb b/app/models/system_hook.rb
index 178b7585d5b..8517d43a9de 100644
--- a/app/models/system_hook.rb
+++ b/app/models/system_hook.rb
@@ -1,3 +1,13 @@
class SystemHook < WebHook
+
+ def async_execute(data)
+ Resque.enqueue(SystemHookWorker, id, data)
+ end
+ def self.all_hooks_fire(data)
+ SystemHook.all.each do |sh|
+ sh.async_execute data
+ end
+ end
+
end
diff --git a/app/models/user.rb b/app/models/user.rb
index a3e08fa7d0b..8eb114c4727 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -57,6 +57,25 @@ class User < ActiveRecord::Base
scope :active, where(:blocked => false)
before_validation :generate_password, :on => :create
+ after_create :create_hooks
+ after_destroy :destroy_hooks
+
+ def create_hooks
+ SystemHook.all_hooks_fire({
+ event_name: "user_create",
+ name: self.name,
+ email: self.email,
+ created_at: self.created_at
+ })
+ end
+
+ def destroy_hooks
+ SystemHook.all_hooks_fire({
+ event_name: "user_destroy",
+ name: self.name,
+ email: self.email
+ })
+ end
def generate_password
if self.force_random_password
diff --git a/app/models/users_project.rb b/app/models/users_project.rb
index 6ba72370931..128e61b7682 100644
--- a/app/models/users_project.rb
+++ b/app/models/users_project.rb
@@ -11,6 +11,9 @@ class UsersProject < ActiveRecord::Base
after_save :update_repository
after_destroy :update_repository
+ after_create :add_to_team_hooks
+ after_destroy :remove_from_team_hooks
+
validates_uniqueness_of :user_id, :scope => [:project_id]
validates_presence_of :user_id
@@ -18,6 +21,31 @@ class UsersProject < ActiveRecord::Base
delegate :name, :email, :to => :user, :prefix => true
+ def add_to_team_hooks
+ SystemHook.all_hooks_fire({
+ event_name: "user_add_to_team",
+ project_name: self.project.name,
+ project_path: self.project.path,
+ project_id: self.project_id,
+ user_name: self.user.name,
+ user_email: self.user.email,
+ project_access: self.repo_access_human,
+ created_at: self.created_at
+ })
+ end
+
+ def remove_from_team_hooks
+ SystemHook.all_hooks_fire({
+ event_name: "user_remove_from_team",
+ project_name: self.project.name,
+ project_path: self.project.path,
+ project_id: self.project_id,
+ user_name: self.user.name,
+ user_email: self.user.email,
+ project_access: self.repo_access_human
+ })
+ end
+
def self.bulk_import(project, user_ids, project_access)
UsersProject.transaction do
user_ids.each do |user_id|
@@ -68,7 +96,7 @@ class UsersProject < ActiveRecord::Base
end
def repo_access_human
- ""
+ self.class.access_roles.invert[self.project_access]
end
end
# == Schema Information
diff --git a/app/models/web_hook.rb b/app/models/web_hook.rb
index 7a0423481db..85d87898682 100644
--- a/app/models/web_hook.rb
+++ b/app/models/web_hook.rb
@@ -13,6 +13,7 @@ class WebHook < ActiveRecord::Base
def execute(data)
WebHook.post(url, body: data.to_json, headers: { "Content-Type" => "application/json" })
end
+
end
# == Schema Information
#
diff --git a/app/workers/system_hook_worker.rb b/app/workers/system_hook_worker.rb
new file mode 100644
index 00000000000..ca154136b97
--- /dev/null
+++ b/app/workers/system_hook_worker.rb
@@ -0,0 +1,7 @@
+class SystemHookWorker
+ @queue = :system_hook
+
+ def self.perform(hook_id, data)
+ SystemHook.find(hook_id).execute data
+ end
+end
diff --git a/resque.sh b/resque.sh
index ce7c944b735..ab67c650805 100755
--- a/resque.sh
+++ b/resque.sh
@@ -1,2 +1,2 @@
mkdir -p tmp/pids
-bundle exec rake environment resque:work QUEUE=post_receive,mailer RAILS_ENV=production PIDFILE=tmp/pids/resque_worker.pid BACKGROUND=yes
+bundle exec rake environment resque:work QUEUE=post_receive,mailer,system_hook RAILS_ENV=production PIDFILE=tmp/pids/resque_worker.pid BACKGROUND=yes
diff --git a/resque_dev.sh b/resque_dev.sh
index 9df4dc1d087..b09cfd9e383 100755
--- a/resque_dev.sh
+++ b/resque_dev.sh
@@ -1 +1 @@
-bundle exec rake environment resque:work QUEUE=* VVERBOSE=1
+bundle exec rake environment resque:work QUEUE=post_receive,mailer,system_hook VVERBOSE=1