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