about summary refs log tree commit diff
path: root/app/lib/request.rb
diff options
context:
space:
mode:
authorJeong Arm <kjwonmail@gmail.com>2022-08-25 11:41:14 +0900
committerGitHub <noreply@github.com>2022-08-25 04:41:14 +0200
commit861b35dd54d266bc0a40b3cacb28e5b82ff6faaa (patch)
tree26299d1d1a3c4f934fa5652b6cbc08ea4f6cbe09 /app/lib/request.rb
parent1165943968f8c79cfaccf30c392b14b4930d68e6 (diff)
Support "http_hidden_proxy" ENV var for hidden service only proxy (#18427)
* Support "http_hidden_proxy" ENV var for hidden service only proxy

* Fallback to http_proxy if http_hidden_proxy is not set
Diffstat (limited to 'app/lib/request.rb')
-rw-r--r--app/lib/request.rb18
1 files changed, 15 insertions, 3 deletions
diff --git a/app/lib/request.rb b/app/lib/request.rb
index 4289da933..f5123d776 100644
--- a/app/lib/request.rb
+++ b/app/lib/request.rb
@@ -31,7 +31,7 @@ class Request
     @url         = Addressable::URI.parse(url).normalize
     @http_client = options.delete(:http_client)
     @options     = options.merge(socket_class: use_proxy? ? ProxySocket : Socket)
-    @options     = @options.merge(Rails.configuration.x.http_client_proxy) if use_proxy?
+    @options     = @options.merge(proxy_url) if use_proxy?
     @headers     = {}
 
     raise Mastodon::HostValidationError, 'Instance does not support hidden service connections' if block_hidden_service?
@@ -141,11 +141,23 @@ class Request
   end
 
   def use_proxy?
-    Rails.configuration.x.http_client_proxy.present?
+    proxy_url.present?
+  end
+
+  def proxy_url
+    if hidden_service? && Rails.configuration.x.http_client_hidden_proxy.present?
+      Rails.configuration.x.http_client_hidden_proxy
+    else
+      Rails.configuration.x.http_client_proxy
+    end
   end
 
   def block_hidden_service?
-    !Rails.configuration.x.access_to_hidden_service && /\.(onion|i2p)$/.match?(@url.host)
+    !Rails.configuration.x.access_to_hidden_service && hidden_service?
+  end
+
+  def hidden_service?
+    /\.(onion|i2p)$/.match?(@url.host)
   end
 
   module ClientLimit