debian-mirror-gitlab/app/models/service_desk/custom_email_credential.rb
2023-06-20 00:43:36 +05:30

66 lines
1.7 KiB
Ruby

# frozen_string_literal: true
module ServiceDesk
class CustomEmailCredential < ApplicationRecord
attr_encrypted :smtp_username,
mode: :per_attribute_iv,
algorithm: 'aes-256-gcm',
key: Settings.attr_encrypted_db_key_base_32,
encode: false,
encode_iv: false
attr_encrypted :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, presence: true
validates :smtp_address,
presence: true,
length: { maximum: 255 },
hostname: { allow_numeric_hostname: true }
validate :validate_smtp_address
validates :smtp_port,
presence: true,
numericality: { only_integer: true, greater_than: 0 }
validates :smtp_username,
presence: true,
length: { maximum: 255 }
validates :smtp_password,
presence: true,
length: { minimum: 8, maximum: 128 }
delegate :service_desk_setting, to: :project
def delivery_options
{
user_name: smtp_username,
password: smtp_password,
address: smtp_address,
domain: Mail::Address.new(service_desk_setting.custom_email).domain,
port: smtp_port || 587
}
end
private
def validate_smtp_address
# Addressable::URI always needs a scheme otherwise it interprets the host as the path
Gitlab::UrlBlocker.validate!("smtp://#{smtp_address}",
schemes: %w[smtp],
ascii_only: true,
enforce_sanitization: true,
allow_localhost: false,
allow_local_network: false
)
rescue Gitlab::UrlBlocker::BlockedUrlError => e
errors.add(:smtp_address, e)
end
end
end