lib/legitbot/facebook.rb in legitbot-0.3.2 vs lib/legitbot/facebook.rb in legitbot-0.4.0

- old
+ new

@@ -1,48 +1,22 @@ -require 'ipaddr' +# frozen_string_literal: true + require 'irrc' -require 'interval_tree' -module Legitbot +module Legitbot # :nodoc: # https://developers.facebook.com/docs/sharing/webmasters/crawler - class Facebook < BotMatch AS = 'AS32934' - def valid? - ip = IPAddr.new(@ip) - Facebook.valid_ips[ip.ipv4? ? :ipv4 : :ipv6].search(ip.to_i).size > 0 - end - - @mutex = Mutex.new - - def self.valid_ips - @mutex.synchronize { @ips ||= load_ips } - end - - def self.reload! - @mutex.synchronize { @ips = load_ips } - end - - def self.load_ips - whois.map do |(family, records)| - ranges = records.map do |cidr| - range = IPAddr.new(cidr).to_range - (range.begin.to_i..range.end.to_i) - end - [family, IntervalTree::Tree.new(ranges)] - end.to_h - end - - def self.whois + ip_ranges do client = Irrc::Client.new client.query :radb, AS results = client.perform - %i(ipv4 ipv6).map do |family| - [family, results[AS][family][AS]] - end.to_h + %i[ipv4 ipv6].map do |family| + results[AS][family][AS] + end.flatten end end - rule Legitbot::Facebook, %w(Facebot facebookexternalhit/1.1) + rule Legitbot::Facebook, %w[Facebot facebookexternalhit/1.1] end