مراية لـ
https://github.com/postalserver/postal.git
تم المزامنة 2025-12-01 05:43:04 +00:00
initial commit from appmail
هذا الالتزام موجود في:
76
app/models/additional_route_endpoint.rb
Normal file
76
app/models/additional_route_endpoint.rb
Normal file
@@ -0,0 +1,76 @@
|
||||
# == 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
|
||||
المرجع في مشكلة جديدة
حظر مستخدم