A library for handling DID identifiers used in Bluesky AT Protocol

detect redirect loops

+9 -1
+9 -1
lib/didkit/requests.rb
··· 11 11 } 12 12 13 13 redirects = 0 14 + visited_urls = [] 14 15 max_redirects = options[:max_redirects] || 5 15 16 16 17 loop do 18 + visited_urls << url 19 + 17 20 response = Net::HTTP.start(url.host, url.port, request_options) do |http| 18 21 request = Net::HTTP::Get.new(url) 19 22 http.request(request) ··· 21 24 22 25 if response.is_a?(Net::HTTPRedirection) && redirects < max_redirects && (location = response['Location']) 23 26 url = URI(location.include?('://') ? location : (url.origin + location)) 24 - redirects += 1 27 + 28 + if visited_urls.include?(url) 29 + return response 30 + else 31 + redirects += 1 32 + end 25 33 else 26 34 return response 27 35 end