Commit f5908cef19a3cd2c44be02b453fecb568b2c6c8e
1 parent
c3857842
Exists in
master
and in
4 other branches
System Hook: implemented
Showing
9 changed files
with
100 additions
and
10 deletions
Show diff stats
app/controllers/admin/hooks_controller.rb
@@ -11,12 +11,11 @@ class Admin::HooksController < ApplicationController | @@ -11,12 +11,11 @@ class Admin::HooksController < ApplicationController | ||
11 | def create | 11 | def create |
12 | @hook = SystemHook.new(params[:hook]) | 12 | @hook = SystemHook.new(params[:hook]) |
13 | 13 | ||
14 | - respond_to do |format| | ||
15 | - if @hook.save | ||
16 | - format.html { redirect_to admin_hooks_path, notice: 'Hook was successfully created.' } | ||
17 | - else | ||
18 | - format.html { render :index } | ||
19 | - end | 14 | + if @hook.save |
15 | + redirect_to admin_hooks_path, notice: 'Hook was successfully created.' | ||
16 | + else | ||
17 | + @hooks = SystemHook.all | ||
18 | + render :index | ||
20 | end | 19 | end |
21 | end | 20 | end |
22 | 21 |
app/models/project.rb
@@ -107,6 +107,32 @@ class Project < ActiveRecord::Base | @@ -107,6 +107,32 @@ class Project < ActiveRecord::Base | ||
107 | validate :check_limit | 107 | validate :check_limit |
108 | validate :repo_name | 108 | validate :repo_name |
109 | 109 | ||
110 | + after_create :create_hooks | ||
111 | + after_destroy :destroy_hooks | ||
112 | + | ||
113 | + def create_hooks | ||
114 | + SystemHook.all_hooks_fire({ | ||
115 | + event_name: "project_create", | ||
116 | + name: self.name, | ||
117 | + path: self.path, | ||
118 | + project_id: self.id, | ||
119 | + owner_name: self.owner.name, | ||
120 | + owner_email: self.owner.email, | ||
121 | + created_at: self.created_at | ||
122 | + }) | ||
123 | + end | ||
124 | + | ||
125 | + def destroy_hooks | ||
126 | + SystemHook.all_hooks_fire({ | ||
127 | + event_name: "project_destroy", | ||
128 | + name: self.name, | ||
129 | + path: self.path, | ||
130 | + project_id: self.id, | ||
131 | + owner_name: self.owner.name, | ||
132 | + owner_email: self.owner.email, | ||
133 | + }) | ||
134 | + end | ||
135 | + | ||
110 | def check_limit | 136 | def check_limit |
111 | unless owner.can_create_project? | 137 | unless owner.can_create_project? |
112 | errors[:base] << ("Your own projects limit is #{owner.projects_limit}! Please contact administrator to increase it") | 138 | errors[:base] << ("Your own projects limit is #{owner.projects_limit}! Please contact administrator to increase it") |
@@ -120,7 +146,7 @@ class Project < ActiveRecord::Base | @@ -120,7 +146,7 @@ class Project < ActiveRecord::Base | ||
120 | errors.add(:path, " like 'gitolite-admin' is not allowed") | 146 | errors.add(:path, " like 'gitolite-admin' is not allowed") |
121 | end | 147 | end |
122 | end | 148 | end |
123 | - | 149 | + |
124 | def self.access_options | 150 | def self.access_options |
125 | UsersProject.access_roles | 151 | UsersProject.access_roles |
126 | end | 152 | end |
app/models/system_hook.rb
app/models/user.rb
@@ -57,6 +57,25 @@ class User < ActiveRecord::Base | @@ -57,6 +57,25 @@ class User < ActiveRecord::Base | ||
57 | scope :active, where(:blocked => false) | 57 | scope :active, where(:blocked => false) |
58 | 58 | ||
59 | before_validation :generate_password, :on => :create | 59 | before_validation :generate_password, :on => :create |
60 | + after_create :create_hooks | ||
61 | + after_destroy :destroy_hooks | ||
62 | + | ||
63 | + def create_hooks | ||
64 | + SystemHook.all_hooks_fire({ | ||
65 | + event_name: "user_create", | ||
66 | + name: self.name, | ||
67 | + email: self.email, | ||
68 | + created_at: self.created_at | ||
69 | + }) | ||
70 | + end | ||
71 | + | ||
72 | + def destroy_hooks | ||
73 | + SystemHook.all_hooks_fire({ | ||
74 | + event_name: "user_destroy", | ||
75 | + name: self.name, | ||
76 | + email: self.email | ||
77 | + }) | ||
78 | + end | ||
60 | 79 | ||
61 | def generate_password | 80 | def generate_password |
62 | if self.force_random_password | 81 | if self.force_random_password |
app/models/users_project.rb
@@ -11,6 +11,9 @@ class UsersProject < ActiveRecord::Base | @@ -11,6 +11,9 @@ class UsersProject < ActiveRecord::Base | ||
11 | 11 | ||
12 | after_save :update_repository | 12 | after_save :update_repository |
13 | after_destroy :update_repository | 13 | after_destroy :update_repository |
14 | + after_create :add_to_team_hooks | ||
15 | + after_destroy :remove_from_team_hooks | ||
16 | + | ||
14 | 17 | ||
15 | validates_uniqueness_of :user_id, :scope => [:project_id] | 18 | validates_uniqueness_of :user_id, :scope => [:project_id] |
16 | validates_presence_of :user_id | 19 | validates_presence_of :user_id |
@@ -18,6 +21,31 @@ class UsersProject < ActiveRecord::Base | @@ -18,6 +21,31 @@ class UsersProject < ActiveRecord::Base | ||
18 | 21 | ||
19 | delegate :name, :email, :to => :user, :prefix => true | 22 | delegate :name, :email, :to => :user, :prefix => true |
20 | 23 | ||
24 | + def add_to_team_hooks | ||
25 | + SystemHook.all_hooks_fire({ | ||
26 | + event_name: "user_add_to_team", | ||
27 | + project_name: self.project.name, | ||
28 | + project_path: self.project.path, | ||
29 | + project_id: self.project_id, | ||
30 | + user_name: self.user.name, | ||
31 | + user_email: self.user.email, | ||
32 | + project_access: self.repo_access_human, | ||
33 | + created_at: self.created_at | ||
34 | + }) | ||
35 | + end | ||
36 | + | ||
37 | + def remove_from_team_hooks | ||
38 | + SystemHook.all_hooks_fire({ | ||
39 | + event_name: "user_remove_from_team", | ||
40 | + project_name: self.project.name, | ||
41 | + project_path: self.project.path, | ||
42 | + project_id: self.project_id, | ||
43 | + user_name: self.user.name, | ||
44 | + user_email: self.user.email, | ||
45 | + project_access: self.repo_access_human | ||
46 | + }) | ||
47 | + end | ||
48 | + | ||
21 | def self.bulk_import(project, user_ids, project_access) | 49 | def self.bulk_import(project, user_ids, project_access) |
22 | UsersProject.transaction do | 50 | UsersProject.transaction do |
23 | user_ids.each do |user_id| | 51 | user_ids.each do |user_id| |
@@ -68,7 +96,7 @@ class UsersProject < ActiveRecord::Base | @@ -68,7 +96,7 @@ class UsersProject < ActiveRecord::Base | ||
68 | end | 96 | end |
69 | 97 | ||
70 | def repo_access_human | 98 | def repo_access_human |
71 | - "" | 99 | + self.class.access_roles.invert[self.project_access] |
72 | end | 100 | end |
73 | end | 101 | end |
74 | # == Schema Information | 102 | # == Schema Information |
app/models/web_hook.rb
@@ -13,6 +13,7 @@ class WebHook < ActiveRecord::Base | @@ -13,6 +13,7 @@ class WebHook < ActiveRecord::Base | ||
13 | def execute(data) | 13 | def execute(data) |
14 | WebHook.post(url, body: data.to_json, headers: { "Content-Type" => "application/json" }) | 14 | WebHook.post(url, body: data.to_json, headers: { "Content-Type" => "application/json" }) |
15 | end | 15 | end |
16 | + | ||
16 | end | 17 | end |
17 | # == Schema Information | 18 | # == Schema Information |
18 | # | 19 | # |
resque.sh
1 | mkdir -p tmp/pids | 1 | mkdir -p tmp/pids |
2 | -bundle exec rake environment resque:work QUEUE=post_receive,mailer RAILS_ENV=production PIDFILE=tmp/pids/resque_worker.pid BACKGROUND=yes | 2 | +bundle exec rake environment resque:work QUEUE=post_receive,mailer,system_hook RAILS_ENV=production PIDFILE=tmp/pids/resque_worker.pid BACKGROUND=yes |
resque_dev.sh