2020-02-11 10:08:44 -05:00
# frozen_string_literal: true
module IncidentManagement
class ProjectIncidentManagementSetting < ApplicationRecord
include Gitlab :: Utils :: StrongMemoize
belongs_to :project
validate :issue_template_exists , if : :create_issue?
2020-07-14 20:09:23 -04:00
before_validation :ensure_pagerduty_token
attr_encrypted :pagerduty_token ,
mode : :per_attribute_iv ,
2021-04-22 17:09:53 -04:00
key : :: Settings . attr_encrypted_db_key_base_32 ,
2020-07-14 20:09:23 -04:00
algorithm : 'aes-256-gcm' ,
encode : false , # No need to encode for binary column https://github.com/attr-encrypted/attr_encrypted#the-encode-encode_iv-encode_salt-and-default_encoding-options
encode_iv : false
2020-02-11 10:08:44 -05:00
def available_issue_templates
Gitlab :: Template :: IssueTemplate . all ( project )
end
def issue_template_content
strong_memoize ( :issue_template_content ) do
issue_template & . content if issue_template_key . present?
end
end
private
def issue_template_exists
return unless issue_template_key . present?
errors . add ( :issue_template_key , 'not found' ) unless issue_template
end
def issue_template
Gitlab :: Template :: IssueTemplate . find ( issue_template_key , project )
rescue Gitlab :: Template :: Finders :: RepoTemplateFinder :: FileNotFoundError
end
2020-07-14 20:09:23 -04:00
def ensure_pagerduty_token
return unless pagerduty_active
self . pagerduty_token || = generate_pagerduty_token
end
def generate_pagerduty_token
SecureRandom . hex
end
2020-02-11 10:08:44 -05:00
end
end
2020-10-13 02:09:09 -04:00
2021-05-11 17:10:21 -04:00
IncidentManagement :: ProjectIncidentManagementSetting . prepend_mod_with ( 'IncidentManagement::ProjectIncidentManagementSetting' )