From f4bc18d237413ac55e32ce16a23b3d2ab35a6976 Mon Sep 17 00:00:00 2001
From: Drew Blessing <drew@gitlab.com>
Date: Thu, 14 Jan 2016 08:20:23 -0600
Subject: [PATCH] Refactor JIRA service to use gem

---
 Gemfile                                       |   3 +
 app/controllers/concerns/service_params.rb    |   2 +-
 app/models/project_services/jira_service.rb   | 201 +++++++++---------
 .../20160122231710_migrate_jira_to_gem.rb     |  52 +++++
 doc/integration/README.md                     |  53 ++---
 doc/integration/img/jira_service_page.png     | Bin 0 -> 45089 bytes
 doc/integration/jira.md                       | 147 ++++++++++++-
 7 files changed, 313 insertions(+), 145 deletions(-)
 create mode 100644 db/migrate/20160122231710_migrate_jira_to_gem.rb
 create mode 100644 doc/integration/img/jira_service_page.png

diff --git a/Gemfile b/Gemfile
index 46245ab62d116..033bbe91296ee 100644
--- a/Gemfile
+++ b/Gemfile
@@ -161,6 +161,9 @@ gem 'connection_pool', '~> 2.0'
 # HipChat integration
 gem 'hipchat', '~> 1.5.0'
 
+# JIRA integration
+gem 'jira-ruby', '~> 0.1.17'
+
 # Flowdock integration
 gem 'gitlab-flowdock-git-hook', '~> 1.0.1'
 
diff --git a/app/controllers/concerns/service_params.rb b/app/controllers/concerns/service_params.rb
index 4cb3be410645e..c33d7eecb9f79 100644
--- a/app/controllers/concerns/service_params.rb
+++ b/app/controllers/concerns/service_params.rb
@@ -18,7 +18,7 @@ module ServiceParams
                     :add_pusher, :send_from_committer_email, :disable_diffs,
                     :external_wiki_url, :notify, :color,
                     :server_host, :server_port, :default_irc_uri, :enable_ssl_verification,
-                    :jira_issue_transition_id]
+                    :jira_issue_transition_id, :url, :project_key]
 
   # Parameters to ignore if no value is specified
   FILTER_BLANK_PARAMS = [:password]
diff --git a/app/models/project_services/jira_service.rb b/app/models/project_services/jira_service.rb
index f81b66fd21971..580adcfba991f 100644
--- a/app/models/project_services/jira_service.rb
+++ b/app/models/project_services/jira_service.rb
@@ -1,15 +1,35 @@
+# == Schema Information
+#
+# Table name: services
+#
+#  id                    :integer          not null, primary key
+#  type                  :string(255)
+#  title                 :string(255)
+#  project_id            :integer
+#  created_at            :datetime
+#  updated_at            :datetime
+#  active                :boolean          default(FALSE), not null
+#  properties            :text
+#  template              :boolean          default(FALSE)
+#  push_events           :boolean          default(TRUE)
+#  issues_events         :boolean          default(TRUE)
+#  merge_requests_events :boolean          default(TRUE)
+#  tag_push_events       :boolean          default(TRUE)
+#  note_events           :boolean          default(TRUE), not null
+#  build_events          :boolean          default(FALSE), not null
+#
+require 'jira'
+
 class JiraService < IssueTrackerService
   include HTTParty
-  include Gitlab::Routing.url_helpers
+  include Gitlab::Application.routes.url_helpers
 
   DEFAULT_API_VERSION = 2
 
-  prop_accessor :username, :password, :api_url, :jira_issue_transition_id,
-                :title, :description, :project_url, :issues_url, :new_issue_url
-
-  validates :api_url, presence: true, url: true, if: :activated?
+  prop_accessor :username, :password, :url, :project_key,
+                :jira_issue_transition_id, :title, :description
 
-  before_validation :set_api_url, :set_jira_issue_transition_id
+  before_validation :set_jira_issue_transition_id
 
   before_update :reset_password
 
@@ -20,14 +40,34 @@ def reference_pattern
 
   def reset_password
     # don't reset the password if a new one is provided
-    if api_url_changed? && !password_touched?
+    if url_changed? && !password_touched?
       self.password = nil
     end
   end
 
