مراية لـ
https://github.com/postalserver/postal.git
تم المزامنة 2025-12-01 05:43:04 +00:00
77 أسطر
1.9 KiB
Ruby
77 أسطر
1.9 KiB
Ruby
# == Schema Information
|
|
#
|
|
# Table name: additional_route_endpoints
|
|
#
|
|
# id :integer not null, primary key
|
|
# route_id :integer
|
|
# endpoint_type :string(255)
|
|
# endpoint_id :integer
|
|
# created_at :datetime not null
|
|
# updated_at :datetime not null
|
|
#
|
|
|
|
class AdditionalRouteEndpoint < ApplicationRecord
|
|
|
|
belongs_to :route
|
|
belongs_to :endpoint, :polymorphic => true
|
|
|
|
validate :validate_endpoint_belongs_to_server
|
|
validate :validate_wildcard
|
|
validate :validate_uniqueness
|
|
|
|
def self.find_by_endpoint(endpoint)
|
|
class_name, id = endpoint.split('#', 2)
|
|
unless Route::ENDPOINT_TYPES.include?(class_name)
|
|
raise Postal::Error, "Invalid endpoint class name '#{class_name}'"
|
|
end
|
|
if uuid = class_name.constantize.find_by_uuid(id)
|
|
where(:endpoint_type => class_name, :endpoint_id => uuid).first
|
|
else
|
|
nil
|
|
end
|
|
end
|
|
|
|
def _endpoint
|
|
"#{endpoint_type}##{endpoint.uuid}"
|
|
end
|
|
|
|
def _endpoint=(value)
|
|
if value.blank?
|
|
self.endpoint = nil
|
|
else
|
|
if value =~ /\#/
|
|
class_name, id = value.split('#', 2)
|
|
unless Route::ENDPOINT_TYPES.include?(class_name)
|
|
raise Postal::Error, "Invalid endpoint class name '#{class_name}'"
|
|
end
|
|
self.endpoint = class_name.constantize.find_by_uuid(id)
|
|
else
|
|
self.endpoint = nil
|
|
end
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def validate_endpoint_belongs_to_server
|
|
if self.endpoint && self.endpoint&.server != self.route.server
|
|
errors.add :endpoint, :invalid
|
|
end
|
|
end
|
|
|
|
def validate_uniqueness
|
|
if self.endpoint == self.route.endpoint
|
|
errors.add :base, "You can only add an endpoint to a route once"
|
|
end
|
|
end
|
|
|
|
def validate_wildcard
|
|
if self.route.wildcard?
|
|
if self.endpoint_type == 'SMTPEndpoint' || self.endpoint_type == 'AddressEndpoint'
|
|
errors.add :base, "SMTP or address endpoints are not permitted on wildcard routes"
|
|
end
|
|
end
|
|
end
|
|
|
|
end
|