Files
2025-01-27 15:52:48 +07:00

58 lines
1.7 KiB
Ruby

#
# (c) Copyright Ascensio System SIA 2025
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# frozen_string_literal: true
# typed: true
require 'sorbet-runtime'
require 'uri'
require_relative '../configuration/configuration'
# Class manages URI resolution, redirecting public URLs to private ones based on the configuration.
class ProxyManager
extend T::Sig
sig { params(config_manager: ConfigurationManager).void }
def initialize(config_manager:)
@config_manager = config_manager
end
sig { params(uri: URI::Generic).returns(URI::Generic) }
def resolve_uri(uri)
return uri unless refer_public_url(uri)
redirect_public_url(uri)
end
sig { params(uri: URI::Generic).returns(T::Boolean) }
private def refer_public_url(uri)
public_uri = @config_manager.document_server_public_uri
uri.scheme == public_uri.scheme &&
uri.host == public_uri.host &&
uri.port == public_uri.port
end
sig { params(uri: URI::Generic).returns(URI::Generic) }
private def redirect_public_url(uri)
private_uri = @config_manager.document_server_private_uri
redirected_uri = uri
redirected_uri.scheme = private_uri.scheme
redirected_uri.host = private_uri.host
redirected_uri.port = private_uri.port
redirected_uri
end
end