diff --git a/didkit.gemspec b/didkit.gemspec index 1fcc30d..87a5cc2 100644 --- a/didkit.gemspec +++ b/didkit.gemspec @@ -26,6 +26,4 @@ Gem::Specification.new do |spec| end spec.require_paths = ["lib"] - - spec.add_dependency 'uri', '>= 0.11.0' end diff --git a/lib/didkit/did.rb b/lib/didkit/did.rb index 2de7209..0a2fb8a 100644 --- a/lib/didkit/did.rb +++ b/lib/didkit/did.rb @@ -66,7 +66,7 @@ module DIDKit doc = self.document return nil if doc.pds_endpoint.nil? - pds_host = URI(doc.pds_endpoint).origin + pds_host = uri_origin(doc.pds_endpoint) url = URI("#{pds_host}/xrpc/com.atproto.sync.getRepoStatus") url.query = URI.encode_www_form(:did => @did) diff --git a/lib/didkit/requests.rb b/lib/didkit/requests.rb index 12da7e2..709ccd9 100644 --- a/lib/didkit/requests.rb +++ b/lib/didkit/requests.rb @@ -30,7 +30,7 @@ module DIDKit end if response.is_a?(Net::HTTPRedirection) && redirects < max_redirects && (location = response['Location']) - url = URI(location.include?('://') ? location : (url.origin + location)) + url = URI(location.include?('://') ? location : (uri_origin(url) + location)) if visited_urls.include?(url) return response @@ -74,5 +74,13 @@ module DIDKit raise ArgumentError, "Invalid expected_type: #{expected_type.inspect}" end end + + # backported from https://github.com/ruby/uri/pull/30/files for older Rubies + def uri_origin(uri) + uri = uri.is_a?(URI) ? uri : URI(uri) + authority = (uri.port == uri.default_port) ? uri.host : "#{uri.host}:#{uri.port}" + + "#{uri.scheme}://#{authority}" + end end end