+  def options
+    url = URI.parse(self.url)
+    {
+      :username         => self.username,
+      :password         => self.password,
+      :site             => URI.join(url, '/').to_s,
+      :context_path     => url.path,
+      :auth_type        => :basic,
+      :read_timeout     => 120,
+      :use_ssl          => url.scheme == 'https'
+    }
+  end
+
+  def client
+    @client ||= ::JIRA::Client.new(options)
+  end
+
+  def jira_project
+    @jira_project ||= client.Project.find(project_key)
+  end
+
   def help
-    'Setting `project_url`, `issues_url` and `new_issue_url` will '\
-    'allow a user to easily navigate to the Jira issue tracker. See the '\
+    'See the ' \
     '[integration doc](http://doc.gitlab.com/ce/integration/external-issue-tracker.html) '\
     'for details.'
   end
@@ -53,12 +93,25 @@ def to_param
   end
 
   def fields
-    super.push(
-      { type: 'text', name: 'api_url', placeholder: 'https://jira.example.com/rest/api/2' },
+    [
+      { type: 'text', name: 'url', title: 'URL', placeholder: 'https://jira.example.com' },
+      { type: 'text', name: 'project_key', placeholder: 'PROJ' },
       { type: 'text', name: 'username', placeholder: '' },
       { type: 'password', name: 'password', placeholder: '' },
       { type: 'text', name: 'jira_issue_transition_id', placeholder: '2' }
-    )
+    ]
+  end
+
+  def project_url
+    "#{url}/issues/?jql=project=#{project_key}"
+  end
+
+  def issues_url
+    "#{url}/browse/:id"
+  end
+
+  def new_issue_url
+    "#{url}/secure/CreateIssue.jspa"
   end
 
   def execute(push, issue = nil)
@@ -72,7 +125,7 @@ def execute(push, issue = nil)
   end
 
   def create_cross_reference_note(mentioned, noteable, author)
-    issue_name = mentioned.id
+    issue_key = mentioned.id
     project = self.project
     noteable_name = noteable.class.name.underscore.downcase
     noteable_id = if noteable.is_a?(Commit)
@@ -94,53 +147,25 @@ def create_cross_reference_note(mentioned, noteable, author)
       },
       entity: {
         name: noteable_name.humanize.downcase,
-        url: entity_url,
-        title: noteable.title
+        url: entity_url
       }
     }
 
-    add_comment(data, issue_name)
+    add_comment(data, issue_key)
   end
 
   def test_settings
-    return unless api_url.present?
-    result = JiraService.get(
-      jira_api_test_url,
-      headers: {
-        'Content-Type' => 'application/json',
-        'Authorization' => "Basic #{auth}"
-      }
-    )
+    return unless api_utrl.present?
+    # Test settings by getting the project
+    jira_project
 
-    case result.code
-    when 201, 200
-      Rails.logger.info("#{self.class.name} SUCCESS #{result.code}: Successfully connected to #{api_url}.")
-      true
-    else
-      Rails.logger.info("#{self.class.name} ERROR #{result.code}: #{result.parsed_response}")
-      false
-    end
-  rescue Errno::ECONNREFUSED => e
-    Rails.logger.info "#{self.class.name} ERROR: #{e.message}. API URL: #{api_url}."
+  rescue Errno::ECONNREFUSED, JIRA::HTTPError => e
+    Rails.logger.info "#{self.class.name} Test ERROR: #{url} - #{e.message}"
     false
   end
 
   private
 
-  def build_api_url_from_project_url
-    server = URI(project_url)
-    default_ports = [["http", 80], ["https", 443]].include?([server.scheme, server.port])
-    server_url = "#{server.scheme}://#{server.host}"
-    server_url.concat(":#{server.port}") unless default_ports
-    "#{server_url}/rest/api/#{DEFAULT_API_VERSION}"
-  rescue
-    "" # looks like project URL was not valid
-  end
-
-  def set_api_url
-    self.api_url = build_api_url_from_project_url if self.api_url.blank?
-  end
-
   def set_jira_issue_transition_id
     self.jira_issue_transition_id ||= "2"
   end
