diff options
author | Jarka Košanová <jarka@gitlab.com> | 2019-05-22 18:47:42 +0300 |
---|---|---|
committer | Jarka Košanová <jarka@gitlab.com> | 2019-06-13 20:02:13 +0300 |
commit | 1f332ae8da994509232c7601074b25514ad23c52 (patch) | |
tree | 91d0facea9e413baa568caf6af406a0fdef823b8 /app/models/project_services | |
parent | 07f8f2056d7143c770d420ec3345781802047810 (diff) |
Create models for issue trackers data
- create tables for storing issue trackers properties
- add model and basic logic & spec
Diffstat (limited to 'app/models/project_services')
-rw-r--r-- | app/models/project_services/data_fields.rb | 10 | ||||
-rw-r--r-- | app/models/project_services/issue_tracker_data.rb | 25 | ||||
-rw-r--r-- | app/models/project_services/jira_tracker_data.rb | 30 |
3 files changed, 65 insertions, 0 deletions
diff --git a/app/models/project_services/data_fields.rb b/app/models/project_services/data_fields.rb new file mode 100644 index 00000000000..438d85098c8 --- /dev/null +++ b/app/models/project_services/data_fields.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true + +module DataFields + extend ActiveSupport::Concern + + included do + has_one :issue_tracker_data + has_one :jira_tracker_data + end +end diff --git a/app/models/project_services/issue_tracker_data.rb b/app/models/project_services/issue_tracker_data.rb new file mode 100644 index 00000000000..2c1d28ed421 --- /dev/null +++ b/app/models/project_services/issue_tracker_data.rb @@ -0,0 +1,25 @@ +# frozen_string_literal: true + +class IssueTrackerData < ApplicationRecord + belongs_to :service + + delegate :activated?, to: :service, allow_nil: true + + validates :service, presence: true + validates :project_url, presence: true, public_url: { enforce_sanitization: true }, if: :activated? + validates :issues_url, presence: true, public_url: { enforce_sanitization: true }, if: :activated? + validates :new_issue_url, public_url: { enforce_sanitization: true }, if: :activated? + + def self.encryption_options + { + key: Settings.attr_encrypted_db_key_base_32, + encode: true, + mode: :per_attribute_iv, + algorithm: 'aes-256-gcm' + } + end + + attr_encrypted :project_url, encryption_options + attr_encrypted :issues_url, encryption_options + attr_encrypted :new_issue_url, encryption_options +end diff --git a/app/models/project_services/jira_tracker_data.rb b/app/models/project_services/jira_tracker_data.rb new file mode 100644 index 00000000000..4f528e3d81b --- /dev/null +++ b/app/models/project_services/jira_tracker_data.rb @@ -0,0 +1,30 @@ +# frozen_string_literal: true + +class JiraTrackerData < ApplicationRecord + belongs_to :service + + delegate :activated?, to: :service, allow_nil: true + + validates :service, presence: true + validates :url, public_url: { enforce_sanitization: true }, presence: true, if: :activated? + validates :api_url, public_url: { enforce_sanitization: true }, allow_blank: true + validates :username, presence: true, if: :activated? + validates :password, presence: true, if: :activated? + validates :jira_issue_transition_id, + format: { with: Gitlab::Regex.jira_transition_id_regex, message: s_("JiraService|transition ids can have only numbers which can be split with , or ;") }, + allow_blank: true + + def self.encryption_options + { + key: Settings.attr_encrypted_db_key_base_32, + encode: true, + mode: :per_attribute_iv, + algorithm: 'aes-256-gcm' + } + end + + attr_encrypted :url, encryption_options + attr_encrypted :api_url, encryption_options + attr_encrypted :username, encryption_options + attr_encrypted :password, encryption_options +end |