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:
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2014-09-15 12:31:30 +0400
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2014-09-15 12:31:30 +0400
commit38ed0deaac78f74cf983caf2f607956c1b2dcf83 (patch)
tree7847eaafc5e6b96d1ada35dd89b43699c2eba5fa /app/models/hooks
parent39ab7527d41c2351b82398947307f3d668f06944 (diff)
Move hook models in separate dir
Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
Diffstat (limited to 'app/models/hooks')
-rw-r--r--app/models/hooks/project_hook.rb25
-rw-r--r--app/models/hooks/service_hook.rb20
-rw-r--r--app/models/hooks/system_hook.rb19
-rw-r--r--app/models/hooks/web_hook.rb52
4 files changed, 116 insertions, 0 deletions
diff --git a/app/models/hooks/project_hook.rb b/app/models/hooks/project_hook.rb
new file mode 100644
index 00000000000..21867a9316c
--- /dev/null
+++ b/app/models/hooks/project_hook.rb
@@ -0,0 +1,25 @@
+# == Schema Information
+#
+# Table name: web_hooks
+#
+# id :integer not null, primary key
+# url :string(255)
+# project_id :integer
+# created_at :datetime
+# updated_at :datetime
+# type :string(255) default("ProjectHook")
+# service_id :integer
+# push_events :boolean default(TRUE), not null
+# issues_events :boolean default(FALSE), not null
+# merge_requests_events :boolean default(FALSE), not null
+# tag_push_events :boolean default(FALSE)
+#
+
+class ProjectHook < WebHook
+ belongs_to :project
+
+ scope :push_hooks, -> { where(push_events: true) }
+ scope :tag_push_hooks, -> { where(tag_push_events: true) }
+ scope :issue_hooks, -> { where(issues_events: true) }
+ scope :merge_request_hooks, -> { where(merge_requests_events: true) }
+end
diff --git a/app/models/hooks/service_hook.rb b/app/models/hooks/service_hook.rb
new file mode 100644
index 00000000000..2e11239c40b
--- /dev/null
+++ b/app/models/hooks/service_hook.rb
@@ -0,0 +1,20 @@
+# == Schema Information
+#
+# Table name: web_hooks
+#
+# id :integer not null, primary key
+# url :string(255)
+# project_id :integer
+# created_at :datetime
+# updated_at :datetime
+# type :string(255) default("ProjectHook")
+# service_id :integer
+# push_events :boolean default(TRUE), not null
+# issues_events :boolean default(FALSE), not null
+# merge_requests_events :boolean default(FALSE), not null
+# tag_push_events :boolean default(FALSE)
+#
+
+class ServiceHook < WebHook
+ belongs_to :service
+end
diff --git a/app/models/hooks/system_hook.rb b/app/models/hooks/system_hook.rb
new file mode 100644
index 00000000000..ee32b49bc66
--- /dev/null
+++ b/app/models/hooks/system_hook.rb
@@ -0,0 +1,19 @@
+# == Schema Information
+#
+# Table name: web_hooks
+#
+# id :integer not null, primary key
+# url :string(255)
+# project_id :integer
+# created_at :datetime
+# updated_at :datetime
+# type :string(255) default("ProjectHook")
+# service_id :integer
+# push_events :boolean default(TRUE), not null
+# issues_events :boolean default(FALSE), not null
+# merge_requests_events :boolean default(FALSE), not null
+# tag_push_events :boolean default(FALSE)
+#
+
+class SystemHook < WebHook
+end
diff --git a/app/models/hooks/web_hook.rb b/app/models/hooks/web_hook.rb
new file mode 100644
index 00000000000..752eb8074ac
--- /dev/null
+++ b/app/models/hooks/web_hook.rb
@@ -0,0 +1,52 @@
+# == Schema Information
+#
+# Table name: web_hooks
+#
+# id :integer not null, primary key
+# url :string(255)
+# project_id :integer
+# created_at :datetime
+# updated_at :datetime
+# type :string(255) default("ProjectHook")
+# service_id :integer
+# push_events :boolean default(TRUE), not null
+# issues_events :boolean default(FALSE), not null
+# merge_requests_events :boolean default(FALSE), not null
+# tag_push_events :boolean default(FALSE)
+#
+
+class WebHook < ActiveRecord::Base
+ include HTTParty
+
+ default_value_for :push_events, true
+ default_value_for :issues_events, false
+ default_value_for :merge_requests_events, false
+
+ # HTTParty timeout
+ default_timeout Gitlab.config.gitlab.webhook_timeout
+
+ validates :url, presence: true,
+ format: { with: URI::regexp(%w(http https)), message: "should be a valid url" }
+
+ def execute(data)
+ parsed_url = URI.parse(url)
+ if parsed_url.userinfo.blank?
+ WebHook.post(url, body: data.to_json, headers: { "Content-Type" => "application/json" }, verify: false)
+ else
+ post_url = url.gsub("#{parsed_url.userinfo}@", "")
+ auth = {
+ username: URI.decode(parsed_url.user),
+ password: URI.decode(parsed_url.password),
+ }
+ WebHook.post(post_url,
+ body: data.to_json,
+ headers: {"Content-Type" => "application/json"},
+ verify: false,
+ basic_auth: auth)
+ end
+ end
+
+ def async_execute(data)
+ Sidekiq::Client.enqueue(ProjectWebHookWorker, id, data)
+ end
+end