@@ -149,7 +174,7 @@ def close_issue(entity, issue)
     commit_id = if entity.is_a?(Commit)
                   entity.id
                 elsif entity.is_a?(MergeRequest)
-                  entity.diff_head_sha
+                  entity.last_commit.id
                 end
     commit_url = build_entity_url(:commit, commit_id)
 
@@ -161,69 +186,47 @@ def close_issue(entity, issue)
   end
 
   def transition_issue(issue)
-    message = {
-      transition: {
-        id: jira_issue_transition_id
-      }
-    }
-    send_message(close_issue_url(issue.iid), message.to_json)
+    issue = client.Issue.find(issue.iid)
+    issue.transitions.build.save(transition: { id: jira_issue_transition_id })
   end
 
   def add_issue_solved_comment(issue, commit_id, commit_url)
-    comment = {
-      body: "Issue solved with [#{commit_id}|#{commit_url}]."
-    }
-
-    send_message(comment_url(issue.iid), comment.to_json)
+    comment = "Issue solved with [#{commit_id}|#{commit_url}]."
+    send_message(issue.iid, comment)
   end
 
-  def add_comment(data, issue_name)
-    url = comment_url(issue_name)
+  def add_comment(data, issue_key)
     user_name = data[:user][:name]
     user_url = data[:user][:url]
     entity_name = data[:entity][:name]
     entity_url = data[:entity][:url]
-    entity_title = data[:entity][:title]
     project_name = data[:project][:name]
 
-    message = {
-      body: %Q{[#{user_name}|#{user_url}] mentioned this issue in [a #{entity_name} of #{project_name}|#{entity_url}]:\n'#{entity_title}'}
-    }
-
-    unless existing_comment?(issue_name, message[:body])
-      send_message(url, message.to_json)
-    end
-  end
+    message = "[#{user_name}|#{user_url}] mentioned this issue in [a #{entity_name} of #{project_name}|#{entity_url}]."
 
-  def auth
-    require 'base64'
-    Base64.urlsafe_encode64("#{self.username}:#{self.password}")
+    # unless existing_comment?(issue_name, message[:body])
+      send_message(issue_key, message)
+    # end
   end
 
-  def send_message(url, message)
+  def send_message(issue_key, message)
     return unless api_url.present?
-    result = JiraService.post(
-      url,
-      body: message,
-      headers: {
-        'Content-Type' => 'application/json',
-        'Authorization' => "Basic #{auth}"
-      }
-    )
-
-    message = case result.code
-              when 201, 200, 204
-                "#{self.class.name} SUCCESS #{result.code}: Successfully posted to #{url}."
-              when 401
-                "#{self.class.name} ERROR 401: Unauthorized. Check the #{self.username} credentials and JIRA access permissions and try again."
-              else
-                "#{self.class.name} ERROR #{result.code}: #{result.parsed_response}"
-              end
+    issue = client.Issue.find(issue_key)
+    issue.comments.build.save!(body: message)
+
+    # message = case result.code
+    #           when 201, 200, 204
+    #             "#{self.class.name} SUCCESS #{result.code}: Successfully posted to #{url}."
+    #           when 401
+    #             "#{self.class.name} ERROR 401: Unauthorized. Check the #{self.username} credentials and JIRA access permissions and try again."
+    #           else
+    #             "#{self.class.name} ERROR #{result.code}: #{result.parsed_response}"
+    #           end
 
     Rails.logger.info(message)
     message
   rescue URI::InvalidURIError, Errno::ECONNREFUSED => e
-    Rails.logger.info "#{self.class.name} ERROR: #{e.message}. Hostname: #{url}."
+    Rails.logger.info "#{self.class.name} Send message ERROR: #{url} - #{e.message}"
   end
 
   def existing_comment?(issue_name, new_comment)
@@ -267,16 +270,4 @@ def build_entity_url(entity_name, entity_id)
       )
     )
   end
-
-  def close_issue_url(issue_name)
-    "#{self.api_url}/issue/#{issue_name}/transitions"
-  end
-
-  def comment_url(issue_name)
-    "#{self.api_url}/issue/#{issue_name}/comment"
-  end
-
-  def jira_api_test_url
-    "#{self.api_url}/myself"
-  end
 end
