diff options
Diffstat (limited to 'app/models/service_desk_setting.rb')
-rw-r--r-- | app/models/service_desk_setting.rb | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/app/models/service_desk_setting.rb b/app/models/service_desk_setting.rb index 738f18ca5e3..5152746abb4 100644 --- a/app/models/service_desk_setting.rb +++ b/app/models/service_desk_setting.rb @@ -3,6 +3,14 @@ class ServiceDeskSetting < ApplicationRecord include Gitlab::Utils::StrongMemoize + attribute :custom_email_enabled, default: false + attr_encrypted :custom_email_smtp_password, + mode: :per_attribute_iv, + algorithm: 'aes-256-gcm', + key: Settings.attr_encrypted_db_key_base_32, + encode: false, + encode_iv: false + belongs_to :project validates :project_id, presence: true validate :valid_issue_template @@ -13,8 +21,42 @@ class ServiceDeskSetting < ApplicationRecord allow_blank: true, format: { with: /\A[a-z0-9_]+\z/, message: -> (setting, data) { _("can contain only lowercase letters, digits, and '_'.") } } + validates :custom_email, + length: { maximum: 255 }, + uniqueness: true, + allow_nil: true, + format: /\A[\w\-._]+@[\w\-.]+\.{1}[a-zA-Z]{2,}\z/ + validates :custom_email_smtp_address, length: { maximum: 255 } + validates :custom_email_smtp_username, length: { maximum: 255 } + + validates :custom_email, + presence: true, + devise_email: true, + if: :custom_email_enabled? + validates :custom_email_smtp_address, + presence: true, + hostname: { allow_numeric_hostname: true, require_valid_tld: true }, + if: :custom_email_enabled? + validates :custom_email_smtp_username, + presence: true, + if: :custom_email_enabled? + validates :custom_email_smtp_port, + presence: true, + numericality: { only_integer: true, greater_than: 0 }, + if: :custom_email_enabled? + scope :with_project_key, ->(key) { where(project_key: key) } + def custom_email_delivery_options + { + user_name: custom_email_smtp_username, + password: custom_email_smtp_password, + address: custom_email_smtp_address, + domain: Mail::Address.new(custom_email).domain, + port: custom_email_smtp_port || 587 + } + end + def issue_template_content strong_memoize(:issue_template_content) do next unless issue_template_key.present? |