about summary refs log tree commit diff
path: root/app/lib/request.rb
diff options
context:
space:
mode:
authorbeatrix <beatrix.bitrot@gmail.com>2018-03-03 13:40:00 -0500
committerGitHub <noreply@github.com>2018-03-03 13:40:00 -0500
commit43a9a781a443a6b9296431fbcc4285b3ca6a1a57 (patch)
treed4bf067aeedcebbdc3d160eca6aa1a7c7d1bfa00 /app/lib/request.rb
parentee00da01d2e4cc455b92f1f4a7c9142c73048433 (diff)
parent65e2a4645e086110072efed5b3d4d1434c933e04 (diff)
Merge pull request #377 from glitch-soc/merge-upstream
hhhhhhhhhnnnnnnnnnnnghh!!!!!
Diffstat (limited to 'app/lib/request.rb')
-rw-r--r--app/lib/request.rb19
1 files changed, 18 insertions, 1 deletions
diff --git a/app/lib/request.rb b/app/lib/request.rb
index 7671f4ffc..5776b3d78 100644
--- a/app/lib/request.rb
+++ b/app/lib/request.rb
@@ -1,5 +1,8 @@
 # frozen_string_literal: true
 
+require 'ipaddr'
+require 'socket'
+
 class Request
   REQUEST_TARGET = '(request-target)'
 
@@ -8,7 +11,7 @@ class Request
   def initialize(verb, url, **options)
     @verb    = verb
     @url     = Addressable::URI.parse(url).normalize
-    @options = options
+    @options = options.merge(socket_class: Socket)
     @headers = {}
 
     set_common_headers!
@@ -87,4 +90,18 @@ class Request
   def http_client
     HTTP.timeout(:per_operation, timeout).follow(max_hops: 2)
   end
+
+  class Socket < TCPSocket
+    class << self
+      def open(host, *args)
+        address = IPSocket.getaddress(host)
+        raise Mastodon::HostValidationError if PrivateAddressCheck.private_address? IPAddr.new(address)
+        super address, *args
+      end
+
+      alias new open
+    end
+  end
+
+  private_constant :Socket
 end