diff --git a/db/migrate/20160122231710_migrate_jira_to_gem.rb b/db/migrate/20160122231710_migrate_jira_to_gem.rb
new file mode 100644
index 0000000000000..972aea323d957
--- /dev/null
+++ b/db/migrate/20160122231710_migrate_jira_to_gem.rb
@@ -0,0 +1,52 @@
+class MigrateJiraToGem < ActiveRecord::Migration
+  def change
+    reversible do |dir|
+      select_all("SELECT id, properties FROM services WHERE services.type IN ('JiraService')").each do |service|
+        id = service['id']
+        properties = JSON.parse(service['properties'])
+        properties_was = properties.clone
+
+        dir.up do
+          # Migrate `project_url` to `project_key`
+          # Ignore if `project_url` doesn't have jql project query with project key
+          if properties['project_url'].present?
+            jql = properties['project_url'].match('project=([A-Za-z]*)')
+            properties['project_key'] = jql.captures.first if jql
+          end
+
+          # Migrate `api_url` to `url`
+          if properties['api_url'].present?
+            url = properties['api_url'].match('(.*)\/rest\/api')
+            properties['url'] = url.captures.first if url
+          end
+
+          # Delete now unnecessary properties
+          properties.delete('api_url')
+          properties.delete('project_url')
+          properties.delete('new_issue_url')
+          properties.delete('issues_url')
+        end
+
+        dir.down do
+          # Rebuild old properties based on sane defaults
+          if properties['url'].present?
+            properties['api_url'] = "#{properties['url']}/rest/api/2"
+            properties['project_url'] =
+              "#{properties['url']}/issues/?jql=project=#{properties['project_key']}"
+            properties['issues_url'] = "#{properties['url']}/browse/:id"
+            properties['new_issue_url'] = "#{properties['url']}/secure/CreateIssue.jspa"
+          end
+
+          # Delete the new properties
+          properties.delete('url')
+          properties.delete('project_key')
+        end
+
+        # Update changes properties
+        if properties != properties_was
+          execute("UPDATE services SET properties = '#{quote_string(properties.to_json)}' WHERE id = #{id}")
+        end
+      end
+    end
+  end
+end
diff --git a/doc/integration/README.md b/doc/integration/README.md
index c2fd299db07a1..0fc0be4ffcedd 100644
--- a/doc/integration/README.md
+++ b/doc/integration/README.md
@@ -5,57 +5,36 @@ trackers and external authentication.
 
 See the documentation below for details on how to configure these services.
 
-- [Jira](../project_services/jira.md) Integrate with the JIRA issue tracker
+- [JIRA](jira.md) Integrate with the JIRA issue tracker
 - [External issue tracker](external-issue-tracker.md) Redmine, JIRA, etc.
 - [LDAP](ldap.md) Set up sign in via LDAP
-- [OmniAuth](omniauth.md) Sign in via Twitter, GitHub, GitLab.com, Google, Bitbucket, Facebook, Shibboleth, SAML, Crowd and Azure
+- [OmniAuth](omniauth.md) Sign in via Twitter, GitHub, GitLab, and Google via OAuth.
 - [SAML](saml.md) Configure GitLab as a SAML 2.0 Service Provider
 - [CAS](cas.md) Configure GitLab to sign in using CAS
+- [Slack](slack.md) Integrate with the Slack chat service
 - [OAuth2 provider](oauth_provider.md) OAuth2 application creation
 - [Gmail actions buttons](gmail_action_buttons_for_gitlab.md) Adds GitLab actions to messages
 - [reCAPTCHA](recaptcha.md) Configure GitLab to use Google reCAPTCHA for new users
-- [Akismet](akismet.md) Configure Akismet to stop spam
-- [Koding](../administration/integration/koding.md) Configure Koding to use IDE integration
 
 GitLab Enterprise Edition contains [advanced Jenkins support][jenkins].
 
-[jenkins]: http://docs.gitlab.com/ee/integration/jenkins.html
-
-
 ## Project services
 
 Integration with services such as Campfire, Flowdock, Gemnasium, HipChat,
 Pivotal Tracker, and Slack are available in the form of a [Project Service][].
+You can find these within GitLab in the Services page under Project Settings if
+you are at least a master on the project.
+Project Services are a bit like plugins in that they allow a lot of freedom in
+adding functionality to GitLab. For example there is also a service that can
+send an email every time someone pushes new commits.
 
-[Project Service]: ../project_services/project_services.md
-
-## SSL certificate errors
-
-When trying to integrate GitLab with services that are using self-signed certificates,
-it is very likely that SSL certificate errors will occur on different parts of the
-application, most likely Sidekiq. There are 2 approaches you can take to solve this:
-
-1. Add the root certificate to the trusted chain of the OS.
-1. If using Omnibus, you can add the certificate to GitLab's trusted certificates.
-
-**OS main trusted chain**
+Because GitLab is open source we can ship with the code and tests for all
+plugins. This allows the community to keep the plugins up to date so that they
+always work in newer GitLab versions.
 
-This [resource](http://kb.kerio.com/product/kerio-connect/server-configuration/ssl-certificates/adding-trusted-root-certificates-to-the-server-1605.html)
-has all the information you need to add a certificate to the main trusted chain.
+For an overview of what projects services are available without logging in,
+please see the [project_services directory][projects-code].
 
-This [answer](http://superuser.com/questions/437330/how-do-you-add-a-certificate-authority-ca-to-ubuntu)
-at SuperUser also has relevant information.
-
-**Omnibus Trusted Chain**
-
-It is enough to concatenate the certificate to the main trusted certificate:
-
-```bash
-cat jira.pem >> /opt/gitlab/embedded/ssl/certs/cacert.pem
-```
-
-After that restart GitLab with:
-
-```bash
-sudo gitlab-ctl restart
-```
+[jenkins]: http://doc.gitlab.com/ee/integration/jenkins.html
+[Project Service]: ../project_services/project_services.md
+[projects-code]: https://gitlab.com/gitlab-org/gitlab-ce/tree/master/app/models/project_services
diff --git a/doc/integration/img/jira_service_page.png b/doc/integration/img/jira_service_page.png
new file mode 100644
index 0000000000000000000000000000000000000000..0cc160bebe2fda31497afd077b7cd0f5b0930dec
GIT binary patch
literal 45089
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

literal 0
HcmV?d00001

diff --git a/doc/integration/jira.md b/doc/integration/jira.md
index 78aa66341161d..de373bd94ff37 100644
--- a/doc/integration/jira.md
+++ b/doc/integration/jira.md
@@ -1,3 +1,146 @@
-# GitLab JIRA integration
+# GitLab Jira integration
 
-This document was moved under [project_services/jira](../project_services/jira.md).
+GitLab can be configured to interact with Jira. Configuration happens via
+username and password. Connecting to a Jira server via CAS is not possible.
+
+Each project can be configured to connect to a different Jira instance, see the
+[configuration](#configuration) section. If you have one Jira instance you can
+pre-fill the settings page with a default template. To configure the template
+see the [Services Templates][services-templates] document.
+
+Once the project is connected to Jira, you can reference and close the issues
+in Jira directly from GitLab.
+
+## Table of Contents
+
+* [Referencing Jira Issues from GitLab](#referencing-jira-issues)
+* [Closing Jira Issues from GitLab](#closing-jira-issues)
+* [Configuration](#configuration)
+
+### Referencing Jira Issues
+
+When GitLab project has Jira issue tracker configured and enabled, mentioning
+Jira issue in GitLab will automatically add a comment in Jira issue with the
+link back to GitLab. This means that in comments in merge requests and commits
+referencing an issue, eg. `PROJECT-7`, will add a comment in Jira issue in the
+format:
+
+```
+ USER mentioned this issue in LINK_TO_THE_MENTION
+```
+
+* `USER` A user that mentioned the issue. This is the link to the user profile in GitLab.
+* `LINK_TO_THE_MENTION` Link to the origin of mention with a name of the entity where Jira issue was mentioned.
+Can be commit or merge request.
+
+![example of mentioning or closing the Jira issue](img/jira_issue_reference.png)
+
+---
+
+### Closing Jira Issues
+
+Jira issues can be closed directly from GitLab by using trigger words, eg.
+`Resolves PROJECT-1`, `Closes PROJECT-1` or `Fixes PROJECT-1`, in commits and
+merge requests. When a commit which contains the trigger word in the commit
+message is pushed, GitLab will add a comment in the mentioned Jira issue.
+
+For example, for project named `PROJECT` in Jira, we implemented a new feature
+and created a merge request in GitLab.
+
+This feature was requested in Jira issue `PROJECT-7`. Merge request in GitLab
+contains the improvement and in merge request description we say that this
+merge request `Closes PROJECT-7` issue.
+
+Once this merge request is merged, the Jira issue will be automatically closed
+with a link to the commit that resolved the issue.
+
+![A Git commit that causes the Jira issue to be closed](img/jira_merge_request_close.png)
+
+---
+
+![The GitLab integration user leaves a comment on Jira](img/jira_service_close_issue.png)
+
+---
+
+## Configuration
+
+### Configuring JIRA
+
+We need to create a user in JIRA which will have access to all projects that
+need to integrate with GitLab. Login to your JIRA instance as admin and under
+Administration go to User Management and create a new user.
+
+As an example, we'll create a user named `gitlab` and add it to `jira-developers`
+group.
+
+**It is important that the user `gitlab` has write-access to projects in JIRA**
+
+### Configuring GitLab
+
+JIRA configuration in GitLab is done via a project's **Services**.
+
+#### GitLab 7.8 and up with JIRA v6.x
+
+See next section.
+
+#### GitLab 7.8 and up
+
+_The currently supported JIRA versions are v6.x and v7.x._
+
+To enable JIRA integration in a project, navigate to the project's
+**Settings > Services > JIRA**.
+
+Fill in the required details on the page as described in the table below.
+
+| Field | Description |
+| ----- | ----------- |
+| `URL` | The base URL to the JIRA project which is being linked to this GitLab project. Ex. https://jira.example.com |
+| `Project key` | The short, all capital letter identifier for your JIRA project. |
+| `Username` | The username of the user created in [configuring JIRA step](#configuring-jira). |
+| `Password` |The password of the user created in [configuring JIRA step](#configuring-jira). |
+| `Jira issue transition` | This is the ID of a transition that moves issues to a closed state. You can find this number under JIRA workflow administration ([see screenshot](img/jira_workflow_screenshot.png)).  By default, this ID is `2` (in the example image, this is `2` as well) |
+
+After saving the configuration, your GitLab project will be able to interact
+with the linked JIRA project.
+
+![Jira service page](img/jira_service_page.png)
+
+---
+
+#### GitLab 6.x-7.7 with JIRA v6.x
+
+_**Note:** GitLab versions 7.8 and up contain various integration improvements.
+We strongly recommend upgrading._
+
+In `gitlab.yml` enable the JIRA issue tracker section by
+[uncommenting these lines][jira-gitlab-yml]. This will make sure that all
+issues within GitLab are pointing to the JIRA issue tracker.
+
+After you set this, you will be able to close issues in JIRA by a commit in
+GitLab.
+
+Go to your project's **Settings** page and fill in the project name for the
+JIRA project:
+
+![Set the JIRA project name in GitLab to 'NEW'](img/jira_project_name.png)
+
+---
+
+You can also enable the JIRA service that will allow you to interact with JIRA
+issues. Go to the **Settings > Services > JIRA** and:
+
+1. Tick the active check box to enable the service
+1. Supply the URL to JIRA server, for example http://jira.example.com
+1. Supply the username of a user we created under `Configuring JIRA` section,
+   for example `gitlab`
+1. Supply the password of the user
+1. Optional: supply the JIRA API version, default is version `2`
+1. Optional: supply the JIRA issue transition ID (issue transition to closed).
+   This is dependent on JIRA settings, default is `2`
+1. Hit save
+
+
+![Jira services page](img/jira_service.png)
+
+[services-templates]: ../project_services/services_templates.md
+[jira-gitlab-yml]: https://gitlab.com/subscribers/gitlab-ee/blob/6-8-stable-ee/config/gitlab.yml.example#L111-115
-- 
GitLab